diff --git a/docs/core/logger.md b/docs/core/logger.md index dae36c9a37..6dbdf7370a 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -111,7 +111,7 @@ This functionality will include the following keys in your structured logs: === "Middy Middleware" !!! tip "A note about Middy" - We guarantee support only for Middy.js `v4.x`, that you can install it by running `npm i @middy/core@~4`. + We guarantee support for both Middy.js `v4.x` & `v5.x` with the latter being available only if you are using ES modules. Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="2 14" diff --git a/docs/core/metrics.md b/docs/core/metrics.md index 5ac28ea501..2e9b63b3bc 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -199,7 +199,7 @@ You can add default dimensions to your metrics by passing them as parameters in === "Middy middleware" !!! tip "A note about Middy" - Currently we support up to Middy `v4.x` that you can install it by running `npm i @middy/core@~4`. + We guarantee support for both Middy.js `v4.x` & `v5.x` with the latter being available only if you are using ES modules. Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="24-26" diff --git a/docs/core/tracer.md b/docs/core/tracer.md index a03030bc90..9b28f10b71 100644 --- a/docs/core/tracer.md +++ b/docs/core/tracer.md @@ -154,7 +154,7 @@ You can quickly start by importing the `Tracer` class, initialize it outside the === "Middy Middleware" !!! tip "A note about Middy" - We guarantee support only for Middy.js `v4.x`, that you can install it by running `npm i @middy/core@~4`. + We guarantee support for both Middy.js `v4.x` & `v5.x` with the latter being available only if you are using ES modules. Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="2 15 17" diff --git a/docs/index.md b/docs/index.md index 64a9537f1d..4d9ca33bfb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -299,7 +299,7 @@ aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105 Many of the utilities provided by Powertools for AWS Lambda (TypeScript) can be used with different programming paradigms: -- **Middy** middleware. It is the best choice if your existing code base relies on the [Middy 4.x](https://middy.js.org/docs/) middleware engine. Powertools for AWS Lambda (TypeScript) offers compatible Middy middleware to make this integration seamless. +- **Middy** middleware. It is the best choice if your existing code base relies on the [Middy.js](https://middy.js.org/docs/) middleware engine. Powertools for AWS Lambda (TypeScript) offers compatible Middy middleware to make this integration seamless. - **Method decorator**. Use [TypeScript method decorators](https://www.typescriptlang.org/docs/handbook/decorators.html#method-decorators) if you prefer writing your business logic using [TypeScript Classes](https://www.typescriptlang.org/docs/handbook/classes.html). If you aren’t using Classes, this requires the most significant refactoring. - **Manually**. It provides the most granular control. It’s the most verbose approach, with the added benefit of no additional dependency and no refactoring to TypeScript Classes. diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 9053c0424d..e28d5370fc 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -189,7 +189,7 @@ The configuration options for the `@idempotent` decorator are the same as the on ### MakeHandlerIdempotent Middy middleware !!! tip "A note about Middy" - Currently we support Middy up to `v4.x` that you can install it by running `npm i @middy/core@~4`. + We guarantee support for both Middy.js `v4.x` & `v5.x` with the latter being available only if you are using ES modules. Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. If you are using [Middy.js](https://middy.js.org){target="_blank"} as your middleware engine, you can use the `makeHandlerIdempotent` middleware to make your Lambda handler idempotent. diff --git a/package-lock.json b/package-lock.json index a61a56472a..c20405c5d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,6 @@ "examples/app" ], "devDependencies": { - "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", "@types/node": "^20.14.9", @@ -42,6 +41,8 @@ "lerna": "8.1.2", "lint-staged": "^15.2.7", "markdownlint-cli2": "^0.13.0", + "middy4": "npm:@middy/core@^4.7.0", + "middy5": "npm:@middy/core@^5.4.3", "prettier": "^3.3.2", "ts-jest": "^29.1.5", "ts-node": "^10.9.2", @@ -1867,6 +1868,18 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@datastream/core": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@datastream/core/-/core-0.0.36.tgz", + "integrity": "sha512-qec5ckpnhrLL04sFkN4lOZVyYCLSUYjxmODEaEmO7qNzDwXF9laX6brgD2bd2+vXostv63yQ29yhsBNZQU6QsQ==", + "dev": true, + "dependencies": { + "cloneable-readable": "3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", @@ -5361,6 +5374,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -6906,6 +6931,64 @@ "node": ">=0.10.0" } }, + "node_modules/cloneable-readable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-3.0.0.tgz", + "integrity": "sha512-Lkfd9IRx1nfiBr7UHNxJSl/x7DOeUfYmxzCkxYJC2tyc/9vKgV75msgLGurGQsak/NvJDHMWcshzEXRlxfvhqg==", + "dev": true, + "dependencies": { + "readable-stream": "^4.0.0" + } + }, + "node_modules/cloneable-readable/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/cloneable-readable/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/cls-hooked": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", @@ -8317,6 +8400,15 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -12450,6 +12542,37 @@ "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", + "resolved": "https://registry.npmjs.org/@middy/core/-/core-5.4.3.tgz", + "integrity": "sha512-EmNwy6UWzVh/JFLb5CDoU0DWBc59YBCgUu8/JuUT9TYQwVuUry6xm47XNJAvHEhBJ/LU0eI3Z75fY49Oer6zrw==", + "dev": true, + "dependencies": { + "@datastream/core": "0.0.36" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/willfarrell" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -14606,6 +14729,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -18095,7 +18227,7 @@ "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", "@aws-sdk/lib-dynamodb": ">=3.x", - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@aws-sdk/client-dynamodb": { @@ -18130,7 +18262,7 @@ "@types/lodash.merge": "^4.6.9" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { @@ -18152,7 +18284,7 @@ "promise-retry": "^2.0.1" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { @@ -18184,7 +18316,7 @@ "@aws-sdk/client-secrets-manager": ">=3.x", "@aws-sdk/client-ssm": ">=3.x", "@aws-sdk/util-dynamodb": ">=3.x", - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@aws-sdk/client-appconfigdata": { @@ -18248,7 +18380,7 @@ "promise-retry": "^2.0.1" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/package.json b/package.json index a1297ce903..08211ed8bc 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", "@types/node": "^20.14.9", @@ -67,6 +66,8 @@ "lerna": "8.1.2", "lint-staged": "^15.2.7", "markdownlint-cli2": "^0.13.0", + "middy4": "npm:@middy/core@^4.7.0", + "middy5": "npm:@middy/core@^5.4.3", "prettier": "^3.3.2", "ts-jest": "^29.1.5", "ts-node": "^10.9.2", diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 0761d99175..5ba0b0e198 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -102,7 +102,7 @@ "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", "@aws-sdk/lib-dynamodb": ">=3.x", - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@aws-sdk/client-dynamodb": { diff --git a/packages/logger/package.json b/packages/logger/package.json index b70bc92b9c..8793f5ddd8 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -66,7 +66,7 @@ "@types/lodash.merge": "^4.6.9" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts b/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts index 01c3b11804..cbe5e259f2 100644 --- a/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts +++ b/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts @@ -2,7 +2,7 @@ import { Logger } from '../../src/index.js'; import { injectLambdaContext } from '../../src/middleware/middy.js'; import type { Context, APIGatewayAuthorizerResult } from 'aws-lambda'; import type { TestEvent, TestOutput } from '../helpers/types.js'; -import middy from '@middy/core'; +import middy from 'middy5'; const PERSISTENT_KEY = process.env.PERSISTENT_KEY || 'persistentKey'; const PERSISTENT_VALUE = process.env.PERSISTENT_VALUE || 'persistentValue'; diff --git a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts index 2d10943d61..140b20f6f8 100644 --- a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts +++ b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts @@ -2,7 +2,7 @@ import { Logger } from '../../src/index.js'; import { injectLambdaContext } from '../../src/middleware/middy.js'; import type { TestEvent, TestOutput } from '../helpers/types.js'; import type { Context } from 'aws-lambda'; -import middy from '@middy/core'; +import middy from 'middy4'; const logger = new Logger(); diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 8db8751915..f0e8bed27d 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -67,7 +67,7 @@ "promise-retry": "^2.0.1" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/packages/parameters/package.json b/packages/parameters/package.json index aa40bf60aa..d9f7f50be9 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -172,7 +172,7 @@ "@aws-sdk/client-secrets-manager": ">=3.x", "@aws-sdk/client-ssm": ">=3.x", "@aws-sdk/util-dynamodb": ">=3.x", - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/packages/parser/package.json b/packages/parser/package.json index fba2e1e130..98ba2ded46 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -117,7 +117,16 @@ "nodejs" ], "peerDependencies": { - "zod": ">=3.x" + "zod": ">=3.x", + "@middy/core": "4.x || 5.x" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + }, + "@middy/core": { + "optional": true + } }, "devDependencies": { "@anatine/zod-mock": "^3.13.3", diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 94aa3cf1dc..560624260d 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -35,7 +35,7 @@ "promise-retry": "^2.0.1" }, "peerDependencies": { - "@middy/core": ">=3.x" + "@middy/core": "4.x || 5.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts index 61e5a9198c..069831e8c8 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts @@ -1,4 +1,4 @@ -import middy from '@middy/core'; +import middy from 'middy5'; import { Tracer } from '../../src/index.js'; import { captureLambdaHandler } from '../../src/middleware/middy.js'; import type { Context } from 'aws-lambda';