Skip to content

Commit e5e42d0

Browse files
authored
feat(metrics): add esmodule support (#1739)
1 parent 90a7523 commit e5e42d0

28 files changed

+293
-296
lines changed

examples/cdk/functions/get-all-items.ts

Lines changed: 1 addition & 1 deletion
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';

examples/sam/src/get-all-items.ts

Lines changed: 1 addition & 1 deletion
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';

layers/tests/e2e/layerPublisher.test.ts

Lines changed: 1 addition & 1 deletion
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,

packages/commons/src/types/LambdaInterface.ts

Lines changed: 9 additions & 1 deletion
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 };

packages/commons/src/types/index.ts

Lines changed: 13 additions & 4 deletions
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';

packages/metrics/jest.config.js renamed to packages/metrics/jest.config.cjs

Lines changed: 4 additions & 1 deletion
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,

packages/metrics/package.json

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,54 @@
1616
"test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e",
1717
"test:e2e": "jest --group=e2e",
1818
"watch": "jest --group=unit --watch ",
19-
"build": "tsc --build --force",
19+
"build:cjs": "tsc --build --force && echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json",
20+
"build:esm": "tsc --project tsconfig.esm.json && echo '{ \"type\": \"module\" }' > lib/esm/package.json",
21+
"build": "npm run build:esm & npm run build:cjs",
2022
"lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .",
2123
"lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .",
2224
"prebuild": "rimraf ./lib",
23-
"prepack": "node ../../.github/scripts/release_patch_package_json.js ."
25+
"prepack": "rimraf ./lib/*.tsbuildinfo && node ../../.github/scripts/release_patch_package_json.js ."
2426
},
2527
"lint-staged": {
2628
"*.{js,ts}": "npm run lint-fix"
2729
},
2830
"homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme",
2931
"license": "MIT-0",
30-
"main": "./lib/index.js",
31-
"types": "./lib/index.d.ts",
32+
"type": "module",
33+
"exports": {
34+
".": {
35+
"require": {
36+
"types": "./lib/cjs/index.d.ts",
37+
"default": "./lib/cjs/index.js"
38+
},
39+
"import": {
40+
"types": "./lib/esm/index.d.ts",
41+
"default": "./lib/esm/index.js"
42+
}
43+
},
44+
"./middleware": {
45+
"import": "./lib/esm/middleware/middy.js",
46+
"require": "./lib/cjs/middleware/middy.js"
47+
},
48+
"./types": {
49+
"import": "./lib/esm/types/index.js",
50+
"require": "./lib/cjs/types/index.js"
51+
}
52+
},
53+
"typesVersions": {
54+
"*": {
55+
"middleware": [
56+
"lib/cjs/middleware/middy.d.ts",
57+
"lib/esm/middleware/middy.d.ts"
58+
],
59+
"types": [
60+
"lib/cjs/types/index.d.ts",
61+
"lib/esm/types/index.d.ts"
62+
]
63+
}
64+
},
65+
"types": "./lib/cjs/index.d.ts",
66+
"main": "./lib/cjs/index.js",
3267
"devDependencies": {
3368
"@aws-lambda-powertools/testing-utils": "file:../testing",
3469
"@aws-sdk/client-cloudwatch": "^3.413.0",

packages/metrics/src/Metrics.ts

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

2827
/**
2928
* ## Intro
@@ -83,7 +82,7 @@ import {
8382
* @metrics.logMetrics({ captureColdStartMetric: true, throwOnEmptyMetrics: true })
8483
* public handler(_event: any, _context: any): Promise<void> {
8584
* // ...
86-
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
85+
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
8786
* // ...
8887
* }
8988
* }
@@ -99,13 +98,13 @@ import {
9998
* @example
10099
*
101100
* ```typescript
102-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
101+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
103102
*
104103
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
105104
*
106105
* export const handler = async (_event: any, _context: any): Promise<void> => {
107106
* metrics.captureColdStartMetric();
108-
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
107+
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
109108
* metrics.publishStoredMetrics();
110109
* };
111110
* ```
@@ -188,15 +187,15 @@ class Metrics extends Utility implements MetricsInterface {
188187
* or when calling {@link Metrics.publishStoredMetrics}.
189188
*
190189
* You can add a metric by specifying the metric name, unit, and value. For convenience,
191-
* we provide a set of constants for the most common units in {@link MetricUnits}.
190+
* we provide a set of constants for the most common units in {@link MetricUnit}.
192191
*
193192
* @example
194193
* ```typescript
195-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
194+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
196195
*
197196
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
198197
*
199-
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1);
198+
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1);
200199
* ```
201200
*
202201
* Optionally, you can specify the metric resolution, which can be either `High` or `Standard`.
@@ -205,11 +204,11 @@ class Metrics extends Utility implements MetricsInterface {
205204
*
206205
* @example
207206
* ```typescript
208-
* import { Metrics, MetricUnits, MetricResolution } from '@aws-lambda-powertools/metrics';
207+
* import { Metrics, MetricUnit, MetricResolution } from '@aws-lambda-powertools/metrics';
209208
*
210209
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
211210
*
212-
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1, MetricResolution.High);
211+
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1, MetricResolution.High);
213212
* ```
214213
*
215214
* @param name - The metric name
@@ -221,7 +220,7 @@ class Metrics extends Utility implements MetricsInterface {
221220
name: string,
222221
unit: MetricUnit,
223222
value: number,
224-
resolution: MetricResolution = MetricResolution.Standard
223+
resolution: MetricResolution = MetricResolutions.Standard
225224
): void {
226225
this.storeMetric(name, unit, value, resolution);
227226
if (this.isSingleMetric) this.publishStoredMetrics();
@@ -369,12 +368,12 @@ class Metrics extends Utility implements MetricsInterface {
369368
* @example
370369
*
371370
* ```typescript
372-
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
371+
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
373372
*
374373
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); // Sets metric namespace, and service as a metric dimension
375374
*
376375
* export const handler = async (_event: any, _context: any): Promise<void> => {
377-
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
376+
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
378377
* metrics.publishStoredMetrics();
379378
* };
380379
* ```
@@ -413,7 +412,7 @@ class Metrics extends Utility implements MetricsInterface {
413412
).map((metricDefinition) => ({
414413
Name: metricDefinition.name,
415414
Unit: metricDefinition.unit,
416-
...(metricDefinition.resolution === MetricResolution.High
415+
...(metricDefinition.resolution === MetricResolutions.High
417416
? { StorageResolution: metricDefinition.resolution }
418417
: {}),
419418
}));
@@ -499,7 +498,7 @@ class Metrics extends Utility implements MetricsInterface {
499498
* ```typescript
500499
* const singleMetric = metrics.singleMetric();
501500
* singleMetric.addDimension('InnerDimension', 'true');
502-
* singleMetric.addMetric('single-metric', MetricUnits.Percent, 50);
501+
* singleMetric.addMetric('single-metric', MetricUnit.Percent, 50);
503502
* ```
504503
*
505504
* @returns the Metrics
@@ -706,4 +705,4 @@ class Metrics extends Utility implements MetricsInterface {
706705
}
707706
}
708707

709-
export { Metrics, MetricUnits, MetricResolution };
708+
export { Metrics };

packages/metrics/src/config/EnvironmentVariablesService.ts

Lines changed: 1 addition & 1 deletion
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

packages/metrics/src/config/index.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

packages/metrics/src/constants.ts

Lines changed: 36 additions & 0 deletions
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
};

packages/metrics/src/index.ts

Lines changed: 2 additions & 3 deletions
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';

packages/metrics/src/middleware/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/metrics/src/middleware/middy.ts

Lines changed: 2 additions & 2 deletions
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,

packages/metrics/src/types/MetricResolution.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)