From 495ad2766631da2c8c478203feff8a6541d500eb Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Oct 2023 13:27:32 +0200 Subject: [PATCH 1/5] feat(metrics): add esmodule support --- .../{jest.config.js => jest.config.cjs} | 5 +- packages/metrics/package.json | 43 ++++- packages/metrics/src/Metrics.ts | 61 +++--- .../src/config/EnvironmentVariablesService.ts | 2 +- packages/metrics/src/config/index.ts | 2 - packages/metrics/src/constants.ts | 36 ++++ packages/metrics/src/index.ts | 5 +- packages/metrics/src/middleware/index.ts | 1 - packages/metrics/src/middleware/middy.ts | 4 +- .../ConfigServiceInterface.ts | 0 .../metrics/src/types/MetricResolution.ts | 9 - packages/metrics/src/types/MetricUnit.ts | 85 -------- packages/metrics/src/types/Metrics.ts | 12 +- .../src/{ => types}/MetricsInterface.ts | 10 +- packages/metrics/src/types/index.ts | 17 +- ...sicFeatures.decorator.test.functionCode.ts | 9 +- .../basicFeatures.manual.test.functionCode.ts | 9 +- .../metrics/tests/helpers/metricsUtils.ts | 8 +- packages/metrics/tests/helpers/resources.ts | 2 +- packages/metrics/tests/unit/Metrics.test.ts | 181 +++++++++--------- .../tests/unit/middleware/middy.test.ts | 26 ++- packages/metrics/tsconfig.esm.json | 11 ++ packages/metrics/tsconfig.json | 2 +- 23 files changed, 268 insertions(+), 272 deletions(-) rename packages/metrics/{jest.config.js => jest.config.cjs} (86%) delete mode 100644 packages/metrics/src/config/index.ts delete mode 100644 packages/metrics/src/middleware/index.ts rename packages/metrics/src/{config => types}/ConfigServiceInterface.ts (100%) delete mode 100644 packages/metrics/src/types/MetricResolution.ts delete mode 100644 packages/metrics/src/types/MetricUnit.ts rename packages/metrics/src/{ => types}/MetricsInterface.ts (90%) create mode 100644 packages/metrics/tsconfig.esm.json diff --git a/packages/metrics/jest.config.js b/packages/metrics/jest.config.cjs similarity index 86% rename from packages/metrics/jest.config.js rename to packages/metrics/jest.config.cjs index 3c1879fc3b..073bb4ee90 100644 --- a/packages/metrics/jest.config.js +++ b/packages/metrics/jest.config.cjs @@ -5,6 +5,9 @@ module.exports = { }, runner: 'groups', preset: 'ts-jest', + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, transform: { '^.+\\.ts?$': 'ts-jest', }, @@ -14,7 +17,7 @@ module.exports = { roots: ['/src', '/tests'], testPathIgnorePatterns: ['/node_modules/'], testEnvironment: 'node', - coveragePathIgnorePatterns: ['/node_modules/'], + coveragePathIgnorePatterns: ['/node_modules/', '/types/'], coverageThreshold: { global: { statements: 100, diff --git a/packages/metrics/package.json b/packages/metrics/package.json index c363d98587..25fe12facc 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -16,19 +16,54 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --group=unit --watch ", - "build": "tsc --build --force", + "build:cjs": "tsc --build --force && echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json", + "build:esm": "tsc --project tsconfig.esm.json && echo '{ \"type\": \"module\" }' > lib/esm/package.json", + "build": "npm run build:esm & npm run build:cjs", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", - "prepack": "node ../../.github/scripts/release_patch_package_json.js ." + "prepack": "rimraf ./lib/*.tsbuildinfo && node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme", "license": "MIT-0", - "main": "./lib/index.js", - "types": "./lib/index.d.ts", + "type": "module", + "exports": { + ".": { + "require": { + "types": "./lib/cjs/index.d.ts", + "default": "./lib/cjs/index.js" + }, + "import": { + "types": "./lib/esm/index.d.ts", + "default": "./lib/esm/index.js" + } + }, + "./middleware": { + "import": "./lib/esm/middleware/middy.js", + "require": "./lib/cjs/middleware/middy.js" + }, + "./types": { + "import": "./lib/esm/types/index.js", + "require": "./lib/cjs/types/index.js" + } + }, + "typesVersions": { + "*": { + "middleware": [ + "lib/cjs/middleware/middy.d.ts", + "lib/esm/middleware/middy.d.ts" + ], + "types": [ + "lib/cjs/types/index.d.ts", + "lib/esm/types/index.d.ts" + ] + } + }, + "types": "./lib/cjs/index.d.ts", + "main": "./lib/cjs/index.js", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-cloudwatch": "^3.413.0", diff --git a/packages/metrics/src/Metrics.ts b/packages/metrics/src/Metrics.ts index b2a1c1e34e..743e0246a4 100644 --- a/packages/metrics/src/Metrics.ts +++ b/packages/metrics/src/Metrics.ts @@ -1,29 +1,28 @@ import type { Callback, Context, Handler } from 'aws-lambda'; import { Utility } from '@aws-lambda-powertools/commons'; -import type { MetricsInterface } from './MetricsInterface'; -import { - type ConfigServiceInterface, - EnvironmentVariablesService, -} from './config'; +import { EnvironmentVariablesService } from './config/EnvironmentVariablesService.js'; import { MAX_DIMENSION_COUNT, MAX_METRICS_SIZE, DEFAULT_NAMESPACE, COLD_START_METRIC, MAX_METRIC_VALUES_SIZE, -} from './constants'; + MetricUnit as MetricUnits, + MetricResolution as MetricResolutions, +} from './constants.js'; import { - MetricsOptions, - Dimensions, - EmfOutput, - HandlerMethodDecorator, - StoredMetrics, - ExtraOptions, - MetricUnit, - MetricUnits, - MetricResolution, - MetricDefinition, -} from './types'; + type MetricsOptions, + type Dimensions, + type EmfOutput, + type HandlerMethodDecorator, + type StoredMetrics, + type ExtraOptions, + type MetricDefinition, + type ConfigServiceInterface, + type MetricsInterface, + type MetricUnit, + type MetricResolution, +} from './types/index.js'; /** * ## Intro @@ -83,7 +82,7 @@ import { * @metrics.logMetrics({ captureColdStartMetric: true, throwOnEmptyMetrics: true }) * public handler(_event: any, _context: any): Promise { * // ... - * metrics.addMetric('test-metric', MetricUnits.Count, 10); + * metrics.addMetric('test-metric', MetricUnit.Count, 10); * // ... * } * } @@ -99,13 +98,13 @@ import { * @example * * ```typescript - * import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; + * import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics'; * * const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); * * export const handler = async (_event: any, _context: any): Promise => { * metrics.captureColdStartMetric(); - * metrics.addMetric('test-metric', MetricUnits.Count, 10); + * metrics.addMetric('test-metric', MetricUnit.Count, 10); * metrics.publishStoredMetrics(); * }; * ``` @@ -188,15 +187,15 @@ class Metrics extends Utility implements MetricsInterface { * or when calling {@link Metrics.publishStoredMetrics}. * * You can add a metric by specifying the metric name, unit, and value. For convenience, - * we provide a set of constants for the most common units in {@link MetricUnits}. + * we provide a set of constants for the most common units in {@link MetricUnit}. * * @example * ```typescript - * import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; + * import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics'; * * const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); * - * metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + * metrics.addMetric('successfulBooking', MetricUnit.Count, 1); * ``` * * Optionally, you can specify the metric resolution, which can be either `High` or `Standard`. @@ -205,11 +204,11 @@ class Metrics extends Utility implements MetricsInterface { * * @example * ```typescript - * import { Metrics, MetricUnits, MetricResolution } from '@aws-lambda-powertools/metrics'; + * import { Metrics, MetricUnit, MetricResolution } from '@aws-lambda-powertools/metrics'; * * const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); * - * metrics.addMetric('successfulBooking', MetricUnits.Count, 1, MetricResolution.High); + * metrics.addMetric('successfulBooking', MetricUnit.Count, 1, MetricResolution.High); * ``` * * @param name - The metric name @@ -221,7 +220,7 @@ class Metrics extends Utility implements MetricsInterface { name: string, unit: MetricUnit, value: number, - resolution: MetricResolution = MetricResolution.Standard + resolution: MetricResolution = MetricResolutions.Standard ): void { this.storeMetric(name, unit, value, resolution); if (this.isSingleMetric) this.publishStoredMetrics(); @@ -369,12 +368,12 @@ class Metrics extends Utility implements MetricsInterface { * @example * * ```typescript - * import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; + * import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics'; * * const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); // Sets metric namespace, and service as a metric dimension * * export const handler = async (_event: any, _context: any): Promise => { - * metrics.addMetric('test-metric', MetricUnits.Count, 10); + * metrics.addMetric('test-metric', MetricUnit.Count, 10); * metrics.publishStoredMetrics(); * }; * ``` @@ -413,7 +412,7 @@ class Metrics extends Utility implements MetricsInterface { ).map((metricDefinition) => ({ Name: metricDefinition.name, Unit: metricDefinition.unit, - ...(metricDefinition.resolution === MetricResolution.High + ...(metricDefinition.resolution === MetricResolutions.High ? { StorageResolution: metricDefinition.resolution } : {}), })); @@ -499,7 +498,7 @@ class Metrics extends Utility implements MetricsInterface { * ```typescript * const singleMetric = metrics.singleMetric(); * singleMetric.addDimension('InnerDimension', 'true'); - * singleMetric.addMetric('single-metric', MetricUnits.Percent, 50); + * singleMetric.addMetric('single-metric', MetricUnit.Percent, 50); * ``` * * @returns the Metrics @@ -706,4 +705,4 @@ class Metrics extends Utility implements MetricsInterface { } } -export { Metrics, MetricUnits, MetricResolution }; +export { Metrics }; diff --git a/packages/metrics/src/config/EnvironmentVariablesService.ts b/packages/metrics/src/config/EnvironmentVariablesService.ts index 907036092d..290b70a571 100644 --- a/packages/metrics/src/config/EnvironmentVariablesService.ts +++ b/packages/metrics/src/config/EnvironmentVariablesService.ts @@ -1,4 +1,4 @@ -import type { ConfigServiceInterface } from './ConfigServiceInterface'; +import type { ConfigServiceInterface } from '../types/ConfigServiceInterface.js'; import { EnvironmentVariablesService as CommonEnvironmentVariablesService } from '@aws-lambda-powertools/commons'; class EnvironmentVariablesService diff --git a/packages/metrics/src/config/index.ts b/packages/metrics/src/config/index.ts deleted file mode 100644 index 11fd37677e..0000000000 --- a/packages/metrics/src/config/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ConfigServiceInterface'; -export * from './EnvironmentVariablesService'; diff --git a/packages/metrics/src/constants.ts b/packages/metrics/src/constants.ts index 5cdbf6a955..5dd25e2aee 100644 --- a/packages/metrics/src/constants.ts +++ b/packages/metrics/src/constants.ts @@ -4,10 +4,46 @@ const MAX_METRICS_SIZE = 100; const MAX_METRIC_VALUES_SIZE = 100; const MAX_DIMENSION_COUNT = 29; +const MetricUnit = { + Seconds: 'Seconds', + Microseconds: 'Microseconds', + Milliseconds: 'Milliseconds', + Bytes: 'Bytes', + Kilobytes: 'Kilobytes', + Megabytes: 'Megabytes', + Gigabytes: 'Gigabytes', + Terabytes: 'Terabytes', + Bits: 'Bits', + Kilobits: 'Kilobits', + Megabits: 'Megabits', + Gigabits: 'Gigabits', + Terabits: 'Terabits', + Percent: 'Percent', + Count: 'Count', + BytesPerSecond: 'Bytes/Second', + KilobytesPerSecond: 'Kilobytes/Second', + MegabytesPerSecond: 'Megabytes/Second', + GigabytesPerSecond: 'Gigabytes/Second', + TerabytesPerSecond: 'Terabytes/Second', + BitsPerSecond: 'Bits/Second', + KilobitsPerSecond: 'Kilobits/Second', + MegabitsPerSecond: 'Megabits/Second', + GigabitsPerSecond: 'Gigabits/Second', + TerabitsPerSecond: 'Terabits/Second', + CountPerSecond: 'Count/Second', +} as const; + +const MetricResolution = { + Standard: 60, + High: 1, +} as const; + export { COLD_START_METRIC, DEFAULT_NAMESPACE, MAX_METRICS_SIZE, MAX_METRIC_VALUES_SIZE, MAX_DIMENSION_COUNT, + MetricUnit, + MetricResolution, }; diff --git a/packages/metrics/src/index.ts b/packages/metrics/src/index.ts index 7af054bdae..3db8841fd4 100644 --- a/packages/metrics/src/index.ts +++ b/packages/metrics/src/index.ts @@ -1,3 +1,2 @@ -export * from './Metrics'; -export * from './MetricsInterface'; -export * from './middleware'; +export { Metrics } from './Metrics.js'; +export { MetricUnit, MetricResolution } from './constants.js'; diff --git a/packages/metrics/src/middleware/index.ts b/packages/metrics/src/middleware/index.ts deleted file mode 100644 index cfe9900b37..0000000000 --- a/packages/metrics/src/middleware/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './middy'; diff --git a/packages/metrics/src/middleware/middy.ts b/packages/metrics/src/middleware/middy.ts index 5a2bbbaec4..b5c2fa196c 100644 --- a/packages/metrics/src/middleware/middy.ts +++ b/packages/metrics/src/middleware/middy.ts @@ -1,6 +1,6 @@ import { METRICS_KEY } from '@aws-lambda-powertools/commons'; -import type { Metrics } from '../Metrics'; -import type { ExtraOptions } from '../types'; +import type { Metrics } from '../Metrics.js'; +import type { ExtraOptions } from '../types/Metrics.js'; import type { MiddlewareLikeObj, MiddyLikeRequest, diff --git a/packages/metrics/src/config/ConfigServiceInterface.ts b/packages/metrics/src/types/ConfigServiceInterface.ts similarity index 100% rename from packages/metrics/src/config/ConfigServiceInterface.ts rename to packages/metrics/src/types/ConfigServiceInterface.ts diff --git a/packages/metrics/src/types/MetricResolution.ts b/packages/metrics/src/types/MetricResolution.ts deleted file mode 100644 index 297025f3c2..0000000000 --- a/packages/metrics/src/types/MetricResolution.ts +++ /dev/null @@ -1,9 +0,0 @@ -const MetricResolution = { - Standard: 60, - High: 1, -} as const; - -type MetricResolution = - (typeof MetricResolution)[keyof typeof MetricResolution]; - -export { MetricResolution }; diff --git a/packages/metrics/src/types/MetricUnit.ts b/packages/metrics/src/types/MetricUnit.ts deleted file mode 100644 index ccbffac645..0000000000 --- a/packages/metrics/src/types/MetricUnit.ts +++ /dev/null @@ -1,85 +0,0 @@ -enum MetricUnits { - Seconds = 'Seconds', - Microseconds = 'Microseconds', - Milliseconds = 'Milliseconds', - Bytes = 'Bytes', - Kilobytes = 'Kilobytes', - Megabytes = 'Megabytes', - Gigabytes = 'Gigabytes', - Terabytes = 'Terabytes', - Bits = 'Bits', - Kilobits = 'Kilobits', - Megabits = 'Megabits', - Gigabits = 'Gigabits', - Terabits = 'Terabits', - Percent = 'Percent', - Count = 'Count', - BytesPerSecond = 'Bytes/Second', - KilobytesPerSecond = 'Kilobytes/Second', - MegabytesPerSecond = 'Megabytes/Second', - GigabytesPerSecond = 'Gigabytes/Second', - TerabytesPerSecond = 'Terabytes/Second', - BitsPerSecond = 'Bits/Second', - KilobitsPerSecond = 'Kilobits/Second', - MegabitsPerSecond = 'Megabits/Second', - GigabitsPerSecond = 'Gigabits/Second', - TerabitsPerSecond = 'Terabits/Second', - CountPerSecond = 'Count/Second', -} - -type MetricUnitSeconds = MetricUnits.Seconds; -type MetricUnitMicroseconds = MetricUnits.Microseconds; -type MetricUnitMilliseconds = MetricUnits.Milliseconds; -type MetricUnitBytes = MetricUnits.Bytes; -type MetricUnitKilobytes = MetricUnits.Kilobytes; -type MetricUnitMegabytes = MetricUnits.Megabytes; -type MetricUnitGigabytes = MetricUnits.Gigabytes; -type MetricUnitTerabytes = MetricUnits.Terabytes; -type MetricUnitBits = MetricUnits.Bits; -type MetricUnitKilobits = MetricUnits.Kilobits; -type MetricUnitMegabits = MetricUnits.Megabits; -type MetricUnitGigabits = MetricUnits.Gigabits; -type MetricUnitTerabits = MetricUnits.Terabits; -type MetricUnitPercent = MetricUnits.Percent; -type MetricUnitCount = MetricUnits.Count; -type MetricUnitBytesPerSecond = MetricUnits.BytesPerSecond; -type MetricUnitKilobytesPerSecond = MetricUnits.KilobytesPerSecond; -type MetricUnitMegabytesPerSecond = MetricUnits.MegabytesPerSecond; -type MetricUnitGigabytesPerSecond = MetricUnits.GigabytesPerSecond; -type MetricUnitTerabytesPerSecond = MetricUnits.TerabytesPerSecond; -type MetricUnitBitsPerSecond = MetricUnits.BitsPerSecond; -type MetricUnitKilobitsPerSecond = MetricUnits.KilobitsPerSecond; -type MetricUnitMegabitsPerSecond = MetricUnits.MegabitsPerSecond; -type MetricUnitGigabitsPerSecond = MetricUnits.GigabitsPerSecond; -type MetricUnitTerabitsPerSecond = MetricUnits.TerabitsPerSecond; -type MetricUnitCountPerSecond = MetricUnits.CountPerSecond; - -type MetricUnit = - | MetricUnitSeconds - | MetricUnitMicroseconds - | MetricUnitMilliseconds - | MetricUnitBytes - | MetricUnitKilobytes - | MetricUnitMegabytes - | MetricUnitGigabytes - | MetricUnitTerabytes - | MetricUnitBits - | MetricUnitKilobits - | MetricUnitMegabits - | MetricUnitGigabits - | MetricUnitTerabits - | MetricUnitPercent - | MetricUnitCount - | MetricUnitBitsPerSecond - | MetricUnitBytesPerSecond - | MetricUnitKilobytesPerSecond - | MetricUnitMegabytesPerSecond - | MetricUnitGigabytesPerSecond - | MetricUnitTerabytesPerSecond - | MetricUnitKilobitsPerSecond - | MetricUnitMegabitsPerSecond - | MetricUnitGigabitsPerSecond - | MetricUnitTerabitsPerSecond - | MetricUnitCountPerSecond; - -export { MetricUnit, MetricUnits }; diff --git a/packages/metrics/src/types/Metrics.ts b/packages/metrics/src/types/Metrics.ts index 73d8b60d10..0c9da0130d 100644 --- a/packages/metrics/src/types/Metrics.ts +++ b/packages/metrics/src/types/Metrics.ts @@ -4,9 +4,8 @@ import type { AsyncHandler, SyncHandler, } from '@aws-lambda-powertools/commons/types'; -import { ConfigServiceInterface } from '../config'; -import { MetricUnit } from './MetricUnit'; -import { MetricResolution } from './MetricResolution'; +import type { ConfigServiceInterface } from './ConfigServiceInterface.js'; +import { MetricResolution, MetricUnit } from '../constants.js'; type Dimensions = Record; @@ -63,6 +62,11 @@ type ExtraOptions = { captureColdStartMetric?: boolean; }; +type MetricResolution = + (typeof MetricResolution)[keyof typeof MetricResolution]; + +type MetricUnit = (typeof MetricUnit)[keyof typeof MetricUnit]; + type StoredMetric = { name: string; unit: MetricUnit; @@ -87,4 +91,6 @@ export { StoredMetrics, StoredMetric, MetricDefinition, + MetricResolution, + MetricUnit, }; diff --git a/packages/metrics/src/MetricsInterface.ts b/packages/metrics/src/types/MetricsInterface.ts similarity index 90% rename from packages/metrics/src/MetricsInterface.ts rename to packages/metrics/src/types/MetricsInterface.ts index ce11fd7aa1..d2af26fcd7 100644 --- a/packages/metrics/src/MetricsInterface.ts +++ b/packages/metrics/src/types/MetricsInterface.ts @@ -1,12 +1,12 @@ -import { Metrics } from './Metrics'; -import { - MetricUnit, - MetricResolution, +import type { Metrics } from '../Metrics.js'; +import type { EmfOutput, HandlerMethodDecorator, Dimensions, MetricsOptions, -} from './types'; + MetricResolution, + MetricUnit, +} from './Metrics.js'; interface MetricsInterface { addDimension(name: string, value: string): void; diff --git a/packages/metrics/src/types/index.ts b/packages/metrics/src/types/index.ts index 344dac9821..adc2ebbb3a 100644 --- a/packages/metrics/src/types/index.ts +++ b/packages/metrics/src/types/index.ts @@ -1,3 +1,14 @@ -export * from './Metrics'; -export * from './MetricUnit'; -export * from './MetricResolution'; +export { + MetricsOptions, + Dimensions, + EmfOutput, + HandlerMethodDecorator, + ExtraOptions, + StoredMetrics, + StoredMetric, + MetricDefinition, + MetricResolution, + MetricUnit, +} from './Metrics.js'; +export { ConfigServiceInterface } from './ConfigServiceInterface.js'; +export { MetricsInterface } from './MetricsInterface.js'; diff --git a/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts b/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts index db74836afd..15e8da2a3d 100644 --- a/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts +++ b/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts @@ -1,4 +1,5 @@ -import { Metrics, MetricUnits } from '../../src/index.js'; +import { Metrics, MetricUnit } from '../../src/index.js'; +import type { MetricUnit as MetricUnitType } from '../../src/types/index.js'; import type { Context } from 'aws-lambda'; import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; @@ -7,7 +8,7 @@ const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler'; const metricName = process.env.EXPECTED_METRIC_NAME ?? 'MyMetric'; const metricUnit = - (process.env.EXPECTED_METRIC_UNIT as MetricUnits) ?? MetricUnits.Count; + (process.env.EXPECTED_METRIC_UNIT as MetricUnitType) ?? MetricUnit.Count; const metricValue = process.env.EXPECTED_METRIC_VALUE ?? '1'; const defaultDimensions = process.env.EXPECTED_DEFAULT_DIMENSIONS ?? '{"MyDimension":"MyValue"}'; @@ -19,8 +20,8 @@ const singleMetricDimension = const singleMetricName = process.env.EXPECTED_SINGLE_METRIC_NAME ?? 'MySingleMetric'; const singleMetricUnit = - (process.env.EXPECTED_SINGLE_METRIC_UNIT as MetricUnits) ?? - MetricUnits.Percent; + (process.env.EXPECTED_SINGLE_METRIC_UNIT as MetricUnitType) ?? + MetricUnit.Percent; const singleMetricValue = process.env.EXPECTED_SINGLE_METRIC_VALUE ?? '2'; const metrics = new Metrics({ namespace: namespace, serviceName: serviceName }); diff --git a/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts b/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts index b4996dcf32..8c06579e34 100644 --- a/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts +++ b/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts @@ -1,4 +1,5 @@ -import { Metrics, MetricUnits } from '../../src/index.js'; +import { Metrics, MetricUnit } from '../../src/index.js'; +import type { MetricUnit as MetricUnitType } from '../../src/types/index.js'; import type { Context } from 'aws-lambda'; const namespace = process.env.EXPECTED_NAMESPACE ?? 'CdkExample'; @@ -6,7 +7,7 @@ const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler'; const metricName = process.env.EXPECTED_METRIC_NAME ?? 'MyMetric'; const metricUnit = - (process.env.EXPECTED_METRIC_UNIT as MetricUnits) ?? MetricUnits.Count; + (process.env.EXPECTED_METRIC_UNIT as MetricUnitType) ?? MetricUnit.Count; const metricValue = process.env.EXPECTED_METRIC_VALUE ?? '1'; const defaultDimensions = process.env.EXPECTED_DEFAULT_DIMENSIONS ?? '{"MyDimension":"MyValue"}'; @@ -18,8 +19,8 @@ const singleMetricDimension = const singleMetricName = process.env.EXPECTED_SINGLE_METRIC_NAME ?? 'MySingleMetric'; const singleMetricUnit = - (process.env.EXPECTED_SINGLE_METRIC_UNIT as MetricUnits) ?? - MetricUnits.Percent; + (process.env.EXPECTED_SINGLE_METRIC_UNIT as MetricUnitType) ?? + MetricUnit.Percent; const singleMetricValue = process.env.EXPECTED_SINGLE_METRIC_VALUE ?? '2'; const metrics = new Metrics({ namespace: namespace, serviceName: serviceName }); diff --git a/packages/metrics/tests/helpers/metricsUtils.ts b/packages/metrics/tests/helpers/metricsUtils.ts index 8172fb3451..0984c8a6bc 100644 --- a/packages/metrics/tests/helpers/metricsUtils.ts +++ b/packages/metrics/tests/helpers/metricsUtils.ts @@ -1,6 +1,6 @@ import promiseRetry from 'promise-retry'; -import { Metrics } from '../../src'; -import { ExtraOptions, MetricUnits } from '../../src/types'; +import { Metrics, MetricUnit } from '../../src/index.js'; +import { ExtraOptions } from '../../src/types/index.js'; import { CloudWatchClient, ListMetricsCommand, @@ -48,13 +48,11 @@ const setupDecoratorLambdaHandler = ( ): Handler => { class LambdaFunction implements LambdaInterface { @metrics.logMetrics(options) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler( _event: TEvent, _context: Context ): Promise { - metrics.addMetric('decorator-lambda-test-metric', MetricUnits.Count, 1); + metrics.addMetric('decorator-lambda-test-metric', MetricUnit.Count, 1); return 'Lambda invoked!'; } diff --git a/packages/metrics/tests/helpers/resources.ts b/packages/metrics/tests/helpers/resources.ts index f071d2c8b2..128332eb88 100644 --- a/packages/metrics/tests/helpers/resources.ts +++ b/packages/metrics/tests/helpers/resources.ts @@ -4,7 +4,7 @@ import type { TestNodejsFunctionProps, } from '@aws-lambda-powertools/testing-utils/types'; import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils/resources/lambda'; -import { commonEnvironmentVars } from '../e2e/constants'; +import { commonEnvironmentVars } from '../e2e/constants.js'; class MetricsTestNodejsFunction extends TestNodejsFunction { public constructor( diff --git a/packages/metrics/tests/unit/Metrics.test.ts b/packages/metrics/tests/unit/Metrics.test.ts index e8077f78e7..b161aab738 100644 --- a/packages/metrics/tests/unit/Metrics.test.ts +++ b/packages/metrics/tests/unit/Metrics.test.ts @@ -5,21 +5,23 @@ */ import context from '@aws-lambda-powertools/testing-utils/context'; import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; -import { MetricResolution, MetricUnits, Metrics } from '../../src'; +import { MetricResolution, MetricUnit, Metrics } from '../../src/index.js'; import type { Context, Handler } from 'aws-lambda'; -import { Dimensions, EmfOutput, MetricsOptions } from '../../src/types'; +import type { + Dimensions, + EmfOutput, + MetricsOptions, + ConfigServiceInterface, +} from '../../src/types/index.js'; import { COLD_START_METRIC, DEFAULT_NAMESPACE, MAX_DIMENSION_COUNT, MAX_METRICS_SIZE, MAX_METRIC_VALUES_SIZE, -} from '../../src/constants'; -import { setupDecoratorLambdaHandler } from '../helpers/metricsUtils'; -import { - ConfigServiceInterface, - EnvironmentVariablesService, -} from '../../src/config'; +} from '../../src/constants.js'; +import { setupDecoratorLambdaHandler } from '../helpers/metricsUtils.js'; +import { EnvironmentVariablesService } from '../../src/config/EnvironmentVariablesService.js'; const mockDate = new Date(1466424490000); const dateSpy = jest.spyOn(global, 'Date').mockImplementation(() => mockDate); @@ -521,12 +523,7 @@ describe('Class: Metrics', () => { const metricName = 'test-metric'; // Act - metrics.addMetric( - metricName, - MetricUnits.Count, - 1, - MetricResolution.High - ); + metrics.addMetric(metricName, MetricUnit.Count, 1, MetricResolution.High); // Assess expect(metrics).toEqual( @@ -535,7 +532,7 @@ describe('Class: Metrics', () => { [metricName]: { name: metricName, resolution: MetricResolution.High, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: 1, }, }, @@ -550,19 +547,19 @@ describe('Class: Metrics', () => { // Act metrics.addMetric( 'test-metric-1', - MetricUnits.Count, + MetricUnit.Count, 1, MetricResolution.High ); metrics.addMetric( 'test-metric-2', - MetricUnits.Count, + MetricUnit.Count, 3, MetricResolution.High ); metrics.addMetric( 'test-metric-3', - MetricUnits.Count, + MetricUnit.Count, 6, MetricResolution.High ); @@ -574,19 +571,19 @@ describe('Class: Metrics', () => { 'test-metric-1': { name: 'test-metric-1', resolution: MetricResolution.High, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: 1, }, 'test-metric-2': { name: 'test-metric-2', resolution: MetricResolution.High, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: 3, }, 'test-metric-3': { name: 'test-metric-3', resolution: MetricResolution.High, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: 6, }, }, @@ -599,8 +596,8 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric('test-metric-1', MetricUnits.Count, 1); - metrics.addMetric('test-metric-2', MetricUnits.Seconds, 3); + metrics.addMetric('test-metric-1', MetricUnit.Count, 1); + metrics.addMetric('test-metric-2', MetricUnit.Seconds, 3); // Assess expect(metrics).toEqual( @@ -609,13 +606,13 @@ describe('Class: Metrics', () => { 'test-metric-1': { name: 'test-metric-1', resolution: MetricResolution.Standard, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: 1, }, 'test-metric-2': { name: 'test-metric-2', resolution: MetricResolution.Standard, - unit: MetricUnits.Seconds, + unit: MetricUnit.Seconds, value: 3, }, }, @@ -629,10 +626,10 @@ describe('Class: Metrics', () => { const metricName = 'test-metric'; // Act - metrics.addMetric(metricName, MetricUnits.Count, 1); - metrics.addMetric(metricName, MetricUnits.Count, 5); - metrics.addMetric(metricName, MetricUnits.Count, 1); - metrics.addMetric(metricName, MetricUnits.Count, 4); + metrics.addMetric(metricName, MetricUnit.Count, 1); + metrics.addMetric(metricName, MetricUnit.Count, 5); + metrics.addMetric(metricName, MetricUnit.Count, 1); + metrics.addMetric(metricName, MetricUnit.Count, 4); // Assess expect(metrics).toEqual( @@ -641,7 +638,7 @@ describe('Class: Metrics', () => { [metricName]: { name: metricName, resolution: MetricResolution.Standard, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: [1, 5, 1, 4], }, }, @@ -656,10 +653,10 @@ describe('Class: Metrics', () => { // Act & Assess expect(() => { - metrics.addMetric(metricName, MetricUnits.Count, 1); - metrics.addMetric(metricName, MetricUnits.Kilobits, 5); + metrics.addMetric(metricName, MetricUnit.Count, 1); + metrics.addMetric(metricName, MetricUnit.Kilobits, 5); }).toThrowError( - `Metric "${metricName}" has already been added with unit "${MetricUnits.Count}", but we received unit "${MetricUnits.Kilobits}". Did you mean to use metric unit "${MetricUnits.Count}"?` + `Metric "${metricName}" has already been added with unit "${MetricUnit.Count}", but we received unit "${MetricUnit.Kilobits}". Did you mean to use metric unit "${MetricUnit.Count}"?` ); }); @@ -675,7 +672,7 @@ describe('Class: Metrics', () => { // Act & Assess expect(() => { for (let i = 0; i < MAX_METRICS_SIZE; i++) { - metrics.addMetric(`${metricName}-${i}`, MetricUnits.Count, i); + metrics.addMetric(`${metricName}-${i}`, MetricUnit.Count, i); } }).not.toThrowError(); expect(Object.keys(metrics['storedMetrics']).length).toEqual( @@ -683,7 +680,7 @@ describe('Class: Metrics', () => { ); metrics.addMetric( 'another-metric', - MetricUnits.Count, + MetricUnit.Count, MAX_METRICS_SIZE + 1 ); expect(publishStoredMetricsSpy).toHaveBeenCalledTimes(1); @@ -693,7 +690,7 @@ describe('Class: Metrics', () => { 'another-metric': { name: 'another-metric', resolution: MetricResolution.Standard, - unit: MetricUnits.Count, + unit: MetricUnit.Count, value: MAX_METRICS_SIZE + 1, }, }, @@ -709,7 +706,7 @@ describe('Class: Metrics', () => { // Act for (let i = 0; i <= MAX_METRIC_VALUES_SIZE; i++) { - metrics.addMetric(`${metricName}`, MetricUnits.Count, i); + metrics.addMetric(`${metricName}`, MetricUnit.Count, i); } metrics.publishStoredMetrics(); @@ -741,13 +738,13 @@ describe('Class: Metrics', () => { // Act & Assess expect(() => { for (let i = 0; i < MAX_METRICS_SIZE - 1; i++) { - metrics.addMetric(`${metricName}-${i}`, MetricUnits.Count, i); + metrics.addMetric(`${metricName}-${i}`, MetricUnit.Count, i); } }).not.toThrowError(); expect(Object.keys(metrics['storedMetrics']).length).toEqual( MAX_METRICS_SIZE - 1 ); - metrics.addMetric('another-metric', MetricUnits.Count, MAX_METRICS_SIZE); + metrics.addMetric('another-metric', MetricUnit.Count, MAX_METRICS_SIZE); expect(publishStoredMetricsSpy).toHaveBeenCalledTimes(0); expect(Object.keys(metrics['storedMetrics']).length).toEqual( MAX_METRICS_SIZE @@ -766,8 +763,8 @@ describe('Class: Metrics', () => { ); // Act - metrics.addMetric('test-metric-1', MetricUnits.Count, 1); - metrics.addMetric('test-metric-2', MetricUnits.Bits, 100); + metrics.addMetric('test-metric-1', MetricUnit.Count, 1); + metrics.addMetric('test-metric-2', MetricUnit.Bits, 100); // Assess expect(publishStoredMetricsSpy).toHaveBeenCalledTimes(2); @@ -785,8 +782,8 @@ describe('Class: Metrics', () => { ); // Act - metrics.addMetric('test-metric-1', MetricUnits.Count, 1); - metrics.addMetric('test-metric-2', MetricUnits.Bits, 100); + metrics.addMetric('test-metric-1', MetricUnit.Count, 1); + metrics.addMetric('test-metric-2', MetricUnit.Bits, 100); // Assess expect(publishStoredMetricsSpy).toHaveBeenCalledTimes(0); @@ -801,8 +798,8 @@ describe('Class: Metrics', () => { ); // Act - metrics.addMetric('test-metric-1', MetricUnits.Count, 1); - metrics.addMetric('test-metric-2', MetricUnits.Bits, 100); + metrics.addMetric('test-metric-1', MetricUnit.Count, 1); + metrics.addMetric('test-metric-2', MetricUnit.Bits, 100); // Assess expect(publishStoredMetricsSpy).toHaveBeenCalledTimes(0); @@ -830,7 +827,7 @@ describe('Class: Metrics', () => { expect(addMetricSpy).toBeCalledTimes(1); expect(addMetricSpy).toBeCalledWith( COLD_START_METRIC, - MetricUnits.Count, + MetricUnit.Count, 1 ); }); @@ -1071,7 +1068,7 @@ describe('Class: Metrics', () => { const metricName = 'test-metric'; // Act - metrics.addMetric(metricName, MetricUnits.Count, 1); + metrics.addMetric(metricName, MetricUnit.Count, 1); metrics.clearMetrics(); // Assess @@ -1116,7 +1113,7 @@ describe('Class: Metrics', () => { expect(addMetricSpy).toHaveBeenNthCalledWith( 1, decoratorLambdaMetric, - MetricUnits.Count, + MetricUnit.Count, 1 ); expect(publishStoredMetricsSpy).toBeCalledTimes(1); @@ -1141,7 +1138,7 @@ describe('Class: Metrics', () => { expect(addMetricSpy).toHaveBeenNthCalledWith( 1, decoratorLambdaMetric, - MetricUnits.Count, + MetricUnit.Count, 1 ); expect(captureColdStartMetricSpy).toBeCalledTimes(1); @@ -1166,7 +1163,7 @@ describe('Class: Metrics', () => { expect(addMetricSpy).toHaveBeenNthCalledWith( 1, decoratorLambdaMetric, - MetricUnits.Count, + MetricUnit.Count, 1 ); expect(throwOnEmptyMetricsSpy).toBeCalledTimes(1); @@ -1195,7 +1192,7 @@ describe('Class: Metrics', () => { expect(addMetricSpy).toHaveBeenNthCalledWith( 1, decoratorLambdaMetric, - MetricUnits.Count, + MetricUnit.Count, 1 ); expect(setDefaultDimensionsSpy).toHaveBeenNthCalledWith( @@ -1246,7 +1243,7 @@ describe('Class: Metrics', () => { test('it should call serializeMetrics && log the stringified return value of serializeMetrics', () => { // Prepare const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); - metrics.addMetric('test-metric', MetricUnits.Count, 10); + metrics.addMetric('test-metric', MetricUnit.Count, 10); const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(); const mockData: EmfOutput = { _aws: { @@ -1258,7 +1255,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: 'test-metric', - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], }, @@ -1283,7 +1280,7 @@ describe('Class: Metrics', () => { test('it should call clearMetrics function', () => { // Prepare const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); - metrics.addMetric('test-metric', MetricUnits.Count, 10); + metrics.addMetric('test-metric', MetricUnit.Count, 10); const clearMetricsSpy = jest.spyOn(metrics, 'clearMetrics'); // Act @@ -1296,7 +1293,7 @@ describe('Class: Metrics', () => { test('it should call clearDimensions function', () => { // Prepare const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); - metrics.addMetric('test-metric', MetricUnits.Count, 10); + metrics.addMetric('test-metric', MetricUnit.Count, 10); const clearDimensionsSpy = jest.spyOn(metrics, 'clearDimensions'); // Act @@ -1309,7 +1306,7 @@ describe('Class: Metrics', () => { test('it should call clearMetadata function', () => { // Prepare const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); - metrics.addMetric('test-metric', MetricUnits.Count, 10); + metrics.addMetric('test-metric', MetricUnit.Count, 10); const clearMetadataSpy = jest.spyOn(metrics, 'clearMetadata'); // Act @@ -1349,11 +1346,11 @@ describe('Class: Metrics', () => { }); // Act - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - metrics.addMetric('successfulBooking', MetricUnits.Count, 3); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 3); metrics.addMetric( 'failedBooking', - MetricUnits.Count, + MetricUnit.Count, 1, MetricResolution.High ); @@ -1370,11 +1367,11 @@ describe('Class: Metrics', () => { Metrics: [ { Name: 'successfulBooking', - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, { Name: 'failedBooking', - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, StorageResolution: 1, }, ], @@ -1398,7 +1395,7 @@ describe('Class: Metrics', () => { }); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1411,7 +1408,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1432,7 +1429,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1445,7 +1442,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1471,7 +1468,7 @@ describe('Class: Metrics', () => { }); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1489,7 +1486,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1513,7 +1510,7 @@ describe('Class: Metrics', () => { // Act metrics.addMetric( 'test-metric', - MetricUnits.Count, + MetricUnit.Count, 10, MetricResolution.High ); @@ -1537,7 +1534,7 @@ describe('Class: Metrics', () => { { Name: testMetric, StorageResolution: 1, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1563,7 +1560,7 @@ describe('Class: Metrics', () => { // Act metrics.addMetric( testMetric, - MetricUnits.Count, + MetricUnit.Count, 10, MetricResolution.High ); @@ -1587,7 +1584,7 @@ describe('Class: Metrics', () => { { Name: testMetric, StorageResolution: 1, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1608,7 +1605,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); metrics.addMetadata('foo', 'bar'); const loggedData = metrics.serializeMetrics(); @@ -1622,7 +1619,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1656,7 +1653,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics(); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1671,7 +1668,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: DEFAULT_NAMESPACE, @@ -1690,7 +1687,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(testMetric, MetricUnits.Count, 10); + metrics.addMetric(testMetric, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1705,7 +1702,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: testMetric, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1724,7 +1721,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(metricName, MetricUnits.Count, 10); + metrics.addMetric(metricName, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1738,7 +1735,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: metricName, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1757,8 +1754,8 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(metricName, MetricUnits.Count, 10); - metrics.addMetric(metricName, MetricUnits.Count, 20); + metrics.addMetric(metricName, MetricUnit.Count, 10); + metrics.addMetric(metricName, MetricUnit.Count, 20); const loggedData = metrics.serializeMetrics(); // Assess @@ -1772,7 +1769,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: metricName, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1792,8 +1789,8 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(metricName1, MetricUnits.Count, 10); - metrics.addMetric(metricName2, MetricUnits.Seconds, 20); + metrics.addMetric(metricName1, MetricUnit.Count, 10); + metrics.addMetric(metricName2, MetricUnit.Seconds, 20); const loggedData = metrics.serializeMetrics(); // Assess @@ -1808,11 +1805,11 @@ describe('Class: Metrics', () => { Metrics: [ { Name: metricName1, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, { Name: metricName2, - Unit: MetricUnits.Seconds, + Unit: MetricUnit.Seconds, }, ], Namespace: TEST_NAMESPACE, @@ -1832,7 +1829,7 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(metricName, MetricUnits.Count, 10); + metrics.addMetric(metricName, MetricUnit.Count, 10); const loggedData = metrics.serializeMetrics(); // Assess @@ -1848,7 +1845,7 @@ describe('Class: Metrics', () => { Metrics: [ { Name: metricName, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, ], Namespace: TEST_NAMESPACE, @@ -1868,10 +1865,10 @@ describe('Class: Metrics', () => { const metrics: Metrics = new Metrics({ namespace: TEST_NAMESPACE }); // Act - metrics.addMetric(metricName1, MetricUnits.Count, 10); + metrics.addMetric(metricName1, MetricUnit.Count, 10); metrics.addMetric( metricName2, - MetricUnits.Seconds, + MetricUnit.Seconds, 10, MetricResolution.High ); @@ -1893,12 +1890,12 @@ describe('Class: Metrics', () => { Metrics: [ { Name: metricName1, - Unit: MetricUnits.Count, + Unit: MetricUnit.Count, }, { Name: metricName2, StorageResolution: 1, - Unit: MetricUnits.Seconds, + Unit: MetricUnit.Seconds, }, ], Namespace: TEST_NAMESPACE, diff --git a/packages/metrics/tests/unit/middleware/middy.test.ts b/packages/metrics/tests/unit/middleware/middy.test.ts index 5363566dfd..57109fd30d 100644 --- a/packages/metrics/tests/unit/middleware/middy.test.ts +++ b/packages/metrics/tests/unit/middleware/middy.test.ts @@ -3,14 +3,10 @@ * * @group unit/metrics/middleware */ -import { - Metrics, - MetricUnits, - logMetrics, - MetricResolution, -} from '../../../../metrics/src'; +import { Metrics, MetricUnit, MetricResolution } from '../../../src/index.js'; +import { logMetrics } from '../../../src/middleware/middy.js'; import middy from '@middy/core'; -import { ExtraOptions } from '../../../src/types'; +import { ExtraOptions } from '../../../src/types/index.js'; import { cleanupMiddlewares } from '@aws-lambda-powertools/commons'; import context from '@aws-lambda-powertools/testing-utils/context'; @@ -189,8 +185,8 @@ describe('Middy middleware', () => { }); const lambdaHandler = (): void => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 2); - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 2); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); }; const handler = middy(lambdaHandler).use(logMetrics(metrics)); @@ -226,7 +222,7 @@ describe('Middy middleware', () => { }); const lambdaHandler = (): void => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); }; const metricsOptions: ExtraOptions = { throwOnEmptyMetrics: true, @@ -292,7 +288,7 @@ describe('Middy middleware', () => { }); const lambdaHandler = (): void => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); }; const handler = middy(lambdaHandler).use(logMetrics(metrics)); @@ -328,7 +324,7 @@ describe('Middy middleware', () => { }); const lambdaHandler = (): void => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); }; const metricsOptions: ExtraOptions = { throwOnEmptyMetrics: true, @@ -390,7 +386,7 @@ describe('Middy middleware', () => { }; const handler = middy( (_event: { foo: string; bar: string } & { idx: number }): void => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetric('successfulBooking', MetricUnit.Count, 1); } ) .use(logMetrics(metrics)) @@ -415,7 +411,7 @@ describe('Middy middleware', () => { const lambdaHandler = (): void => { metrics.addMetric( 'successfulBooking', - MetricUnits.Count, + MetricUnit.Count, 1, MetricResolution.Standard ); @@ -460,7 +456,7 @@ describe('Middy middleware', () => { const lambdaHandler = (): void => { metrics.addMetric( 'successfulBooking', - MetricUnits.Count, + MetricUnit.Count, 1, MetricResolution.High ); diff --git a/packages/metrics/tsconfig.esm.json b/packages/metrics/tsconfig.esm.json new file mode 100644 index 0000000000..9bed8e4da4 --- /dev/null +++ b/packages/metrics/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "./lib/esm", + "rootDir": "./src" + }, + "include": [ + "./src/**/*" + ] +} \ No newline at end of file diff --git a/packages/metrics/tsconfig.json b/packages/metrics/tsconfig.json index 1cb9d72773..a30fdead42 100644 --- a/packages/metrics/tsconfig.json +++ b/packages/metrics/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./lib", + "outDir": "./lib/cjs", "rootDir": "./src", }, "include": [ From 1629adf93a90410070616d828454ec745efa0cd1 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Oct 2023 13:32:46 +0200 Subject: [PATCH 2/5] chore(metrics): move HandlerMethodDecorator commons --- packages/commons/src/types/LambdaInterface.ts | 10 +++++++++- packages/commons/src/types/index.ts | 17 +++++++++++++---- packages/metrics/src/Metrics.ts | 2 +- packages/metrics/src/types/Metrics.ts | 15 --------------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/packages/commons/src/types/LambdaInterface.ts b/packages/commons/src/types/LambdaInterface.ts index 0871d433f9..38a55cdb48 100644 --- a/packages/commons/src/types/LambdaInterface.ts +++ b/packages/commons/src/types/LambdaInterface.ts @@ -15,4 +15,12 @@ interface LambdaInterface { handler: SyncHandler | AsyncHandler; } -export { LambdaInterface }; +type HandlerMethodDecorator = ( + target: LambdaInterface, + propertyKey: string | symbol, + descriptor: + | TypedPropertyDescriptor> + | TypedPropertyDescriptor> +) => void; + +export { LambdaInterface, HandlerMethodDecorator }; diff --git a/packages/commons/src/types/index.ts b/packages/commons/src/types/index.ts index a3f660eeda..115abe81fb 100644 --- a/packages/commons/src/types/index.ts +++ b/packages/commons/src/types/index.ts @@ -1,4 +1,13 @@ -export * from './middy.js'; -export * from './awsSdk.js'; -export * from './json.js'; -export * from './LambdaInterface.js'; +export { + MiddlewareLikeObj, + MiddyLikeRequest, + CleanupFunction, +} from './middy.js'; +export { SdkClient, MiddlewareArgsLike } from './awsSdk.js'; +export { JSONPrimitive, JSONValue, JSONObject, JSONArray } from './json.js'; +export { + SyncHandler, + AsyncHandler, + LambdaInterface, + HandlerMethodDecorator, +} from './LambdaInterface.js'; diff --git a/packages/metrics/src/Metrics.ts b/packages/metrics/src/Metrics.ts index 743e0246a4..a7a735097e 100644 --- a/packages/metrics/src/Metrics.ts +++ b/packages/metrics/src/Metrics.ts @@ -1,5 +1,6 @@ import type { Callback, Context, Handler } from 'aws-lambda'; import { Utility } from '@aws-lambda-powertools/commons'; +import type { HandlerMethodDecorator } from '@aws-lambda-powertools/commons/types'; import { EnvironmentVariablesService } from './config/EnvironmentVariablesService.js'; import { MAX_DIMENSION_COUNT, @@ -14,7 +15,6 @@ import { type MetricsOptions, type Dimensions, type EmfOutput, - type HandlerMethodDecorator, type StoredMetrics, type ExtraOptions, type MetricDefinition, diff --git a/packages/metrics/src/types/Metrics.ts b/packages/metrics/src/types/Metrics.ts index 0c9da0130d..f925ed2e9b 100644 --- a/packages/metrics/src/types/Metrics.ts +++ b/packages/metrics/src/types/Metrics.ts @@ -1,9 +1,3 @@ -import type { Handler } from 'aws-lambda'; -import type { - LambdaInterface, - AsyncHandler, - SyncHandler, -} from '@aws-lambda-powertools/commons/types'; import type { ConfigServiceInterface } from './ConfigServiceInterface.js'; import { MetricResolution, MetricUnit } from '../constants.js'; @@ -29,14 +23,6 @@ type EmfOutput = Readonly<{ }; }>; -type HandlerMethodDecorator = ( - target: LambdaInterface, - propertyKey: string | symbol, - descriptor: - | TypedPropertyDescriptor> - | TypedPropertyDescriptor> -) => void; - /** * Options for the metrics decorator * @@ -86,7 +72,6 @@ export { MetricsOptions, Dimensions, EmfOutput, - HandlerMethodDecorator, ExtraOptions, StoredMetrics, StoredMetric, From aa38e836e86f3dcffc5717bead157b514d7293be Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Oct 2023 13:37:25 +0200 Subject: [PATCH 3/5] chore(docs): update imports --- examples/cdk/functions/get-all-items.ts | 2 +- examples/sam/src/get-all-items.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cdk/functions/get-all-items.ts b/examples/cdk/functions/get-all-items.ts index a31269d7a2..f4479b6806 100644 --- a/examples/cdk/functions/get-all-items.ts +++ b/examples/cdk/functions/get-all-items.ts @@ -1,5 +1,5 @@ import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware'; -import { logMetrics } from '@aws-lambda-powertools/metrics'; +import { logMetrics } from '@aws-lambda-powertools/metrics/middleware'; import { captureLambdaHandler } from '@aws-lambda-powertools/tracer'; import { ScanCommand } from '@aws-sdk/lib-dynamodb'; import middy from '@middy/core'; diff --git a/examples/sam/src/get-all-items.ts b/examples/sam/src/get-all-items.ts index 6984c2d54d..125da137c9 100644 --- a/examples/sam/src/get-all-items.ts +++ b/examples/sam/src/get-all-items.ts @@ -6,7 +6,7 @@ import { import middy from '@middy/core'; import { tableName } from './common/constants'; import { logger, tracer, metrics } from './common/powertools'; -import { logMetrics } from '@aws-lambda-powertools/metrics'; +import { logMetrics } from '@aws-lambda-powertools/metrics/middleware'; import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware'; import { captureLambdaHandler } from '@aws-lambda-powertools/tracer'; import { docClient } from './common/dynamodb-client'; From e32a54c805a1ca8de39bcea77e322c230bc0ef91 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Oct 2023 13:38:42 +0200 Subject: [PATCH 4/5] chore(layers): update imports --- layers/tests/e2e/layerPublisher.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers/tests/e2e/layerPublisher.test.ts b/layers/tests/e2e/layerPublisher.test.ts index 09aebc671d..560015eee5 100644 --- a/layers/tests/e2e/layerPublisher.test.ts +++ b/layers/tests/e2e/layerPublisher.test.ts @@ -7,12 +7,12 @@ import { App } from 'aws-cdk-lib'; import { LayerVersion } from 'aws-cdk-lib/aws-lambda'; import { LayerPublisherStack } from '../../src/layer-publisher-stack'; import { - TestNodejsFunction, TestStack, TestInvocationLogs, invokeFunctionOnce, generateTestUniqueName, } from '@aws-lambda-powertools/testing-utils'; +import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils/resources/lambda'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, From fb59c7ac882804b1ae3b82dd71f00a76ca6d2764 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Oct 2023 15:29:57 +0200 Subject: [PATCH 5/5] chore(metrics): update types --- packages/metrics/src/types/MetricsInterface.ts | 2 +- packages/metrics/src/types/index.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/metrics/src/types/MetricsInterface.ts b/packages/metrics/src/types/MetricsInterface.ts index d2af26fcd7..99650937ba 100644 --- a/packages/metrics/src/types/MetricsInterface.ts +++ b/packages/metrics/src/types/MetricsInterface.ts @@ -1,7 +1,7 @@ import type { Metrics } from '../Metrics.js'; +import type { HandlerMethodDecorator } from '@aws-lambda-powertools/commons/types'; import type { EmfOutput, - HandlerMethodDecorator, Dimensions, MetricsOptions, MetricResolution, diff --git a/packages/metrics/src/types/index.ts b/packages/metrics/src/types/index.ts index adc2ebbb3a..115b00059e 100644 --- a/packages/metrics/src/types/index.ts +++ b/packages/metrics/src/types/index.ts @@ -2,7 +2,6 @@ export { MetricsOptions, Dimensions, EmfOutput, - HandlerMethodDecorator, ExtraOptions, StoredMetrics, StoredMetric,