Skip to content

Commit 2070ef0

Browse files
committed
feat(metrics): add esmodule support (#1739)
1 parent 318d27c commit 2070ef0

28 files changed

+384
-293
lines changed

Diff for: examples/cdk/functions/get-all-items.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
2-
import { logMetrics } from '@aws-lambda-powertools/metrics';
2+
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
33
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer';
44
import { ScanCommand } from '@aws-sdk/lib-dynamodb';
55
import middy from '@middy/core';

Diff for: examples/sam/src/get-all-items.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
import middy from '@middy/core';
77
import { tableName } from './common/constants';
88
import { logger, tracer, metrics } from './common/powertools';
9-
import { logMetrics } from '@aws-lambda-powertools/metrics';
9+
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
1010
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
1111
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer';
1212
import { docClient } from './common/dynamodb-client';

Diff for: layers/tests/e2e/layerPublisher.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import { App } from 'aws-cdk-lib';
77
import { LayerVersion } from 'aws-cdk-lib/aws-lambda';
88
import { LayerPublisherStack } from '../../src/layer-publisher-stack';
99
import {
10-
TestNodejsFunction,
1110
TestStack,
1211
TestInvocationLogs,
1312
invokeFunctionOnce,
1413
generateTestUniqueName,
1514
} from '@aws-lambda-powertools/testing-utils';
15+
import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils/resources/lambda';
1616
import {
1717
RESOURCE_NAME_PREFIX,
1818
SETUP_TIMEOUT,

Diff for: packages/commons/src/types/LambdaInterface.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,12 @@ interface LambdaInterface {
1515
handler: SyncHandler<Handler> | AsyncHandler<Handler>;
1616
}
1717

18-
export { LambdaInterface };
18+
type HandlerMethodDecorator = (
19+
target: LambdaInterface,
20+
propertyKey: string | symbol,
21+
descriptor:
22+
| TypedPropertyDescriptor<SyncHandler<Handler>>
23+
| TypedPropertyDescriptor<AsyncHandler<Handler>>
24+
) => void;
25+
26+
export { LambdaInterface, HandlerMethodDecorator };

Diff for: packages/commons/src/types/index.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
export * from './middy.js';
2-
export * from './awsSdk.js';
3-
export * from './json.js';
4-
export * from './LambdaInterface.js';
1+
export {
2+
MiddlewareLikeObj,
3+
MiddyLikeRequest,
4+
CleanupFunction,
5+
} from './middy.js';
6+
export { SdkClient, MiddlewareArgsLike } from './awsSdk.js';
7+
export { JSONPrimitive, JSONValue, JSONObject, JSONArray } from './json.js';
8+
export {
9+
SyncHandler,
10+
AsyncHandler,
11+
LambdaInterface,
12+
HandlerMethodDecorator,
13+
} from './LambdaInterface.js';

Diff for: packages/metrics/jest.config.js renamed to packages/metrics/jest.config.cjs

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ module.exports = {
55
},
66
runner: 'groups',
77
preset: 'ts-jest',
8+
moduleNameMapper: {
9+
'^(\\.{1,2}/.*)\\.js$': '$1',
10+
},
811
transform: {
912
'^.+\\.ts?$': 'ts-jest',
1013
},
@@ -14,7 +17,7 @@ module.exports = {
1417
roots: ['<rootDir>/src', '<rootDir>/tests'],
1518
testPathIgnorePatterns: ['/node_modules/'],
1619
testEnvironment: 'node',
17-
coveragePathIgnorePatterns: ['/node_modules/'],
20+
coveragePathIgnorePatterns: ['/node_modules/', '/types/'],
1821
coverageThreshold: {
1922
global: {
2023
statements: 100,

Diff for: packages/metrics/package.json

+39-4
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,54 @@
2222
"test:e2e:nodejs20x": "RUNTIME=nodejs20x jest --group=e2e",
2323
"test:e2e": "jest --group=e2e",
2424
"watch": "jest --group=unit --watch ",
25-
"build": "tsc --build --force",
25+
"build:cjs": "tsc --build --force && echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json",
26+
"build:esm": "tsc --project tsconfig.esm.json && echo '{ \"type\": \"module\" }' > lib/esm/package.json",
27+
"build": "npm run build:esm & npm run build:cjs",
2628
"lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .",
2729
"lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .",
2830
"prebuild": "rimraf ./lib",
29-
"prepack": "node ../../.github/scripts/release_patch_package_json.js ."
31+
"prepack": "rimraf ./lib/*.tsbuildinfo && node ../../.github/scripts/release_patch_package_json.js ."
3032
},
3133
"lint-staged": {
3234
"*.{js,ts}": "npm run lint-fix"
3335
},
3436
"homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme",
3537
"license": "MIT-0",
36-
"main": "./lib/index.js",
37-
"types": "./lib/index.d.ts",
38+
"type": "module",
39+
"exports": {
40+
".": {
41+
"require": {
42+
"types": "./lib/cjs/index.d.ts",
43+
"default": "./lib/cjs/index.js"
44+
},
45+
"import": {
46+
"types": "./lib/esm/index.d.ts",
47+
"default": "./lib/esm/index.js"
48+
}
49+
},
50+
"./middleware": {
51+
"import": "./lib/esm/middleware/middy.js",
52+
"require": "./lib/cjs/middleware/middy.js"
53+
},
54+
"./types": {
55+
"import": "./lib/esm/types/index.js",
56+
"require": "./lib/cjs/types/index.js"
57+
}
58+
},
59+
"typesVersions": {
60+
"*": {
61+
"middleware": [
62+
"lib/cjs/middleware/middy.d.ts",
63+
"lib/esm/middleware/middy.d.ts"
64+
],
65+
"types": [
66+
"lib/cjs/types/index.d.ts",
67+
"lib/esm/types/index.d.ts"
68+
]
69+
}
70+
},
71+
"types": "./lib/cjs/index.d.ts",
72+
"main": "./lib/cjs/index.js",
3873
"devDependencies": {
3974
"@aws-lambda-powertools/testing-utils": "file:../testing",
4075
"@aws-sdk/client-cloudwatch": "^3.499.0",

Diff for: packages/metrics/src/Metrics.ts

+29-30
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
11
import type { Callback, Context, Handler } from 'aws-lambda';
22
import { Console } from 'node:console';
33
import { Utility } from '@aws-lambda-powertools/commons';
4-
import type { MetricsInterface } from './MetricsInterface';
5-
import {
6-
type ConfigServiceInterface,
7-
EnvironmentVariablesService,
8-
} from './config';
4+
import type { HandlerMethodDecorator } from '@aws-lambda-powertools/commons/types';
5+
import { EnvironmentVariablesService } from './config/EnvironmentVariablesService.js';
96
import {
107
MAX_DIMENSION_COUNT,
118
MAX_METRICS_SIZE,
129
DEFAULT_NAMESPACE,
1310
COLD_START_METRIC,
1411
MAX_METRIC_VALUES_SIZE,
15-
} from './constants';
12+
MetricUnit as MetricUnits,
13+
MetricResolution as MetricResolutions,
14+
} from './constants.js';
1615
import {
17-
MetricsOptions,
18-
Dimensions,
19-
EmfOutput,
20-
HandlerMethodDecorator,
21-
StoredMetrics,
22-
ExtraOptions,
23-
MetricUnit,
24-
MetricUnits,
25-
MetricResolution,
26-
MetricDefinition,
27-
} from './types';
16+
type MetricsOptions,
17+
type Dimensions,
18+
type EmfOutput,
19+
type StoredMetrics,
20+
type ExtraOptions,
21+
type MetricDefinition,
22+
type ConfigServiceInterface,
23+
type MetricsInterface,
24+
type MetricUnit,
25+
type MetricResolution,
26+
} from './types/index.js';
2827

2928
/**
3029
* ## Intro
@@ -82,7 +81,7 @@ import {
8281
* ⁣@metrics.logMetrics({ captureColdStartMetric: true, throwOnEmptyMetrics: true })
8382
* public handler(_event: unknown, _context: unknown): Promise<void> {
8483
* // ...
85-
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
84+
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
8685
* // ...
8786
* }
8887
* }
@@ -98,13 +97,13 @@ import {
9897
* @example
9998
*
10099
* ```typescript
101-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
100+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
102101
*
103102
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
104103
*
105104
* export const handler = async (_event: unknown, __context: unknown): Promise<void> => {
106105
* metrics.captureColdStartMetric();
107-
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
106+
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
108107
* metrics.publishStoredMetrics();
109108
* };
110109
* ```
@@ -199,15 +198,15 @@ class Metrics extends Utility implements MetricsInterface {
199198
* or when calling {@link Metrics.publishStoredMetrics}.
200199
*
201200
* You can add a metric by specifying the metric name, unit, and value. For convenience,
202-
* we provide a set of constants for the most common units in {@link MetricUnits}.
201+
* we provide a set of constants for the most common units in {@link MetricUnit}.
203202
*
204203
* @example
205204
* ```typescript
206-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
205+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
207206
*
208207
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
209208
*
210-
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1);
209+
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1);
211210
* ```
212211
*
213212
* Optionally, you can specify the metric resolution, which can be either `High` or `Standard`.
@@ -216,11 +215,11 @@ class Metrics extends Utility implements MetricsInterface {
216215
*
217216
* @example
218217
* ```typescript
219-
* import { Metrics, MetricUnits, MetricResolution } from '@aws-lambda-powertools/metrics';
218+
* import { Metrics, MetricUnit, MetricResolution } from '@aws-lambda-powertools/metrics';
220219
*
221220
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
222221
*
223-
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1, MetricResolution.High);
222+
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1, MetricResolution.High);
224223
* ```
225224
*
226225
* @param name - The metric name
@@ -232,7 +231,7 @@ class Metrics extends Utility implements MetricsInterface {
232231
name: string,
233232
unit: MetricUnit,
234233
value: number,
235-
resolution: MetricResolution = MetricResolution.Standard
234+
resolution: MetricResolution = MetricResolutions.Standard
236235
): void {
237236
this.storeMetric(name, unit, value, resolution);
238237
if (this.isSingleMetric) this.publishStoredMetrics();
@@ -380,7 +379,7 @@ class Metrics extends Utility implements MetricsInterface {
380379
* @example
381380
*
382381
* ```typescript
383-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
382+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
384383
*
385384
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); // Sets metric namespace, and service as a metric dimension
386385
*
@@ -424,7 +423,7 @@ class Metrics extends Utility implements MetricsInterface {
424423
).map((metricDefinition) => ({
425424
Name: metricDefinition.name,
426425
Unit: metricDefinition.unit,
427-
...(metricDefinition.resolution === MetricResolution.High
426+
...(metricDefinition.resolution === MetricResolutions.High
428427
? { StorageResolution: metricDefinition.resolution }
429428
: {}),
430429
}));
@@ -512,7 +511,7 @@ class Metrics extends Utility implements MetricsInterface {
512511
* ```typescript
513512
* const singleMetric = metrics.singleMetric();
514513
* singleMetric.addDimension('InnerDimension', 'true');
515-
* singleMetric.addMetric('single-metric', MetricUnits.Percent, 50);
514+
* singleMetric.addMetric('single-metric', MetricUnit.Percent, 50);
516515
* ```
517516
*
518517
* @returns the Metrics
@@ -738,4 +737,4 @@ class Metrics extends Utility implements MetricsInterface {
738737
}
739738
}
740739

741-
export { Metrics, MetricUnits, MetricResolution };
740+
export { Metrics };

Diff for: packages/metrics/src/config/EnvironmentVariablesService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ConfigServiceInterface } from './ConfigServiceInterface';
1+
import type { ConfigServiceInterface } from '../types/ConfigServiceInterface.js';
22
import { EnvironmentVariablesService as CommonEnvironmentVariablesService } from '@aws-lambda-powertools/commons';
33

44
class EnvironmentVariablesService

Diff for: packages/metrics/src/config/index.ts

-2
This file was deleted.

Diff for: packages/metrics/src/constants.ts

+36
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,46 @@ const MAX_METRICS_SIZE = 100;
44
const MAX_METRIC_VALUES_SIZE = 100;
55
const MAX_DIMENSION_COUNT = 29;
66

7+
const MetricUnit = {
8+
Seconds: 'Seconds',
9+
Microseconds: 'Microseconds',
10+
Milliseconds: 'Milliseconds',
11+
Bytes: 'Bytes',
12+
Kilobytes: 'Kilobytes',
13+
Megabytes: 'Megabytes',
14+
Gigabytes: 'Gigabytes',
15+
Terabytes: 'Terabytes',
16+
Bits: 'Bits',
17+
Kilobits: 'Kilobits',
18+
Megabits: 'Megabits',
19+
Gigabits: 'Gigabits',
20+
Terabits: 'Terabits',
21+
Percent: 'Percent',
22+
Count: 'Count',
23+
BytesPerSecond: 'Bytes/Second',
24+
KilobytesPerSecond: 'Kilobytes/Second',
25+
MegabytesPerSecond: 'Megabytes/Second',
26+
GigabytesPerSecond: 'Gigabytes/Second',
27+
TerabytesPerSecond: 'Terabytes/Second',
28+
BitsPerSecond: 'Bits/Second',
29+
KilobitsPerSecond: 'Kilobits/Second',
30+
MegabitsPerSecond: 'Megabits/Second',
31+
GigabitsPerSecond: 'Gigabits/Second',
32+
TerabitsPerSecond: 'Terabits/Second',
33+
CountPerSecond: 'Count/Second',
34+
} as const;
35+
36+
const MetricResolution = {
37+
Standard: 60,
38+
High: 1,
39+
} as const;
40+
741
export {
842
COLD_START_METRIC,
943
DEFAULT_NAMESPACE,
1044
MAX_METRICS_SIZE,
1145
MAX_METRIC_VALUES_SIZE,
1246
MAX_DIMENSION_COUNT,
47+
MetricUnit,
48+
MetricResolution,
1349
};

Diff for: packages/metrics/src/index.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export * from './Metrics';
2-
export * from './MetricsInterface';
3-
export * from './middleware';
1+
export { Metrics } from './Metrics.js';
2+
export { MetricUnit, MetricResolution } from './constants.js';

Diff for: packages/metrics/src/middleware/index.ts

-1
This file was deleted.

Diff for: packages/metrics/src/middleware/middy.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { METRICS_KEY } from '@aws-lambda-powertools/commons';
2-
import type { Metrics } from '../Metrics';
3-
import type { ExtraOptions } from '../types';
2+
import type { Metrics } from '../Metrics.js';
3+
import type { ExtraOptions } from '../types/Metrics.js';
44
import type {
55
MiddlewareLikeObj,
66
MiddyLikeRequest,

Diff for: packages/metrics/src/types/MetricResolution.ts

-9
This file was deleted.

0 commit comments

Comments
 (0)