From 000a8910eb6bbd5ccf43a32f55c9e1cc9a0bc38b Mon Sep 17 00:00:00 2001 From: svozza Date: Thu, 30 Apr 2026 22:43:16 +0100 Subject: [PATCH] chore: drop Node.js 20 support --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/workflows/quality_check.yml | 2 +- ...sable-run-linting-check-and-unit-tests.yml | 2 +- .github/workflows/run-e2e-tests.yml | 2 +- README.md | 2 +- docs/getting-started/lambda-layers.md | 1 - docs/versioning.md | 4 +- .../cdk/function-with-logstream-construct.ts | 4 +- examples/snippets/commons/testingMetadata.ts | 2 +- .../idempotency/templates/tableCdk.ts | 2 +- .../idempotency/templates/tableTerraform.tf | 2 +- layers/package.json | 1 - layers/src/canary-stack.ts | 2 +- layers/src/layer-publisher-stack.ts | 6 +- layers/tests/unit/layer-publisher.test.ts | 2 +- package-lock.json | 2 +- package.json | 2 +- packages/batch/package.json | 1 - packages/commons/src/awsSdkUtils.ts | 2 +- packages/event-handler/package.json | 1 - packages/idempotency/package.json | 1 - .../tests/e2e/durableIdempotent.test.ts | 140 +++++++++--------- .../helpers/populateEnvironmentVariables.ts | 2 +- packages/kafka/package.json | 1 - packages/logger/package.json | 1 - packages/metrics/package.json | 1 - packages/parameters/package.json | 1 - packages/parser/package.json | 1 - packages/testing/src/constants.ts | 1 - packages/testing/src/setupEnv.ts | 2 +- packages/tracer/package.json | 1 - packages/tracer/tests/unit/Tracer.test.ts | 2 +- packages/validation/package.json | 1 - tsconfig.json | 2 +- 34 files changed, 89 insertions(+), 111 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 800cf21170..73f0c44568 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -69,7 +69,6 @@ body: options: - 24.x - 22.x - - 20.x validations: required: true - type: dropdown diff --git a/.github/workflows/quality_check.yml b/.github/workflows/quality_check.yml index 57ebde281c..51e95e7d09 100644 --- a/.github/workflows/quality_check.yml +++ b/.github/workflows/quality_check.yml @@ -20,7 +20,7 @@ jobs: NODE_ENV: dev strategy: matrix: - version: [20, 22, 24] + version: [22, 24] 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 adb5a25a6b..bef8f189b2 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -40,7 +40,7 @@ jobs: NODE_ENV: dev strategy: matrix: - version: [20, 22, 24] + version: [22, 24] workspace: [ "packages/batch", "packages/commons", diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index 59fe29dee3..f7a02aaf10 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -36,7 +36,7 @@ jobs: packages/batch, layers, ] - version: [20, 22, 24] + version: [22, 24] arch: [x86_64, arm64] fail-fast: false steps: diff --git a/README.md b/README.md index ba917357ec..d2953d4623 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=%2020|%2022&style=flat&logo=nodedotjs) +![NodeSupport](https://img.shields.io/static/v1?label=node&message=%2022|%2024&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 43c21aa7ec..c9ee5a5e11 100644 --- a/docs/getting-started/lambda-layers.md +++ b/docs/getting-started/lambda-layers.md @@ -111,7 +111,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": [ - "nodejs20.x", "nodejs22.x", "nodejs24.x" ], diff --git a/docs/versioning.md b/docs/versioning.md index 40e3ac4e99..1a8b6375ae 100644 --- a/docs/versioning.md +++ b/docs/versioning.md @@ -37,8 +37,8 @@ Most AWS SDKs have underlying dependencies, such as language runtimes, AWS Lambd The following terms are used to classify underlying third party dependencies: -* [**AWS Lambda Runtime**](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html): Examples include `nodejs20.x`, `python3.12`, etc. -* **Language Runtime**: Examples include Python 3.12, NodeJS 20, Java 17, .NET Core, etc. +* [**AWS Lambda Runtime**](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html): Examples include `nodejs22.x`, `python3.12`, etc. +* **Language Runtime**: Examples include Python 3.12, NodeJS 22, Java 17, .NET Core, etc. * **Third party Library**: Examples include Pydantic, AWS X-Ray SDK, AWS Encryption SDK, Middy.js, etc. Powertools for AWS Lambda follows the [AWS Lambda Runtime deprecation policy cycle](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy), when it comes to Language Runtime. This means we will stop supporting their respective deprecated Language Runtime _(e.g., `nodejs20.x`)_ without increasing the major SDK version. diff --git a/examples/app/cdk/function-with-logstream-construct.ts b/examples/app/cdk/function-with-logstream-construct.ts index 55e3c713c3..f2d43052eb 100644 --- a/examples/app/cdk/function-with-logstream-construct.ts +++ b/examples/app/cdk/function-with-logstream-construct.ts @@ -43,7 +43,7 @@ type BindTableProps = { * * The function is created with the following properties: * - `handler` set to `handler` - * - `runtime` set to `Runtime.NODEJS_20_X` + * - `runtime` set to `Runtime.NODEJS_22_X` * - `tracing` set to `Tracing.ACTIVE` * - `architecture` set to `Architecture.ARM_64` * - `timeout` set to `Duration.seconds(30)` @@ -60,7 +60,7 @@ export class FunctionWithLogGroup extends NodejsFunction { super(scope, id, { ...props, handler: 'handler', - runtime: Runtime.NODEJS_20_X, + runtime: Runtime.NODEJS_22_X, tracing: Tracing.ACTIVE, architecture: Architecture.ARM_64, timeout: Duration.seconds(30), diff --git a/examples/snippets/commons/testingMetadata.ts b/examples/snippets/commons/testingMetadata.ts index 5ca5ed5324..e13149d740 100644 --- a/examples/snippets/commons/testingMetadata.ts +++ b/examples/snippets/commons/testingMetadata.ts @@ -25,7 +25,7 @@ describe('function: getMetadata', async () => { vi.stubEnv('AWS_LAMBDA_METADATA_API', '127.0.0.1:1234'); vi.stubEnv('AWS_LAMBDA_METADATA_TOKEN', 'test-token'); - const payload = { runtime: 'nodejs20.x' }; + const payload = { runtime: 'nodejs22.x' }; fetchMock.mockResolvedValue({ ok: true, json: vi.fn().mockResolvedValue(payload), diff --git a/examples/snippets/idempotency/templates/tableCdk.ts b/examples/snippets/idempotency/templates/tableCdk.ts index 8b2de4f038..a653ccae10 100644 --- a/examples/snippets/idempotency/templates/tableCdk.ts +++ b/examples/snippets/idempotency/templates/tableCdk.ts @@ -18,7 +18,7 @@ export class IdempotencyStack extends Stack { }); const fnHandler = new NodejsFunction(this, 'helloWorldFunction', { - runtime: Runtime.NODEJS_20_X, + runtime: Runtime.NODEJS_22_X, handler: 'handler', entry: 'src/index.ts', environment: { diff --git a/examples/snippets/idempotency/templates/tableTerraform.tf b/examples/snippets/idempotency/templates/tableTerraform.tf index bedd2f6b5e..79d619eaae 100644 --- a/examples/snippets/idempotency/templates/tableTerraform.tf +++ b/examples/snippets/idempotency/templates/tableTerraform.tf @@ -28,7 +28,7 @@ resource "aws_dynamodb_table" "IdempotencyTable" { resource "aws_lambda_function" "IdempotencyFunction" { function_name = "IdempotencyFunction" role = aws_iam_role.IdempotencyFunctionRole.arn - runtime = "nodejs20.x" + runtime = "nodejs22.x" handler = "index.handler" filename = "lambda.zip" } diff --git a/layers/package.json b/layers/package.json index d261102c99..678c777f2b 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:nodejs20x": "echo 'Not Implemented'", "test:e2e:nodejs22x": "echo 'Not Implemented'", "test:e2e:nodejs24x": "echo 'Not Implemented'", "test:e2e": "vitest --run tests/e2e", diff --git a/layers/src/canary-stack.ts b/layers/src/canary-stack.ts index 7bb86a3934..fdf63a9be1 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_20_X, + runtime: Runtime.NODEJS_22_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 024dc81b96..054f66214c 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_20_X, - Runtime.NODEJS_22_X, - Runtime.NODEJS_24_X, - ], + compatibleRuntimes: [Runtime.NODEJS_22_X, Runtime.NODEJS_24_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 7a8cadb4c4..554f571829 100644 --- a/layers/tests/unit/layer-publisher.test.ts +++ b/layers/tests/unit/layer-publisher.test.ts @@ -20,7 +20,7 @@ describe('Class: LayerPublisherStack', () => { // Assess template.resourceCountIs('AWS::Lambda::LayerVersion', 1); template.hasResourceProperties('AWS::Lambda::LayerVersion', { - CompatibleRuntimes: ['nodejs20.x', 'nodejs22.x', 'nodejs24.x'], + CompatibleRuntimes: ['nodejs22.x', 'nodejs24.x'], LicenseInfo: 'MIT-0', /* CompatibleArchitectures: [ 'x86_64', diff --git a/package-lock.json b/package-lock.json index df88d93786..cf3024e5bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "vitest": "^4.1.2" }, "engines": { - "node": ">=20" + "node": ">=22" } }, "examples/app": { diff --git a/package.json b/package.json index 8c3e4806ef..3c345a489b 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,6 @@ "*.md": "markdownlint-cli2 --fix" }, "engines": { - "node": ">=20" + "node": ">=22" } } diff --git a/packages/batch/package.json b/packages/batch/package.json index 4155a9c654..c2884abc10 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/commons/src/awsSdkUtils.ts b/packages/commons/src/awsSdkUtils.ts index 818ceea95e..06988155d8 100644 --- a/packages/commons/src/awsSdkUtils.ts +++ b/packages/commons/src/awsSdkUtils.ts @@ -38,7 +38,7 @@ const isSdkClient = (client: unknown): client is SdkClient => * The middleware will append the provided feature name and the current version of * the Powertools for AWS Lambda library to the user agent string. * - * @example "PT/Tracer/2.1.0 PTEnv/nodejs20x" + * @example "PT/Tracer/2.1.0 PTEnv/nodejs22x" * * @param feature The feature name to be added to the user agent * diff --git a/packages/event-handler/package.json b/packages/event-handler/package.json index 94ca650733..c68bd3b785 100644 --- a/packages/event-handler/package.json +++ b/packages/event-handler/package.json @@ -14,7 +14,6 @@ "test:unit": "vitest --run tests/unit", "test:unit:coverage": "vitest --run tests/unit --coverage.enabled --coverage.thresholds.100 --coverage.include='src/**'", "test:unit:types": "vitest --typecheck --run tests/types", - "test:e2e:nodejs20x": "RUNTIME=nodejs20x vitest run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest run tests/e2e", "test:e2e": "vitest run tests/e2e", diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index a264c3c7b7..e01e71a869 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/idempotency/tests/e2e/durableIdempotent.test.ts b/packages/idempotency/tests/e2e/durableIdempotent.test.ts index b366b01e64..ff6372842f 100644 --- a/packages/idempotency/tests/e2e/durableIdempotent.test.ts +++ b/packages/idempotency/tests/e2e/durableIdempotent.test.ts @@ -1,7 +1,6 @@ import { createHash } from 'node:crypto'; import { join } from 'node:path'; import { - getRuntimeKey, invokeFunction, TestStack, } from '@aws-lambda-powertools/testing-utils'; @@ -12,85 +11,82 @@ import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { IdempotencyTestNodejsFunctionAndDynamoTable } from '../helpers/resources.js'; import { RESOURCE_NAME_PREFIX } from './constants.js'; -describe.skipIf(getRuntimeKey() === 'nodejs20x')( - 'Idempotency E2E tests, durable functions', - () => { - const testStack = new TestStack({ - stackNameProps: { - stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'durable', - }, - }); +describe('Idempotency E2E tests, durable functions', () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'durable', + }, + }); - // Location of the lambda function code - const lambdaFunctionCodeFilePath = join( - __dirname, - 'durableIdempotent.FunctionCode.ts' - ); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'durableIdempotent.FunctionCode.ts' + ); - let functionNameDurable: string; - let tableNameDurable: string; - new IdempotencyTestNodejsFunctionAndDynamoTable( - testStack, - { - function: { - entry: lambdaFunctionCodeFilePath, - handler: 'handlerDurable', - durableConfig: { - executionTimeout: Duration.minutes(5), - retentionPeriod: Duration.days(1), - }, + let functionNameDurable: string; + let tableNameDurable: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerDurable', + durableConfig: { + executionTimeout: Duration.minutes(5), + retentionPeriod: Duration.days(1), }, }, - { - nameSuffix: 'durable', - } - ); - - const ddb = new DynamoDBClient({}); + }, + { + nameSuffix: 'durable', + } + ); - beforeAll(async () => { - // Deploy the stack - await testStack.deploy(); + const ddb = new DynamoDBClient({}); - // Get the actual function names from the stack outputs - functionNameDurable = testStack.findAndGetStackOutputValue('durableFn'); - tableNameDurable = testStack.findAndGetStackOutputValue('durableTable'); - }); + beforeAll(async () => { + // Deploy the stack + await testStack.deploy(); - it('calls an idempotent durable function and always returns the same result when called multiple times', async () => { - // Prepare - const payload = { - foo: 'bar', - }; - const payloadHash = createHash('md5') - .update(JSON.stringify(payload)) - .digest('base64'); + // Get the actual function names from the stack outputs + functionNameDurable = testStack.findAndGetStackOutputValue('durableFn'); + tableNameDurable = testStack.findAndGetStackOutputValue('durableTable'); + }); - // Act - await invokeFunction({ - functionName: `${functionNameDurable}:$LATEST`, - times: 2, - invocationMode: 'SEQUENTIAL', - payload, - }); + it('calls an idempotent durable function and always returns the same result when called multiple times', async () => { + // Prepare + const payload = { + foo: 'bar', + }; + const payloadHash = createHash('md5') + .update(JSON.stringify(payload)) + .digest('base64'); - // Assess - const idempotencyRecords = await ddb.send( - new ScanCommand({ - TableName: tableNameDurable, - }) - ); - expect(idempotencyRecords.Items?.length).toEqual(1); - expect(idempotencyRecords.Items?.[0].id).toEqual( - `${functionNameDurable}#${payloadHash}` - ); + // Act + await invokeFunction({ + functionName: `${functionNameDurable}:$LATEST`, + times: 2, + invocationMode: 'SEQUENTIAL', + payload, }); - afterAll(async () => { - if (!process.env.DISABLE_TEARDOWN) { - await testStack.destroy(); - } - }); - } -); + // Assess + const idempotencyRecords = await ddb.send( + new ScanCommand({ + TableName: tableNameDurable, + }) + ); + expect(idempotencyRecords.Items?.length).toEqual(1); + expect(idempotencyRecords.Items?.[0].id).toEqual( + `${functionNameDurable}#${payloadHash}` + ); + }); + + afterAll(async () => { + if (!process.env.DISABLE_TEARDOWN) { + await testStack.destroy(); + } + }); +}); diff --git a/packages/idempotency/tests/helpers/populateEnvironmentVariables.ts b/packages/idempotency/tests/helpers/populateEnvironmentVariables.ts index 9dc602e5f0..8098140b8c 100644 --- a/packages/idempotency/tests/helpers/populateEnvironmentVariables.ts +++ b/packages/idempotency/tests/helpers/populateEnvironmentVariables.ts @@ -1,7 +1,7 @@ // Reserved variables process.env._X_AMZN_TRACE_ID = '1-abcdef12-3456abcdef123456abcdef12'; process.env.AWS_LAMBDA_FUNCTION_NAME = 'my-lambda-function'; -process.env.AWS_EXECUTION_ENV = 'nodejs20.x'; +process.env.AWS_EXECUTION_ENV = 'nodejs22.x'; process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE = '128'; if ( process.env.AWS_REGION === undefined && diff --git a/packages/kafka/package.json b/packages/kafka/package.json index 6a8e751074..b4dc32146d 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:nodejs20x": "echo \"Not implemented\"", "test:e2e:nodejs22x": "echo \"Not implemented\"", "test:e2e:nodejs24x": "echo \"Not implemented\"", "test:e2e": "echo \"Not implemented\"", diff --git a/packages/logger/package.json b/packages/logger/package.json index 074e0d5e92..66b4019d28 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/metrics/package.json b/packages/metrics/package.json index b2f745803c..c36beeef18 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 2f675bd720..f2092509aa 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/parser/package.json b/packages/parser/package.json index 5349a2affd..3dd18b89d2 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:nodejs20x": "echo 'Not implemented'", "test:e2e:nodejs22x": "echo 'Not implemented'", "test:e2e:nodejs24x": "echo 'Not implemented'", "test:e2e": "echo 'Not implemented'", diff --git a/packages/testing/src/constants.ts b/packages/testing/src/constants.ts index d0a3e06878..83075eccb1 100644 --- a/packages/testing/src/constants.ts +++ b/packages/testing/src/constants.ts @@ -9,7 +9,6 @@ const defaultRuntime = 'nodejs24x'; * The AWS Lambda runtimes that are supported by the project. */ const TEST_RUNTIMES = { - nodejs20x: Runtime.NODEJS_20_X, nodejs22x: Runtime.NODEJS_22_X, [defaultRuntime]: Runtime.NODEJS_24_X, } as const; diff --git a/packages/testing/src/setupEnv.ts b/packages/testing/src/setupEnv.ts index cf5950ce2b..18fb477200 100644 --- a/packages/testing/src/setupEnv.ts +++ b/packages/testing/src/setupEnv.ts @@ -366,7 +366,7 @@ declare module 'vitest' { // Set up environment variables for testing process.env._X_AMZN_TRACE_ID = '1-abcdef12-3456abcdef123456abcdef12'; process.env.AWS_LAMBDA_FUNCTION_NAME = 'my-lambda-function'; -process.env.AWS_EXECUTION_ENV = 'nodejs20.x'; +process.env.AWS_EXECUTION_ENV = 'nodejs22.x'; process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE = '128'; if ( process.env.AWS_REGION === undefined && diff --git a/packages/tracer/package.json b/packages/tracer/package.json index b4a77b9fcc..e1659dcdda 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:nodejs20x": "RUNTIME=nodejs20x vitest --run tests/e2e", "test:e2e:nodejs22x": "RUNTIME=nodejs22x vitest --run tests/e2e", "test:e2e:nodejs24x": "RUNTIME=nodejs24x vitest --run tests/e2e", "test:e2e": "vitest --run tests/e2e", diff --git a/packages/tracer/tests/unit/Tracer.test.ts b/packages/tracer/tests/unit/Tracer.test.ts index 8e3ed4041f..5a0a92af54 100644 --- a/packages/tracer/tests/unit/Tracer.test.ts +++ b/packages/tracer/tests/unit/Tracer.test.ts @@ -218,7 +218,7 @@ describe('Class: Tracer', () => { it('leaves tracing enabled when AWS_EXECUTION_ENV environment variable is set', () => { // Prepare - process.env.AWS_EXECUTION_ENV = 'nodejs20.x'; + process.env.AWS_EXECUTION_ENV = 'nodejs22.x'; // Act const tracer = new Tracer(); diff --git a/packages/validation/package.json b/packages/validation/package.json index 5b87ab0dcc..f0a219401a 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:nodejs20x": "echo \"Not implemented\"", "test:e2e:nodejs22x": "echo \"Not implemented\"", "test:e2e:nodejs24x": "echo \"Not implemented\"", "test:e2e": "echo \"Not implemented\"", diff --git a/tsconfig.json b/tsconfig.json index 429f4f17ff..ed29f7e5f4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "incremental": true, "composite": true, - "target": "ES2023", // Node.js 20 + "target": "ES2024", // Node.js 22 "experimentalDecorators": true, "module": "NodeNext", "moduleResolution": "NodeNext",