diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 377669bed2..956f81860a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -69,7 +69,6 @@ body: options: - 22.x - 20.x - - 18.x validations: required: true - type: dropdown diff --git a/.github/workflows/quality_check.yml b/.github/workflows/quality_check.yml index db35889264..4e4153a5eb 100644 --- a/.github/workflows/quality_check.yml +++ b/.github/workflows/quality_check.yml @@ -19,7 +19,7 @@ jobs: NODE_ENV: dev strategy: matrix: - version: [18, 20, 22] + version: [20, 22] workspace: [ "packages/batch", "packages/commons", diff --git a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml index 844d687874..89abad3890 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -39,7 +39,7 @@ jobs: NODE_ENV: dev strategy: matrix: - version: [18, 20, 22] + version: [20, 22] workspace: [ "packages/batch", "packages/commons", diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index dd46c8907f..91386c9921 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -33,7 +33,7 @@ jobs: packages/tracer, layers, ] - version: [18, 20, 22] + version: [20, 22] arch: [x86_64, arm64] fail-fast: false steps: diff --git a/README.md b/README.md index 1fb031b86d..81e8822dc7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Powertools for AWS Lambda (TypeScript) -![NodeSupport](https://img.shields.io/static/v1?label=node&message=%2018|%2020|%2022&style=flat&logo=nodedotjs) +![NodeSupport](https://img.shields.io/static/v1?label=node&message=%2020|%2022&style=flat&logo=nodedotjs) ![GitHub Release](https://img.shields.io/github/v/release/aws-powertools/powertools-lambda-typescript?style=flat) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=aws-powertools_powertools-lambda-typescript&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=aws-powertools_powertools-lambda-typescript) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=aws-powertools_powertools-lambda-typescript&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=aws-powertools_powertools-lambda-typescript) diff --git a/docs/getting-started/lambda-layers.md b/docs/getting-started/lambda-layers.md index 9debd98abf..e1924a2305 100644 --- a/docs/getting-started/lambda-layers.md +++ b/docs/getting-started/lambda-layers.md @@ -109,7 +109,6 @@ Change `{aws::region}` to your AWS region, e.g. `eu-west-1`, and run the followi "CreatedDate": "2025-04-08T07:38:30.424+0000", "Version": 24, "CompatibleRuntimes": [ - "nodejs18.x", "nodejs20.x", "nodejs22.x" ], diff --git a/docs/getting-started/usage-patterns.md b/docs/getting-started/usage-patterns.md index 5e2eb9c3e3..703ffc1847 100644 --- a/docs/getting-started/usage-patterns.md +++ b/docs/getting-started/usage-patterns.md @@ -33,7 +33,7 @@ All our decorators assume that the method they are decorating is asynchronous. T If your existing codebase relies on the [Middy.js](https://middy.js.org/docs/) middleware engine, you can use the Powertools for AWS Lambda (TypeScript) middleware to integrate with your existing code. This approach is similar to the Class Method decorator pattern but uses the Middy.js middleware engine to apply Powertools utilities. !!! note - We guarantee support for Middy.js `v4.x` through `v6.x` versions. + We guarantee support for Middy.js `v5.x` and `v6.x`. Check Middy.js docs to learn more about [best practices](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"} when working with Powertools for AWS middlewares. ```ts diff --git a/layers/package.json b/layers/package.json index 3a1535df89..9a44421889 100644 --- a/layers/package.json +++ b/layers/package.json @@ -12,7 +12,6 @@ "test:unit": "vitest --run tests/unit", "test:unit:coverage": "echo 'Not Implemented'", "test:unit:types": "echo 'Not Implemented'", - "test:e2e:nodejs18x": "echo 'Not Implemented'", "test:e2e:nodejs20x": "echo 'Not Implemented'", "test:e2e:nodejs22x": "echo 'Not Implemented'", "test:e2e": "vitest --run tests/e2e", diff --git a/layers/src/canary-stack.ts b/layers/src/canary-stack.ts index af562dd372..7bb86a3934 100644 --- a/layers/src/canary-stack.ts +++ b/layers/src/canary-stack.ts @@ -45,7 +45,7 @@ export class CanaryStack extends Stack { '../tests/e2e/layerPublisher.class.test.functionCode.ts' ), handler: 'handler', - runtime: Runtime.NODEJS_18_X, + runtime: Runtime.NODEJS_20_X, functionName: `canary-${suffix}`, timeout: Duration.seconds(30), bundling: { diff --git a/layers/src/layer-publisher-stack.ts b/layers/src/layer-publisher-stack.ts index a47cea4bfd..7f35789f98 100644 --- a/layers/src/layer-publisher-stack.ts +++ b/layers/src/layer-publisher-stack.ts @@ -41,11 +41,7 @@ export class LayerPublisherStack extends Stack { this.lambdaLayerVersion = new LayerVersion(this, 'LambdaPowertoolsLayer', { layerVersionName: props?.layerName, description: `Powertools for AWS Lambda (TypeScript) version ${powertoolsPackageVersion}`, - compatibleRuntimes: [ - Runtime.NODEJS_18_X, - Runtime.NODEJS_20_X, - Runtime.NODEJS_22_X, - ], + compatibleRuntimes: [Runtime.NODEJS_20_X, Runtime.NODEJS_22_X], license: 'MIT-0', compatibleArchitectures: [Architecture.ARM_64, Architecture.X86_64], code: Code.fromAsset(resolve(__dirname), { diff --git a/layers/tests/unit/layer-publisher.test.ts b/layers/tests/unit/layer-publisher.test.ts index 66a5dc3900..e45a16db65 100644 --- a/layers/tests/unit/layer-publisher.test.ts +++ b/layers/tests/unit/layer-publisher.test.ts @@ -1,7 +1,7 @@ import { App } from 'aws-cdk-lib'; import { Template } from 'aws-cdk-lib/assertions'; import { describe, it } from 'vitest'; -import { LayerPublisherStack } from '../../src/layer-publisher-stack'; +import { LayerPublisherStack } from '../../src/layer-publisher-stack.js'; describe('Class: LayerPublisherStack', () => { it('creates the stack with a layer in it', () => { @@ -20,7 +20,7 @@ describe('Class: LayerPublisherStack', () => { // Assess template.resourceCountIs('AWS::Lambda::LayerVersion', 1); template.hasResourceProperties('AWS::Lambda::LayerVersion', { - CompatibleRuntimes: ['nodejs18.x', 'nodejs20.x', 'nodejs22.x'], + CompatibleRuntimes: ['nodejs20.x', 'nodejs22.x'], LicenseInfo: 'MIT-0', /* CompatibleArchitectures: [ 'x86_64', diff --git a/package-lock.json b/package-lock.json index 07d85b6043..f5e6ccc168 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "husky": "^9.1.7", "lint-staged": "^16.1.2", "markdownlint-cli2": "^0.18.1", - "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", "middy6": "npm:@middy/core@^6.0.0", "typedoc": "^0.28.8", @@ -43,7 +42,7 @@ "vitest": "^3.0.9" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "examples/app": { @@ -17302,20 +17301,6 @@ "node": ">=8.6" } }, - "node_modules/middy4": { - "name": "@middy/core", - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@middy/core/-/core-4.7.0.tgz", - "integrity": "sha512-yI++DmhDQ8+ugvY7+GrEnb2PF0M/6Wzbgu4Tf7QhOlhwKGDd4j6or+Ab7qYPWx+jnKf8F0tqlmh0gV4JLi0yHw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/willfarrell" - } - }, "node_modules/middy5": { "name": "@middy/core", "version": "5.4.3", diff --git a/package.json b/package.json index bbbdb08adf..afce02abea 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "husky": "^9.1.7", "lint-staged": "^16.1.2", "markdownlint-cli2": "^0.18.1", - "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", "middy6": "npm:@middy/core@^6.0.0", "typedoc": "^0.28.8", @@ -70,6 +69,6 @@ "*.md": "markdownlint-cli2 --fix" }, "engines": { - "node": ">=18" + "node": ">=20" } } diff --git a/packages/batch/package.json b/packages/batch/package.json index af8056f79a..4f77a2049d 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -14,7 +14,6 @@ "test:unit": "vitest --run", "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", - "test:e2e:nodejs18x": "echo 'Not Implemented'", "test:e2e:nodejs20x": "echo 'Not Implemented'", "test:e2e:nodejs22x": "echo 'Not Implemented'", "test:e2e": "echo 'Not Implemented'", diff --git a/packages/event-handler/package.json b/packages/event-handler/package.json index b1525d7311..1f3455db1e 100644 --- a/packages/event-handler/package.json +++ b/packages/event-handler/package.json @@ -14,7 +14,6 @@ "test:unit": "vitest --run", "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", - "test:e2e:nodejs18x": "echo \"Not implemented\"", "test:e2e:nodejs20x": "echo \"Not implemented\"", "test:e2e:nodejs22x": "echo \"Not implemented\"", "test:e2e": "echo \"Not implemented\"", diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index fbaffb052c..539580db67 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "RUNTIME=nodejs18x vitest --run tests/e2e", "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/kafka/package.json b/packages/kafka/package.json index 79bed9b3af..590c53ab8f 100644 --- a/packages/kafka/package.json +++ b/packages/kafka/package.json @@ -14,7 +14,6 @@ "test:unit": "vitest --run", "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", - "test:e2e:nodejs18x": "echo \"Not implemented\"", "test:e2e:nodejs20x": "echo \"Not implemented\"", "test:e2e:nodejs22x": "echo \"Not implemented\"", "test:e2e": "echo \"Not implemented\"", diff --git a/packages/logger/package.json b/packages/logger/package.json index eef2fb2644..07e0921be6 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "RUNTIME=nodejs18x vitest --run tests/e2e", "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts index f09f646999..bcefc6a583 100644 --- a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts +++ b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts @@ -1,5 +1,5 @@ import type { Context } from 'aws-lambda'; -import middy from 'middy4'; +import middy from 'middy5'; import { Logger } from '../../src/index.js'; import { injectLambdaContext } from '../../src/middleware/middy.js'; import type { TestEvent, TestOutput } from '../helpers/types.js'; diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 3d48f0817b..a3b7f57054 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "RUNTIME=nodejs18x vitest --run tests/e2e", "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/parameters/package.json b/packages/parameters/package.json index f3a5365157..669544dfc1 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "vitest --run tests/types --typecheck", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "RUNTIME=nodejs18x vitest --run tests/e2e", "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/parser/package.json b/packages/parser/package.json index 0834713e90..74f281b901 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "vitest --run tests/types --typecheck", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "echo 'Not implemented'", "test:e2e:nodejs20x": "echo 'Not implemented'", "test:e2e:nodejs22x": "echo 'Not implemented'", "test:e2e": "echo 'Not implemented'", diff --git a/packages/testing/src/constants.ts b/packages/testing/src/constants.ts index 87122bcca8..a306ffa9f4 100644 --- a/packages/testing/src/constants.ts +++ b/packages/testing/src/constants.ts @@ -9,7 +9,6 @@ const defaultRuntime = 'nodejs22x'; * The AWS Lambda runtimes that are supported by the project. */ const TEST_RUNTIMES = { - nodejs18x: Runtime.NODEJS_18_X, nodejs20x: Runtime.NODEJS_20_X, [defaultRuntime]: Runtime.NODEJS_22_X, } as const; diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 4baf16f815..511f5b459b 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -15,7 +15,6 @@ "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", "test:unit:watch": "vitest tests/unit", - "test:e2e:nodejs18x": "RUNTIME=nodejs18x vitest --run tests/e2e", "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/validation/package.json b/packages/validation/package.json index 841a50be05..fa88812413 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -11,7 +11,6 @@ "test:unit": "vitest --run", "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "echo 'Not Implemented'", - "test:e2e:nodejs18x": "echo \"Not implemented\"", "test:e2e:nodejs20x": "echo \"Not implemented\"", "test:e2e:nodejs22x": "echo \"Not implemented\"", "test:e2e": "echo \"Not implemented\"", diff --git a/tsconfig.json b/tsconfig.json index 0f09959192..e417160e54 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "incremental": true, "composite": true, - "target": "ES2022", // Node.js 18 + "target": "ES2023", // Node.js 20 "experimentalDecorators": true, "module": "NodeNext", "moduleResolution": "NodeNext",