From f9fb4e37cde4dab3f7e803ca12fd90346b81240a Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 14 Jan 2025 14:25:20 +0100 Subject: [PATCH 01/31] chore(deps): bump the aws-cdk group (#3472) --- examples/app/package.json | 4 +- layers/package.json | 4 +- package-lock.json | 8760 ++++++++++++++++++--------------- packages/testing/package.json | 4 +- 4 files changed, 4738 insertions(+), 4034 deletions(-) diff --git a/examples/app/package.json b/examples/app/package.json index 4e6a8ce0dd..1050967533 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -30,8 +30,7 @@ "devDependencies": { "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk": "^2.174.1", - "aws-cdk-lib": "^2.174.1", + "aws-cdk-lib": "^2.175.1", "constructs": "^10.4.2", "source-map-support": "^0.5.21", "tsx": "^4.19.2", @@ -50,6 +49,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", + "aws-cdk": "^2.175.1", "constructs": "^10.4.2", "esbuild": "^0.24.2", "typescript": "^5.7.2" diff --git a/layers/package.json b/layers/package.json index 4011e8e1fa..ab115aaec3 100644 --- a/layers/package.json +++ b/layers/package.json @@ -40,8 +40,8 @@ "source-map-support": "^0.5.21" }, "dependencies": { - "aws-cdk": "^2.174.1", - "aws-cdk-lib": "^2.174.1", + "aws-cdk": "^2.175.1", + "aws-cdk-lib": "^2.175.1", "esbuild": "^0.24.2", "tsx": "^4.19.2" } diff --git a/package-lock.json b/package-lock.json index 0912686d69..2c617403b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,6 +62,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", + "aws-cdk": "^2.175.1", "constructs": "^10.4.2", "esbuild": "^0.24.2", "typescript": "^5.7.2" @@ -69,8 +70,7 @@ "devDependencies": { "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk": "^2.174.1", - "aws-cdk-lib": "^2.174.1", + "aws-cdk-lib": "^2.175.1", "constructs": "^10.4.2", "source-map-support": "^0.5.21", "tsx": "^4.19.2", @@ -78,388 +78,1076 @@ "vitest": "^2.0.5" } }, - "examples/app/node_modules/aws-cdk": { - "version": "2.161.1", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.161.1.tgz", - "integrity": "sha512-aMQsiCv8VxR8uyZ7EX8sWt46q/rOHeIFiIJ6pBvzKzc1nWaoI149rSxykIGGTpt0puin0L5SwYl6f6Sp3zohzg==", + "examples/app/node_modules/aws-cdk-lib": { + "version": "2.175.1", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", + "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], "dev": true, - "bin": { - "cdk": "bin/cdk" + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.2.0", + "ignore": "^5.3.2", + "jsonschema": "^1.4.1", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.6.3", + "table": "^6.8.2", + "yaml": "1.10.2" }, "engines": { "node": ">= 14.15.0" }, - "optionalDependencies": { - "fsevents": "2.3.2" + "peerDependencies": { + "constructs": "^10.0.0" } }, - "examples/snippets": { - "name": "code-snippets", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/parser": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", - "@middy/core": "^4.7.0", - "aws-sdk": "^2.1692.0", - "aws-sdk-client-mock": "^4.1.0", - "hashi-vault-js": "^0.4.16", - "zod": "^3.24.1" - } + "examples/app/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" }, - "layers": { - "version": "2.13.0", - "license": "MIT-0", + "examples/app/node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "aws-cdk": "^2.174.1", - "aws-cdk-lib": "^2.174.1", - "esbuild": "^0.24.2", - "tsx": "^4.19.2" - }, - "bin": { - "layer": "bin/layers.js" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../packages/testing", - "source-map-support": "^0.5.21" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "layers/node_modules/aws-cdk": { - "version": "2.161.1", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.161.1.tgz", - "integrity": "sha512-aMQsiCv8VxR8uyZ7EX8sWt46q/rOHeIFiIJ6pBvzKzc1nWaoI149rSxykIGGTpt0puin0L5SwYl6f6Sp3zohzg==", - "bin": { - "cdk": "bin/cdk" - }, + "examples/app/node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 14.15.0" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=8" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "examples/app/node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@anatine/zod-mock": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@anatine/zod-mock/-/zod-mock-3.13.4.tgz", - "integrity": "sha512-yO/KeuyYsEDCTcQ+7CiRuY3dnafMHIZUMok6Ci7aERRCTQ+/XmsiPk/RnMx5wlLmWBTmX9kw+PavbMsjM+sAJA==", + "examples/app/node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", "dev": true, - "dependencies": { - "randexp": "^0.5.3" - }, - "peerDependencies": { - "@faker-js/faker": "^7.0.0 || ^8.0.0", - "zod": "^3.21.4" + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.209", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.209.tgz", - "integrity": "sha512-tL7aBDzx/QBuZoQso9OST2BMCoev89v01iQZicOKlR0J6vWQLPiqZfn4vd9nissFbM4X+xIwi3UKasPBTQL0WQ==" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", - "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", - "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" + "examples/app/node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "39.1.38", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.1.38.tgz", - "integrity": "sha512-T5nc7+y3pmfXD/LNft1mA8E8Q6IdsE0mta5nC1FZu5sQd+LUo9xGd0BwdzJpR54cgTW/bNcIs5ARoc6kWoRJaA==", - "bundleDependencies": [ - "jsonschema", - "semver" - ], + "examples/app/node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "jsonschema": "^1.4.1", - "semver": "^7.6.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { - "version": "1.4.1", + "examples/app/node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "dev": true, "inBundle": true, - "license": "MIT", + "license": "(MIT OR GPL-3.0-or-later)", "engines": { - "node": "*" + "node": ">= 0.8.0" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { - "version": "7.6.3", + "examples/app/node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "examples/app/node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.14" } }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } + "examples/app/node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, + "examples/app/node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">= 4" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "examples/app/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": "*" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "examples/app/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" + "mime-db": "1.52.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.6" } }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "examples/app/node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16.0.0" + "node": "*" } }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dependencies": { - "tslib": "^2.6.2" + "examples/app/node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" + "examples/app/node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" + "examples/app/node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "examples/app/node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "examples/app/node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/@aws-lambda-powertools/batch": { - "resolved": "packages/batch", - "link": true - }, - "node_modules/@aws-lambda-powertools/commons": { - "resolved": "packages/commons", - "link": true - }, - "node_modules/@aws-lambda-powertools/event-handler": { - "resolved": "packages/event-handler", - "link": true - }, - "node_modules/@aws-lambda-powertools/idempotency": { - "resolved": "packages/idempotency", - "link": true - }, - "node_modules/@aws-lambda-powertools/jmespath": { - "resolved": "packages/jmespath", - "link": true - }, - "node_modules/@aws-lambda-powertools/logger": { - "resolved": "packages/logger", - "link": true - }, - "node_modules/@aws-lambda-powertools/metrics": { - "resolved": "packages/metrics", - "link": true - }, - "node_modules/@aws-lambda-powertools/parameters": { - "resolved": "packages/parameters", - "link": true - }, - "node_modules/@aws-lambda-powertools/parser": { - "resolved": "packages/parser", - "link": true - }, - "node_modules/@aws-lambda-powertools/testing-utils": { - "resolved": "packages/testing", - "link": true - }, - "node_modules/@aws-lambda-powertools/tracer": { - "resolved": "packages/tracer", - "link": true - }, - "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.723.0.tgz", - "integrity": "sha512-mXEZxU4b7kf8FLr5O9GForZX9vE1/OPWGhfTuQUMhRoAoEwkjqbsMaS7n9Kk9ubCyrzJFxXfKZSC3IjyaYIimA==", + "examples/app/node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "examples/app/node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.2", "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", "dependencies": { - "tslib": "^2.6.2" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=10.0.0" } }, - "node_modules/@aws-sdk/client-cloudwatch": { + "examples/app/node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "examples/app/node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "examples/snippets": { + "name": "code-snippets", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/batch": "^2.13.0", + "@aws-lambda-powertools/idempotency": "^2.13.0", + "@aws-lambda-powertools/jmespath": "^2.13.0", + "@aws-lambda-powertools/logger": "^2.13.0", + "@aws-lambda-powertools/metrics": "^2.13.0", + "@aws-lambda-powertools/parameters": "^2.13.0", + "@aws-lambda-powertools/parser": "^2.13.0", + "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-sdk/client-appconfigdata": "^3.723.0", + "@aws-sdk/client-dynamodb": "^3.724.0", + "@aws-sdk/client-secrets-manager": "^3.723.0", + "@aws-sdk/client-ssm": "^3.723.0", + "@aws-sdk/util-dynamodb": "^3.724.0", + "@middy/core": "^4.7.0", + "aws-sdk": "^2.1692.0", + "aws-sdk-client-mock": "^4.1.0", + "hashi-vault-js": "^0.4.16", + "zod": "^3.24.1" + } + }, + "layers": { + "version": "2.13.0", + "license": "MIT-0", + "dependencies": { + "aws-cdk": "^2.175.1", + "aws-cdk-lib": "^2.175.1", + "esbuild": "^0.24.2", + "tsx": "^4.19.2" + }, + "bin": { + "layer": "bin/layers.js" + }, + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../packages/testing", + "source-map-support": "^0.5.21" + } + }, + "layers/node_modules/aws-cdk-lib": { + "version": "2.175.1", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", + "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.2.0", + "ignore": "^5.3.2", + "jsonschema": "^1.4.1", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.6.3", + "table": "^6.8.2", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "constructs": "^10.0.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "layers/node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.0.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "layers/node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "layers/node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "inBundle": true, + "license": "MIT" + }, + "layers/node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "inBundle": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.2", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "layers/node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@anatine/zod-mock": { + "version": "3.13.4", + "resolved": "https://registry.npmjs.org/@anatine/zod-mock/-/zod-mock-3.13.4.tgz", + "integrity": "sha512-yO/KeuyYsEDCTcQ+7CiRuY3dnafMHIZUMok6Ci7aERRCTQ+/XmsiPk/RnMx5wlLmWBTmX9kw+PavbMsjM+sAJA==", + "dev": true, + "dependencies": { + "randexp": "^0.5.3" + }, + "peerDependencies": { + "@faker-js/faker": "^7.0.0 || ^8.0.0", + "zod": "^3.21.4" + } + }, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.209", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.209.tgz", + "integrity": "sha512-tL7aBDzx/QBuZoQso9OST2BMCoev89v01iQZicOKlR0J6vWQLPiqZfn4vd9nissFbM4X+xIwi3UKasPBTQL0WQ==" + }, + "node_modules/@aws-cdk/asset-kubectl-v20": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", + "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "39.1.38", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.1.38.tgz", + "integrity": "sha512-T5nc7+y3pmfXD/LNft1mA8E8Q6IdsE0mta5nC1FZu5sQd+LUo9xGd0BwdzJpR54cgTW/bNcIs5ARoc6kWoRJaA==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dependencies": { + "jsonschema": "^1.4.1", + "semver": "^7.6.3" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-lambda-powertools/batch": { + "resolved": "packages/batch", + "link": true + }, + "node_modules/@aws-lambda-powertools/commons": { + "resolved": "packages/commons", + "link": true + }, + "node_modules/@aws-lambda-powertools/event-handler": { + "resolved": "packages/event-handler", + "link": true + }, + "node_modules/@aws-lambda-powertools/idempotency": { + "resolved": "packages/idempotency", + "link": true + }, + "node_modules/@aws-lambda-powertools/jmespath": { + "resolved": "packages/jmespath", + "link": true + }, + "node_modules/@aws-lambda-powertools/logger": { + "resolved": "packages/logger", + "link": true + }, + "node_modules/@aws-lambda-powertools/metrics": { + "resolved": "packages/metrics", + "link": true + }, + "node_modules/@aws-lambda-powertools/parameters": { + "resolved": "packages/parameters", + "link": true + }, + "node_modules/@aws-lambda-powertools/parser": { + "resolved": "packages/parser", + "link": true + }, + "node_modules/@aws-lambda-powertools/testing-utils": { + "resolved": "packages/testing", + "link": true + }, + "node_modules/@aws-lambda-powertools/tracer": { + "resolved": "packages/tracer", + "link": true + }, + "node_modules/@aws-sdk/client-appconfigdata": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.723.0.tgz", + "integrity": "sha512-mXEZxU4b7kf8FLr5O9GForZX9vE1/OPWGhfTuQUMhRoAoEwkjqbsMaS7n9Kk9ubCyrzJFxXfKZSC3IjyaYIimA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.723.0", + "@aws-sdk/client-sts": "3.723.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-node": "3.723.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.723.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.723.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.723.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-appconfigdata/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch": { "version": "3.723.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.723.0.tgz", "integrity": "sha512-UQ+112RlVzNpuNDb+aQibLIZc+MdPrPMP+oYIT6iVEd6VCRlWLM7W5fH2mPic3ZwpZQ/6NV90GcpUwoSN5JxQQ==", @@ -1954,1709 +2642,1276 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ - "s390x" + "ppc64" ], "optional": true, "os": [ - "linux" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/linux-x64": { + "node_modules/@esbuild/android-arm": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ - "x64" + "arm" ], "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/netbsd-arm64": { + "node_modules/@esbuild/android-arm64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], "optional": true, "os": [ - "netbsd" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/netbsd-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], "optional": true, "os": [ - "netbsd" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/openbsd-arm64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/openbsd-x64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild/freebsd-arm64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "sunos" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ - "arm64" + "x64" ], "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/linux-arm": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ - "ia32" + "arm" ], "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/linux-arm64": { "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=18" } }, - "node_modules/@faker-js/faker": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.2.tgz", - "integrity": "sha512-nI/FP30ZGXb+UaR7yXawVTH40NVKXPIx0tA3GKjkKLjorqBoMAeq4iSEacl8mJmpVhOCDa0vYHwYDmOOcFMrYw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], - "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" - } - }, - "node_modules/@gerrit0/mini-shiki": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.26.1.tgz", - "integrity": "sha512-gHFUvv9f1fU2Piou/5Y7Sx5moYxcERbC7CXc6rkDLQTUBg5Dgg9L4u29/nHqfoQ3Y9R0h0BcOhd14uOEZIBP7Q==", - "dev": true, - "dependencies": { - "@shikijs/engine-oniguruma": "^1.26.1", - "@shikijs/types": "^1.26.1", - "@shikijs/vscode-textmate": "^10.0.1" - } - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@lerna/create": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.2.tgz", - "integrity": "sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ==", - "dev": true, - "dependencies": { - "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", - "columnify": "1.6.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "execa": "5.0.0", - "fs-extra": "^11.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "5.0.0", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.0", - "libnpmpublish": "7.3.0", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "^17.0.5", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.4", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "^9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.1.11", - "temp-dir": "1.0.0", - "upath": "2.0.1", - "uuid": "^9.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "5.0.0", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.0.0" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@lerna/create/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "node_modules/@faker-js/faker": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.2.tgz", + "integrity": "sha512-nI/FP30ZGXb+UaR7yXawVTH40NVKXPIx0tA3GKjkKLjorqBoMAeq4iSEacl8mJmpVhOCDa0vYHwYDmOOcFMrYw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], "engines": { - "node": ">=8" + "node": ">=18.0.0", + "npm": ">=9.0.0" } }, - "node_modules/@lerna/create/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@gerrit0/mini-shiki": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.26.1.tgz", + "integrity": "sha512-gHFUvv9f1fU2Piou/5Y7Sx5moYxcERbC7CXc6rkDLQTUBg5Dgg9L4u29/nHqfoQ3Y9R0h0BcOhd14uOEZIBP7Q==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@shikijs/engine-oniguruma": "^1.26.1", + "@shikijs/types": "^1.26.1", + "@shikijs/vscode-textmate": "^10.0.1" } }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6.9.0" } }, - "node_modules/@lerna/create/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@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==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { - "node": ">=16" + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/willfarrell" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { - "node": "14 || >=16.14" + "node": ">=8" } }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "semver": "^7.3.5" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@npmcli/git": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", - "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=6.0.0" } }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { - "node": ">=16" + "node": ">=6.0.0" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { - "node": "14 || >=16.14" + "node": ">=6.0.0" } }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/@lerna/create": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.2.tgz", + "integrity": "sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ==", "dev": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "@npmcli/run-script": "7.0.2", + "@nx/devkit": ">=17.1.2 < 19", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", + "dedent": "0.7.0", + "execa": "5.0.0", + "fs-extra": "^11.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=17.1.2 < 19", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^17.0.5", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^9.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">=18.0.0" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "node_modules/@lerna/create/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "node_modules/@lerna/create/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/@lerna/create/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "node_modules/@lerna/create/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "node_modules/@lerna/create/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "which": "^4.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=16" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/redact": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", - "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@npmcli/run-script": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", - "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/@lerna/create/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "dependencies": { - "@nx/devkit": "18.3.5" + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nrwl/tao": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.3.5.tgz", - "integrity": "sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==", + "node_modules/@lerna/create/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { - "nx": "18.3.5", - "tslib": "^2.3.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, - "bin": { - "tao": "index.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "@nrwl/devkit": "18.3.5", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "engines": { + "node": ">=14" }, - "peerDependencies": { - "nx": ">= 16 <= 19" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.5.tgz", - "integrity": "sha512-4I5UpZ/x2WO9OQyETXKjaYhXiZKUTYcLPewruRMODWu6lgTM9hHci0SqMQB+TWe3f80K8VT8J8x3+uJjvllGlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@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==", "engines": { - "node": ">= 10" + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/willfarrell" } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.5.tgz", - "integrity": "sha512-Drn6jOG237AD/s6OWPt06bsMj0coGKA5Ce1y5gfLhptOGk4S4UPE/Ay5YCjq+/yhTo1gDHzCHxH0uW2X9MN9Fg==", - "cpu": [ - "x64" - ], + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.5.tgz", - "integrity": "sha512-8tA8Yw0Iir4liFjffIFS5THTS3TtWY/No2tkVj91gwy/QQ/otvKbOyc5RCIPpbZU6GS3ZWfG92VyCSm06dtMFg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.5.tgz", - "integrity": "sha512-BrPGAHM9FCGkB9/hbvlJhe+qtjmvpjIjYixGIlUxL3gGc8E/ucTyCnz5pRFFPFQlBM7Z/9XmbHvGPoUi/LYn5A==", - "cpu": [ - "arm" - ], + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.5.tgz", - "integrity": "sha512-/Xd0Q3LBgJeigJqXC/Jck/9l5b+fK+FCM0nRFMXgPXrhZPhoxWouFkoYl2F1Ofr+AQf4jup4DkVTB5r98uxSCA==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.5.tgz", - "integrity": "sha512-r18qd7pUrl1haAZ/e9Q+xaFTsLJnxGARQcf/Y76q+K2psKmiUXoRlqd3HAOw43KTllaUJ5HkzLq2pIwg3p+xBw==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": "14 || >=16.14" } }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.5.tgz", - "integrity": "sha512-vYrikG6ff4I9cvr3Ysk3y3gjQ9cDcvr3iAr+4qqcQ4qVE+OLL2++JDS6xfPvG/TbS3GTQpyy2STRBwiHgxTeJw==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.5.tgz", - "integrity": "sha512-6np86lcYy3+x6kkW/HrBHIdNWbUu/MIsvMuNH5UXgyFs60l5Z7Cocay2f7WOaAbTLVAr0W7p4RxRPamHLRwWFA==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/git": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", + "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.5.tgz", - "integrity": "sha512-H3p2ZVhHV1WQWTICrQUTplOkNId0y3c23X3A2fXXFDbWSBs0UgW7m55LhMcA9p0XZ7wDHgh+yFtVgu55TXLjug==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">=16" } }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.5.tgz", - "integrity": "sha512-xFwKVTIXSgjdfxkpriqHv5NpmmFILTrWLEkUGSoimuRaAm1u15YWx/VmaUQ+UWuJnmgqvB/so4SMHSfNkq3ijA==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": "14 || >=16.14" } }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 14" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", - "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "dependencies": { - "@octokit/types": "^10.0.0" + "which": "^4.0.0" }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "engines": { + "node": ">=16" } }, - "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 14" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", "dev": true, - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, "engines": { - "node": ">= 14" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", + "node_modules/@npmcli/run-script": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", + "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", "dev": true, "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^4.0.0" }, "engines": { - "node": ">= 14" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true - }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "engines": { + "node": ">=16" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "optional": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">=14" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", - "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", - "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", - "cpu": [ - "arm64" - ], + "node_modules/@nrwl/devkit": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.3.5.tgz", + "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", "dev": true, - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "@nx/devkit": "18.3.5" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", - "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", - "cpu": [ - "arm64" - ], + "node_modules/@nrwl/tao": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.3.5.tgz", + "integrity": "sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "nx": "18.3.5", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", - "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", - "cpu": [ - "x64" - ], + "node_modules/@nx/devkit": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.3.5.tgz", + "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@nrwl/devkit": "18.3.5", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 16 <= 19" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", - "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", + "node_modules/@nx/nx-darwin-arm64": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.5.tgz", + "integrity": "sha512-4I5UpZ/x2WO9OQyETXKjaYhXiZKUTYcLPewruRMODWu6lgTM9hHci0SqMQB+TWe3f80K8VT8J8x3+uJjvllGlg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", - "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", - "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", - "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", - "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", - "cpu": [ - "arm64" + "darwin" ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", - "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", + "node_modules/@nx/nx-darwin-x64": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.5.tgz", + "integrity": "sha512-Drn6jOG237AD/s6OWPt06bsMj0coGKA5Ce1y5gfLhptOGk4S4UPE/Ay5YCjq+/yhTo1gDHzCHxH0uW2X9MN9Fg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", - "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "node_modules/@nx/nx-freebsd-x64": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.5.tgz", + "integrity": "sha512-8tA8Yw0Iir4liFjffIFS5THTS3TtWY/No2tkVj91gwy/QQ/otvKbOyc5RCIPpbZU6GS3ZWfG92VyCSm06dtMFg==", "cpu": [ - "loong64" + "x64" ], "dev": true, "optional": true, "os": [ - "linux" - ] + "freebsd" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", - "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.5.tgz", + "integrity": "sha512-BrPGAHM9FCGkB9/hbvlJhe+qtjmvpjIjYixGIlUxL3gGc8E/ucTyCnz5pRFFPFQlBM7Z/9XmbHvGPoUi/LYn5A==", "cpu": [ - "ppc64" + "arm" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", - "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.5.tgz", + "integrity": "sha512-/Xd0Q3LBgJeigJqXC/Jck/9l5b+fK+FCM0nRFMXgPXrhZPhoxWouFkoYl2F1Ofr+AQf4jup4DkVTB5r98uxSCA==", "cpu": [ - "riscv64" + "arm64" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", - "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.5.tgz", + "integrity": "sha512-r18qd7pUrl1haAZ/e9Q+xaFTsLJnxGARQcf/Y76q+K2psKmiUXoRlqd3HAOw43KTllaUJ5HkzLq2pIwg3p+xBw==", "cpu": [ - "s390x" + "arm64" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", - "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.5.tgz", + "integrity": "sha512-vYrikG6ff4I9cvr3Ysk3y3gjQ9cDcvr3iAr+4qqcQ4qVE+OLL2++JDS6xfPvG/TbS3GTQpyy2STRBwiHgxTeJw==", "cpu": [ "x64" ], @@ -3664,12 +3919,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", - "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", + "node_modules/@nx/nx-linux-x64-musl": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.5.tgz", + "integrity": "sha512-6np86lcYy3+x6kkW/HrBHIdNWbUu/MIsvMuNH5UXgyFs60l5Z7Cocay2f7WOaAbTLVAr0W7p4RxRPamHLRwWFA==", "cpu": [ "x64" ], @@ -3677,12 +3935,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", - "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.5.tgz", + "integrity": "sha512-H3p2ZVhHV1WQWTICrQUTplOkNId0y3c23X3A2fXXFDbWSBs0UgW7m55LhMcA9p0XZ7wDHgh+yFtVgu55TXLjug==", "cpu": [ "arm64" ], @@ -3690,25 +3951,15 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", - "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", - "cpu": [ - "ia32" ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", - "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.5.tgz", + "integrity": "sha512-xFwKVTIXSgjdfxkpriqHv5NpmmFILTrWLEkUGSoimuRaAm1u15YWx/VmaUQ+UWuJnmgqvB/so4SMHSfNkq3ijA==", "cpu": [ "x64" ], @@ -3716,713 +3967,831 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz", - "integrity": "sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==", + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, - "dependencies": { - "@shikijs/types": "1.26.1", - "@shikijs/vscode-textmate": "^10.0.1" + "engines": { + "node": ">= 14" } }, - "node_modules/@shikijs/types": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.1.tgz", - "integrity": "sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==", + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "dependencies": { - "@shikijs/vscode-textmate": "^10.0.1", - "@types/hast": "^3.0.4" + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", - "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", - "dev": true - }, - "node_modules/@sigstore/bundle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", - "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", - "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "node_modules/@octokit/openapi-types": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "dev": true + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" } }, - "node_modules/@sigstore/sign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", - "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" + "@octokit/types": "^10.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/@sigstore/sign/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", "dev": true, "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "@octokit/openapi-types": "^18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@sigstore/sign/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 14" } }, - "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/@octokit/rest": { + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, - "node_modules/@sigstore/sign/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "@octokit/openapi-types": "^18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "optional": true, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", + "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", + "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", + "cpu": [ + "arm64" + ], "dev": true, - "engines": { - "node": ">=8" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sigstore/sign/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", + "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@sigstore/sign/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", + "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", + "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", + "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", + "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", + "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/sign/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", + "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/sign/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", + "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/sign/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", + "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/sign/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", + "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", + "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", + "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/verify/node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", + "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sigstore/verify/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", + "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", + "cpu": [ + "x64" + ], "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", + "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", + "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", + "cpu": [ + "ia32" + ], "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", + "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", - "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz", + "integrity": "sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", - "type-detect": "^4.1.0" + "@shikijs/types": "1.26.1", + "@shikijs/vscode-textmate": "^10.0.1" } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + }, + "node_modules/@shikijs/types": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.1.tgz", + "integrity": "sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", + "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", "dev": true }, - "node_modules/@smithy/abort-controller": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.0.tgz", - "integrity": "sha512-xFNL1ZfluscKiVI0qlPEnu7pL1UgNNIzQdjTPkaO7JCJtIkbArPYNtqbxohuNaQdksJ01Tn1wLbDA5oIp62P8w==", + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "@sigstore/protobuf-specs": "^0.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/abort-controller/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@smithy/config-resolver": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.0.tgz", - "integrity": "sha512-29pIDlUY/a9+ChJPAarPiD9cU8fBtBh0wFnmnhj7j5AhgMzc+uyXdfzmziH6xx2jzw54waSP3HfnFkTANZuPYA==", - "dependencies": { - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "tslib": "^2.6.2" - }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.0.0.tgz", - "integrity": "sha512-pKaas7RWvPljJ8uByCeBa10rtbVJCy4N/Fr7OSPxFezcyG0SQuXWnESZqzXj7m2+A+kPzG6fKyP4wrKidl2Ikg==", + "node_modules/@sigstore/sign/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { - "@smithy/middleware-serde": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "debug": "4" }, "engines": { - "node": ">=18.0.0" + "node": ">= 6.0.0" } }, - "node_modules/@smithy/core/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.0.tgz", - "integrity": "sha512-+hTShyZHiq2AVFOxJja3k6O17DKU6TaZbwr2y1OH5HQtUw2a+7O3mMR+10LVmc39ef72SAj+uFX0IW9rJGaLQQ==", + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dev": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "tslib": "^2.6.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=18.0.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=18.0.0" + "node": ">= 6" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.0.tgz", - "integrity": "sha512-YvKUUOo3qehqOxNrkax3YKXF1v0ff475FhDgbBmF8Bo0oOOpsXZyltjQnwBzIeTYo446ZPV85KM3kY4YoxUNOg==", + "node_modules/@sigstore/sign/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.0.0", - "@smithy/util-hex-encoding": "^4.0.0", - "tslib": "^2.6.2" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=18.0.0" + "node": ">= 6" } }, - "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": ">=12" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.0.tgz", - "integrity": "sha512-YRwsVPJU/DN1VshH8tKs4CxY66HLhmDSw6oZDM2LVIgHODsqpJBcRdEfcnb97ULmgyFrWxTjL9UXpyKPuJXQRA==", + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.0.tgz", - "integrity": "sha512-OZ/aK9LHsZch0VZ6bnf+dPD80kJripnZnkc36QNymnej49VkHJLSNJxsM0pwt53FA6+fUYYMMT0DVDTH1Msq2g==", + "node_modules/@sigstore/sign/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/sign/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 8" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.0.tgz", - "integrity": "sha512-10b4F+zXbzxZHKuP+m2st/C+rEGK7FUut1dNSRw6DQCCfaTUecJGCoHPCmk2CRvuMTzunVpS1BKLMk839318VQ==", + "node_modules/@sigstore/sign/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/sign/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">= 10" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.0.tgz", - "integrity": "sha512-HEhZpf731J3oFYJtaKO3dnV6stIjA+lJwXuXGu/WbSgicDWGAOITUwTt9ynldEFsnFkNu9b/C4ebXnJA16xSCA==", + "node_modules/@sigstore/sign/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, "dependencies": { - "@smithy/eventstream-codec": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "minipass": "^7.0.3" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { + "node_modules/@sigstore/sign/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.0.tgz", - "integrity": "sha512-jUEq+4056uqsDLRqQb1fm48rrSMBYcBxVvODfiP37ORcV5n9xWJQsINWcIffyYxWTM5K0Y/GOfhSQGDtWpAPpQ==", + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, "dependencies": { - "@smithy/protocol-http": "^5.0.0", - "@smithy/querystring-builder": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "tslib": "^2.6.2" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sigstore/verify/node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.0.tgz", - "integrity": "sha512-25OxGYGnG3JPEOTk4iFE03bfmoC6GXUQ4L13z4cNdsS3mkncH22AGSDRfKwwEqutNUxXQZWVy9f72Fm59C9qlg==", - "dependencies": { - "@smithy/types": "^4.0.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, + "node_modules/@sigstore/verify/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.0.tgz", - "integrity": "sha512-0GTyet02HX/sPctEhOExY+3HI7hwkVwOoJg0XnItTJ+Xw7JMuL9FOxALTmKVIV6+wg0kF6veLeg72hVSbD9UCw==", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "type-detect": "4.0.8" } }, - "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" } }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": ">=4" } }, - "node_modules/@smithy/middleware-compression": { + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true + }, + "node_modules/@smithy/abort-controller": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-4.0.0.tgz", - "integrity": "sha512-OCYaVBL859GMAlDNyvcJyn97KlLSiBuBV0+TZmxJhp/Sj45qrRtCbxV/dDD+njyqSjzbz4C3wQ3FOXQXsA3l+g==", - "dev": true, + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.0.tgz", + "integrity": "sha512-xFNL1ZfluscKiVI0qlPEnu7pL1UgNNIzQdjTPkaO7JCJtIkbArPYNtqbxohuNaQdksJ01Tn1wLbDA5oIp62P8w==", "dependencies": { - "@smithy/core": "^3.0.0", - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "fflate": "0.8.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-compression/node_modules/@smithy/types": { + "node_modules/@smithy/abort-controller/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4430,20 +4799,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length": { + "node_modules/@smithy/config-resolver": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.0.tgz", - "integrity": "sha512-nM1RJqLwkSCidumGK8WwNEZ0a0D/4LkwqdPna+QmHrdPoAK6WGLyZFosdMpsAW1OIbDLWGa+r37Mo4Vth4S4kQ==", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.0.tgz", + "integrity": "sha512-29pIDlUY/a9+ChJPAarPiD9cU8fBtBh0wFnmnhj7j5AhgMzc+uyXdfzmziH6xx2jzw54waSP3HfnFkTANZuPYA==", "dependencies": { - "@smithy/protocol-http": "^5.0.0", + "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { + "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4454,25 +4825,25 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.0.tgz", - "integrity": "sha512-/f6z5SqUurmqemhBZNhM0c+C7QW0AY/zJpic//sbdu26q98HSPAI/xvzStjYq+UhtWeAe/jaX6gamdL/2r3W1g==", + "node_modules/@smithy/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.0.0.tgz", + "integrity": "sha512-pKaas7RWvPljJ8uByCeBa10rtbVJCy4N/Fr7OSPxFezcyG0SQuXWnESZqzXj7m2+A+kPzG6fKyP4wrKidl2Ikg==", "dependencies": { - "@smithy/core": "^3.0.0", "@smithy/middleware-serde": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { + "node_modules/@smithy/core/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4483,26 +4854,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry": { + "node_modules/@smithy/credential-provider-imds": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.0.tgz", - "integrity": "sha512-K6tsFp3Ik44H3694a+LWoXLV8mqy8zn6/vTw2feU72MaIzi51EHMVNNxxpL6e2GI6oxw8FFRGWgGn8+wQRrHZQ==", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.0.tgz", + "integrity": "sha512-+hTShyZHiq2AVFOxJja3k6O17DKU6TaZbwr2y1OH5HQtUw2a+7O3mMR+10LVmc39ef72SAj+uFX0IW9rJGaLQQ==", "dependencies": { "@smithy/node-config-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/service-error-classification": "^4.0.0", - "@smithy/smithy-client": "^4.0.0", + "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/url-parser": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4513,19 +4880,21 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { + "node_modules/@smithy/eventstream-codec": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.0.tgz", - "integrity": "sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.0.tgz", + "integrity": "sha512-YvKUUOo3qehqOxNrkax3YKXF1v0ff475FhDgbBmF8Bo0oOOpsXZyltjQnwBzIeTYo446ZPV85KM3kY4YoxUNOg==", "dependencies": { + "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4536,11 +4905,12 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { + "node_modules/@smithy/eventstream-serde-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.0.tgz", - "integrity": "sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.0.tgz", + "integrity": "sha512-YRwsVPJU/DN1VshH8tKs4CxY66HLhmDSw6oZDM2LVIgHODsqpJBcRdEfcnb97ULmgyFrWxTjL9UXpyKPuJXQRA==", "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4548,7 +4918,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { + "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4559,13 +4929,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { + "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.0.tgz", - "integrity": "sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.0.tgz", + "integrity": "sha512-OZ/aK9LHsZch0VZ6bnf+dPD80kJripnZnkc36QNymnej49VkHJLSNJxsM0pwt53FA6+fUYYMMT0DVDTH1Msq2g==", "dependencies": { - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4573,7 +4941,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider/node_modules/@smithy/types": { + "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4584,14 +4952,12 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { + "node_modules/@smithy/eventstream-serde-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.0.tgz", - "integrity": "sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.0.tgz", + "integrity": "sha512-10b4F+zXbzxZHKuP+m2st/C+rEGK7FUut1dNSRw6DQCCfaTUecJGCoHPCmk2CRvuMTzunVpS1BKLMk839318VQ==", "dependencies": { - "@smithy/abort-controller": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/querystring-builder": "^4.0.0", + "@smithy/eventstream-serde-universal": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4599,7 +4965,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { + "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4610,11 +4976,12 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { + "node_modules/@smithy/eventstream-serde-universal": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.0.tgz", - "integrity": "sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.0.tgz", + "integrity": "sha512-HEhZpf731J3oFYJtaKO3dnV6stIjA+lJwXuXGu/WbSgicDWGAOITUwTt9ynldEFsnFkNu9b/C4ebXnJA16xSCA==", "dependencies": { + "@smithy/eventstream-codec": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4622,7 +4989,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider/node_modules/@smithy/types": { + "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4633,19 +5000,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { + "node_modules/@smithy/fetch-http-handler": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.0.tgz", - "integrity": "sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.0.tgz", + "integrity": "sha512-jUEq+4056uqsDLRqQb1fm48rrSMBYcBxVvODfiP37ORcV5n9xWJQsINWcIffyYxWTM5K0Y/GOfhSQGDtWpAPpQ==", "dependencies": { + "@smithy/protocol-http": "^5.0.0", + "@smithy/querystring-builder": "^4.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4656,20 +5026,21 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder": { + "node_modules/@smithy/hash-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.0.tgz", - "integrity": "sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.0.tgz", + "integrity": "sha512-25OxGYGnG3JPEOTk4iFE03bfmoC6GXUQ4L13z4cNdsS3mkncH22AGSDRfKwwEqutNUxXQZWVy9f72Fm59C9qlg==", "dependencies": { "@smithy/types": "^4.0.0", - "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { + "node_modules/@smithy/hash-node/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4680,10 +5051,10 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser": { + "node_modules/@smithy/invalid-dependency": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.0.tgz", - "integrity": "sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.0.tgz", + "integrity": "sha512-0GTyet02HX/sPctEhOExY+3HI7hwkVwOoJg0XnItTJ+Xw7JMuL9FOxALTmKVIV6+wg0kF6veLeg72hVSbD9UCw==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -4692,7 +5063,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { + "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4703,21 +5074,10 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.0.tgz", - "integrity": "sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==", - "dependencies": { - "@smithy/types": "^4.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { + "node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "dependencies": { "tslib": "^2.6.2" }, @@ -4725,22 +5085,32 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader": { + "node_modules/@smithy/middleware-compression": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.0.tgz", - "integrity": "sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-4.0.0.tgz", + "integrity": "sha512-OCYaVBL859GMAlDNyvcJyn97KlLSiBuBV0+TZmxJhp/Sj45qrRtCbxV/dDD+njyqSjzbz4C3wQ3FOXQXsA3l+g==", + "dev": true, "dependencies": { + "@smithy/core": "^3.0.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "fflate": "0.8.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { + "node_modules/@smithy/middleware-compression/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4748,25 +5118,20 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.0.tgz", - "integrity": "sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==", + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.0.tgz", + "integrity": "sha512-nM1RJqLwkSCidumGK8WwNEZ0a0D/4LkwqdPna+QmHrdPoAK6WGLyZFosdMpsAW1OIbDLWGa+r37Mo4Vth4S4kQ==", "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-uri-escape": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4777,24 +5142,25 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client": { + "node_modules/@smithy/middleware-endpoint": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.0.0.tgz", - "integrity": "sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.0.tgz", + "integrity": "sha512-/f6z5SqUurmqemhBZNhM0c+C7QW0AY/zJpic//sbdu26q98HSPAI/xvzStjYq+UhtWeAe/jaX6gamdL/2r3W1g==", "dependencies": { "@smithy/core": "^3.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client/node_modules/@smithy/types": { + "node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4805,71 +5171,75 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@smithy/middleware-retry": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.0.tgz", + "integrity": "sha512-K6tsFp3Ik44H3694a+LWoXLV8mqy8zn6/vTw2feU72MaIzi51EHMVNNxxpL6e2GI6oxw8FFRGWgGn8+wQRrHZQ==", "dependencies": { - "tslib": "^2.6.2" + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/service-error-classification": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser": { + "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.0.tgz", - "integrity": "sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@smithy/querystring-parser": "^4.0.0", - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser/node_modules/@smithy/types": { + "node_modules/@smithy/middleware-serde": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.0.tgz", + "integrity": "sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-base64": { + "node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { + "node_modules/@smithy/middleware-stack": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.0.tgz", + "integrity": "sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-node": { + "node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { "tslib": "^2.6.2" }, @@ -4877,22 +5247,24 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-buffer-from": { + "node_modules/@smithy/node-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.0.tgz", + "integrity": "sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==", "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-config-provider": { + "node_modules/@smithy/node-config-provider/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { "tslib": "^2.6.2" }, @@ -4900,22 +5272,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser": { + "node_modules/@smithy/node-http-handler": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.0.tgz", - "integrity": "sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.0.tgz", + "integrity": "sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==", "dependencies": { - "@smithy/property-provider": "^4.0.0", - "@smithy/smithy-client": "^4.0.0", + "@smithy/abort-controller": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/querystring-builder": "^4.0.0", "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { + "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4926,16 +5298,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { + "node_modules/@smithy/property-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.0.tgz", - "integrity": "sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==", - "dependencies": { - "@smithy/config-resolver": "^4.0.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/smithy-client": "^4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.0.tgz", + "integrity": "sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==", + "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4943,7 +5310,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { + "node_modules/@smithy/property-provider/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4954,12 +5321,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-endpoints": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.0.tgz", - "integrity": "sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==", + "node_modules/@smithy/protocol-http": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.0.tgz", + "integrity": "sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==", "dependencies": { - "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4967,7 +5333,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { + "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -4978,30 +5344,20 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { + "node_modules/@smithy/querystring-builder": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.0.tgz", - "integrity": "sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.0.tgz", + "integrity": "sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==", "dependencies": { "@smithy/types": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-middleware/node_modules/@smithy/types": { + "node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -5012,12 +5368,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-retry": { + "node_modules/@smithy/querystring-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.0.tgz", - "integrity": "sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.0.tgz", + "integrity": "sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==", "dependencies": { - "@smithy/service-error-classification": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -5025,7 +5380,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-retry/node_modules/@smithy/types": { + "node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -5036,25 +5391,18 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-stream": { + "node_modules/@smithy/service-error-classification": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.0.tgz", - "integrity": "sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.0.tgz", + "integrity": "sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "@smithy/types": "^4.0.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-stream/node_modules/@smithy/types": { + "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -5065,43 +5413,48 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-uri-escape": { + "node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.0.tgz", + "integrity": "sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-utf8": { + "node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-waiter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.0.tgz", - "integrity": "sha512-C8dSfGmZH0ecrmnJOw4aDXJ47krihnUtee8eDZ2fA+28wTjD4TVM3L/bBQYnBBlDVWcYzldLV7loPRsPc1kERg==", + "node_modules/@smithy/signature-v4": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.0.tgz", + "integrity": "sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==", "dependencies": { - "@smithy/abort-controller": "^4.0.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { + "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", @@ -5112,1002 +5465,1012 @@ "node": ">=18.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, + "node_modules/@smithy/smithy-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.0.0.tgz", + "integrity": "sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==", "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@smithy/core": "^3.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.147", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", - "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", - "dev": true - }, - "node_modules/@types/cls-hooked": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", - "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", - "dev": true - }, - "node_modules/@types/lodash.merge": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz", - "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==", - "dev": true, - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", - "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/promise-retry": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.6.tgz", - "integrity": "sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA==", - "dev": true, - "dependencies": { - "@types/retry": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", - "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" + "node": ">=18.0.0" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + "node_modules/@smithy/smithy-client/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@vitest/coverage-v8": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", - "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", + "node_modules/@smithy/types": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.7", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.12", - "magicast": "^0.3.5", - "std-env": "^3.8.0", - "test-exclude": "^7.0.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "tslib": "^2.6.2" }, - "peerDependencies": { - "@vitest/browser": "2.1.8", - "vitest": "2.1.8" + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.0.tgz", + "integrity": "sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==", + "dependencies": { + "@smithy/querystring-parser": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, + "node_modules/@smithy/url-parser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "tslib": "^2.6.2" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dependencies": { - "brace-expansion": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", - "dev": true, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" } }, - "node_modules/@vitest/expect": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", - "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.0.tgz", + "integrity": "sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==", "dependencies": { - "@vitest/spy": "2.1.8", - "@vitest/utils": "2.1.8", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/mocker": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", - "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@vitest/spy": "2.1.8", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.0.tgz", + "integrity": "sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==", + "dependencies": { + "@smithy/config-resolver": "^4.0.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "dependencies": { + "tslib": "^2.6.2" }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/pretty-format": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", - "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", - "dev": true, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.0.tgz", + "integrity": "sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==", "dependencies": { - "tinyrainbow": "^1.2.0" + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/runner": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", - "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", - "dev": true, + "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@vitest/utils": "2.1.8", - "pathe": "^1.1.2" + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/snapshot": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", - "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", - "dev": true, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dependencies": { - "@vitest/pretty-format": "2.1.8", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/spy": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", - "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", - "dev": true, + "node_modules/@smithy/util-middleware": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.0.tgz", + "integrity": "sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==", "dependencies": { - "tinyspy": "^3.0.2" + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vitest/utils": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", - "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", - "dev": true, + "node_modules/@smithy/util-middleware/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "@vitest/pretty-format": "2.1.8", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, + "node_modules/@smithy/util-retry": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.0.tgz", + "integrity": "sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==", "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" + "@smithy/service-error-classification": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.15.0" + "node": ">=18.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/@smithy/util-retry/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "sprintf-js": "~1.0.2" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/@smithy/util-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.0.tgz", + "integrity": "sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, + "node_modules/@smithy/util-stream/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "argparse": "^2.0.1" + "tslib": "^2.6.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=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, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dependencies": { - "event-target-shim": "^5.0.0" + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.5" + "node": ">=18.0.0" } }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, + "node_modules/@smithy/util-waiter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.0.tgz", + "integrity": "sha512-C8dSfGmZH0ecrmnJOw4aDXJ47krihnUtee8eDZ2fA+28wTjD4TVM3L/bBQYnBBlDVWcYzldLV7loPRsPc1kERg==", "dependencies": { - "debug": "^4.3.4" + "@smithy/abort-controller": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14" + "node": ">=18.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, + "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "dependencies": { - "humanize-ms": "^1.2.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8.0.0" + "node": ">=18.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.147", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", + "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", + "dev": true + }, + "node_modules/@types/cls-hooked": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", + "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "dev": true + }, + "node_modules/@types/lodash.merge": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz", + "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/lodash": "*" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", + "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "undici-types": "~6.20.0" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", + "node_modules/@types/promise-retry": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.6.tgz", + "integrity": "sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA==", "dev": true, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@types/retry": "*" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", "dev": true }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "node_modules/@types/sinon": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", + "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", "dev": true }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/@vitest/coverage-v8/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "node_modules/@vitest/coverage-v8/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "stack-chain": "^1.3.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^4.7 || >=6.9 || >=7.3" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": ">= 0.4" + "node": ">=18" + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib": { - "version": "2.174.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.174.1.tgz", - "integrity": "sha512-4WRd1Qyf+BKIMwEDQdpU+h3daDTTH9nCcEBUUxQnpuswdMUwvjjIkmWmGMnXNZK7PU/715gJK9XCSBaphb3M8g==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml", - "mime-types" - ], + "node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.208", - "@aws-cdk/asset-kubectl-v20": "^2.1.3", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^39.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.2", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.3", - "table": "^6.8.2", - "yaml": "1.10.2" + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" }, - "engines": { - "node": ">= 14.15.0" + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "constructs": "^10.0.0" + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.17.1", - "inBundle": true, - "license": "MIT", + "node_modules/@vitest/pretty-format": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@vitest/runner": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", + "dev": true, + "dependencies": { + "@vitest/utils": "2.1.8", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", + "node_modules/@vitest/snapshot": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@vitest/pretty-format": "2.1.8", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@vitest/spy": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", + "node_modules/@vitest/utils": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, - "node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.15.0" } }, - "node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/aws-cdk-lib/node_modules/fast-uri": { - "version": "3.0.3", - "inBundle": true, - "license": "BSD-3-Clause" + "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, - "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.2.0", - "inBundle": true, - "license": "MIT", + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=14.14" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.2", - "inBundle": true, - "license": "MIT", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, "engines": { - "node": ">= 4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "node_modules/abort-controller": { "version": "3.0.0", - "inBundle": true, - "license": "MIT", + "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": ">=8" + "node": ">=6.5" } }, - "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "node_modules/add-stream": { "version": "1.0.0", - "inBundle": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true }, - "node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, "dependencies": { - "universalify": "^2.0.0" + "debug": "^4.3.4" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/mime-db": { - "version": "1.52.0", - "inBundle": true, - "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/aws-cdk-lib/node_modules/mime-types": { - "version": "2.1.35", - "inBundle": true, - "license": "MIT", + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 8.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.2", - "inBundle": true, - "license": "BSD-3-Clause", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "stack-chain": "^1.3.7" }, "engines": { - "node": ">=10.0.0" + "node": "^4.7 || >=6.9 || >=7.3" } }, - "node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", + "node_modules/aws-cdk": { + "version": "2.175.1", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.175.1.tgz", + "integrity": "sha512-duvy0FtGAAYqJi/x0MjBfCp60ZlDYl0X5/GrADwMz4AfHQ8aTXCyaVsdJuCxz0ZMHSNaFRuCNkAlc2Xu43zQmQ==", + "license": "Apache-2.0", + "bin": { + "cdk": "bin/cdk" + }, "engines": { - "node": ">= 6" + "node": ">= 14.15.0" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, "node_modules/aws-sdk": { @@ -15554,1338 +15917,1679 @@ "node": ">=8" } }, - "node_modules/tuf-js/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/tuf-js/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedoc": { + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", + "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", + "dev": true, + "dependencies": { + "@gerrit0/mini-shiki": "^1.24.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.6.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x" + } + }, + "node_modules/typedoc-plugin-missing-exports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.1.0.tgz", + "integrity": "sha512-Sogbaj+qDa21NjB3SlIw4JXSwmcl/WOjwiPNaVEcPhpNG/MiRTtpwV81cT7h1cbu9StpONFPbddYWR0KV/fTWA==", + "dev": true, + "peerDependencies": { + "typedoc": "0.26.x || 0.27.x" + } + }, + "node_modules/typedoc-plugin-zod": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-zod/-/typedoc-plugin-zod-1.3.1.tgz", + "integrity": "sha512-u4NH1Ez168gRNnhUd0x4pZhp85maJ9y050IxSok9XwdzTpUA9NN0ee3ho8ssrzmxsvO2UDbDEiks7xtI0p6UXA==", + "dev": true, + "peerDependencies": { + "typedoc": "0.23.x || 0.24.x || 0.25.x || 0.26.x || 0.27.x" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "minipass": "^7.0.3" + "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tuf-js/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedoc": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", - "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "dependencies": { - "@gerrit0/mini-shiki": "^1.24.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "yaml": "^2.6.1" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { - "typedoc": "bin/typedoc" + "vite": "bin/vite.js" }, "engines": { - "node": ">= 18" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x" - } - }, - "node_modules/typedoc-plugin-missing-exports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.1.0.tgz", - "integrity": "sha512-Sogbaj+qDa21NjB3SlIw4JXSwmcl/WOjwiPNaVEcPhpNG/MiRTtpwV81cT7h1cbu9StpONFPbddYWR0KV/fTWA==", - "dev": true, - "peerDependencies": { - "typedoc": "0.26.x || 0.27.x" - } - }, - "node_modules/typedoc-plugin-zod": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-zod/-/typedoc-plugin-zod-1.3.1.tgz", - "integrity": "sha512-u4NH1Ez168gRNnhUd0x4pZhp85maJ9y050IxSok9XwdzTpUA9NN0ee3ho8ssrzmxsvO2UDbDEiks7xtI0p6UXA==", - "dev": true, - "peerDependencies": { - "typedoc": "0.23.x || 0.24.x || 0.25.x || 0.26.x || 0.27.x" + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/vite-node": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/vitest" } }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "os": [ + "android" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=12" } }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" ], - "bin": { - "uuid": "dist/bin/uuid" + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-node": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", - "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "node_modules/vite/node_modules/@esbuild/linux-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ - "ppc64" + "x64" ], "dev": true, "optional": true, "os": [ - "aix" + "linux" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ - "arm" + "x64" ], "dev": true, "optional": true, "os": [ - "android" + "netbsd" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "android" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/android-x64": { + "node_modules/vite/node_modules/@esbuild/win32-ia32": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "android" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "bin": { + "semver": "bin/semver" } }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4.0.0" } }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "node": ">=0.4" } }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "devOptional": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/vitest": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", - "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", - "dev": true, - "dependencies": { - "@vitest/expect": "2.1.8", - "@vitest/mocker": "2.1.8", - "@vitest/pretty-format": "^2.1.8", - "@vitest/runner": "2.1.8", - "@vitest/snapshot": "2.1.8", - "@vitest/spy": "2.1.8", - "@vitest/utils": "2.1.8", - "chai": "^5.1.2", - "debug": "^4.3.7", - "expect-type": "^1.1.0", - "magic-string": "^0.30.12", - "pathe": "^1.1.2", - "std-env": "^3.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.8", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" + "packages/batch": { + "name": "@aws-lambda-powertools/batch", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing" + } + }, + "packages/commons": { + "name": "@aws-lambda-powertools/commons", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing" + } + }, + "packages/event-handler": { + "name": "@aws-lambda-powertools/event-handler", + "version": "2.13.0", + "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0" + } + }, + "packages/idempotency": { + "name": "@aws-lambda-powertools/idempotency", + "version": "2.13.0", + "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/jmespath": "^2.13.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-dynamodb": "^3.724.0", + "@aws-sdk/lib-dynamodb": "^3.724.0", + "aws-sdk-client-mock": "^4.1.0" }, "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.8", - "@vitest/ui": "2.1.8", - "happy-dom": "*", - "jsdom": "*" + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/lib-dynamodb": ">=3.x", + "@middy/core": "4.x || 5.x || 6.x" }, "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { + "@aws-sdk/client-dynamodb": { "optional": true }, - "happy-dom": { + "@aws-sdk/lib-dynamodb": { "optional": true }, - "jsdom": { + "@middy/core": { "optional": true } } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, + "packages/jmespath": { + "name": "@aws-lambda-powertools/jmespath", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "defaults": "^1.0.3" + "@aws-lambda-powertools/commons": "^2.13.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "packages/logger": { + "name": "@aws-lambda-powertools/logger", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "@aws-lambda-powertools/commons": "^2.13.0", + "lodash.merge": "^4.6.2" + }, + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@types/lodash.merge": "^4.6.9" + }, + "peerDependencies": { + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "packages/metrics": { + "name": "@aws-lambda-powertools/metrics", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "isexe": "^2.0.0" + "@aws-lambda-powertools/commons": "^2.13.0" }, - "bin": { - "node-which": "bin/node-which" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-cloudwatch": "^3.723.0", + "@types/promise-retry": "^1.1.3", + "promise-retry": "^2.0.1" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, + "packages/parameters": { + "name": "@aws-lambda-powertools/parameters", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" + "@aws-lambda-powertools/commons": "^2.13.0" }, - "engines": { - "node": ">= 0.4" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-appconfigdata": "^3.723.0", + "@aws-sdk/client-dynamodb": "^3.724.0", + "@aws-sdk/client-secrets-manager": "^3.723.0", + "@aws-sdk/client-ssm": "^3.723.0", + "@aws-sdk/util-dynamodb": "^3.724.0", + "@smithy/util-base64": "^4.0.0", + "aws-sdk-client-mock": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@aws-sdk/client-appconfigdata": ">=3.x", + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/client-secrets-manager": ">=3.x", + "@aws-sdk/client-ssm": ">=3.x", + "@aws-sdk/util-dynamodb": ">=3.x", + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-appconfigdata": { + "optional": true + }, + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/client-secrets-manager": { + "optional": true + }, + "@aws-sdk/client-ssm": { + "optional": true + }, + "@aws-sdk/util-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } } }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" + "packages/parser": { + "name": "@aws-lambda-powertools/parser", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@anatine/zod-mock": "^3.13.3", + "@faker-js/faker": "^9.0.2" }, - "bin": { - "why-is-node-running": "cli.js" + "peerDependencies": { + "@aws-sdk/util-dynamodb": ">=3.x", + "@middy/core": "4.x || 5.x || 6.x", + "zod": ">=3.x" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, + "packages/testing": { + "name": "@aws-lambda-powertools/testing-utils", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", + "@aws-sdk/client-lambda": "^3.723.0", + "@smithy/util-utf8": "^4.0.0", + "aws-cdk-lib": "^2.175.1", + "esbuild": "^0.24.2", + "promise-retry": "^2.0.1" + }, + "devDependencies": { + "@types/promise-retry": "^1.1.6", + "aws-sdk-client-mock-vitest": "^5.0.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "packages/testing/node_modules/@aws-cdk/cli-lib-alpha": { + "version": "2.175.1-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.175.1-alpha.0.tgz", + "integrity": "sha512-zMewtUHmU0cAWX+xky2UrRQixKjEWTnNCMrvTigqxmwJkQEwnkCRAH2ccD+zugGfLtApOwnvOJ8CropfMTnIYw==", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">= 14.15.0" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib": { + "version": "2.175.1", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", + "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.2.0", + "ignore": "^5.3.2", + "jsonschema": "^1.4.1", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.6.3", + "table": "^6.8.2", + "yaml": "1.10.2" }, "engines": { - "node": ">=10" + "node": ">= 14.15.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "constructs": "^10.0.0" } }, - "node_modules/wrappy": { + "packages/testing/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "inBundle": true, + "license": "Apache-2.0" }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=8" } }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } + "packages/testing/node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "packages/testing/node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } + "packages/testing/node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "packages/testing/node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" }, - "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", - "dev": true, - "bin": { - "yaml": "bin.mjs" + "packages/testing/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT" + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.0.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 14" + "node": ">=14.14" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 4" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, + "packages/testing/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/zod": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", - "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", - "devOptional": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "packages/testing/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "packages/batch": { - "name": "@aws-lambda-powertools/batch", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing" + "packages/testing/node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" } }, - "packages/commons": { - "name": "@aws-lambda-powertools/commons", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing" + "packages/testing/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "inBundle": true, + "license": "MIT" + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "packages/event-handler": { - "name": "@aws-lambda-powertools/event-handler", - "version": "2.13.0", - "license": "MIT-0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "inBundle": true, + "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "packages/idempotency": { - "name": "@aws-lambda-powertools/idempotency", - "version": "2.13.0", - "license": "MIT-0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/lib-dynamodb": "^3.724.0", - "aws-sdk-client-mock": "^4.1.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": ">=3.x", - "@aws-sdk/lib-dynamodb": ">=3.x", - "@middy/core": "4.x || 5.x || 6.x" + "brace-expansion": "^1.1.7" }, - "peerDependenciesMeta": { - "@aws-sdk/client-dynamodb": { - "optional": true - }, - "@aws-sdk/lib-dynamodb": { - "optional": true - }, - "@middy/core": { - "optional": true - } + "engines": { + "node": "*" } }, - "packages/jmespath": { - "name": "@aws-lambda-powertools/jmespath", - "version": "2.13.0", - "license": "MIT-0", - "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "packages/testing/node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "packages/logger": { - "name": "@aws-lambda-powertools/logger", - "version": "2.13.0", - "license": "MIT-0", - "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "lodash.merge": "^4.6.2" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@types/lodash.merge": "^4.6.9" - }, - "peerDependencies": { - "@middy/core": "4.x || 5.x || 6.x" + "packages/testing/node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "packages/metrics": { - "name": "@aws-lambda-powertools/metrics", - "version": "2.13.0", - "license": "MIT-0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.723.0", - "@types/promise-retry": "^1.1.3", - "promise-retry": "^2.0.1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, - "peerDependencies": { - "@middy/core": "4.x || 5.x || 6.x" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "packages/parameters": { - "name": "@aws-lambda-powertools/parameters", - "version": "2.13.0", - "license": "MIT-0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", - "@smithy/util-base64": "^4.0.0", - "aws-sdk-client-mock": "^4.1.0" - }, - "peerDependencies": { - "@aws-sdk/client-appconfigdata": ">=3.x", - "@aws-sdk/client-dynamodb": ">=3.x", - "@aws-sdk/client-secrets-manager": ">=3.x", - "@aws-sdk/client-ssm": ">=3.x", - "@aws-sdk/util-dynamodb": ">=3.x", - "@middy/core": "4.x || 5.x || 6.x" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "peerDependenciesMeta": { - "@aws-sdk/client-appconfigdata": { - "optional": true - }, - "@aws-sdk/client-dynamodb": { - "optional": true - }, - "@aws-sdk/client-secrets-manager": { - "optional": true - }, - "@aws-sdk/client-ssm": { - "optional": true - }, - "@aws-sdk/util-dynamodb": { - "optional": true - }, - "@middy/core": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "packages/parser": { - "name": "@aws-lambda-powertools/parser", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@anatine/zod-mock": "^3.13.3", - "@faker-js/faker": "^9.0.2" - }, - "peerDependencies": { - "@aws-sdk/util-dynamodb": ">=3.x", - "@middy/core": "4.x || 5.x || 6.x", - "zod": ">=3.x" + "packages/testing/node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - }, - "zod": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "packages/testing": { - "name": "@aws-lambda-powertools/testing-utils", - "version": "2.13.0", - "license": "MIT-0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.2", + "inBundle": true, + "license": "BSD-3-Clause", "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.174.1-alpha.0", - "@aws-sdk/client-lambda": "^3.723.0", - "@smithy/util-utf8": "^4.0.0", - "aws-cdk-lib": "^2.174.1", - "esbuild": "^0.24.2", - "promise-retry": "^2.0.1" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, - "devDependencies": { - "@types/promise-retry": "^1.1.6", - "aws-sdk-client-mock-vitest": "^5.0.0" + "engines": { + "node": ">=10.0.0" } }, - "packages/testing/node_modules/@aws-cdk/cli-lib-alpha": { - "version": "2.174.1-alpha.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.174.1-alpha.0.tgz", - "integrity": "sha512-Z7ZRFEiKxkRxuq6dB07+7NaMmVXv2H3nHp0vnqmkHt0XzZiD1/4LyM2VCRKGmWU0q1ptHz6Ne7SwUawA5g+KlQ==", - "license": "Apache-2.0", + "packages/testing/node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.0.0" + } + }, + "packages/testing/node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" } }, "packages/tracer": { diff --git a/packages/testing/package.json b/packages/testing/package.json index 07968589da..05ce89f444 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -97,10 +97,10 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.174.1-alpha.0", + "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", "@aws-sdk/client-lambda": "^3.723.0", "@smithy/util-utf8": "^4.0.0", - "aws-cdk-lib": "^2.174.1", + "aws-cdk-lib": "^2.175.1", "esbuild": "^0.24.2", "promise-retry": "^2.0.1" }, From bdec3af9d58faf921fd3c6eac1aa01e8a6f5ff76 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 14 Jan 2025 15:12:33 +0100 Subject: [PATCH 02/31] chore(ci): update layer ARN on documentation (#3474) Co-authored-by: aws-powertools-bot <151832416+aws-powertools-bot@users.noreply.github.com> --- docs/index.md | 74 +++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/index.md b/docs/index.md index 5ab3f8fb24..3599adf113 100644 --- a/docs/index.md +++ b/docs/index.md @@ -69,7 +69,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa For the latter, make sure to replace `{region}` with your AWS region, e.g., `eu-west-1`. - __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17__{: .copyMe}:clipboard: + __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18__{: .copyMe}:clipboard: ???+ note "Code snippets for popular infrastructure as code frameworks" @@ -89,7 +89,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const powertoolsLayer = LayerVersion.fromLayerVersionArn( this, 'PowertoolsLayer', - `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17` + `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18` ); new Function(this, 'Function', { @@ -126,7 +126,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa Type: AWS::Serverless::Function Properties: Layers: - - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17 + - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: @@ -155,7 +155,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa hello: handler: lambda_function.lambda_handler layers: - - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17 + - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: @@ -190,7 +190,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa role = ... handler = "index.handler" runtime = "nodejs22.x" - layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17"] + layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18"] source_code_hash = filebase64sha256("lambda_function_payload.zip") } ``` @@ -208,7 +208,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const lambdaFunction = new aws.lambda.Function('function', { layers: [ - pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17` + pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18` ], code: new pulumi.asset.FileArchive('lambda_function_payload.zip'), tracingConfig: { @@ -232,7 +232,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa name: "my-function", layers: { "@aws-lambda-powertools/*": - "arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17", + "arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18", }, }); ``` @@ -246,35 +246,35 @@ You can use the Lambda Layer both with CommonJS and ESM (ECMAScript modules) for ??? note "Click to expand and copy any regional Lambda Layer ARN" | Region | Layer ARN | | ---------------- | ------------------------------------------------------------------------------------------------------------- | - | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-south-2` | [arn:aws:lambda:ap-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `me-central-1` | [arn:aws:lambda:me-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | - | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17](#){: .copyMe}:clipboard: | + | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-south-2` | [arn:aws:lambda:ap-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `me-central-1` | [arn:aws:lambda:me-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | + | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18](#){: .copyMe}:clipboard: | **Want to inspect the contents of the Layer?** @@ -283,7 +283,7 @@ The pre-signed URL to download this Lambda Layer will be within `Location` key i Change `{aws::region}` to your AWS region, e.g. `eu-west-1`, and run the following command: ```bash title="AWS CLI command to download Lambda Layer content" -aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:17 --region {aws::region} +aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:18 --region {aws::region} ``` ## Instrumentation From e1bc6c5e324d8e76fdde043d962d9c1c42e8c0c3 Mon Sep 17 00:00:00 2001 From: Stefano Vozza Date: Thu, 16 Jan 2025 14:32:08 +0000 Subject: [PATCH 03/31] chore(parser): remove faker dependency (#3476) --- package-lock.json | 4 ++-- packages/parser/package.json | 3 +-- packages/parser/tests/unit/schema/appsync.test.ts | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c617403b5..d61d6cea1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3027,6 +3027,7 @@ "url": "https://opencollective.com/fakerjs" } ], + "peer": true, "engines": { "node": ">=18.0.0", "npm": ">=9.0.0" @@ -17208,8 +17209,7 @@ "version": "2.13.0", "license": "MIT-0", "devDependencies": { - "@anatine/zod-mock": "^3.13.3", - "@faker-js/faker": "^9.0.2" + "@anatine/zod-mock": "^3.13.3" }, "peerDependencies": { "@aws-sdk/util-dynamodb": ">=3.x", diff --git a/packages/parser/package.json b/packages/parser/package.json index 5bfd6295ec..d1774320af 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -379,7 +379,6 @@ } }, "devDependencies": { - "@anatine/zod-mock": "^3.13.3", - "@faker-js/faker": "^9.0.2" + "@anatine/zod-mock": "^3.13.3" } } diff --git a/packages/parser/tests/unit/schema/appsync.test.ts b/packages/parser/tests/unit/schema/appsync.test.ts index ea9ba693e8..fe6fffd7f1 100644 --- a/packages/parser/tests/unit/schema/appsync.test.ts +++ b/packages/parser/tests/unit/schema/appsync.test.ts @@ -2,7 +2,6 @@ * Test built-in AppSync resolver schemas */ -import { faker } from '@faker-js/faker'; import { describe, expect, it } from 'vitest'; import { AppSyncBatchResolverSchema, @@ -56,7 +55,7 @@ describe('AppSync Resolver Schemas', () => { groups: null, issuer: 'https://cognito-idp.us-west-2.amazonaws.com/us-west-xxxxxxxxxxx', - sourceIp: [faker.internet.ip()], + sourceIp: ['1.1.1.1'], sub: '192879fc-a240-4bf1-ab5a-d6a00f3063f9', username: 'jdoe', }, @@ -88,7 +87,7 @@ describe('AppSync Resolver Schemas', () => { cognitoIdentityAuthType: 'cognitoIdentityAuthType', cognitoIdentityId: 'cognitoIdentityId', cognitoIdentityPoolId: 'cognitoIdentityPoolId', - sourceIp: [faker.internet.ip()], + sourceIp: ['1.1.1.1'], userArn: 'arn:aws:sts::012345678901:assumed-role/role', username: 'AROAXYKJUOW6FHGUSK5FA:username', }, From 8692de67292cf77db5f25e0ca8c572d71d72eadb Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Fri, 17 Jan 2025 14:17:27 +0100 Subject: [PATCH 04/31] fix(parser): make identitySource nulablel in APIGatewayRequestAuthorizerEventV2Schema (#3485) --- packages/parser/src/schemas/apigwv2.ts | 2 +- packages/parser/tests/unit/schema/apigwv2.test.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/schemas/apigwv2.ts b/packages/parser/src/schemas/apigwv2.ts index 94193e2f80..6bab874fb0 100644 --- a/packages/parser/src/schemas/apigwv2.ts +++ b/packages/parser/src/schemas/apigwv2.ts @@ -230,7 +230,7 @@ const APIGatewayRequestAuthorizerEventV2Schema = z.object({ version: z.literal('2.0'), type: z.literal('REQUEST'), routeArn: z.string(), - identitySource: APIGatewayStringArray, + identitySource: APIGatewayStringArray.nullish(), routeKey: z.string(), rawPath: z.string(), rawQueryString: z.string(), diff --git a/packages/parser/tests/unit/schema/apigwv2.test.ts b/packages/parser/tests/unit/schema/apigwv2.test.ts index a1ab6874c3..916b20e2f8 100644 --- a/packages/parser/tests/unit/schema/apigwv2.test.ts +++ b/packages/parser/tests/unit/schema/apigwv2.test.ts @@ -98,6 +98,21 @@ describe('API Gateway HTTP (v2) Schemas', () => { // Assess expect(parsedEvent).toEqual(event); }); + + it('should parse the authorizer event with null identitySource', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'authorizer-request', + }); + event.identitySource = null; + + // Act + const parsedEvent = APIGatewayRequestAuthorizerEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); describe('APIGatewayRequestContextV2Schema', () => { From 7f7f8ced2953e0fc72a33cd2b6e8af15fae8d3d6 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 17 Jan 2025 14:47:40 +0100 Subject: [PATCH 05/31] fix(parser): DynamoDBStream schema & envelope (#3482) Co-authored-by: Alexander Schueren --- packages/commons/package.json | 8 + packages/commons/src/unmarshallDynamoDB.ts | 83 +++++ .../tests/unit/unmarshallDynamoDB.test.ts | 246 +++++++++++++++ packages/parser/src/envelopes/dynamodb.ts | 128 +++++--- packages/parser/src/schemas/dynamodb.ts | 56 +++- packages/parser/src/types/envelope.ts | 4 +- .../base.json} | 4 +- .../tests/unit/envelopes/dynamodb.test.ts | 283 +++++++++++------- packages/parser/tests/unit/helpers.test.ts | 23 +- .../parser/tests/unit/schema/dynamodb.test.ts | 121 +++++++- 10 files changed, 777 insertions(+), 179 deletions(-) create mode 100644 packages/commons/src/unmarshallDynamoDB.ts create mode 100644 packages/commons/tests/unit/unmarshallDynamoDB.test.ts rename packages/parser/tests/events/{dynamoStreamEvent.json => dynamodb/base.json} (96%) diff --git a/packages/commons/package.json b/packages/commons/package.json index ee46e651a6..f8a68c6105 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -49,6 +49,10 @@ "import": "./lib/esm/LRUCache.js", "require": "./lib/cjs/LRUCache.js" }, + "./utils/unmarshallDynamoDB": { + "import": "./lib/esm/unmarshallDynamoDB.js", + "require": "./lib/cjs/unmarshallDynamoDB.js" + }, "./types": { "import": "./lib/esm/types/index.js", "require": "./lib/cjs/types/index.js" @@ -68,6 +72,10 @@ "lib/cjs/LRUCache.d.ts", "lib/esm/LRUCache.d.ts" ], + "utils/unmarshallDynamoDB": [ + "lib/cjs/unmarshallDynamoDB.d.ts", + "lib/esm/unmarshallDynamoDB.d.ts" + ], "types": [ "lib/cjs/types/index.d.ts", "lib/esm/types/index.d.ts" diff --git a/packages/commons/src/unmarshallDynamoDB.ts b/packages/commons/src/unmarshallDynamoDB.ts new file mode 100644 index 0000000000..6c98201999 --- /dev/null +++ b/packages/commons/src/unmarshallDynamoDB.ts @@ -0,0 +1,83 @@ +import type { AttributeValue } from '@aws-sdk/client-dynamodb'; + +class UnmarshallDynamoDBAttributeError extends Error { + constructor(message: string) { + super(message); + this.name = 'UnmarshallDynamoDBAttributeError'; + } +} + +// biome-ignore lint/suspicious/noExplicitAny: we need to use any here to support the different types of DynamoDB attributes +const typeHandlers: Record unknown> = { + NULL: () => null, + S: (value) => value, + B: (value) => value, + BS: (value) => new Set(value), + SS: (value) => new Set(value), + BOOL: (value) => Boolean(value), + N: (value) => convertNumber(value), + NS: (value) => new Set((value as Array).map(convertNumber)), + L: (value) => (value as Array).map(convertAttributeValue), + M: (value) => + Object.entries(value).reduce( + (acc, [key, value]) => { + acc[key] = convertAttributeValue(value as AttributeValue); + return acc; + }, + {} as Record + ), +}; + +const convertAttributeValue = ( + data: AttributeValue | Record +): unknown => { + const [type, value] = Object.entries(data)[0]; + + if (value !== undefined) { + const handler = typeHandlers[type]; + if (!handler) { + throw new UnmarshallDynamoDBAttributeError( + `Unsupported type passed: ${type}` + ); + } + + return handler(value); + } + + throw new UnmarshallDynamoDBAttributeError( + `Value is undefined for type: ${type}` + ); +}; + +const convertNumber = (numString: string) => { + const num = Number(numString); + const infinityValues = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; + const isLargeFiniteNumber = + (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) && + !infinityValues.includes(num); + if (isLargeFiniteNumber) { + try { + return BigInt(numString); + } catch (error) { + throw new UnmarshallDynamoDBAttributeError( + `${numString} can't be converted to BigInt` + ); + } + } + return num; +}; + +/** + * Unmarshalls a DynamoDB AttributeValue to a JavaScript object. + * + * The implementation is loosely based on the official AWS SDK v3 unmarshall function but + * without support the customization options and with assumed support for BigInt. + * + * @param data - The DynamoDB AttributeValue to unmarshall + */ +const unmarshallDynamoDB = ( + data: AttributeValue | Record + // @ts-expect-error - We intentionally wrap the data into a Map to allow for nested structures +) => convertAttributeValue({ M: data }); + +export { unmarshallDynamoDB, UnmarshallDynamoDBAttributeError }; diff --git a/packages/commons/tests/unit/unmarshallDynamoDB.test.ts b/packages/commons/tests/unit/unmarshallDynamoDB.test.ts new file mode 100644 index 0000000000..1d85d41f45 --- /dev/null +++ b/packages/commons/tests/unit/unmarshallDynamoDB.test.ts @@ -0,0 +1,246 @@ +import { describe, expect, it } from 'vitest'; +import { + UnmarshallDynamoDBAttributeError, + unmarshallDynamoDB, +} from '../../src/unmarshallDynamoDB.js'; + +describe('Function: unmarshallDynamoDB', () => { + it('unmarshalls a DynamoDB string attribute', () => { + // Prepare + const value = { Message: { S: 'test string' } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Message: 'test string' }); + }); + + it('unmarshalls a DynamoDB number attribute', () => { + // Prepare + const value = { Id: { N: '123' } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Id: 123 }); + }); + + it('unmarshalls a DynamoDB boolean attribute', () => { + // Prepare + const value = { Message: { BOOL: true } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Message: true }); + }); + + it('unmarshalls a DynamoDB null attribute', () => { + // Prepare + const value = { Message: { NULL: true } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Message: null }); + }); + + it('unmarshalls a DynamoDB list attribute', () => { + // Prepare + const value = { + Messages: { + L: [{ S: 'string' }, { N: '123' }, { BOOL: true }, { NULL: true }], + }, + }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Messages: ['string', 123, true, null] }); + }); + + it('unmarshalls a DynamoDB map attribute', () => { + // Prepare + const value = { + Settings: { + M: { + string: { S: 'test' }, + number: { N: '123' }, + boolean: { BOOL: true }, + null: { NULL: true }, + }, + }, + }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ + Settings: { + string: 'test', + number: 123, + boolean: true, + null: null, + }, + }); + }); + + it('unmarshalls a DynamoDB string set attribute', () => { + // Prepare + const value = { Messages: { SS: ['a', 'b', 'c'] } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Messages: new Set(['a', 'b', 'c']) }); + }); + + it('unmarshalls a DynamoDB number set attribute', () => { + // Prepare + const value = { Ids: { NS: ['1', '2', '3'] } }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Ids: new Set([1, 2, 3]) }); + }); + + it('unmarshalls nested DynamoDB structures', () => { + // Prepare + const value = { + Messages: { + M: { + nested: { + M: { + list: { + L: [ + { S: 'string' }, + { + M: { + key: { S: 'value' }, + }, + }, + ], + }, + }, + }, + }, + }, + }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ + Messages: { + nested: { + list: ['string', { key: 'value' }], + }, + }, + }); + }); + + it('unmarshalls a DynamoDB binary attribute', () => { + // Prepare + const value = { + Data: { + B: new Uint8Array( + Buffer.from('dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk', 'base64') + ), + }, + }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Data: expect.any(Uint8Array) }); + }); + + it('unmarshalls a DynamoDB binary set attribute', () => { + // Prepare + const value = { + Data: { + BS: [ + new Uint8Array( + Buffer.from('dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk', 'base64') + ), + new Uint8Array( + Buffer.from('dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk', 'base64') + ), + ], + }, + }; + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Data: expect.any(Set) }); + }); + + it('throws if an unsupported type is passed', () => { + // Prepare + const value = { Message: { NNN: '123' } }; + + // Act & Assess + // @ts-expect-error - Intentionally invalid value + expect(() => unmarshallDynamoDB(value)).toThrow( + UnmarshallDynamoDBAttributeError + ); + }); + + it('unmarshalls a DynamoDB large number attribute to BigInt', () => { + // Prepare + const value = { Balance: { N: '9007199254740992' } }; // Number.MAX_SAFE_INTEGER + 1 + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Balance: BigInt('9007199254740992') }); + }); + + it('unmarshalls a DynamoDB negative large number attribute to BigInt', () => { + // Prepare + const value = { Balance: { N: '-9007199254740992' } }; // Number.MIN_SAFE_INTEGER - 1 + + // Act + const result = unmarshallDynamoDB(value); + + // Assess + expect(result).toStrictEqual({ Balance: BigInt('-9007199254740992') }); + }); + + it('throws when trying to convert an invalid number string to BigInt', () => { + // Prepare + const value = { Balance: { N: '9007199254740992.5' } }; // Invalid BigInt string (decimals not allowed) + + // Act & Assess + expect(() => unmarshallDynamoDB(value)).toThrow( + new UnmarshallDynamoDBAttributeError( + "9007199254740992.5 can't be converted to BigInt" + ) + ); + }); + + it('throws when no data is found', () => { + // Prepare + const value = undefined; + + // Act & Assess + // @ts-expect-error - Intentionally invalid value + expect(() => unmarshallDynamoDB(value)).toThrow( + UnmarshallDynamoDBAttributeError + ); + }); +}); diff --git a/packages/parser/src/envelopes/dynamodb.ts b/packages/parser/src/envelopes/dynamodb.ts index 1a499d216f..bbe0914303 100644 --- a/packages/parser/src/envelopes/dynamodb.ts +++ b/packages/parser/src/envelopes/dynamodb.ts @@ -1,9 +1,9 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; import { DynamoDBStreamSchema } from '../schemas/index.js'; import type { DynamoDBStreamEnvelopeResponse } from '../types/envelope.js'; -import type { ParsedResult, ParsedResultError } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import type { ParsedResult } from '../types/index.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * DynamoDB Stream Envelope to extract data within NewImage/OldImage @@ -23,12 +23,38 @@ export const DynamoDBStreamEnvelope = { ): DynamoDBStreamEnvelopeResponse>[] { const parsedEnvelope = DynamoDBStreamSchema.parse(data); - return parsedEnvelope.Records.map((record) => { - return { - NewImage: Envelope.parse(record.dynamodb.NewImage, schema), - OldImage: Envelope.parse(record.dynamodb.OldImage, schema), - }; - }); + const processImage = ( + image: unknown, + imageType: 'NewImage' | 'OldImage', + recordIndex: number + ) => { + try { + return image ? schema.parse(image) : undefined; + } catch (error) { + throw new ParseError( + `Failed to parse DynamoDB record at index ${recordIndex}`, + { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: [ + 'Records', + recordIndex, + 'dynamodb', + imageType, + ...issue.path, + ], + })) + ), + } + ); + } + }; + + return parsedEnvelope.Records.map((record, index) => ({ + NewImage: processImage(record.dynamodb.NewImage, 'NewImage', index), + OldImage: processImage(record.dynamodb.OldImage, 'OldImage', index), + })); }, safeParse( @@ -36,7 +62,6 @@ export const DynamoDBStreamEnvelope = { schema: T ): ParsedResult>[]> { const parsedEnvelope = DynamoDBStreamSchema.safeParse(data); - if (!parsedEnvelope.success) { return { success: false, @@ -46,39 +71,64 @@ export const DynamoDBStreamEnvelope = { originalEvent: data, }; } - const parsedLogEvents: DynamoDBStreamEnvelopeResponse>[] = []; - for (const record of parsedEnvelope.data.Records) { - const parsedNewImage = Envelope.safeParse( - record.dynamodb.NewImage, - schema - ); - const parsedOldImage = Envelope.safeParse( - record.dynamodb.OldImage, - schema - ); - if (!parsedNewImage.success || !parsedOldImage.success) { - return { - success: false, - error: !parsedNewImage.success - ? new ParseError('Failed to parse NewImage', { - cause: parsedNewImage.error, - }) - : new ParseError('Failed to parse OldImage', { - cause: (parsedOldImage as ParsedResultError).error, - }), - originalEvent: data, - }; - } - parsedLogEvents.push({ - NewImage: parsedNewImage.data, - OldImage: parsedOldImage.data, - }); + const processImage = (image: unknown) => + image ? schema.safeParse(image) : undefined; + + const result = parsedEnvelope.data.Records.reduce<{ + success: boolean; + records: DynamoDBStreamEnvelopeResponse>[]; + errors: { index?: number; issues?: ZodIssue[] }; + }>( + (acc, record, index) => { + const newImage = processImage(record.dynamodb.NewImage); + const oldImage = processImage(record.dynamodb.OldImage); + + if (newImage?.success === false || oldImage?.success === false) { + const issues: ZodIssue[] = []; + for (const key of ['NewImage', 'OldImage']) { + const image = key === 'NewImage' ? newImage : oldImage; + if (image?.success === false) { + issues.push( + ...(image.error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'dynamodb', key, ...issue.path], + })) + ); + } + } + acc.success = false; + // @ts-expect-error - index is assigned + acc.errors[index] = { issues }; + return acc; + } + + acc.records.push({ + NewImage: newImage?.data, + OldImage: oldImage?.data, + }); + return acc; + }, + { success: true, records: [], errors: {} } + ); + + if (result.success) { + return { success: true, data: result.records }; } + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse records at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse record at index ${Object.keys(result.errors)[0]}`; + const errorCause = new ZodError( + // @ts-expect-error - issues are assigned because success is false + Object.values(result.errors).flatMap((error) => error.issues) + ); + return { - success: true, - data: parsedLogEvents, + success: false, + error: new ParseError(errorMessage, { cause: errorCause }), + originalEvent: data, }; }, }; diff --git a/packages/parser/src/schemas/dynamodb.ts b/packages/parser/src/schemas/dynamodb.ts index f6bf57b5b6..6f4f51ca80 100644 --- a/packages/parser/src/schemas/dynamodb.ts +++ b/packages/parser/src/schemas/dynamodb.ts @@ -1,6 +1,7 @@ +import { unmarshallDynamoDB } from '@aws-lambda-powertools/commons/utils/unmarshallDynamoDB'; import { z } from 'zod'; -const DynamoDBStreamChangeRecord = z.object({ +const DynamoDBStreamChangeRecordBase = z.object({ ApproximateCreationDateTime: z.number().optional(), Keys: z.record(z.string(), z.record(z.string(), z.any())), NewImage: z.record(z.string(), z.any()).optional(), @@ -15,6 +16,55 @@ const DynamoDBStreamChangeRecord = z.object({ ]), }); +const DynamoDBStreamChangeRecord = DynamoDBStreamChangeRecordBase.transform( + (object, ctx) => { + const result = { ...object }; + + const unmarshallAttributeValue = ( + imageName: 'NewImage' | 'OldImage' | 'Keys', + image: Record + ) => { + try { + // @ts-expect-error + return unmarshallDynamoDB(image) as Record; + } catch (err) { + ctx.addIssue({ + code: 'custom', + message: `Could not unmarshall ${imageName} in DynamoDB stream record`, + fatal: true, + path: [imageName], + }); + return z.NEVER; + } + }; + + const unmarshalledKeys = unmarshallAttributeValue('Keys', object.Keys); + if (unmarshalledKeys === z.NEVER) return z.NEVER; + // @ts-expect-error - We are intentionally mutating the object + result.Keys = unmarshalledKeys; + + if (object.NewImage) { + const unmarshalled = unmarshallAttributeValue( + 'NewImage', + object.NewImage + ); + if (unmarshalled === z.NEVER) return z.NEVER; + result.NewImage = unmarshalled; + } + + if (object.OldImage) { + const unmarshalled = unmarshallAttributeValue( + 'OldImage', + object.OldImage + ); + if (unmarshalled === z.NEVER) return z.NEVER; + result.OldImage = unmarshalled; + } + + return result; + } +); + const UserIdentity = z.object({ type: z.enum(['Service']), principalId: z.literal('dynamodb.amazonaws.com'), @@ -35,7 +85,7 @@ const DynamoDBStreamToKinesisRecord = DynamoDBStreamRecord.extend({ recordFormat: z.literal('application/json'), tableName: z.string(), userIdentity: UserIdentity.nullish(), - dynamodb: DynamoDBStreamChangeRecord.omit({ + dynamodb: DynamoDBStreamChangeRecordBase.omit({ SequenceNumber: true, StreamViewType: true, }), @@ -120,7 +170,7 @@ const DynamoDBStreamToKinesisRecord = DynamoDBStreamRecord.extend({ * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html} */ const DynamoDBStreamSchema = z.object({ - Records: z.array(DynamoDBStreamRecord), + Records: z.array(DynamoDBStreamRecord).min(1), }); export { diff --git a/packages/parser/src/types/envelope.ts b/packages/parser/src/types/envelope.ts index 6d8e16ede3..4659ccad76 100644 --- a/packages/parser/src/types/envelope.ts +++ b/packages/parser/src/types/envelope.ts @@ -3,8 +3,8 @@ import type { envelopeDiscriminator } from '../envelopes/envelope.js'; import type { ParsedResult } from './parser.js'; type DynamoDBStreamEnvelopeResponse = { - NewImage: z.infer; - OldImage: z.infer; + NewImage?: z.infer; + OldImage?: z.infer; }; interface ArrayEnvelope { diff --git a/packages/parser/tests/events/dynamoStreamEvent.json b/packages/parser/tests/events/dynamodb/base.json similarity index 96% rename from packages/parser/tests/events/dynamoStreamEvent.json rename to packages/parser/tests/events/dynamodb/base.json index 16009a7a95..db182d3b9a 100644 --- a/packages/parser/tests/events/dynamoStreamEvent.json +++ b/packages/parser/tests/events/dynamodb/base.json @@ -18,7 +18,7 @@ "N": "101" } }, - "StreamViewType": "NEW_AND_OLD_IMAGES", + "StreamViewType": "NEW_IMAGE", "SequenceNumber": "111", "SizeBytes": 26 }, @@ -62,4 +62,4 @@ "eventSource": "aws:dynamodb" } ] -} +} \ No newline at end of file diff --git a/packages/parser/tests/unit/envelopes/dynamodb.test.ts b/packages/parser/tests/unit/envelopes/dynamodb.test.ts index 0d40811445..372dfb732d 100644 --- a/packages/parser/tests/unit/envelopes/dynamodb.test.ts +++ b/packages/parser/tests/unit/envelopes/dynamodb.test.ts @@ -1,141 +1,206 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { AttributeValue, DynamoDBStreamEvent } from 'aws-lambda'; +import { marshall } from '@aws-sdk/util-dynamodb'; import { describe, expect, it } from 'vitest'; import { ZodError, z } from 'zod'; import { DynamoDBStreamEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; -import { TestEvents } from '../schema/utils.js'; +import type { DynamoDBStreamEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from '../schema/utils.js'; -describe('DynamoDB', () => { - const schema = z.object({ - Message: z.record(z.literal('S'), z.string()), - Id: z.record(z.literal('N'), z.number().min(0).max(100)), +describe('Envelope: DynamoDB Stream', () => { + const schema = z + .object({ + Message: z.string(), + Id: z.number(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'dynamodb', + filename: 'base', }); - const mockOldImage = generateMock(schema); - const mockNewImage = generateMock(schema); - const dynamodbEvent = TestEvents.dynamoStreamEvent as DynamoDBStreamEvent; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (dynamodbEvent.Records[0].dynamodb!.NewImage as typeof mockNewImage) = - mockNewImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (dynamodbEvent.Records[1].dynamodb!.NewImage as typeof mockNewImage) = - mockNewImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (dynamodbEvent.Records[0].dynamodb!.OldImage as typeof mockOldImage) = - mockOldImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (dynamodbEvent.Records[1].dynamodb!.OldImage as typeof mockOldImage) = - mockOldImage; - describe('parse', () => { - it('parse should parse dynamodb envelope', () => { - const parsed = DynamoDBStreamEnvelope.parse(dynamodbEvent, schema); - expect(parsed[0]).toEqual({ - OldImage: mockOldImage, - NewImage: mockNewImage, - }); - expect(parsed[1]).toEqual({ - OldImage: mockOldImage, - NewImage: mockNewImage, - }); - }); - it('parse should throw error if envelope invalid', () => { + + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess expect(() => - DynamoDBStreamEnvelope.parse({ foo: 'bar' }, schema) - ).toThrow(); + DynamoDBStreamEnvelope.parse( + event, + z + .object({ + Message: z.string(), + }) + .strict() + ) + ).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse DynamoDB record at index 0' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'unrecognized_keys', + keys: ['Id'], + message: "Unrecognized key(s) in object: 'Id'", + path: ['Records', 0, 'dynamodb', 'NewImage'], + }, + ], + }), + }) + ); }); - it('parse should throw error if new or old image is invalid', () => { - const ddbEvent = TestEvents.dynamoStreamEvent as DynamoDBStreamEvent; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - ddbEvent.Records[0].dynamodb!.NewImage!.Id = 'foo' as AttributeValue; - expect(() => DynamoDBStreamEnvelope.parse(ddbEvent, schema)).toThrow(); + + it('parses a DynamoDB Stream event', () => { + // Prepare + const testEvent = structuredClone(baseEvent); + + // Act + const result = DynamoDBStreamEnvelope.parse(testEvent, schema); + + // Assess + expect(result[0]).toEqual({ + NewImage: { + Message: 'New item!', + Id: 101, + }, + }); + expect(result[1]).toEqual({ + OldImage: { + Message: 'New item!', + Id: 101, + }, + NewImage: { + Message: 'This item has changed', + Id: 101, + }, + }); }); }); - describe('safeParse', () => { - it('safeParse should parse dynamodb envelope', () => { - const parsed = DynamoDBStreamEnvelope.safeParse(dynamodbEvent, schema); - expect(parsed.success).toBe(true); - expect(parsed).toEqual({ + describe('Method: safeParse', () => { + it('parses a DynamoDB Stream event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = DynamoDBStreamEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ success: true, data: [ { - OldImage: mockOldImage, - NewImage: mockNewImage, + NewImage: { + Message: 'New item!', + Id: 101, + }, }, { - OldImage: mockOldImage, - NewImage: mockNewImage, + OldImage: { + Message: 'New item!', + Id: 101, + }, + NewImage: { + Message: 'This item has changed', + Id: 101, + }, }, ], }); }); - it('safeParse should return error if NewImage is invalid', () => { - const invalidDDBEvent = - TestEvents.dynamoStreamEvent as DynamoDBStreamEvent; - - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[0].dynamodb!.NewImage as typeof mockNewImage) = { - Id: { N: 101 }, - Message: { S: 'foo' }, - }; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[1].dynamodb!.NewImage as typeof mockNewImage) = - mockNewImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[0].dynamodb!.OldImage as typeof mockOldImage) = - mockOldImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[1].dynamodb!.OldImage as typeof mockOldImage) = - mockOldImage; - - const parseResult = DynamoDBStreamEnvelope.safeParse( - invalidDDBEvent, - schema - ); - expect(parseResult).toEqual({ + + it('returns an error if the event is not a valid DynamoDB Stream event', () => { + // Prepare + const event = structuredClone(baseEvent); + // @ts-expect-error - Intentionally invalid event + event.Records[0].dynamodb = undefined; + + // Act + const result = DynamoDBStreamEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: invalidDDBEvent, + error: new ParseError('Failed to parse DynamoDB Stream envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['Records', 0, 'dynamodb'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); - it('safeParse should return error if OldImage is invalid', () => { - const invalidDDBEvent = - TestEvents.dynamoStreamEvent as DynamoDBStreamEvent; - - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[0].dynamodb!.OldImage as typeof mockNewImage) = { - Id: { N: 101 }, - Message: { S: 'foo' }, - }; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[1].dynamodb!.NewImage as typeof mockNewImage) = - mockNewImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[0].dynamodb!.OldImage as typeof mockOldImage) = - mockOldImage; - // biome-ignore lint/style/noNonNullAssertion: it is ensured that this event has these properties - (invalidDDBEvent.Records[0].dynamodb!.NewImage as typeof mockNewImage) = - mockNewImage; - - const parsed = DynamoDBStreamEnvelope.safeParse(invalidDDBEvent, schema); - expect(parsed).toEqual({ + it('returns an error if any of the records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1].dynamodb.NewImage = marshall({ + Message: 42, + Id: 101, + }); + + // Act + const result = DynamoDBStreamEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: invalidDDBEvent, + error: new ParseError('Failed to parse record at index 1', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'number', + path: ['Records', 1, 'dynamodb', 'NewImage', 'Message'], + message: 'Expected string, received number', + }, + ]), + }), + originalEvent: event, }); }); - it('safeParse should return error if envelope is invalid', () => { - const parsed = DynamoDBStreamEnvelope.safeParse({ foo: 'bar' }, schema); - expect(parsed).toEqual({ + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.NewImage = marshall({ Id: 2 }); + event.Records[1].dynamodb.NewImage = marshall({ + Message: 42, + Id: 101, + }); + + // Act + const result = DynamoDBStreamEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError('Failed to parse records at indexes 0, 1', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'dynamodb', 'NewImage', 'Message'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'string', + received: 'number', + path: ['Records', 1, 'dynamodb', 'NewImage', 'Message'], + message: 'Expected string, received number', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/helpers.test.ts b/packages/parser/tests/unit/helpers.test.ts index 15f03b136c..ae25400366 100644 --- a/packages/parser/tests/unit/helpers.test.ts +++ b/packages/parser/tests/unit/helpers.test.ts @@ -169,6 +169,11 @@ describe('DynamoDBMarshalled', () => { Id: z.number(), }); + const baseEvent = getTestEvent({ + eventsPath: 'dynamodb', + filename: 'base', + }); + const extendedSchema = DynamoDBStreamSchema.extend({ Records: z.array( DynamoDBStreamRecord.extend({ @@ -210,11 +215,7 @@ describe('DynamoDBMarshalled', () => { }, ]; - const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'dynamoStreamEvent', - }); - + const testEvent = structuredClone(baseEvent); testEvent.Records[0].dynamodb.NewImage = testInput[0]; testEvent.Records[1].dynamodb.NewImage = testInput[1]; @@ -258,11 +259,7 @@ describe('DynamoDBMarshalled', () => { }, ]; - const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'dynamoStreamEvent', - }); - + const testEvent = structuredClone(baseEvent); testEvent.Records[0].dynamodb.NewImage = testInput[0]; testEvent.Records[1].dynamodb.NewImage = testInput[1]; @@ -291,11 +288,7 @@ describe('DynamoDBMarshalled', () => { }, ]; - const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'dynamoStreamEvent', - }); - + const testEvent = structuredClone(baseEvent); testEvent.Records[0].dynamodb.NewImage = testInput[0]; testEvent.Records[1].dynamodb.NewImage = testInput[1]; diff --git a/packages/parser/tests/unit/schema/dynamodb.test.ts b/packages/parser/tests/unit/schema/dynamodb.test.ts index a569032836..e3522edb85 100644 --- a/packages/parser/tests/unit/schema/dynamodb.test.ts +++ b/packages/parser/tests/unit/schema/dynamodb.test.ts @@ -1,12 +1,115 @@ import { describe, expect, it } from 'vitest'; -import { DynamoDBStreamSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; - -describe('DynamoDB ', () => { - const dynamoStreamEvent = TestEvents.dynamoStreamEvent; - it('should parse a stream of records', () => { - expect(DynamoDBStreamSchema.parse(dynamoStreamEvent)).toEqual( - dynamoStreamEvent - ); +import { DynamoDBStreamSchema } from '../../../src/schemas/dynamodb.js'; +import type { DynamoDBStreamEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from '../schema/utils.js'; + +describe('Schema: DynamoDB', () => { + const baseEvent = getTestEvent({ + eventsPath: 'dynamodb', + filename: 'base', + }); + + it('parses a DynamoDB Stream event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = DynamoDBStreamSchema.parse(event); + + // Assess + expect(result).toStrictEqual({ + Records: [ + { + eventID: '1', + eventVersion: '1.0', + dynamodb: { + ApproximateCreationDateTime: 1693997155.0, + Keys: { + Id: 101, + }, + NewImage: { + Message: 'New item!', + Id: 101, + }, + StreamViewType: 'NEW_IMAGE', + SequenceNumber: '111', + SizeBytes: 26, + }, + awsRegion: 'us-west-2', + eventName: 'INSERT', + eventSourceARN: 'eventsource_arn', + eventSource: 'aws:dynamodb', + }, + { + eventID: '2', + eventVersion: '1.0', + dynamodb: { + OldImage: { + Message: 'New item!', + Id: 101, + }, + SequenceNumber: '222', + Keys: { + Id: 101, + }, + SizeBytes: 59, + NewImage: { + Message: 'This item has changed', + Id: 101, + }, + StreamViewType: 'NEW_AND_OLD_IMAGES', + }, + awsRegion: 'us-west-2', + eventName: 'MODIFY', + eventSourceARN: 'source_arn', + eventSource: 'aws:dynamodb', + }, + ], + }); + }); + + it('throws if the event is not a DynamoDB Stream event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => DynamoDBStreamSchema.parse(event)).toThrow(); + }); + + it('throws if the Keys DynamoDB AttributeValues cannot be unmarshalled', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.Keys = { + Id: { L: 'invalid' }, + }; + + // Act & Assess + expect(() => DynamoDBStreamSchema.parse(event)).toThrow(); + }); + + it('throws if the NewImage DynamoDB AttributeValues cannot be unmarshalled', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.NewImage = { + Message: { S: 'New item!' }, + Id: { L: 'invalid' }, + }; + + // Act & Assess + expect(() => DynamoDBStreamSchema.parse(event)).toThrow(); + }); + + it('throws if the OldImage DynamoDB AttributeValues cannot be unmarshalled', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1].dynamodb.OldImage = { + Message: { S: 'New item!' }, + Id: { L: 'invalid' }, + }; + + // Act & Assess + expect(() => DynamoDBStreamSchema.parse(event)).toThrow(); }); }); From a009135d301eff1bc4485f08e254e10feed4a065 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:21:48 +0100 Subject: [PATCH 06/31] chore(deps-dev): bump katex from 0.16.19 to 0.16.21 (#3491) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d61d6cea1d..811c53cfed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9566,9 +9566,9 @@ "dev": true }, "node_modules/katex": { - "version": "0.16.19", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.19.tgz", - "integrity": "sha512-3IA6DYVhxhBabjSLTNO9S4+OliA3Qvb8pBQXMfC4WxXJgLwZgnfDl0BmB4z6nBMdznBsZ+CGM8DrGZ5hcguDZg==", + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", "dev": true, "funding": [ "https://opencollective.com/katex", From 1950e4dab65ed1b60516419a9355ade17df243b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:26:51 +0100 Subject: [PATCH 07/31] chore(deps): bump the aws-cdk group across 1 directory with 2 updates (#3477) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/app/package.json | 4 ++-- layers/package.json | 4 ++-- package-lock.json | 17 ++++++++--------- packages/testing/package.json | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/examples/app/package.json b/examples/app/package.json index 1050967533..df67d55e53 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk-lib": "^2.175.1", + "aws-cdk-lib": "^2.176.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21", "tsx": "^4.19.2", @@ -49,7 +49,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk": "^2.175.1", + "aws-cdk": "^2.176.0", "constructs": "^10.4.2", "esbuild": "^0.24.2", "typescript": "^5.7.2" diff --git a/layers/package.json b/layers/package.json index ab115aaec3..c7d3280b0c 100644 --- a/layers/package.json +++ b/layers/package.json @@ -40,8 +40,8 @@ "source-map-support": "^0.5.21" }, "dependencies": { - "aws-cdk": "^2.175.1", - "aws-cdk-lib": "^2.175.1", + "aws-cdk": "^2.176.0", + "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", "tsx": "^4.19.2" } diff --git a/package-lock.json b/package-lock.json index 811c53cfed..195064db4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,7 +62,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk": "^2.175.1", + "aws-cdk": "^2.176.0", "constructs": "^10.4.2", "esbuild": "^0.24.2", "typescript": "^5.7.2" @@ -70,7 +70,7 @@ "devDependencies": { "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.5", - "aws-cdk-lib": "^2.175.1", + "aws-cdk-lib": "^2.176.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21", "tsx": "^4.19.2", @@ -483,8 +483,8 @@ "version": "2.13.0", "license": "MIT-0", "dependencies": { - "aws-cdk": "^2.175.1", - "aws-cdk-lib": "^2.175.1", + "aws-cdk": "^2.176.0", + "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", "tsx": "^4.19.2" }, @@ -6460,10 +6460,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.175.1", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.175.1.tgz", - "integrity": "sha512-duvy0FtGAAYqJi/x0MjBfCp60ZlDYl0X5/GrADwMz4AfHQ8aTXCyaVsdJuCxz0ZMHSNaFRuCNkAlc2Xu43zQmQ==", - "license": "Apache-2.0", + "version": "2.176.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.176.0.tgz", + "integrity": "sha512-yRjIXzK2ddznwuSjasWAViYBtBSQbEu6GHlylaC3GHsIUPhrK3KguqIuhdlxjMeiQ1Fvok8REDLCReZJdrSLLg==", "bin": { "cdk": "bin/cdk" }, @@ -17233,7 +17232,7 @@ "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", "@aws-sdk/client-lambda": "^3.723.0", "@smithy/util-utf8": "^4.0.0", - "aws-cdk-lib": "^2.175.1", + "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", "promise-retry": "^2.0.1" }, diff --git a/packages/testing/package.json b/packages/testing/package.json index 05ce89f444..d65a3e561c 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -100,7 +100,7 @@ "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", "@aws-sdk/client-lambda": "^3.723.0", "@smithy/util-utf8": "^4.0.0", - "aws-cdk-lib": "^2.175.1", + "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", "promise-retry": "^2.0.1" }, From b48ca508b4494d828c294ed4763f458c1e522de6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:40:40 +0100 Subject: [PATCH 08/31] chore(deps): bump @types/node from 22.10.5 to 22.10.7 (#3479) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/app/package.json | 4 ++-- package-lock.json | 12 ++++++------ package.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/app/package.json b/examples/app/package.json index df67d55e53..fc2f626649 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -29,7 +29,7 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.147", - "@types/node": "22.10.5", + "@types/node": "22.10.7", "aws-cdk-lib": "^2.176.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21", @@ -48,7 +48,7 @@ "@aws-sdk/lib-dynamodb": "^3.724.0", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", - "@types/node": "22.10.5", + "@types/node": "22.10.7", "aws-cdk": "^2.176.0", "constructs": "^10.4.2", "esbuild": "^0.24.2", diff --git a/package-lock.json b/package-lock.json index 195064db4e..93285fc241 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "devDependencies": { "@biomejs/biome": "^1.9.4", "@types/aws-lambda": "^8.10.147", - "@types/node": "^22.10.5", + "@types/node": "^22.10.7", "@vitest/coverage-v8": "^2.1.8", "husky": "^9.1.7", "lerna": "8.1.2", @@ -61,7 +61,7 @@ "@aws-sdk/lib-dynamodb": "^3.724.0", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", - "@types/node": "22.10.5", + "@types/node": "22.10.7", "aws-cdk": "^2.176.0", "constructs": "^10.4.2", "esbuild": "^0.24.2", @@ -69,7 +69,7 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.147", - "@types/node": "22.10.5", + "@types/node": "22.10.7", "aws-cdk-lib": "^2.176.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21", @@ -5910,9 +5910,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", - "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", "dependencies": { "undici-types": "~6.20.0" } diff --git a/package.json b/package.json index 7512231c7e..5a131f6830 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "devDependencies": { "@biomejs/biome": "^1.9.4", "@types/aws-lambda": "^8.10.147", - "@types/node": "^22.10.5", + "@types/node": "^22.10.7", "@vitest/coverage-v8": "^2.1.8", "husky": "^9.1.7", "lerna": "8.1.2", From 2b19658141b06574bb1a94f34c0896ba3b72259e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:46:11 +0100 Subject: [PATCH 09/31] chore(deps): bump the aws-sdk-v3 group across 1 directory with 10 updates (#3495) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrea Amorosi --- examples/app/package.json | 4 +- examples/snippets/package.json | 10 +- package-lock.json | 886 +++++++++++++++--------------- packages/idempotency/package.json | 4 +- packages/metrics/package.json | 2 +- packages/parameters/package.json | 10 +- packages/testing/package.json | 4 +- packages/tracer/package.json | 4 +- 8 files changed, 451 insertions(+), 473 deletions(-) diff --git a/examples/app/package.json b/examples/app/package.json index fc2f626649..374bd5d11f 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -44,8 +44,8 @@ "@aws-lambda-powertools/metrics": "^2.13.0", "@aws-lambda-powertools/parameters": "^2.13.0", "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/lib-dynamodb": "^3.724.0", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/lib-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.7", diff --git a/examples/snippets/package.json b/examples/snippets/package.json index e1ffb144a4..2460b2072b 100644 --- a/examples/snippets/package.json +++ b/examples/snippets/package.json @@ -32,11 +32,11 @@ "@aws-lambda-powertools/parameters": "^2.13.0", "@aws-lambda-powertools/parser": "^2.13.0", "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", "aws-sdk": "^2.1692.0", "aws-sdk-client-mock": "^4.1.0", diff --git a/package-lock.json b/package-lock.json index 93285fc241..c9e3286348 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,8 +57,8 @@ "@aws-lambda-powertools/metrics": "^2.13.0", "@aws-lambda-powertools/parameters": "^2.13.0", "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/lib-dynamodb": "^3.724.0", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/lib-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.147", "@types/node": "22.10.7", @@ -467,11 +467,11 @@ "@aws-lambda-powertools/parameters": "^2.13.0", "@aws-lambda-powertools/parser": "^2.13.0", "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", "aws-sdk": "^2.1692.0", "aws-sdk-client-mock": "^4.1.0", @@ -1083,26 +1083,24 @@ "link": true }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.723.0.tgz", - "integrity": "sha512-mXEZxU4b7kf8FLr5O9GForZX9vE1/OPWGhfTuQUMhRoAoEwkjqbsMaS7n9Kk9ubCyrzJFxXfKZSC3IjyaYIimA==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.731.1.tgz", + "integrity": "sha512-CqHOBF2V27Yf1muLp03q0FJE6UERB92HkY/In7LPjg2ZmIZq+WB34EM7cVQ3ZUmVqC4/jzlwfstHem0ujlMrCA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1148,26 +1146,24 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.723.0.tgz", - "integrity": "sha512-UQ+112RlVzNpuNDb+aQibLIZc+MdPrPMP+oYIT6iVEd6VCRlWLM7W5fH2mPic3ZwpZQ/6NV90GcpUwoSN5JxQQ==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.731.1.tgz", + "integrity": "sha512-3fAV3suEiXyyGGV8zj3P5QvxSOoOvZHbwfgJrOnwh/SM6t2figD4GxCeZh2rwX2CMEp42VGeUiLZRspbOfzWcg==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1214,26 +1210,24 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.724.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.724.0.tgz", - "integrity": "sha512-pER0yWqKyKV+0WDyCmtfUq0UYrjBmmf4sVHExGDih9aszsd3Mu7Jw4Yv+GDE6BDyUSxAlx1RIKn93JHSwebd8w==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.731.1.tgz", + "integrity": "sha512-rdvGbusvbcp4NB1gAr9OGYD9cbyxXNAAaq3BopFMmtqUW1vhD+8DXcQYnZBAu93qjr8Nep1qDtysoIp+AeSOjg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-endpoint-discovery": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-endpoint-discovery": "3.731.0", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1280,25 +1274,23 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.723.0.tgz", - "integrity": "sha512-fN+Eb0NurCQQBQOoTdVqOBdbAePLquTAOmORSyTmQ1bN0OAXtIbVL/79qyV0Aa4r2hcYOzB6o64RXvK/xgWDtw==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.731.1.tgz", + "integrity": "sha512-W6fjtBVFjq+loCKKO4Gi/oOFclUPTdtQflx/tTZrOej2OMy/CgCFdqoxyc017+MkfYc3v1ZX0P7pl/qQiBAWfQ==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/eventstream-serde-browser": "^4.0.0", @@ -1347,26 +1339,24 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.723.0.tgz", - "integrity": "sha512-Zh+j0J9iog4c9l8re9EXvS3/+ylVwbJIFbqDJUvqszdCrTAFQGaGVdxoJND5WC5Ggr6Syiy7ZDj0p+yrEQOObA==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.731.1.tgz", + "integrity": "sha512-uLyvWKOtTSxxdUjii5Xcvp6nuOw1G3cSpTRlTNXWcj5UZ1bzdZUM++koGcMQX1GPycB9IVoiiXJ/mYpZrcRLig==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1413,25 +1403,23 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.723.0.tgz", - "integrity": "sha512-me9t6hBZDsKxolpby0B1+9Kp2PMj0t13QvShibRFzWXEOn7jBK/66pkOocPGcMTGHGcDBIOST57ZIwmPSCg8zg==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.731.1.tgz", + "integrity": "sha512-aGElck30bAU2mgpV8PwRoGSnTT3Kt4S71Z54VKMTdu1yZC9Iwj2cFAlQjkr3bZEooo38jBn/FtENBOpTZKBpew==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1478,71 +1466,22 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.723.0.tgz", - "integrity": "sha512-9IH90m4bnHogBctVna2FnXaIGVORncfdxcqeEIovOxjIJJyHDmEAtA7B91dAM4sruddTbVzOYnqfPVst3odCbA==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.731.0.tgz", + "integrity": "sha512-O4C/UYGgqMsBg21MMApFdgyh8BX568hQhbdoNFmRVTBoSnCZ3w+H4a1wBPX4Gyl0NX+ab6Xxo9rId8HiyPXJ0A==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1570,89 +1509,14 @@ "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, "engines": { "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.723.0.tgz", - "integrity": "sha512-YyN8x4MI/jMb4LpHsLf+VYqvbColMK8aZeGWVk2fTFsmt8lpTYGaGC1yybSwGX42mZ4W8ucu8SAYSbUraJZEjA==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1661,26 +1525,24 @@ } }, "node_modules/@aws-sdk/client-xray": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.723.0.tgz", - "integrity": "sha512-ymjZCm3VdpjeoiUWPjOWxEuuj5hrBZq7H4lTOpgVP9U4ErvrzFmXpCgXRPGdpjCyk/lsUcr5pjWYxhXzXaX8FA==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.731.1.tgz", + "integrity": "sha512-MNyeJvUxOwKP7L8fNZnz5wKLBxlcStKdCbvmGQt3kJEoif7zFTSy/wbVil78f40cDNBz4w3uZYYjC/VneJdRLw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", @@ -1725,11 +1587,11 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.731.0.tgz", + "integrity": "sha512-ithBN1VWASkvAIlozJmenqDvNnFddr/SZXAs58+jCnBHgy3tXLHABZGVNCjetZkHRqNdXEO1kirnoxaFeXMeDA==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/core": "^3.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/property-provider": "^4.0.0", @@ -1746,9 +1608,9 @@ } }, "node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1757,12 +1619,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.731.0.tgz", + "integrity": "sha512-h0WWZg4QMLgFVyIvQrC43zpVqsUWg1mPM1clpogP43B8+wEhDEQ4qWRzvFs3dQ4cqx/FLyDUZZF4cqgd94z7kw==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -1772,9 +1634,9 @@ } }, "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1783,12 +1645,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.731.0.tgz", + "integrity": "sha512-iRtrjtcYaWgbvtu2cvDhIsPWXZGvhy1Hgks4682MEBNTc9AUwlfvDrYz2EEnTtJJyrbOdEHVrYrzqD8qPyVLCg==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/property-provider": "^4.0.0", @@ -1803,9 +1665,9 @@ } }, "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1814,17 +1676,18 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.731.1.tgz", + "integrity": "sha512-0M0ejuqW8iHNcTH2ZXSY9m+I7Y06qVkj6k3vfQU9XaB//mTUCxxfGfqWAtgfr7Yi73egABTcPc0jyPdcvSW4Kw==", + "dependencies": { + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-env": "3.731.0", + "@aws-sdk/credential-provider-http": "3.731.0", + "@aws-sdk/credential-provider-process": "3.731.0", + "@aws-sdk/credential-provider-sso": "3.731.1", + "@aws-sdk/credential-provider-web-identity": "3.731.1", + "@aws-sdk/nested-clients": "3.731.1", + "@aws-sdk/types": "3.731.0", "@smithy/credential-provider-imds": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", @@ -1833,15 +1696,12 @@ }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" } }, "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1850,17 +1710,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.731.1.tgz", + "integrity": "sha512-5c0ZiagMTPmWilXNffeXJCLoCEz97jilHr3QJWwf2GaTay4tzN+Ld71rpdfEenzUR7fuxEWFfVlwQbFOzFNYHg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.731.0", + "@aws-sdk/credential-provider-http": "3.731.0", + "@aws-sdk/credential-provider-ini": "3.731.1", + "@aws-sdk/credential-provider-process": "3.731.0", + "@aws-sdk/credential-provider-sso": "3.731.1", + "@aws-sdk/credential-provider-web-identity": "3.731.1", + "@aws-sdk/types": "3.731.0", "@smithy/credential-provider-imds": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", @@ -1872,9 +1732,9 @@ } }, "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1883,12 +1743,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.731.0.tgz", + "integrity": "sha512-6yNMY6q3xHLbs2f2+C6GhvMrjTgtFBiPJJqKaPLsTIhlTRvh4sK8pGm3ITcma0jOxtPDIuoPfBAV8N8XVMBlZg==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", @@ -1899,9 +1759,9 @@ } }, "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1910,14 +1770,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", - "dependencies": { - "@aws-sdk/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.731.1.tgz", + "integrity": "sha512-p1tp+rMUf5YNQLr8rVRmDgNtKGYLL0KCdq3K2hwwvFnx9MjReF1sA4lfm3xWsxBQM+j3QN9AvMQqBzDJ+NOSdw==", + "dependencies": { + "@aws-sdk/client-sso": "3.731.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/token-providers": "3.731.1", + "@aws-sdk/types": "3.731.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", @@ -1928,9 +1788,9 @@ } }, "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1939,27 +1799,25 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.731.1.tgz", + "integrity": "sha512-+ynAvEGWDR5ZJFxgpwwzhvlQ3WQ7BleWXU6JwpIw3yFrD4eZEn85b8DZC1aEz7C9kb1HSV6B3gpqHqlyS6wj8g==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/nested-clients": "3.731.1", + "@aws-sdk/types": "3.731.0", "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -1980,12 +1838,12 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.724.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.724.0.tgz", - "integrity": "sha512-qrqJ1SychxOtaZRq+a67YOtT6zjepMNWf/Zuds/kJkerQTj/SMG5BTI5aOmAq+btS3wR2axeKJ48DGNAkMhttQ==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.731.1.tgz", + "integrity": "sha512-rUYKjjyfTJ4id1ZLMSmyQY+XzybE22qS3uve4odTRU+pgrGCpP7W3jHGMhlxULtV6AJyfME/zMnBiZ177rrgnw==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/util-dynamodb": "3.724.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/util-dynamodb": "3.731.1", "@smithy/core": "^3.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", @@ -1995,7 +1853,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.724.0" + "@aws-sdk/client-dynamodb": "^3.731.1" } }, "node_modules/@aws-sdk/lib-dynamodb/node_modules/@smithy/types": { @@ -2010,12 +1868,12 @@ } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.723.0.tgz", - "integrity": "sha512-7AO4KEDTWCAQSgAv6KsR+VAo6OBPgyp4i071blwO1dohACGfNLBuvx/Ux914h7x6Aye8ViGjPtbb6wFJy5OCUw==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.731.0.tgz", + "integrity": "sha512-LbpVOltiaDQLJV1hmH1eupnowoVXI4U7vLt3T31FQH4Ec24L4CLipYVpaHl0Al+1hgiWZ5xJ+sGTVmtvr/vOnQ==", "dependencies": { "@aws-sdk/endpoint-cache": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", @@ -2026,9 +1884,9 @@ } }, "node_modules/@aws-sdk/middleware-endpoint-discovery/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2037,11 +1895,11 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.731.0.tgz", + "integrity": "sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -2051,9 +1909,9 @@ } }, "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2062,11 +1920,11 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.731.0.tgz", + "integrity": "sha512-IIZrOdjbY2vKzPJPrwE7FoFQCIPEL6UqURi8LEaiVyCag4p2fvaTN5pgKuQtGC2+iYd/HHcGT4qn2bAqF5Jmmw==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -2075,9 +1933,9 @@ } }, "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2086,11 +1944,11 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.731.0.tgz", + "integrity": "sha512-y6FLASB1iKWuR5tUipMyo77bt0lEl3OnCrrd2xw/H24avq1HhJjjPR0HHhJE6QKJzF/FYXeV88tcyPSMe32VDw==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -2100,9 +1958,9 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2111,13 +1969,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.731.0.tgz", + "integrity": "sha512-Ngr2Gz0aec/uduoKaO3srN52SYkEHndYtFzkK/gDUyQwQzi4ha2eIisxPiuHEX6RvXT31V9ouqn/YtVkt0R76A==", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", "@smithy/core": "^3.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", @@ -2128,9 +1986,68 @@ } }, "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.731.1.tgz", + "integrity": "sha512-/L8iVrulnXZl+kgmTn+oxRxNnhcSIbf+r12C06vGUq60w0YMidLvxJZN7vt8H9SnCAGCHqud2MS7ExCEvhc0gA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2139,11 +2056,11 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.731.0.tgz", + "integrity": "sha512-XlDpRNkDVHF59f07JmkuAidEv//m3hT6/JL85h0l3+zrpaRWhf8n8lVUyAPNq35ZujK8AcorYM+93u7hdWsliQ==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/util-config-provider": "^4.0.0", @@ -2155,9 +2072,9 @@ } }, "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2166,11 +2083,12 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", + "integrity": "sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/nested-clients": "3.731.1", + "@aws-sdk/types": "3.731.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", @@ -2178,15 +2096,12 @@ }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" } }, "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2195,9 +2110,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.723.0.tgz", - "integrity": "sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -2218,9 +2133,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.724.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.724.0.tgz", - "integrity": "sha512-Asl53zbCsrdkLwT12VbKxwZz0vAz9Rfe0ixQPr3WGiICt7cpQjWm/Rtfd709yYB1SmCrpXaUxaw5StxlE/yPWA==", + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.731.1.tgz", + "integrity": "sha512-j7trDplvPjltdu1O95RIU6prXPHQMaU93K+ohJ7L5FE4RHreghIWhzuStEwuQzqC/oBK4CCSFjUQ2zdJaCvZ8g==", "dependencies": { "tslib": "^2.6.2" }, @@ -2228,15 +2143,15 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.724.0" + "@aws-sdk/client-dynamodb": "^3.731.1" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", + "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/types": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "tslib": "^2.6.2" @@ -2246,9 +2161,9 @@ } }, "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2268,20 +2183,20 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.731.0.tgz", + "integrity": "sha512-EnYXxTkCNCjTTBjW/pelRPv4Thsi9jepoB6qQjPMA9/ixrZ71BhhQecz9kgqzZLR9BPCwb6hgJ/Yd702jqJ4aQ==", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.731.0", "@smithy/types": "^4.0.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -2290,12 +2205,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.731.0.tgz", + "integrity": "sha512-Rze78Ym5Bx7aWMvmZE2iL3JPo2INNCC5N9rLVx98Gg1G0ZaxclVRUvJrh1AojNlOFxU+otkxAe7FA3Foy2iLLQ==", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/types": "3.731.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -2313,9 +2228,9 @@ } }, "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dependencies": { "tslib": "^2.6.2" }, @@ -5500,6 +5415,7 @@ "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -6507,19 +6423,81 @@ } }, "node_modules/aws-sdk-client-mock-vitest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-vitest/-/aws-sdk-client-mock-vitest-5.0.0.tgz", - "integrity": "sha512-SDSKpHcWhbvVH7f7qC65r8u9guL+umbUIhxpPAMMlTJgOt38r92p51jZ7Hv6++39YD/KNVaxgc0uKXngTMa3Pw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-vitest/-/aws-sdk-client-mock-vitest-6.0.0.tgz", + "integrity": "sha512-lCZrVWI/BywHciTEIVPGOoUuoOSe1JbtRqMmcjZfqo9Ki2FyISk4A9P766Wh6M+ODVf9TNkTvaEKGjbAkQsRGw==", "dev": true, "dependencies": { - "@smithy/types": "^3.5.0", - "@vitest/expect": "^2.1.3", - "tslib": "^2.8.0" + "@vitest/expect": "^3.0.2", + "tslib": "^2.8.1" }, "peerDependencies": { + "@smithy/types": ">=3.5.0", "aws-sdk-client-mock": ">=2.2.0" } }, + "node_modules/aws-sdk-client-mock-vitest/node_modules/@vitest/expect": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.2.tgz", + "integrity": "sha512-dKSHLBcoZI+3pmP5hiZ7I5grNru2HRtEW8Z5Zp4IXog8QYcxhlox7JUPyIIFWfN53+3HW3KPLIl6nSzUGgKSuQ==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.0.2", + "@vitest/utils": "3.0.2", + "chai": "^5.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/aws-sdk-client-mock-vitest/node_modules/@vitest/pretty-format": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.2.tgz", + "integrity": "sha512-yBohcBw/T/p0/JRgYD+IYcjCmuHzjC3WLAKsVE4/LwiubzZkE8N49/xIQ/KGQwDRA8PaviF8IRO8JMWMngdVVQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/aws-sdk-client-mock-vitest/node_modules/@vitest/spy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.2.tgz", + "integrity": "sha512-8mI2iUn+PJFMT44e3ISA1R+K6ALVs47W6eriDTfXe6lFqlflID05MB4+rIFhmDSLBj8iBsZkzBYlgSkinxLzSQ==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/aws-sdk-client-mock-vitest/node_modules/@vitest/utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.2.tgz", + "integrity": "sha512-Qu01ZYZlgHvDP02JnMBRpX43nRaZtNpIzw3C1clDXmn8eakgX6iQVGzTQ/NjkIr64WD8ioqOjkaYRVvHQI5qiw==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.0.2", + "loupe": "^3.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/aws-sdk-client-mock-vitest/node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/aws-sdk/node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -15303,9 +15281,9 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/tsx": { "version": "4.19.2", @@ -17085,8 +17063,8 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/lib-dynamodb": "^3.724.0", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/lib-dynamodb": "^3.731.1", "aws-sdk-client-mock": "^4.1.0" }, "peerDependencies": { @@ -17144,7 +17122,7 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.723.0", + "@aws-sdk/client-cloudwatch": "^3.731.1", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, @@ -17166,11 +17144,11 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", "@smithy/util-base64": "^4.0.0", "aws-sdk-client-mock": "^4.1.0" }, @@ -17230,7 +17208,7 @@ "license": "MIT-0", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", - "@aws-sdk/client-lambda": "^3.723.0", + "@aws-sdk/client-lambda": "^3.731.1", "@smithy/util-utf8": "^4.0.0", "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", @@ -17238,7 +17216,7 @@ }, "devDependencies": { "@types/promise-retry": "^1.1.6", - "aws-sdk-client-mock-vitest": "^5.0.0" + "aws-sdk-client-mock-vitest": "^6.0.0" } }, "packages/testing/node_modules/@aws-cdk/cli-lib-alpha": { @@ -17601,8 +17579,8 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-xray": "^3.723.0" + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-xray": "^3.731.1" }, "peerDependencies": { "@middy/core": "4.x || 5.x || 6.x" diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 3b609c6ec0..a601a10893 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -127,8 +127,8 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/lib-dynamodb": "^3.724.0", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/lib-dynamodb": "^3.731.1", "aws-sdk-client-mock": "^4.1.0" } } diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 52988daf85..830a3381df 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -65,7 +65,7 @@ "main": "./lib/cjs/index.js", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.723.0", + "@aws-sdk/client-cloudwatch": "^3.731.1", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 05f4f3b246..0e5ae97619 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -156,11 +156,11 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.723.0", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-secrets-manager": "^3.723.0", - "@aws-sdk/client-ssm": "^3.723.0", - "@aws-sdk/util-dynamodb": "^3.724.0", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", "@smithy/util-base64": "^4.0.0", "aws-sdk-client-mock": "^4.1.0" }, diff --git a/packages/testing/package.json b/packages/testing/package.json index d65a3e561c..7e4ecfc32b 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -98,7 +98,7 @@ "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", - "@aws-sdk/client-lambda": "^3.723.0", + "@aws-sdk/client-lambda": "^3.731.1", "@smithy/util-utf8": "^4.0.0", "aws-cdk-lib": "^2.176.0", "esbuild": "^0.24.2", @@ -106,6 +106,6 @@ }, "devDependencies": { "@types/promise-retry": "^1.1.6", - "aws-sdk-client-mock-vitest": "^5.0.0" + "aws-sdk-client-mock-vitest": "^6.0.0" } } diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 28b91ed65f..e4b86e1643 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -30,8 +30,8 @@ "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.724.0", - "@aws-sdk/client-xray": "^3.723.0" + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-xray": "^3.731.1" }, "peerDependencies": { "@middy/core": "4.x || 5.x || 6.x" From bd6b24aa66b79ce267395b5376418bdabc0e31af Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 20 Jan 2025 11:56:28 +0100 Subject: [PATCH 10/31] fix(parser): Kafka Envelope + tests (#3489) Co-authored-by: Alexander Schueren --- packages/parser/src/envelopes/kafka.ts | 87 ++++++--- packages/parser/src/schemas/kafka.ts | 6 +- .../{kafkaEventMsk.json => kafka/base.json} | 0 .../tests/events/kafkaEventSelfManaged.json | 22 --- .../parser/tests/unit/envelopes/kafka.test.ts | 179 +++++++++++------- .../parser/tests/unit/schema/kafka.test.ts | 140 ++++++++------ 6 files changed, 253 insertions(+), 181 deletions(-) rename packages/parser/tests/events/{kafkaEventMsk.json => kafka/base.json} (100%) delete mode 100644 packages/parser/tests/events/kafkaEventSelfManaged.json diff --git a/packages/parser/src/envelopes/kafka.ts b/packages/parser/src/envelopes/kafka.ts index f0f0e36844..04fbb678d6 100644 --- a/packages/parser/src/envelopes/kafka.ts +++ b/packages/parser/src/envelopes/kafka.ts @@ -1,11 +1,33 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { KafkaMskEventSchema, KafkaSelfManagedEventSchema, } from '../schemas/kafka.js'; import type { KafkaMskEvent, ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; + +/** + * Get the event source from the data. + * + * Before we can access the event source, we need to parse the data with a minimal schema. + * + * @param data - The data to extract the event source from + */ +const extractEventSource = ( + data: unknown +): 'aws:kafka' | 'SelfManagedKafka' => { + const verifiedData = z + .object({ + eventSource: z.union([ + z.literal('aws:kafka'), + z.literal('SelfManagedKafka'), + ]), + }) + .parse(data); + + return verifiedData.eventSource; +}; /** * Kafka event envelope to extract data within body key @@ -15,7 +37,6 @@ import { Envelope, envelopeDiscriminator } from './envelope.js'; * Note: Records will be parsed the same way so if model is str, * all items in the list will be parsed as str and not as JSON (and vice versa) */ - export const KafkaEnvelope = { /** * This is a discriminator to differentiate whether an envelope returns an array or an object @@ -23,21 +44,21 @@ export const KafkaEnvelope = { */ [envelopeDiscriminator]: 'array' as const, parse(data: unknown, schema: T): z.infer[] { - // manually fetch event source to decide between Msk or SelfManaged - const eventSource = (data as KafkaMskEvent).eventSource; + const eventSource = extractEventSource(data); - const parsedEnvelope: - | z.infer - | z.infer = + const parsedEnvelope = eventSource === 'aws:kafka' ? KafkaMskEventSchema.parse(data) : KafkaSelfManagedEventSchema.parse(data); - return Object.values(parsedEnvelope.records).map((topicRecord) => { - return topicRecord.map((record) => { - return Envelope.parse(record.value, schema); - }); - }); + const values: z.infer[] = []; + for (const topicRecord of Object.values(parsedEnvelope.records)) { + for (const record of topicRecord) { + values.push(schema.parse(record.value)); + } + } + + return values; }, safeParse( @@ -61,27 +82,37 @@ export const KafkaEnvelope = { originalEvent: data, }; } - const parsedRecords: z.infer[] = []; - for (const topicRecord of Object.values(parsedEnvelope.data.records)) { + const values: z.infer[] = []; + const issues: ZodIssue[] = []; + for (const [topicKey, topicRecord] of Object.entries( + parsedEnvelope.data.records + )) { for (const record of topicRecord) { - const parsedRecord = Envelope.safeParse(record.value, schema); + const parsedRecord = schema.safeParse(record.value); if (!parsedRecord.success) { - return { - success: false, - error: new ParseError('Failed to parse Kafka record', { - cause: parsedRecord.error, - }), - originalEvent: data, - }; + issues.push( + ...(parsedRecord.error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['records', topicKey, ...issue.path], + })) + ); } - parsedRecords.push(parsedRecord.data); + values.push(parsedRecord.data); } } - return { - success: true, - data: parsedRecords, - }; + return issues.length > 0 + ? { + success: false, + error: new ParseError('Failed to parse Kafka envelope', { + cause: new ZodError(issues), + }), + originalEvent: data, + } + : { + success: true, + data: values, + }; }, }; diff --git a/packages/parser/src/schemas/kafka.ts b/packages/parser/src/schemas/kafka.ts index bab669f448..70b5b74edf 100644 --- a/packages/parser/src/schemas/kafka.ts +++ b/packages/parser/src/schemas/kafka.ts @@ -28,11 +28,9 @@ const KafkaRecordSchema = z.object({ const KafkaBaseEventSchema = z.object({ bootstrapServers: z .string() - .transform((bootstrapServers) => { - return bootstrapServers ? bootstrapServers.split(',') : undefined; - }) + .transform((bootstrapServers) => bootstrapServers.split(',')) .nullish(), - records: z.record(z.string(), z.array(KafkaRecordSchema)), + records: z.record(z.string(), z.array(KafkaRecordSchema).min(1)), }); /** Zod schema for Kafka event from Self Managed Kafka diff --git a/packages/parser/tests/events/kafkaEventMsk.json b/packages/parser/tests/events/kafka/base.json similarity index 100% rename from packages/parser/tests/events/kafkaEventMsk.json rename to packages/parser/tests/events/kafka/base.json diff --git a/packages/parser/tests/events/kafkaEventSelfManaged.json b/packages/parser/tests/events/kafkaEventSelfManaged.json deleted file mode 100644 index 775f58cd8c..0000000000 --- a/packages/parser/tests/events/kafkaEventSelfManaged.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "eventSource": "SelfManagedKafka", - "bootstrapServers": "b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", - "records": { - "mytopic-0": [ - { - "topic": "mytopic", - "partition": 0, - "offset": 15, - "timestamp": 1545084650987, - "timestampType": "CREATE_TIME", - "key": "cmVjb3JkS2V5", - "value": "eyJrZXkiOiJ2YWx1ZSJ9", - "headers": [ - { - "headerKey": [104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101] - } - ] - } - ] - } -} diff --git a/packages/parser/tests/unit/envelopes/kafka.test.ts b/packages/parser/tests/unit/envelopes/kafka.test.ts index 33bb9eae60..3ac48dada7 100644 --- a/packages/parser/tests/unit/envelopes/kafka.test.ts +++ b/packages/parser/tests/unit/envelopes/kafka.test.ts @@ -1,95 +1,130 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { MSKEvent, SelfManagedKafkaEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ParseError } from '../../../src'; +import { ZodError, z } from 'zod'; import { KafkaEnvelope } from '../../../src/envelopes/index.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; - -describe('Kafka', () => { - describe('parse', () => { - it('should parse MSK kafka envelope', () => { - const mock = generateMock(TestSchema); - - const kafkaEvent = TestEvents.kafkaEventMsk as MSKEvent; - kafkaEvent.records['mytopic-0'][0].value = Buffer.from( - JSON.stringify(mock) - ).toString('base64'); +import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; +import { getTestEvent } from '../schema/utils.js'; + +describe('Envelope: Kafka', () => { + const baseEvent = getTestEvent({ + eventsPath: 'kafka', + filename: 'base', + }); - const result = KafkaEnvelope.parse(kafkaEvent, TestSchema); + describe('Method: parse', () => { + it('throws if the payload of the value does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); - expect(result).toEqual([[mock]]); + // Act & Assess + expect(() => KafkaEnvelope.parse(event, z.number())).toThrow(); }); - it('should parse Self Managed kafka envelope', () => { - const mock = generateMock(TestSchema); - - const kafkaEvent = - TestEvents.kafkaEventSelfManaged as SelfManagedKafkaEvent; - kafkaEvent.records['mytopic-0'][0].value = Buffer.from( - JSON.stringify(mock) - ).toString('base64'); + it('parses a Kafka event', () => { + // Prepare + const event = structuredClone(baseEvent); - const result = KafkaEnvelope.parse(kafkaEvent, TestSchema); + // Act + const result = KafkaEnvelope.parse(event, z.string()); - expect(result).toEqual([[mock]]); + // Assess + expect(result).toEqual(['{"key":"value"}']); }); - describe('safeParse', () => { - it('should parse MSK kafka envelope', () => { - const mock = generateMock(TestSchema); + it('parses a Kafka event and applies the schema transformation', () => { + // Prepare + const event = structuredClone(baseEvent); - const kafkaEvent = TestEvents.kafkaEventMsk as MSKEvent; - kafkaEvent.records['mytopic-0'][0].value = Buffer.from( - JSON.stringify(mock) - ).toString('base64'); + // Act + const result = KafkaEnvelope.parse( + event, + JSONStringified(z.object({ key: z.string() })) + ); - const result = KafkaEnvelope.safeParse(kafkaEvent, TestSchema); - - expect(result).toEqual({ - success: true, - data: [mock], - }); - }); - - it('should parse Self Managed kafka envelope', () => { - const mock = generateMock(TestSchema); + // Assess + expect(result).toEqual([{ key: 'value' }]); + }); - const kafkaEvent = - TestEvents.kafkaEventSelfManaged as SelfManagedKafkaEvent; - kafkaEvent.records['mytopic-0'][0].value = Buffer.from( - JSON.stringify(mock) - ).toString('base64'); + it('parses a self managed Kafka event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.eventSource = 'SelfManagedKafka'; - const result = KafkaEnvelope.safeParse(kafkaEvent, TestSchema); + // Act + const result = KafkaEnvelope.parse(event, z.string()); - expect(result).toEqual({ - success: true, - data: [mock], - }); - }); + // Assess + expect(result).toEqual(['{"key":"value"}']); + }); + }); - it('should return original event on failure', () => { - const kafkaEvent = TestEvents.kafkaEventMsk as MSKEvent; - kafkaEvent.records['mytopic-0'][0].value = 'not a valid json'; + describe('Method: safeParse', () => { + it('parses a Kafka event', () => { + // Prepare + const event = structuredClone(baseEvent); - const parseResult = KafkaEnvelope.safeParse(kafkaEvent, TestSchema); + // Act + const result = KafkaEnvelope.safeParse(event, z.string()); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: kafkaEvent, - }); + // Assess + expect(result).toEqual({ + success: true, + data: ['{"key":"value"}'], + }); + }); - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(SyntaxError); - } + it('returns an error if the event is not a valid Kafka event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.eventSource = 'SelfManagedKafka'; + // @ts-expect-error - Intentionally invalid event + event.records['mytopic-0'] = []; + + // Act + const result = KafkaEnvelope.safeParse(event, z.string()); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse Kafka envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['records', 'mytopic-0'], + }, + ]), + }), + originalEvent: event, }); - it('should return original event and error if envelope is invalid', () => { - expect(KafkaEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, - }); + }); + + it('returns the original event and the error if the payload of the value does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = KafkaEnvelope.safeParse(event, z.number()); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse Kafka envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['records', 'mytopic-0'], + message: 'Expected number, received string', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/schema/kafka.test.ts b/packages/parser/tests/unit/schema/kafka.test.ts index 0c4fe096ba..ac1c0316f8 100644 --- a/packages/parser/tests/unit/schema/kafka.test.ts +++ b/packages/parser/tests/unit/schema/kafka.test.ts @@ -1,69 +1,99 @@ import { describe, expect, it } from 'vitest'; import { KafkaMskEventSchema, - KafkaRecordSchema, KafkaSelfManagedEventSchema, -} from '../../../src/schemas/'; -import type { KafkaSelfManagedEvent } from '../../../src/types'; -import type { KafkaRecord } from '../../../src/types/schema'; -import { TestEvents } from './utils.js'; +} from '../../../src/schemas/kafka.js'; +import type { + KafkaMskEvent, + KafkaSelfManagedEvent, +} from '../../../src/types/schema.js'; +import { getTestEvent, omit } from './utils.js'; -describe('Kafka ', () => { - const expectedTestEvent = { - key: 'recordKey', - value: JSON.stringify({ key: 'value' }), - partition: 0, - topic: 'mytopic', - offset: 15, - timestamp: 1545084650987, - timestampType: 'CREATE_TIME', - headers: [ - { - headerKey: 'headerValue', - }, - ], - }; - it('should parse kafka MSK event', () => { - const kafkaEventMsk = TestEvents.kafkaEventMsk; - - expect( - KafkaMskEventSchema.parse(kafkaEventMsk).records['mytopic-0'][0] - ).toEqual(expectedTestEvent); +describe('Schema: Kafka', () => { + const baseEvent = getTestEvent({ + eventsPath: 'kafka', + filename: 'base', }); - it('should parse kafka self managed event', () => { - const kafkaEventSelfManaged = TestEvents.kafkaEventSelfManaged; - expect( - KafkaSelfManagedEventSchema.parse(kafkaEventSelfManaged).records[ - 'mytopic-0' - ][0] - ).toEqual(expectedTestEvent); - }); - it('should transform bootstrapServers to array', () => { - const kafkaEventSelfManaged = TestEvents.kafkaEventSelfManaged; + it('parses a Kafka MSK event', () => { + // Prepare + const event = structuredClone(baseEvent); - expect( - KafkaSelfManagedEventSchema.parse(kafkaEventSelfManaged).bootstrapServers - ).toEqual([ - 'b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092', - 'b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092', - ]); + // Act + const result = KafkaMskEventSchema.parse(event); + + // Assess + expect(result).toStrictEqual({ + eventSource: 'aws:kafka', + eventSourceArn: + 'arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4', + bootstrapServers: [ + 'b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092', + 'b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092', + ], + records: { + 'mytopic-0': [ + { + topic: 'mytopic', + partition: 0, + offset: 15, + timestamp: 1545084650987, + timestampType: 'CREATE_TIME', + key: 'recordKey', + value: `{"key":"value"}`, + headers: [ + { + headerKey: 'headerValue', + }, + ], + }, + ], + }, + }); }); - it('should return undefined if bootstrapServers is not present', () => { - const kafkaEventSelfManaged = TestEvents.kafkaEventSelfManaged as { - bootstrapServers: string; - }; - kafkaEventSelfManaged.bootstrapServers = ''; - const parsed = KafkaSelfManagedEventSchema.parse(kafkaEventSelfManaged); - expect(parsed.bootstrapServers).toBeUndefined(); + it('throws if the event is not a Kafka MSK event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.records['mytopic-0'] = []; + + // Act & Assess + expect(() => KafkaMskEventSchema.parse(event)).toThrow(); }); - it('should parse kafka record from kafka event', () => { - const kafkaEventMsk: KafkaSelfManagedEvent = - TestEvents.kafkaEventSelfManaged as KafkaSelfManagedEvent; - const parsedRecord: KafkaRecord = KafkaRecordSchema.parse( - kafkaEventMsk.records['mytopic-0'][0] + + it('parses a Kafka self-managed event', () => { + // Prepare + const event = omit( + ['eventSourceArn', 'bootstrapServers'], + structuredClone(baseEvent) ); - expect(parsedRecord.topic).toEqual('mytopic'); + (event as unknown as KafkaSelfManagedEvent).eventSource = + 'SelfManagedKafka'; + + // Act + const result = KafkaSelfManagedEventSchema.parse(event); + + // Assess + expect(result).toStrictEqual({ + eventSource: 'SelfManagedKafka', + records: { + 'mytopic-0': [ + { + topic: 'mytopic', + partition: 0, + offset: 15, + timestamp: 1545084650987, + timestampType: 'CREATE_TIME', + key: 'recordKey', + value: `{"key":"value"}`, + headers: [ + { + headerKey: 'headerValue', + }, + ], + }, + ], + }, + }); }); }); From 66cb1e0560451faeb892493518092807ed01a51b Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Mon, 20 Jan 2025 12:05:55 +0100 Subject: [PATCH 11/31] chore(parser): add util-dynamodb as optional dependency (#3493) --- package-lock.json | 4 +++- packages/parser/package.json | 4 +++- packages/parser/src/helpers/dynamodb.ts | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c9e3286348..89e5c408f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17185,11 +17185,13 @@ "name": "@aws-lambda-powertools/parser", "version": "2.13.0", "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0" + }, "devDependencies": { "@anatine/zod-mock": "^3.13.3" }, "peerDependencies": { - "@aws-sdk/util-dynamodb": ">=3.x", "@middy/core": "4.x || 5.x || 6.x", "zod": ">=3.x" }, diff --git a/packages/parser/package.json b/packages/parser/package.json index d1774320af..caf8da2320 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -365,8 +365,10 @@ "typescript", "nodejs" ], + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0" + }, "peerDependencies": { - "@aws-sdk/util-dynamodb": ">=3.x", "@middy/core": "4.x || 5.x || 6.x", "zod": ">=3.x" }, diff --git a/packages/parser/src/helpers/dynamodb.ts b/packages/parser/src/helpers/dynamodb.ts index 7e1755ca2a..7addeca6fa 100644 --- a/packages/parser/src/helpers/dynamodb.ts +++ b/packages/parser/src/helpers/dynamodb.ts @@ -1,5 +1,5 @@ +import { unmarshallDynamoDB } from '@aws-lambda-powertools/commons/utils/unmarshallDynamoDB'; import type { AttributeValue } from '@aws-sdk/client-dynamodb'; -import { unmarshall } from '@aws-sdk/util-dynamodb'; import { type ZodTypeAny, z } from 'zod'; /** @@ -69,7 +69,7 @@ const DynamoDBMarshalled = (schema: T) => ]) .transform((str, ctx) => { try { - return unmarshall(str); + return unmarshallDynamoDB(str); } catch (err) { ctx.addIssue({ code: 'custom', From 58332705a7166e25ec9c848a88b84035ea11457d Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 20 Jan 2025 12:32:24 +0100 Subject: [PATCH 12/31] chore(deps): bump aws-cdk-lib & co (#3496) --- package-lock.json | 7777 ++++++++++++--------------------- packages/testing/package.json | 2 +- 2 files changed, 2887 insertions(+), 4892 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89e5c408f0..7feb14762e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -78,1077 +78,348 @@ "vitest": "^2.0.5" } }, - "examples/app/node_modules/aws-cdk-lib": { - "version": "2.175.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", - "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml", - "mime-types" - ], - "dev": true, - "license": "Apache-2.0", + "examples/snippets": { + "name": "code-snippets", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/batch": "^2.13.0", + "@aws-lambda-powertools/idempotency": "^2.13.0", + "@aws-lambda-powertools/jmespath": "^2.13.0", + "@aws-lambda-powertools/logger": "^2.13.0", + "@aws-lambda-powertools/metrics": "^2.13.0", + "@aws-lambda-powertools/parameters": "^2.13.0", + "@aws-lambda-powertools/parser": "^2.13.0", + "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", + "@middy/core": "^4.7.0", + "aws-sdk": "^2.1692.0", + "aws-sdk-client-mock": "^4.1.0", + "hashi-vault-js": "^0.4.16", + "zod": "^3.24.1" + } + }, + "layers": { + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.208", - "@aws-cdk/asset-kubectl-v20": "^2.1.3", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^39.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.2", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.3", - "table": "^6.8.2", - "yaml": "1.10.2" + "aws-cdk": "^2.176.0", + "aws-cdk-lib": "^2.176.0", + "esbuild": "^0.24.2", + "tsx": "^4.19.2" }, - "engines": { - "node": ">= 14.15.0" + "bin": { + "layer": "bin/layers.js" }, - "peerDependencies": { - "constructs": "^10.0.0" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../packages/testing", + "source-map-support": "^0.5.21" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "inBundle": true, - "license": "Apache-2.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.17.1", + "node_modules/@anatine/zod-mock": { + "version": "3.13.4", + "resolved": "https://registry.npmjs.org/@anatine/zod-mock/-/zod-mock-3.13.4.tgz", + "integrity": "sha512-yO/KeuyYsEDCTcQ+7CiRuY3dnafMHIZUMok6Ci7aERRCTQ+/XmsiPk/RnMx5wlLmWBTmX9kw+PavbMsjM+sAJA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "randexp": "^0.5.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@faker-js/faker": "^7.0.0 || ^8.0.0", + "zod": "^3.21.4" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.209", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.209.tgz", + "integrity": "sha512-tL7aBDzx/QBuZoQso9OST2BMCoev89v01iQZicOKlR0J6vWQLPiqZfn4vd9nissFbM4X+xIwi3UKasPBTQL0WQ==" + }, + "node_modules/@aws-cdk/asset-kubectl-v20": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", + "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "39.1.38", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.1.38.tgz", + "integrity": "sha512-T5nc7+y3pmfXD/LNft1mA8E8Q6IdsE0mta5nC1FZu5sQd+LUo9xGd0BwdzJpR54cgTW/bNcIs5ARoc6kWoRJaA==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dependencies": { + "jsonschema": "^1.4.1", + "semver": "^7.6.3" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.6.3", "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "dev": true, - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/fast-uri": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.14" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "tslib": "^2.6.2" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "mime-db": "1.52.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.6" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "brace-expansion": "^1.1.7" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "*" + "node": ">=14.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/@aws-lambda-powertools/batch": { + "resolved": "packages/batch", + "link": true }, - "examples/app/node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/@aws-lambda-powertools/commons": { + "resolved": "packages/commons", + "link": true }, - "examples/app/node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@aws-lambda-powertools/event-handler": { + "resolved": "packages/event-handler", + "link": true }, - "examples/app/node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } + "node_modules/@aws-lambda-powertools/idempotency": { + "resolved": "packages/idempotency", + "link": true }, - "examples/app/node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/@aws-lambda-powertools/jmespath": { + "resolved": "packages/jmespath", + "link": true }, - "examples/app/node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/@aws-lambda-powertools/logger": { + "resolved": "packages/logger", + "link": true + }, + "node_modules/@aws-lambda-powertools/metrics": { + "resolved": "packages/metrics", + "link": true + }, + "node_modules/@aws-lambda-powertools/parameters": { + "resolved": "packages/parameters", + "link": true + }, + "node_modules/@aws-lambda-powertools/parser": { + "resolved": "packages/parser", + "link": true + }, + "node_modules/@aws-lambda-powertools/testing-utils": { + "resolved": "packages/testing", + "link": true + }, + "node_modules/@aws-lambda-powertools/tracer": { + "resolved": "packages/tracer", + "link": true + }, + "node_modules/@aws-sdk/client-appconfigdata": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.731.1.tgz", + "integrity": "sha512-CqHOBF2V27Yf1muLp03q0FJE6UERB92HkY/In7LPjg2ZmIZq+WB34EM7cVQ3ZUmVqC4/jzlwfstHem0ujlMrCA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-node": "3.731.1", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "examples/app/node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.2", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "examples/app/node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "examples/snippets": { - "name": "code-snippets", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/parser": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", - "@aws-sdk/client-appconfigdata": "^3.731.1", - "@aws-sdk/client-dynamodb": "^3.731.1", - "@aws-sdk/client-secrets-manager": "^3.731.1", - "@aws-sdk/client-ssm": "^3.731.1", - "@aws-sdk/util-dynamodb": "^3.731.1", - "@middy/core": "^4.7.0", - "aws-sdk": "^2.1692.0", - "aws-sdk-client-mock": "^4.1.0", - "hashi-vault-js": "^0.4.16", - "zod": "^3.24.1" - } - }, - "layers": { - "version": "2.13.0", - "license": "MIT-0", - "dependencies": { - "aws-cdk": "^2.176.0", - "aws-cdk-lib": "^2.176.0", - "esbuild": "^0.24.2", - "tsx": "^4.19.2" - }, - "bin": { - "layer": "bin/layers.js" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../packages/testing", - "source-map-support": "^0.5.21" - } - }, - "layers/node_modules/aws-cdk-lib": { - "version": "2.175.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", - "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml", - "mime-types" - ], - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.208", - "@aws-cdk/asset-kubectl-v20": "^2.1.3", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^39.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.2", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.3", - "table": "^6.8.2", - "yaml": "1.10.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "constructs": "^10.0.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "layers/node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.17.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/fast-uri": { - "version": "3.0.3", - "inBundle": true, - "license": "BSD-3-Clause" - }, - "layers/node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.2.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "layers/node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "layers/node_modules/aws-cdk-lib/node_modules/mime-db": { - "version": "1.52.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/mime-types": { - "version": "2.1.35", - "inBundle": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.2", - "inBundle": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "layers/node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@anatine/zod-mock": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@anatine/zod-mock/-/zod-mock-3.13.4.tgz", - "integrity": "sha512-yO/KeuyYsEDCTcQ+7CiRuY3dnafMHIZUMok6Ci7aERRCTQ+/XmsiPk/RnMx5wlLmWBTmX9kw+PavbMsjM+sAJA==", - "dev": true, - "dependencies": { - "randexp": "^0.5.3" - }, - "peerDependencies": { - "@faker-js/faker": "^7.0.0 || ^8.0.0", - "zod": "^3.21.4" - } - }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.209", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.209.tgz", - "integrity": "sha512-tL7aBDzx/QBuZoQso9OST2BMCoev89v01iQZicOKlR0J6vWQLPiqZfn4vd9nissFbM4X+xIwi3UKasPBTQL0WQ==" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", - "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", - "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" - }, - "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "39.1.38", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.1.38.tgz", - "integrity": "sha512-T5nc7+y3pmfXD/LNft1mA8E8Q6IdsE0mta5nC1FZu5sQd+LUo9xGd0BwdzJpR54cgTW/bNcIs5ARoc6kWoRJaA==", - "bundleDependencies": [ - "jsonschema", - "semver" - ], - "dependencies": { - "jsonschema": "^1.4.1", - "semver": "^7.6.3" - } - }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-lambda-powertools/batch": { - "resolved": "packages/batch", - "link": true - }, - "node_modules/@aws-lambda-powertools/commons": { - "resolved": "packages/commons", - "link": true - }, - "node_modules/@aws-lambda-powertools/event-handler": { - "resolved": "packages/event-handler", - "link": true - }, - "node_modules/@aws-lambda-powertools/idempotency": { - "resolved": "packages/idempotency", - "link": true - }, - "node_modules/@aws-lambda-powertools/jmespath": { - "resolved": "packages/jmespath", - "link": true - }, - "node_modules/@aws-lambda-powertools/logger": { - "resolved": "packages/logger", - "link": true - }, - "node_modules/@aws-lambda-powertools/metrics": { - "resolved": "packages/metrics", - "link": true - }, - "node_modules/@aws-lambda-powertools/parameters": { - "resolved": "packages/parameters", - "link": true - }, - "node_modules/@aws-lambda-powertools/parser": { - "resolved": "packages/parser", - "link": true - }, - "node_modules/@aws-lambda-powertools/testing-utils": { - "resolved": "packages/testing", - "link": true - }, - "node_modules/@aws-lambda-powertools/tracer": { - "resolved": "packages/tracer", - "link": true - }, - "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.731.1.tgz", - "integrity": "sha512-CqHOBF2V27Yf1muLp03q0FJE6UERB92HkY/In7LPjg2ZmIZq+WB34EM7cVQ3ZUmVqC4/jzlwfstHem0ujlMrCA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.731.0", - "@aws-sdk/credential-provider-node": "3.731.1", - "@aws-sdk/middleware-host-header": "3.731.0", - "@aws-sdk/middleware-logger": "3.731.0", - "@aws-sdk/middleware-recursion-detection": "3.731.0", - "@aws-sdk/middleware-user-agent": "3.731.0", - "@aws-sdk/region-config-resolver": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@aws-sdk/util-endpoints": "3.731.0", - "@aws-sdk/util-user-agent-browser": "3.731.0", - "@aws-sdk/util-user-agent-node": "3.731.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.731.1.tgz", - "integrity": "sha512-3fAV3suEiXyyGGV8zj3P5QvxSOoOvZHbwfgJrOnwh/SM6t2figD4GxCeZh2rwX2CMEp42VGeUiLZRspbOfzWcg==", + "node_modules/@aws-sdk/client-cloudwatch": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.731.1.tgz", + "integrity": "sha512-3fAV3suEiXyyGGV8zj3P5QvxSOoOvZHbwfgJrOnwh/SM6t2figD4GxCeZh2rwX2CMEp42VGeUiLZRspbOfzWcg==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1197,18 +468,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-dynamodb": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.731.1.tgz", @@ -1262,17 +521,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-lambda": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.731.1.tgz", @@ -1327,17 +575,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-secrets-manager": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.731.1.tgz", @@ -1390,18 +627,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-ssm": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.731.1.tgz", @@ -1454,17 +679,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-sso": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.731.0.tgz", @@ -1513,17 +727,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/client-xray": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.731.1.tgz", @@ -1574,18 +777,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/core": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.731.0.tgz", @@ -1607,17 +798,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.731.0.tgz", @@ -1633,17 +813,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.731.0.tgz", @@ -1664,17 +833,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.731.1.tgz", @@ -1698,17 +856,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.731.1.tgz", @@ -1731,17 +878,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.731.0.tgz", @@ -1758,17 +894,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.731.1.tgz", @@ -1787,17 +912,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.731.1.tgz", @@ -1814,17 +928,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/endpoint-cache": { "version": "3.723.0", "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.723.0.tgz", @@ -1856,17 +959,6 @@ "@aws-sdk/client-dynamodb": "^3.731.1" } }, - "node_modules/@aws-sdk/lib-dynamodb/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.731.0.tgz", @@ -1883,36 +975,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.731.0.tgz", "integrity": "sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==", "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { @@ -1932,17 +1002,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.731.0.tgz", @@ -1957,17 +1016,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.731.0.tgz", @@ -1985,17 +1033,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/nested-clients": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.731.1.tgz", @@ -2044,17 +1081,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.731.0.tgz", @@ -2071,17 +1097,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/token-providers": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", @@ -2098,17 +1113,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/types": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", @@ -2121,17 +1125,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/util-dynamodb": { "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.731.1.tgz", @@ -2160,17 +1153,6 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", @@ -2193,17 +1175,6 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.731.0.tgz", @@ -2227,17 +1198,6 @@ } } }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", @@ -2325,15 +1285,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2986,10 +1937,11 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3215,200 +2167,44 @@ "dev": true, "dependencies": { "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/@lerna/create/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" + "concat-map": "0.0.1" } }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@lerna/create/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@lerna/create/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, "node_modules/@middy/core": { @@ -3474,15 +2270,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/@npmcli/fs": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", @@ -3523,15 +2310,6 @@ "node": ">=16" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/@npmcli/git/node_modules/proc-log": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", @@ -4521,10 +3299,11 @@ } }, "node_modules/@sigstore/sign/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4585,12 +3364,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@sigstore/tuf": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", @@ -4631,12 +3404,13 @@ } }, "node_modules/@sigstore/verify/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sinclair/typebox": { @@ -4666,6 +3440,16 @@ "type-detect": "4.0.8" } }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, "node_modules/@sinonjs/samsam": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", @@ -4704,17 +3488,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/abort-controller/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/config-resolver": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.0.tgz", @@ -4730,17 +3503,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/core": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.0.0.tgz", @@ -4759,17 +3521,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/core/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/credential-provider-imds": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.0.tgz", @@ -4785,17 +3536,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/eventstream-codec": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.0.tgz", @@ -4810,17 +3550,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/eventstream-serde-browser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.0.tgz", @@ -4834,17 +3563,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.0.tgz", @@ -4857,17 +3575,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/eventstream-serde-node": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.0.tgz", @@ -4881,17 +3588,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/eventstream-serde-universal": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.0.tgz", @@ -4905,17 +3601,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/fetch-http-handler": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.0.tgz", @@ -4931,17 +3616,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/hash-node": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.0.tgz", @@ -4956,17 +3630,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/invalid-dependency": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.0.tgz", @@ -4979,17 +3642,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/is-array-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", @@ -5022,18 +3674,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-compression/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/middleware-content-length": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.0.tgz", @@ -5047,17 +3687,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/middleware-endpoint": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.0.tgz", @@ -5076,17 +3705,6 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/middleware-retry": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.0.tgz", @@ -5106,21 +3724,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { + "node_modules/@smithy/middleware-serde": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.0.tgz", + "integrity": "sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { + "node_modules/@smithy/middleware-stack": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.0.tgz", - "integrity": "sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.0.tgz", + "integrity": "sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -5129,22 +3748,28 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { + "node_modules/@smithy/node-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.0.tgz", + "integrity": "sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==", "dependencies": { + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { + "node_modules/@smithy/node-http-handler": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.0.tgz", - "integrity": "sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.0.tgz", + "integrity": "sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==", "dependencies": { + "@smithy/abort-controller": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/querystring-builder": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -5152,24 +3777,23 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { + "node_modules/@smithy/property-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.0.tgz", + "integrity": "sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.0.tgz", - "integrity": "sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==", + "node_modules/@smithy/protocol-http": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.0.tgz", + "integrity": "sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==", "dependencies": { - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -5177,25 +3801,24 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider/node_modules/@smithy/types": { + "node_modules/@smithy/querystring-builder": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.0.tgz", + "integrity": "sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==", "dependencies": { + "@smithy/types": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { + "node_modules/@smithy/querystring-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.0.tgz", - "integrity": "sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.0.tgz", + "integrity": "sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==", "dependencies": { - "@smithy/abort-controller": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/querystring-builder": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -5203,21 +3826,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@smithy/service-error-classification": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", + "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.6.2" + "@smithy/types": "^4.1.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { + "node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.0.tgz", - "integrity": "sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.0.tgz", + "integrity": "sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -5226,33 +3850,46 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@smithy/signature-v4": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.0.tgz", + "integrity": "sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==", "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.0.tgz", - "integrity": "sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==", + "node_modules/@smithy/smithy-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.0.0.tgz", + "integrity": "sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==", "dependencies": { + "@smithy/core": "^3.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@smithy/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -5260,46 +3897,47 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder": { + "node_modules/@smithy/url-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.0.tgz", - "integrity": "sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.0.tgz", + "integrity": "sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==", "dependencies": { + "@smithy/querystring-parser": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { + "node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser": { + "node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.0.tgz", - "integrity": "sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dependencies": { - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { + "node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dependencies": { "tslib": "^2.6.2" }, @@ -5307,21 +3945,22 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification": { + "node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.0.tgz", - "integrity": "sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "dependencies": { - "@smithy/types": "^4.0.0" + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { + "node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dependencies": { "tslib": "^2.6.2" }, @@ -5329,51 +3968,55 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader": { + "node_modules/@smithy/util-defaults-mode-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.0.tgz", - "integrity": "sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.0.tgz", + "integrity": "sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==", "dependencies": { + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { + "node_modules/@smithy/util-defaults-mode-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.0.tgz", + "integrity": "sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==", "dependencies": { + "@smithy/config-resolver": "^4.0.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.0.tgz", - "integrity": "sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==", + "node_modules/@smithy/util-endpoints": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.0.tgz", + "integrity": "sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==", "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", + "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-uri-escape": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { + "node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dependencies": { "tslib": "^2.6.2" }, @@ -5381,65 +4024,53 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client": { + "node_modules/@smithy/util-middleware": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.0.0.tgz", - "integrity": "sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.0.tgz", + "integrity": "sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==", "dependencies": { - "@smithy/core": "^3.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client/node_modules/@smithy/types": { + "node_modules/@smithy/util-retry": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.0.tgz", + "integrity": "sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==", "dependencies": { + "@smithy/service-error-classification": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/url-parser": { + "node_modules/@smithy/util-stream": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.0.tgz", - "integrity": "sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.0.tgz", + "integrity": "sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==", "dependencies": { - "@smithy/querystring-parser": "^4.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/node-http-handler": "^4.0.0", "@smithy/types": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser/node_modules/@smithy/types": { + "node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "dependencies": { "tslib": "^2.6.2" }, @@ -5447,946 +4078,1009 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-base64": { + "node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { + "node_modules/@smithy/util-waiter": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.0.tgz", + "integrity": "sha512-C8dSfGmZH0ecrmnJOw4aDXJ47krihnUtee8eDZ2fA+28wTjD4TVM3L/bBQYnBBlDVWcYzldLV7loPRsPc1kERg==", "dependencies": { + "@smithy/abort-controller": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": ">= 10" } }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", - "tslib": "^2.6.2" + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@smithy/util-config-provider": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "node_modules/@types/aws-lambda": { + "version": "8.10.147", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", + "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", + "dev": true + }, + "node_modules/@types/cls-hooked": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", + "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "dev": true + }, + "node_modules/@types/lodash.merge": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz", + "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "@types/lodash": "*" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.0.tgz", - "integrity": "sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", "dependencies": { - "@smithy/property-provider": "^4.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "undici-types": "~6.20.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/promise-retry": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.6.tgz", + "integrity": "sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "@types/retry": "*" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.0.tgz", - "integrity": "sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==", + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", + "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", + "dev": true, "dependencies": { - "@smithy/config-resolver": "^4.0.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "node_modules/@smithy/util-endpoints": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.0.tgz", - "integrity": "sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==", + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=10" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@vitest/coverage-v8/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" } }, - "node_modules/@smithy/util-middleware": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.0.tgz", - "integrity": "sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==", + "node_modules/@vitest/expect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", + "dev": true, "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-middleware/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/@smithy/util-retry": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.0.tgz", - "integrity": "sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==", + "node_modules/@vitest/pretty-format": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", + "dev": true, "dependencies": { - "@smithy/service-error-classification": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" + "tinyrainbow": "^1.2.0" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-retry/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@vitest/runner": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@vitest/utils": "2.1.8", + "pathe": "^1.1.2" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.0.tgz", - "integrity": "sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==", + "node_modules/@vitest/snapshot": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", + "dev": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "@vitest/pretty-format": "2.1.8", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-stream/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@vitest/spy": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "tinyspy": "^3.0.2" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "node_modules/@vitest/utils": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@smithy/util-utf8": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", - "tslib": "^2.6.2" + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.15.0" } }, - "node_modules/@smithy/util-waiter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.0.tgz", - "integrity": "sha512-C8dSfGmZH0ecrmnJOw4aDXJ47krihnUtee8eDZ2fA+28wTjD4TVM3L/bBQYnBBlDVWcYzldLV7loPRsPc1kERg==", + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "@smithy/abort-controller": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", - "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { - "tslib": "^2.6.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, - "engines": { - "node": ">= 10" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "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": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6.5" } }, - "node_modules/@types/aws-lambda": { - "version": "8.10.147", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", - "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true }, - "node_modules/@types/cls-hooked": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", - "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", - "dependencies": { - "@types/node": "*" + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "dependencies": { - "@types/ms": "*" + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "@types/unist": "*" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", - "dev": true + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/@types/lodash.merge": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz", - "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@types/lodash": "*" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/@types/node": { - "version": "22.10.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", - "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "undici-types": "~6.20.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, - "node_modules/@types/promise-retry": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.6.tgz", - "integrity": "sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA==", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { - "@types/retry": "*" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@types/sinon": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", - "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" - }, - "node_modules/@vitest/coverage-v8": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", - "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.7", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.12", - "magicast": "^0.3.5", - "std-env": "^3.8.0", - "test-exclude": "^7.0.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "2.1.8", - "vitest": "2.1.8" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@vitest/coverage-v8/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "stack-chain": "^1.3.7" }, "engines": { - "node": ">=10" + "node": "^4.7 || >=6.9 || >=7.3" } }, - "node_modules/@vitest/coverage-v8/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" + "node_modules/aws-cdk": { + "version": "2.176.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.176.0.tgz", + "integrity": "sha512-yRjIXzK2ddznwuSjasWAViYBtBSQbEu6GHlylaC3GHsIUPhrK3KguqIuhdlxjMeiQ1Fvok8REDLCReZJdrSLLg==", + "bin": { + "cdk": "bin/cdk" }, "engines": { - "node": ">=18" - } - }, - "node_modules/@vitest/expect": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", - "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", - "dev": true, - "dependencies": { - "@vitest/spy": "2.1.8", - "@vitest/utils": "2.1.8", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" + "node": ">= 14.15.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/@vitest/mocker": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", - "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", - "dev": true, + "node_modules/aws-cdk-lib": { + "version": "2.176.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.176.0.tgz", + "integrity": "sha512-6Gs2kBaq4elQ4fNAOiCgbD9oOLx/heb/Lp4OVE6Uf7FulYW0DikWJXxR5GWJslTJ4/sCf3UU91q415fc0bruLg==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], + "license": "Apache-2.0", "dependencies": { - "@vitest/spy": "2.1.8", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.2.0", + "ignore": "^5.3.2", + "jsonschema": "^1.4.1", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.6.3", + "table": "^6.8.2", + "yaml": "1.10.2" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">= 14.15.0" }, "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "constructs": "^10.0.0" } }, - "node_modules/@vitest/pretty-format": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", - "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", - "dev": true, - "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } + "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" }, - "node_modules/@vitest/runner": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", - "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.8", - "pathe": "^1.1.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@vitest/snapshot": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", - "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", - "dev": true, - "dependencies": { - "@vitest/pretty-format": "2.1.8", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@vitest/spy": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", - "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "tinyspy": "^3.0.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vitest/utils": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", - "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", - "dev": true, - "dependencies": { - "@vitest/pretty-format": "2.1.8", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "color-name": "~1.1.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.0.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.2.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=14.14" } }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "inBundle": true, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 4" } }, - "node_modules/abort-controller": { + "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { "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" - }, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=6.5" + "node": ">=8" } }, - "node_modules/add-stream": { + "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "inBundle": true, + "license": "MIT" }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.4" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 14" + "node": "*" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "inBundle": true, + "license": "MIT", "dependencies": { - "humanize-ms": "^1.2.1" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 0.6" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, + "node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.2", + "inBundle": true, + "license": "BSD-3-Clause", "dependencies": { - "stack-chain": "^1.3.7" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^4.7 || >=6.9 || >=7.3" + "node": ">=10.0.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, + "node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.0.0" } }, - "node_modules/aws-cdk": { - "version": "2.176.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.176.0.tgz", - "integrity": "sha512-yRjIXzK2ddznwuSjasWAViYBtBSQbEu6GHlylaC3GHsIUPhrK3KguqIuhdlxjMeiQ1Fvok8REDLCReZJdrSLLg==", - "bin": { - "cdk": "bin/cdk" - }, + "node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 14.15.0" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">= 6" } }, "node_modules/aws-sdk": { @@ -6576,8 +5270,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -6625,7 +5318,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -6700,10 +5392,11 @@ } }, "node_modules/cacache": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", - "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -6722,52 +5415,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/ssri": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", @@ -7152,10 +5799,11 @@ } }, "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==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -7554,6 +6202,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -7935,6 +6590,16 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -7981,6 +6646,30 @@ "node": ">=0.4.x" } }, + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/expect-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", @@ -8038,18 +6727,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-xml-parser": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", @@ -8101,15 +6778,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -8143,6 +6811,20 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -8233,7 +6915,6 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -8428,6 +7109,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-tsconfig": { "version": "4.7.5", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", @@ -8522,6 +7216,56 @@ "ini": "^1.3.2" } }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8557,8 +7301,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/handlebars": { "version": "4.7.8", @@ -8704,12 +7447,6 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -8736,12 +7473,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -8814,10 +7552,10 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -8941,10 +7679,11 @@ } }, "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -9240,6 +7979,16 @@ "protocols": "^2.0.1" } }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -9503,7 +8252,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -9688,114 +8436,10 @@ "supports-color": "^7.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lerna/node_modules/minimatch": { @@ -9810,15 +8454,6 @@ "node": "*" } }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lerna/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -9828,49 +8463,6 @@ "node": ">=8" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/libnpmaccess": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", @@ -9885,10 +8477,11 @@ } }, "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -9940,10 +8533,11 @@ } }, "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -10325,6 +8919,19 @@ "node": ">=8" } }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -10572,6 +9179,13 @@ "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", @@ -10819,64 +9433,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/meow/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -11558,7 +10120,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -11567,7 +10128,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -11609,7 +10169,6 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11705,12 +10264,6 @@ "node": ">=8" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", @@ -11733,12 +10286,6 @@ "node": ">=8" } }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -11763,12 +10310,6 @@ "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -11793,12 +10334,6 @@ "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -11824,12 +10359,6 @@ "node": ">=8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -11967,15 +10496,6 @@ "path-to-regexp": "^8.1.0" } }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.2.tgz", - "integrity": "sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -12020,28 +10540,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -12051,21 +10549,6 @@ "node": ">=16" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -12197,12 +10680,6 @@ "builtins": "^1.0.3" } }, - "node_modules/npm-package-arg/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/npm-packlist": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", @@ -12384,42 +10861,12 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm-registry-fetch/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-registry-fetch/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -12489,21 +10936,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/npm-registry-fetch/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -12587,12 +11019,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm-registry-fetch/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12818,16 +11244,45 @@ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/p-map": { @@ -12914,6 +11369,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12984,12 +11440,13 @@ } }, "node_modules/pacote/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/pacote/node_modules/@sigstore/sign": { @@ -13044,28 +11501,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/pacote/node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -13099,20 +11534,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/pacote/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -13124,13 +11551,13 @@ } }, "node_modules/pacote/node_modules/normalize-package-data": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", - "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -13148,10 +11575,11 @@ } }, "node_modules/pacote/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -13292,12 +11720,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -13380,15 +11802,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-to-regexp": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", @@ -13476,58 +11889,6 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -13682,6 +12043,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" + }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", @@ -13817,33 +12184,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -13869,21 +12215,6 @@ "node": ">=12" } }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -14233,6 +12564,70 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, + "node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/rollup": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", @@ -14463,45 +12858,23 @@ "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/sigstore/node_modules/http-proxy-agent": { @@ -14575,21 +12948,6 @@ "node": ">=8" } }, - "node_modules/sigstore/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/sigstore/node_modules/minipass-collect": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", @@ -14640,12 +12998,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/sigstore/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/sinon": { "version": "18.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.1.tgz", @@ -14880,12 +13232,6 @@ "node": ">=8" } }, - "node_modules/ssri/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/stack-chain": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", @@ -15135,12 +13481,6 @@ "node": ">=8" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -15338,2237 +13678,1892 @@ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "node_modules/tsx/node_modules/@esbuild/android-x64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], "optional": true, "os": [ - "netbsd" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "sunos" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ - "arm64" + "x64" ], "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "node_modules/tsx/node_modules/@esbuild/linux-arm": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ - "ia32" + "arm" ], "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/esbuild": { + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, - "node_modules/tsx/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/tuf-js/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tuf-js/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tuf-js/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tuf-js/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/tuf-js/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, + "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/typedoc": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", - "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", - "dev": true, - "dependencies": { - "@gerrit0/mini-shiki": "^1.24.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "yaml": "^2.6.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x" + "node": ">=18" } }, - "node_modules/typedoc-plugin-missing-exports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.1.0.tgz", - "integrity": "sha512-Sogbaj+qDa21NjB3SlIw4JXSwmcl/WOjwiPNaVEcPhpNG/MiRTtpwV81cT7h1cbu9StpONFPbddYWR0KV/fTWA==", - "dev": true, - "peerDependencies": { - "typedoc": "0.26.x || 0.27.x" + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/typedoc-plugin-zod": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-zod/-/typedoc-plugin-zod-1.3.1.tgz", - "integrity": "sha512-u4NH1Ez168gRNnhUd0x4pZhp85maJ9y050IxSok9XwdzTpUA9NN0ee3ho8ssrzmxsvO2UDbDEiks7xtI0p6UXA==", - "dev": true, - "peerDependencies": { - "typedoc": "0.23.x || 0.24.x || 0.25.x || 0.26.x || 0.27.x" + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=14.17" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "node_modules/tsx/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" }, "engines": { - "node": ">=0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/tuf-js/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "engines": { - "node": ">=18" + "dependencies": { + "debug": "4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "node_modules/tuf-js/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "dependencies": { - "unique-slug": "^4.0.0" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "node_modules/tuf-js/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/tuf-js/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">= 10.0.0" + "node": ">= 6" } }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=12" } }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/tuf-js/node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/util-deprecate": { + "node_modules/tuf-js/node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/tuf-js/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "builtins": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "node_modules/tuf-js/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">= 10" } }, - "node_modules/vite-node": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", - "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", + "node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" + "minipass": "^7.0.3" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedoc": { + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", + "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@gerrit0/mini-shiki": "^1.24.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.6.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, "engines": { - "node": ">=12" + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x" } }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/typedoc-plugin-missing-exports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.1.0.tgz", + "integrity": "sha512-Sogbaj+qDa21NjB3SlIw4JXSwmcl/WOjwiPNaVEcPhpNG/MiRTtpwV81cT7h1cbu9StpONFPbddYWR0KV/fTWA==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "peerDependencies": { + "typedoc": "0.26.x || 0.27.x" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], + "node_modules/typedoc-plugin-zod": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-zod/-/typedoc-plugin-zod-1.3.1.tgz", + "integrity": "sha512-u4NH1Ez168gRNnhUd0x4pZhp85maJ9y050IxSok9XwdzTpUA9NN0ee3ho8ssrzmxsvO2UDbDEiks7xtI0p6UXA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "peerDependencies": { + "typedoc": "0.23.x || 0.24.x || 0.25.x || 0.26.x || 0.27.x" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": ">=12" + "node": ">=0.8.0" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "unique-slug": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">=12" + "node": ">= 10.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=4", + "yarn": "*" } }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "builtins": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], + "node_modules/vite-node": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "optional": true, "os": [ - "openbsd" + "aix" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "node_modules/vite/node_modules/@esbuild/android-arm": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ - "x64" + "arm" ], "dev": true, "optional": true, "os": [ - "sunos" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "node_modules/vite/node_modules/@esbuild/android-arm64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "node_modules/vite/node_modules/@esbuild/android-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ - "ia32" + "x64" ], "dev": true, "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" + "arm64" ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", - "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", - "dev": true, - "dependencies": { - "@vitest/expect": "2.1.8", - "@vitest/mocker": "2.1.8", - "@vitest/pretty-format": "^2.1.8", - "@vitest/runner": "2.1.8", - "@vitest/snapshot": "2.1.8", - "@vitest/spy": "2.1.8", - "@vitest/utils": "2.1.8", - "chai": "^5.1.2", - "debug": "^4.3.7", - "expect-type": "^1.1.0", - "magic-string": "^0.30.12", - "pathe": "^1.1.2", - "std-env": "^3.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.8", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.8", - "@vitest/ui": "2.1.8", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "darwin" + ], "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=12" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "semver": "bin/semver" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=4.0.0" + "node": ">=12" } }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=0.4" + "node": ">=12" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "bin": { - "yaml": "bin.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 14" + "node": ">=12" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/zod": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", - "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", - "devOptional": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "packages/batch": { - "name": "@aws-lambda-powertools/batch", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing" - } - }, - "packages/commons": { - "name": "@aws-lambda-powertools/commons", - "version": "2.13.0", - "license": "MIT-0", - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing" - } - }, - "packages/event-handler": { - "name": "@aws-lambda-powertools/event-handler", - "version": "2.13.0", - "license": "MIT-0", - "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "packages/idempotency": { - "name": "@aws-lambda-powertools/idempotency", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/vitest": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0" + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.731.1", - "@aws-sdk/lib-dynamodb": "^3.731.1", - "aws-sdk-client-mock": "^4.1.0" + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": ">=3.x", - "@aws-sdk/lib-dynamodb": ">=3.x", - "@middy/core": "4.x || 5.x || 6.x" + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", + "happy-dom": "*", + "jsdom": "*" }, "peerDependenciesMeta": { - "@aws-sdk/client-dynamodb": { + "@edge-runtime/vm": { "optional": true }, - "@aws-sdk/lib-dynamodb": { + "@types/node": { "optional": true }, - "@middy/core": { + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { "optional": true } } }, - "packages/jmespath": { - "name": "@aws-lambda-powertools/jmespath", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "defaults": "^1.0.3" } }, - "packages/logger": { - "name": "@aws-lambda-powertools/logger", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "lodash.merge": "^4.6.2" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@types/lodash.merge": "^4.6.9" - }, - "peerDependencies": { - "@middy/core": "4.x || 5.x || 6.x" - }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - } + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "packages/metrics": { - "name": "@aws-lambda-powertools/metrics", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.731.1", - "@types/promise-retry": "^1.1.3", - "promise-retry": "^2.0.1" + "isexe": "^2.0.0" }, - "peerDependencies": { - "@middy/core": "4.x || 5.x || 6.x" + "bin": { + "node-which": "bin/node-which" }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "packages/parameters": { - "name": "@aws-lambda-powertools/parameters", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.731.1", - "@aws-sdk/client-dynamodb": "^3.731.1", - "@aws-sdk/client-secrets-manager": "^3.731.1", - "@aws-sdk/client-ssm": "^3.731.1", - "@aws-sdk/util-dynamodb": "^3.731.1", - "@smithy/util-base64": "^4.0.0", - "aws-sdk-client-mock": "^4.1.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" }, - "peerDependencies": { - "@aws-sdk/client-appconfigdata": ">=3.x", - "@aws-sdk/client-dynamodb": ">=3.x", - "@aws-sdk/client-secrets-manager": ">=3.x", - "@aws-sdk/client-ssm": ">=3.x", - "@aws-sdk/util-dynamodb": ">=3.x", - "@middy/core": "4.x || 5.x || 6.x" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@aws-sdk/client-appconfigdata": { - "optional": true - }, - "@aws-sdk/client-dynamodb": { - "optional": true - }, - "@aws-sdk/client-secrets-manager": { - "optional": true - }, - "@aws-sdk/client-ssm": { - "optional": true - }, - "@aws-sdk/util-dynamodb": { - "optional": true - }, - "@middy/core": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/parser": { - "name": "@aws-lambda-powertools/parser", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" - }, - "devDependencies": { - "@anatine/zod-mock": "^3.13.3" + "siginfo": "^2.0.0", + "stackback": "0.0.2" }, - "peerDependencies": { - "@middy/core": "4.x || 5.x || 6.x", - "zod": ">=3.x" + "bin": { + "why-is-node-running": "cli.js" }, - "peerDependenciesMeta": { - "@middy/core": { - "optional": true - }, - "zod": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "packages/testing": { - "name": "@aws-lambda-powertools/testing-utils", - "version": "2.13.0", - "license": "MIT-0", + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", - "@aws-sdk/client-lambda": "^3.731.1", - "@smithy/util-utf8": "^4.0.0", - "aws-cdk-lib": "^2.176.0", - "esbuild": "^0.24.2", - "promise-retry": "^2.0.1" - }, - "devDependencies": { - "@types/promise-retry": "^1.1.6", - "aws-sdk-client-mock-vitest": "^6.0.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "packages/testing/node_modules/@aws-cdk/cli-lib-alpha": { - "version": "2.175.1-alpha.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.175.1-alpha.0.tgz", - "integrity": "sha512-zMewtUHmU0cAWX+xky2UrRQixKjEWTnNCMrvTigqxmwJkQEwnkCRAH2ccD+zugGfLtApOwnvOJ8CropfMTnIYw==", - "license": "Apache-2.0", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 14.15.0" + "node": ">=8" } }, - "packages/testing/node_modules/aws-cdk-lib": { - "version": "2.175.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.175.1.tgz", - "integrity": "sha512-2OiZDUeuAA5nBrWKxQVT0CHrQmLLx7SIpUeqyKRLEdiYPFlj3nCd/0KcVpsy6hPKS+IZp7Qm1kghmGMsV6JGoA==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml", - "mime-types" - ], - "license": "Apache-2.0", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.208", - "@aws-cdk/asset-kubectl-v20": "^2.1.3", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^39.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.2", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.3", - "table": "^6.8.2", - "yaml": "1.10.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">=10" }, - "peerDependencies": { - "constructs": "^10.0.0" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "node_modules/wrappy": { "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.17.1", - "inBundle": true, - "license": "MIT", + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=6" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=4.0.0" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/fast-uri": { - "version": "3.0.3", - "inBundle": true, - "license": "BSD-3-Clause" + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.2.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { - "node": ">=14.14" + "node": ">=10" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, "license": "ISC" }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.2", - "inBundle": true, - "license": "MIT", + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 4" + "node": ">= 14" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "devOptional": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" + "packages/batch": { + "name": "@aws-lambda-powertools/batch", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/mime-db": { - "version": "1.52.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" + "packages/commons": { + "name": "@aws-lambda-powertools/commons", + "version": "2.13.0", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/mime-types": { - "version": "2.1.35", - "inBundle": true, - "license": "MIT", + "packages/event-handler": { + "name": "@aws-lambda-powertools/event-handler", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "@aws-lambda-powertools/commons": "^2.13.0" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", + "packages/idempotency": { + "name": "@aws-lambda-powertools/idempotency", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "brace-expansion": "^1.1.7" + "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/jmespath": "^2.13.0" }, - "engines": { - "node": "*" - } - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/lib-dynamodb": "^3.731.1", + "aws-sdk-client-mock": "^4.1.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/lib-dynamodb": ">=3.x", + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/lib-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "packages/jmespath": { + "name": "@aws-lambda-powertools/jmespath", + "version": "2.13.0", + "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "packages/logger": { + "name": "@aws-lambda-powertools/logger", + "version": "2.13.0", + "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^2.13.0", + "lodash.merge": "^4.6.2" }, - "engines": { - "node": ">=10" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@types/lodash.merge": "^4.6.9" + }, + "peerDependencies": { + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", + "packages/metrics": { + "name": "@aws-lambda-powertools/metrics", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "@aws-lambda-powertools/commons": "^2.13.0" }, - "engines": { - "node": ">=10" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-cloudwatch": "^3.731.1", + "@types/promise-retry": "^1.1.3", + "promise-retry": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "peerDependencies": { + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", + "packages/parameters": { + "name": "@aws-lambda-powertools/parameters", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@aws-lambda-powertools/commons": "^2.13.0" }, - "engines": { - "node": ">=8" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-appconfigdata": "^3.731.1", + "@aws-sdk/client-dynamodb": "^3.731.1", + "@aws-sdk/client-secrets-manager": "^3.731.1", + "@aws-sdk/client-ssm": "^3.731.1", + "@aws-sdk/util-dynamodb": "^3.731.1", + "@smithy/util-base64": "^4.0.0", + "aws-sdk-client-mock": "^4.1.0" + }, + "peerDependencies": { + "@aws-sdk/client-appconfigdata": ">=3.x", + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/client-secrets-manager": ">=3.x", + "@aws-sdk/client-ssm": ">=3.x", + "@aws-sdk/util-dynamodb": ">=3.x", + "@middy/core": "4.x || 5.x || 6.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-appconfigdata": { + "optional": true + }, + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/client-secrets-manager": { + "optional": true + }, + "@aws-sdk/client-ssm": { + "optional": true + }, + "@aws-sdk/util-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "packages/parser": { + "name": "@aws-lambda-powertools/parser", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "ansi-regex": "^5.0.1" + "@aws-lambda-powertools/commons": "^2.13.0" }, - "engines": { - "node": ">=8" + "devDependencies": { + "@anatine/zod-mock": "^3.13.3" + }, + "peerDependencies": { + "@middy/core": "4.x || 5.x || 6.x", + "zod": ">=3.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.2", - "inBundle": true, - "license": "BSD-3-Clause", + "packages/testing": { + "name": "@aws-lambda-powertools/testing-utils", + "version": "2.13.0", + "license": "MIT-0", "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "@aws-cdk/cli-lib-alpha": "^2.176.0-alpha.0", + "@aws-sdk/client-lambda": "^3.731.1", + "@smithy/util-utf8": "^4.0.0", + "aws-cdk-lib": "^2.176.0", + "esbuild": "^0.24.2", + "promise-retry": "^2.0.1" }, - "engines": { - "node": ">=10.0.0" - } - }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "devDependencies": { + "@types/promise-retry": "^1.1.6", + "aws-sdk-client-mock-vitest": "^6.0.0" } }, - "packages/testing/node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", + "packages/testing/node_modules/@aws-cdk/cli-lib-alpha": { + "version": "2.176.0-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.176.0-alpha.0.tgz", + "integrity": "sha512-zwTelwMZ5kLIQEefnh2u3gV8H1HqA5YaFdItVoEV7gL1OniLK/71lpF7A0JsUZpJve2p8577VF1Jnq8PdqSTLw==", + "license": "Apache-2.0", "engines": { - "node": ">= 6" + "node": ">= 14.15.0" } }, "packages/tracer": { diff --git a/packages/testing/package.json b/packages/testing/package.json index 7e4ecfc32b..aecaca4754 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -97,7 +97,7 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.175.1-alpha.0", + "@aws-cdk/cli-lib-alpha": "^2.176.0-alpha.0", "@aws-sdk/client-lambda": "^3.731.1", "@smithy/util-utf8": "^4.0.0", "aws-cdk-lib": "^2.176.0", From 7cce60b41b8b72c5aeee5eb17b87d159af3123ac Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 21 Jan 2025 12:00:58 +0100 Subject: [PATCH 13/31] fix(parser): EventBridge envelope uses correct path (#3504) --- packages/parser/src/envelopes/event-bridge.ts | 47 +++-- .../apiGatewayAuthorizerRequestEvent.json | 72 ------- .../apiGatewayAuthorizerTokenEvent.json | 5 - .../events/apiGatewayAuthorizerV2Event.json | 52 ----- .../tests/events/apiGatewayProxyEvent.json | 71 ------- .../apiGatewayProxyEventAnotherPath.json | 70 ------- ...apiGatewayProxyEventPathTrailingSlash.json | 70 ------- .../apiGatewayProxyEventPrincipalId.json | 13 -- .../events/apiGatewayProxyEventTestUI.json | 71 ------- .../apiGatewayProxyEvent_noVersionAuth.json | 65 ------- .../events/apiGatewayProxyOtherEvent.json | 71 ------- .../tests/events/apiGatewayProxyV2Event.json | 63 ------ ...iGatewayProxyV2EventPathTrailingSlash.json | 63 ------ .../events/apiGatewayProxyV2Event_GET.json | 62 ------ .../events/apiGatewayProxyV2IamEvent.json | 57 ------ ...piGatewayProxyV2LambdaAuthorizerEvent.json | 47 ----- .../apiGatewayProxyV2OtherGetEvent.json | 62 ------ ...ayProxyV2SchemaMiddlewareInvalidEvent.json | 63 ------ ...ewayProxyV2SchemaMiddlewareValidEvent.json | 63 ------ ...piGatewaySchemaMiddlewareInvalidEvent.json | 71 ------- .../apiGatewaySchemaMiddlewareValidEvent.json | 71 ------- .../tests/events/appSyncAuthorizerEvent.json | 13 -- .../events/appSyncAuthorizerResponse.json | 9 - .../tests/events/appSyncDirectResolver.json | 68 ------- .../tests/events/appSyncResolverEvent.json | 69 ------- .../base.json} | 0 .../tests/unit/envelopes/eventbridge.test.ts | 180 ++++++++---------- .../tests/unit/envelopes/lambda.test.ts | 7 +- .../tests/unit/parser.decorator.test.ts | 17 +- .../parser/tests/unit/parser.middy.test.ts | 12 +- .../tests/unit/schema/eventbridge.test.ts | 31 ++- .../parser/tests/unit/schema/lambda.test.ts | 2 +- packages/parser/tests/unit/schema/utils.ts | 28 --- 33 files changed, 163 insertions(+), 1502 deletions(-) delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerV2Event.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventTestUI.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyOtherEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2Event.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2Event_GET.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2IamEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json delete mode 100644 packages/parser/tests/events/appSyncAuthorizerEvent.json delete mode 100644 packages/parser/tests/events/appSyncAuthorizerResponse.json delete mode 100644 packages/parser/tests/events/appSyncDirectResolver.json delete mode 100644 packages/parser/tests/events/appSyncResolverEvent.json rename packages/parser/tests/events/{eventBridgeEvent.json => eventbridge/base.json} (100%) diff --git a/packages/parser/src/envelopes/event-bridge.ts b/packages/parser/src/envelopes/event-bridge.ts index 20eae70827..adc47d75b3 100644 --- a/packages/parser/src/envelopes/event-bridge.ts +++ b/packages/parser/src/envelopes/event-bridge.ts @@ -1,8 +1,8 @@ -import type { ZodSchema, z } from 'zod'; +import type { ZodError, ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { EventBridgeSchema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Envelope for EventBridge schema that extracts and parses data from the `detail` key. @@ -14,34 +14,41 @@ export const EventBridgeEnvelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - return Envelope.parse(EventBridgeSchema.parse(data).detail, schema); + const extendedSchema = EventBridgeSchema.extend({ + detail: schema, + }); + try { + const parsed = extendedSchema.parse(data); + return parsed.detail; + } catch (error) { + throw new ParseError('Failed to parse EventBridge envelope', { + cause: error as ZodError, + }); + } }, - safeParse(data: unknown, schema: T): ParsedResult> { - const parsedEnvelope = EventBridgeSchema.safeParse(data); + safeParse( + data: unknown, + schema: T + ): ParsedResult> { + const extendedSchema = EventBridgeSchema.extend({ + detail: schema, + }); - if (!parsedEnvelope.success) { + const parsedResult = extendedSchema.safeParse(data); + if (!parsedResult.success) { return { success: false, error: new ParseError('Failed to parse EventBridge envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; - } - - const parsedDetail = Envelope.safeParse(parsedEnvelope.data.detail, schema); - - if (!parsedDetail.success) { - return { - success: false, - error: new ParseError('Failed to parse EventBridge envelope detail', { - cause: parsedDetail.error, + cause: parsedResult.error, }), originalEvent: data, }; } - return parsedDetail; + return { + success: true, + data: parsedResult.data.detail, + }; }, }; diff --git a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json b/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json deleted file mode 100644 index 3177f389b4..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "version": "1.0", - "type": "REQUEST", - "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request", - "identitySource": "user1,123", - "authorizationToken": "user1,123", - "resource": "/request", - "path": "/request", - "httpMethod": "GET", - "headers": { - "X-AMZ-Date": "20170718T062915Z", - "Accept": "*/*", - "HeaderAuth1": "headerValue1", - "CloudFront-Viewer-Country": "US", - "CloudFront-Forwarded-Proto": "https", - "CloudFront-Is-Tablet-Viewer": "false", - "CloudFront-Is-Mobile-Viewer": "false", - "User-Agent": "..." - }, - "queryStringParameters": { - "QueryString1": "queryValue1" - }, - "multiValueQueryStringParameters": { - "QueryString1": ["queryValue1"] - }, - "pathParameters": {}, - "stageVariables": { - "StageVar1": "stageValue1" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "abcdef123", - "domainName": "3npb9j1tlk.execute-api.us-west-1.amazonaws.com", - "domainPrefix": "3npb9j1tlk", - "extendedRequestId": "EXqgWgXxSK4EJug=", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "apiKey": "...", - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "PostmanRuntime/7.28.3", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/request", - "protocol": "HTTP/1.1", - "requestId": "EXqgWgXxSK4EJug=", - "requestTime": "20/Aug/2021:14:36:50 +0000", - "requestTimeEpoch": 1629470210043, - "resourceId": "ANY /request", - "resourcePath": "/request", - "stage": "test" - }, - "body": null -} diff --git a/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json b/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json deleted file mode 100644 index f30f360f6d..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "TOKEN", - "authorizationToken": "allow", - "methodArn": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" -} diff --git a/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json b/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json deleted file mode 100644 index f0528080c9..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": "2.0", - "type": "REQUEST", - "routeArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request", - "identitySource": ["user1", "123"], - "routeKey": "GET /merchants", - "rawPath": "/merchants", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "x-amzn-trace-id": "Root=1-611cc4a7-0746ebee281cfd967db97b64", - "Header1": "value1", - "Header2": "value2", - "Authorization": "value" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/merchants", - "protocol": "HTTP/1.1", - "sourceIp": "IP", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "GET /merchants", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { "parameter1": "value1" }, - "stageVariables": { "stageVariable1": "value1", "stageVariable2": "value2" } -} diff --git a/packages/parser/tests/events/apiGatewayProxyEvent.json b/packages/parser/tests/events/apiGatewayProxyEvent.json deleted file mode 100644 index 5a40bf2f42..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json b/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json deleted file mode 100644 index cc8b236234..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/anotherPath", - "path": "/my/anotherPath", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/anotherPath", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/anotherPath", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json b/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json deleted file mode 100644 index 2de7ae409b..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path/", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json b/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json deleted file mode 100644 index f18a2a44bb..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "resource": "/trip", - "path": "/trip", - "httpMethod": "POST", - "requestContext": { - "requestId": "34972478-2843-4ced-a657-253108738274", - "authorizer": { - "user_id": "fake_username", - "principalId": "fake", - "integrationLatency": 451 - } - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventTestUI.json b/packages/parser/tests/events/apiGatewayProxyEventTestUI.json deleted file mode 100644 index 4c4b53557f..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventTestUI.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "test-invoke-source-ip", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json b/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json deleted file mode 100644 index aa90582aa5..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyOtherEvent.json b/packages/parser/tests/events/apiGatewayProxyOtherEvent.json deleted file mode 100644 index b5f484fde7..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyOtherEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/other/path", - "path": "/other/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/other/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/other/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2Event.json b/packages/parser/tests/events/apiGatewayProxyV2Event.json deleted file mode 100644 index c01ff40d82..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2Event.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"tom\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json b/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json deleted file mode 100644 index b61beaa0e6..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path/", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"tom\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json b/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json deleted file mode 100644 index df84c046d4..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json b/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json deleted file mode 100644 index 3bc003d656..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "pathParameters": { - "proxy": "hello/world" - }, - "requestContext": { - "routeKey": "$default", - "accountId": "123456789012", - "stage": "$default", - "requestId": "id", - "authorizer": { - "iam": { - "accessKey": "ARIA2ZJZYVUEREEIHAKY", - "accountId": "1234567890", - "callerId": "AROA7ZJZYVRE7C3DUXHH6:CognitoIdentityCredentials", - "cognitoIdentity": { - "amr": ["foo"], - "identityId": "us-east-1:3f291106-8703-466b-8f2b-3ecee1ca56ce", - "identityPoolId": "us-east-1:4f291106-8703-466b-8f2b-3ecee1ca56ce" - }, - "principalOrgId": "AwsOrgId", - "userArn": "arn:aws:iam::1234567890:user/Admin", - "userId": "AROA2ZJZYVRE7Y3TUXHH6" - } - }, - "apiId": "api-id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "time": "12/Mar/2020:19:03:58+0000", - "timeEpoch": 1583348638390, - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - } - }, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - }, - "body": "{\r\n\t\"a\": 1\r\n}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json b/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json deleted file mode 100644 index 58ba0489e0..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "pathParameters": { - "proxy": "hello/world" - }, - "requestContext": { - "routeKey": "$default", - "accountId": "123456789012", - "stage": "$default", - "requestId": "id", - "authorizer": { - "lambda": { - "key": "value" - } - }, - "apiId": "api-id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "time": "12/Mar/2020:19:03:58+0000", - "timeEpoch": 1583348638390, - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - } - }, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - }, - "body": "{\r\n\t\"a\": 1\r\n}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json b/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json deleted file mode 100644 index b600aa35c3..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/other/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "GET", - "path": "/other/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json b/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json deleted file mode 100644 index 9ecf730d4b..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"username\": \"lessa\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json b/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json deleted file mode 100644 index 1e5802a685..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"lessa\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json b/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json deleted file mode 100644 index bc5d7ae252..0000000000 --- a/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "POST", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "{\"username\": \"lessa\"}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json b/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json deleted file mode 100644 index e3d5236ce5..0000000000 --- a/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "POST", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "{\"message\": \"hello world\", \"username\": \"lessa\"}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/appSyncAuthorizerEvent.json b/packages/parser/tests/events/appSyncAuthorizerEvent.json deleted file mode 100644 index 5b58de9dd4..0000000000 --- a/packages/parser/tests/events/appSyncAuthorizerEvent.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "authorizationToken": "BE9DC5E3-D410-4733-AF76-70178092E681", - "requestContext": { - "apiId": "giy7kumfmvcqvbedntjwjvagii", - "accountId": "254688921111", - "requestId": "b80ed838-14c6-4500-b4c3-b694c7bef086", - "queryString": "mutation MyNewTask($desc: String!) {\n createTask(description: $desc, owner: \"ccc\", taskStatus: \"cc\", title: \"ccc\") {\n id\n }\n}\n", - "operationName": "MyNewTask", - "variables": { - "desc": "Foo" - } - } -} diff --git a/packages/parser/tests/events/appSyncAuthorizerResponse.json b/packages/parser/tests/events/appSyncAuthorizerResponse.json deleted file mode 100644 index dfd52d9498..0000000000 --- a/packages/parser/tests/events/appSyncAuthorizerResponse.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "isAuthorized": true, - "resolverContext": { - "name": "Foo Man", - "balance": 100 - }, - "deniedFields": ["Mutation.createEvent"], - "ttlOverride": 15 -} diff --git a/packages/parser/tests/events/appSyncDirectResolver.json b/packages/parser/tests/events/appSyncDirectResolver.json deleted file mode 100644 index 64054c9acb..0000000000 --- a/packages/parser/tests/events/appSyncDirectResolver.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "arguments": { - "id": "my identifier" - }, - "identity": { - "claims": { - "sub": "192879fc-a240-4bf1-ab5a-d6a00f3063f9", - "email_verified": true, - "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-xxxxxxxxxxx", - "phone_number_verified": false, - "cognito:username": "jdoe", - "aud": "7471s60os7h0uu77i1tk27sp9n", - "event_id": "bc334ed8-a938-4474-b644-9547e304e606", - "token_use": "id", - "auth_time": 1599154213, - "phone_number": "+19999999999", - "exp": 1599157813, - "iat": 1599154213, - "email": "jdoe@email.com" - }, - "defaultAuthStrategy": "ALLOW", - "groups": null, - "issuer": "https://cognito-idp.us-west-2.amazonaws.com/us-west-xxxxxxxxxxx", - "sourceIp": ["1.1.1.1"], - "sub": "192879fc-a240-4bf1-ab5a-d6a00f3063f9", - "username": "jdoe" - }, - "source": null, - "request": { - "headers": { - "x-forwarded-for": "1.1.1.1, 2.2.2.2", - "cloudfront-viewer-country": "US", - "cloudfront-is-tablet-viewer": "false", - "via": "2.0 xxxxxxxxxxxxxxxx.cloudfront.net (CloudFront)", - "cloudfront-forwarded-proto": "https", - "origin": "https://us-west-1.console.aws.amazon.com", - "content-length": "217", - "accept-language": "en-US,en;q=0.9", - "host": "xxxxxxxxxxxxxxxx.appsync-api.us-west-1.amazonaws.com", - "x-forwarded-proto": "https", - "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36", - "accept": "*/*", - "cloudfront-is-mobile-viewer": "false", - "cloudfront-is-smarttv-viewer": "false", - "accept-encoding": "gzip, deflate, br", - "referer": "https://us-west-1.console.aws.amazon.com/appsync/home?region=us-west-1", - "content-type": "application/json", - "sec-fetch-mode": "cors", - "x-amz-cf-id": "3aykhqlUwQeANU-HGY7E_guV5EkNeMMtwyOgiA==", - "x-amzn-trace-id": "Root=1-5f512f51-fac632066c5e848ae714", - "authorization": "eyJraWQiOiJScWFCSlJqYVJlM0hrSnBTUFpIcVRXazNOW...", - "sec-fetch-dest": "empty", - "x-amz-user-agent": "AWS-Console-AppSync/", - "cloudfront-is-desktop-viewer": "true", - "sec-fetch-site": "cross-site", - "x-forwarded-port": "443" - } - }, - "prev": null, - "info": { - "selectionSetList": ["id", "field1", "field2"], - "selectionSetGraphQL": "{\n id\n field1\n field2\n}", - "parentTypeName": "Mutation", - "fieldName": "createSomething", - "variables": {} - }, - "stash": {} -} diff --git a/packages/parser/tests/events/appSyncResolverEvent.json b/packages/parser/tests/events/appSyncResolverEvent.json deleted file mode 100644 index 6a5d72195c..0000000000 --- a/packages/parser/tests/events/appSyncResolverEvent.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "typeName": "Merchant", - "fieldName": "locations", - "arguments": { - "page": 2, - "size": 1, - "name": "value" - }, - "identity": { - "claims": { - "sub": "07920713-4526-4642-9c88-2953512de441", - "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_POOL_ID", - "aud": "58rc9bf5kkti90ctmvioppukm9", - "event_id": "7f4c9383-abf6-48b7-b821-91643968b755", - "token_use": "id", - "auth_time": 1615366261, - "name": "Michael Brewer", - "exp": 1615369861, - "iat": 1615366261 - }, - "defaultAuthStrategy": "ALLOW", - "groups": null, - "issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_POOL_ID", - "sourceIp": ["11.215.2.22"], - "sub": "07920713-4526-4642-9c88-2953512de441", - "username": "mike" - }, - "source": { - "name": "Value", - "nested": { - "name": "value", - "list": [] - } - }, - "request": { - "headers": { - "x-forwarded-for": "11.215.2.22, 64.44.173.11", - "cloudfront-viewer-country": "US", - "cloudfront-is-tablet-viewer": "false", - "via": "2.0 SOMETHING.cloudfront.net (CloudFront)", - "cloudfront-forwarded-proto": "https", - "origin": "https://console.aws.amazon.com", - "content-length": "156", - "accept-language": "en-US,en;q=0.9", - "host": "SOMETHING.appsync-api.us-east-1.amazonaws.com", - "x-forwarded-proto": "https", - "sec-gpc": "1", - "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) etc.", - "accept": "*/*", - "cloudfront-is-mobile-viewer": "false", - "cloudfront-is-smarttv-viewer": "false", - "accept-encoding": "gzip, deflate, br", - "referer": "https://console.aws.amazon.com/", - "content-type": "application/json", - "sec-fetch-mode": "cors", - "x-amz-cf-id": "Fo5VIuvP6V6anIEt62WzFDCK45mzM4yEdpt5BYxOl9OFqafd-WR0cA==", - "x-amzn-trace-id": "Root=1-60488877-0b0c4e6727ab2a1c545babd0", - "authorization": "AUTH-HEADER", - "sec-fetch-dest": "empty", - "x-amz-user-agent": "AWS-Console-AppSync/", - "cloudfront-is-desktop-viewer": "true", - "sec-fetch-site": "cross-site", - "x-forwarded-port": "443" - } - }, - "prev": { - "result": {} - } -} diff --git a/packages/parser/tests/events/eventBridgeEvent.json b/packages/parser/tests/events/eventbridge/base.json similarity index 100% rename from packages/parser/tests/events/eventBridgeEvent.json rename to packages/parser/tests/events/eventbridge/base.json diff --git a/packages/parser/tests/unit/envelopes/eventbridge.test.ts b/packages/parser/tests/unit/envelopes/eventbridge.test.ts index 5b4443cd92..c66658ba97 100644 --- a/packages/parser/tests/unit/envelopes/eventbridge.test.ts +++ b/packages/parser/tests/unit/envelopes/eventbridge.test.ts @@ -1,123 +1,109 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { EventBridgeEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { EventBridgeEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; +import type { EventBridgeEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('EventBridgeEnvelope ', () => { - describe('parse', () => { - it('should parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - const data = generateMock(TestSchema); - - eventBridgeEvent.detail = data; - - expect(EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema)).toEqual( - data - ); - }); - - it('should throw error if detail type does not match schema', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; +describe('Envelope: EventBridgeEnvelope', () => { + const schema = z.object({ + instance_id: z.string(), + state: z.string(), + }); + const baseEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); - eventBridgeEvent.detail = { - foo: 'bar', - }; + describe('Method: parse', () => { + it('throws if the payload does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + // Act & Assess expect(() => - EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema) - ).toThrowError(); + EventBridgeEnvelope.parse( + event, + z.object({ + owner: z.string(), + }) + ) + ).toThrow( + expect.objectContaining({ + name: 'ParseError', + message: expect.stringContaining( + 'Failed to parse EventBridge envelope' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['detail', 'owner'], + message: 'Required', + }, + ], + }), + }) + ); }); - it('should throw when invalid data type provided', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; + it('parses an EventBridge event', () => { + // Prepare + const testEvent = structuredClone(baseEvent); - eventBridgeEvent.detail = 1 as unknown as object; + // Act + const result = EventBridgeEnvelope.parse(testEvent, schema); - expect(() => - EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema) - ).toThrow(); + // Assess + expect(result).toStrictEqual({ + instance_id: 'i-1234567890abcdef0', + state: 'terminated', + }); }); }); - describe('safeParse', () => { - it('should safe parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - const data = generateMock(TestSchema); + describe('Method: safeParse', () => { + it('parses an EventBridge event', () => { + // Prepare + const event = structuredClone(baseEvent); - eventBridgeEvent.detail = data; + // Act + const result = EventBridgeEnvelope.safeParse(event, schema); - expect( - EventBridgeEnvelope.safeParse(eventBridgeEvent, TestSchema) - ).toEqual({ + // Assess + expect(result).toEqual({ success: true, - data: data, + data: { + instance_id: 'i-1234567890abcdef0', + state: 'terminated', + }, }); }); - it('should safe parse eventbridge event and return original event if invalid', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; + it('returns an error if the event is not a valid EventBridge event', () => { + // Prepare + const event = omit(['detail'], structuredClone(baseEvent)); - eventBridgeEvent.detail = { - foo: 'bar', - }; - - const parseResult = EventBridgeEnvelope.safeParse( - eventBridgeEvent, - TestSchema - ); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: eventBridgeEvent, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } - }); - - it('should safe parse eventbridge event and return original event if invalid data type', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - eventBridgeEvent.detail = 1 as unknown as object; - - expect( - EventBridgeEnvelope.safeParse(eventBridgeEvent, TestSchema) - ).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: eventBridgeEvent, - }); - }); + // Act + const result = EventBridgeEnvelope.safeParse(event, schema); - it('should return original event and error envelope is invalid', () => { - expect(EventBridgeEnvelope.safeParse(1, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: 1, + error: new ParseError('Failed to parse EventBridge envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['detail'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/envelopes/lambda.test.ts b/packages/parser/tests/unit/envelopes/lambda.test.ts index 2260e099ed..b76228bb6e 100644 --- a/packages/parser/tests/unit/envelopes/lambda.test.ts +++ b/packages/parser/tests/unit/envelopes/lambda.test.ts @@ -1,5 +1,8 @@ import { generateMock } from '@anatine/zod-mock'; -import type { APIGatewayProxyEventV2 } from 'aws-lambda'; +import type { + APIGatewayProxyEventV2, + LambdaFunctionURLEvent, +} from 'aws-lambda'; import { describe, expect, it } from 'vitest'; import { ZodError } from 'zod'; import { ParseError } from '../../../src'; @@ -22,7 +25,7 @@ describe('Lambda Functions Url ', () => { it('should throw when no body provided', () => { const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; + TestEvents.lambdaFunctionUrlEvent as LambdaFunctionURLEvent; testEvent.body = undefined; expect(() => diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index 7e0a3d3293..5ce14f7d04 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -8,7 +8,7 @@ import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/index.js'; import { EventBridgeSchema } from '../../src/schemas/index.js'; import type { EventBridgeEvent, ParsedResult } from '../../src/types'; -import { TestEvents, TestSchema } from './schema/utils'; +import { TestSchema, getTestEvent } from './schema/utils'; describe('Parser Decorator', () => { const customEventBridgeSchema = EventBridgeSchema.extend({ @@ -90,7 +90,10 @@ describe('Parser Decorator', () => { it('should parse custom schema with envelope event', async () => { const customPayload = generateMock(TestSchema); - const testEvent = TestEvents.eventBridgeEvent as EventBridgeEvent; + const testEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); testEvent.detail = customPayload; const resp = await lambda.handlerWithSchemaAndEnvelope( @@ -119,7 +122,10 @@ describe('Parser Decorator', () => { it('should parse and call private async method', async () => { const customPayload = generateMock(TestSchema); - const testEvent = TestEvents.eventBridgeEvent as EventBridgeEvent; + const testEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); testEvent.detail = customPayload; const resp = await lambda.handlerWithParserCallsAnotherMethod( @@ -159,7 +165,10 @@ describe('Parser Decorator', () => { it('should parse event with envelope and safeParse', async () => { const testEvent = generateMock(TestSchema); - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); event.detail = testEvent; const resp = await lambda.harndlerWithEnvelopeAndSafeParse( diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index 0528f71737..805c0fd98f 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -8,7 +8,7 @@ import { EventBridgeEnvelope, SqsEnvelope } from '../../src/envelopes'; import { parser } from '../../src/middleware/parser.js'; import { SqsSchema } from '../../src/schemas'; import type { EventBridgeEvent, ParsedResult, SqsEvent } from '../../src/types'; -import { TestEvents, TestSchema } from './schema/utils'; +import { TestSchema, getTestEvent } from './schema/utils'; describe('Middleware: parser', () => { type TestEvent = z.infer; @@ -182,7 +182,10 @@ describe('Middleware: parser', () => { it('should return event when envelope and safeParse are true', async () => { const detail = generateMock(TestSchema); - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); event.detail = detail; @@ -212,7 +215,10 @@ describe('Middleware: parser', () => { }); it('should return error when envelope provided, safeParse is true, and schema does not match', async () => { - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); const middyfiedHandler = middy() .use( diff --git a/packages/parser/tests/unit/schema/eventbridge.test.ts b/packages/parser/tests/unit/schema/eventbridge.test.ts index 480d7a4030..49297b3a6c 100644 --- a/packages/parser/tests/unit/schema/eventbridge.test.ts +++ b/packages/parser/tests/unit/schema/eventbridge.test.ts @@ -1,11 +1,30 @@ import { describe, expect, it } from 'vitest'; -import { EventBridgeSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { EventBridgeSchema } from '../../../src/schemas/eventbridge.js'; +import type { EventBridgeEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('EventBridge ', () => { - it('should parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent; +describe('Schema: EventBridge', () => { + const baseEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); + + it('parses an EventBridge event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = EventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not an EventBridge event', () => { + // Prepare + const event = omit(['detail', 'detail-type'], structuredClone(baseEvent)); - expect(EventBridgeSchema.parse(eventBridgeEvent)).toEqual(eventBridgeEvent); + // Act & Assess + expect(() => EventBridgeSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index dfce359967..c5fd260112 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -4,7 +4,7 @@ import { TestEvents } from './utils.js'; describe('Lambda ', () => { it('should parse lambda event', () => { - const lambdaFunctionUrlEvent = TestEvents.apiGatewayProxyV2Event; + const lambdaFunctionUrlEvent = TestEvents.lambdaFunctionUrlEvent; expect(LambdaFunctionUrlSchema.parse(lambdaFunctionUrlEvent)).toEqual( lambdaFunctionUrlEvent diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index 4385288e9b..fe2ec91565 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -12,30 +12,6 @@ const filenames = [ 'albEvent', 'albEventPathTrailingSlash', 'albMultiValueHeadersEvent', - 'apiGatewayAuthorizerRequestEvent', - 'apiGatewayAuthorizerTokenEvent', - 'apiGatewayAuthorizerV2Event', - 'apiGatewayProxyEvent', - 'apiGatewayProxyEventAnotherPath', - 'apiGatewayProxyEventPathTrailingSlash', - 'apiGatewayProxyEventPrincipalId', - 'apiGatewayProxyEvent_noVersionAuth', - 'apiGatewayProxyOtherEvent', - 'apiGatewayProxyEventTestUI', - 'apiGatewayProxyV2Event', - 'apiGatewayProxyV2EventPathTrailingSlash', - 'apiGatewayProxyV2Event_GET', - 'apiGatewayProxyV2IamEvent', - 'apiGatewayProxyV2LambdaAuthorizerEvent', - 'apiGatewayProxyV2OtherGetEvent', - 'apiGatewayProxyV2SchemaMiddlewareInvalidEvent', - 'apiGatewayProxyV2SchemaMiddlewareValidEvent', - 'apiGatewaySchemaMiddlewareInvalidEvent', - 'apiGatewaySchemaMiddlewareValidEvent', - 'appSyncAuthorizerEvent', - 'appSyncAuthorizerResponse', - 'appSyncDirectResolver', - 'appSyncResolverEvent', 'awsConfigRuleConfigurationChanged', 'awsConfigRuleOversizedConfiguration', 'awsConfigRuleScheduled', @@ -62,10 +38,6 @@ const filenames = [ 'cognitoVerifyAuthChallengeResponseEvent', 'connectContactFlowEventAll', 'connectContactFlowEventMin', - 'dynamoStreamEvent', - 'eventBridgeEvent', - 'kafkaEventMsk', - 'kafkaEventSelfManaged', 'kinesisFirehoseKinesisEvent', 'kinesisFirehosePutEvent', 'kinesisFirehoseSQSEvent', From c1ba8182d4e3b8989d62ed2f98ecee222be28c01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:16:09 +0100 Subject: [PATCH 14/31] chore(deps): bump vite from 5.4.11 to 5.4.14 (#3508) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7feb14762e..c4de280668 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5270,7 +5270,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -5318,6 +5319,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -6915,6 +6917,7 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7301,7 +7304,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/handlebars": { "version": "4.7.8", @@ -7555,6 +7559,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -8252,6 +8257,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -10120,6 +10126,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -10128,6 +10135,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -10169,6 +10177,7 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12047,6 +12056,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true, "license": "MIT" }, "node_modules/punycode.js": { @@ -14391,6 +14401,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -14469,10 +14480,11 @@ } }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -15322,6 +15334,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true, "bin": { "yaml": "bin.mjs" }, From 41bb08efdc243a4280fff1468ca0915095dc594f Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Wed, 22 Jan 2025 11:35:09 +0100 Subject: [PATCH 15/31] improv(parser): export APIGatewayEventRequestContextSchema (#3507) Co-authored-by: Alexander Schueren --- packages/parser/src/schemas/apigw.ts | 7 ++++--- packages/parser/src/schemas/index.ts | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/parser/src/schemas/apigw.ts b/packages/parser/src/schemas/apigw.ts index 8e7e3d1d7c..991cd88bcb 100644 --- a/packages/parser/src/schemas/apigw.ts +++ b/packages/parser/src/schemas/apigw.ts @@ -43,7 +43,7 @@ const APIGatewayEventIdentity = z.object({ * * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference} */ -const APIGatewayEventRequestContext = z +const APIGatewayEventRequestContextSchema = z .object({ accountId: z.string(), apiId: z.string(), @@ -161,7 +161,7 @@ const APIGatewayProxyEventSchema = z.object({ multiValueQueryStringParameters: z.record(APIGatewayStringArray).nullable(), pathParameters: APIGatewayRecord.nullish(), stageVariables: APIGatewayRecord.nullish(), - requestContext: APIGatewayEventRequestContext, + requestContext: APIGatewayEventRequestContextSchema, body: z.string().nullable(), isBase64Encoded: z.boolean(), }); @@ -232,7 +232,7 @@ const APIGatewayRequestAuthorizerEventSchema = z.object({ multiValueQueryStringParameters: z.record(APIGatewayStringArray), pathParameters: APIGatewayRecord, stageVariables: APIGatewayRecord, - requestContext: APIGatewayEventRequestContext, + requestContext: APIGatewayEventRequestContextSchema, domainName: z.string().optional(), deploymentId: z.string().optional(), apiId: z.string().optional(), @@ -262,4 +262,5 @@ export { APIGatewayProxyEventSchema, APIGatewayRequestAuthorizerEventSchema, APIGatewayTokenAuthorizerEventSchema, + APIGatewayEventRequestContextSchema, }; diff --git a/packages/parser/src/schemas/index.ts b/packages/parser/src/schemas/index.ts index 7c92729ad2..266a1251fb 100644 --- a/packages/parser/src/schemas/index.ts +++ b/packages/parser/src/schemas/index.ts @@ -3,6 +3,7 @@ export { APIGatewayProxyEventSchema, APIGatewayRequestAuthorizerEventSchema, APIGatewayTokenAuthorizerEventSchema, + APIGatewayEventRequestContextSchema, } from './apigw.js'; export { AppSyncResolverSchema, From 4d7f05f7415cc52fae42de643ceaffcf764c2472 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Wed, 22 Jan 2025 11:39:24 +0100 Subject: [PATCH 16/31] fix(parser): SNS Envelope handles non-JSON (#3506) --- packages/parser/src/envelopes/index.ts | 4 +- packages/parser/src/envelopes/sns.ts | 161 ++++------ packages/parser/src/envelopes/sqs.ts | 89 ++++++ packages/parser/src/schemas/sns.ts | 2 +- .../events/{snsEvent.json => sns/base.json} | 6 +- .../parser/tests/unit/envelopes/sns.test.ts | 284 +++++++++--------- .../parser/tests/unit/envelopes/sqs.test.ts | 83 ++++- packages/parser/tests/unit/helpers.test.ts | 4 +- packages/parser/tests/unit/schema/sns.test.ts | 97 +++--- packages/parser/tests/unit/schema/utils.ts | 1 - 10 files changed, 437 insertions(+), 294 deletions(-) rename packages/parser/tests/events/{snsEvent.json => sns/base.json} (91%) diff --git a/packages/parser/src/envelopes/index.ts b/packages/parser/src/envelopes/index.ts index 3d1487a7b0..6ab0522ecd 100644 --- a/packages/parser/src/envelopes/index.ts +++ b/packages/parser/src/envelopes/index.ts @@ -7,7 +7,7 @@ export { KafkaEnvelope } from './kafka.js'; export { KinesisEnvelope } from './kinesis.js'; export { KinesisFirehoseEnvelope } from './kinesis-firehose.js'; export { LambdaFunctionUrlEnvelope } from './lambda.js'; -export { SnsEnvelope, SnsSqsEnvelope } from './sns.js'; -export { SqsEnvelope } from './sqs.js'; +export { SnsEnvelope } from './sns.js'; +export { SqsEnvelope, SnsSqsEnvelope } from './sqs.js'; export { VpcLatticeEnvelope } from './vpc-lattice.js'; export { VpcLatticeV2Envelope } from './vpc-latticev2.js'; diff --git a/packages/parser/src/envelopes/sns.ts b/packages/parser/src/envelopes/sns.ts index 183cc84470..3a7d40cb32 100644 --- a/packages/parser/src/envelopes/sns.ts +++ b/packages/parser/src/envelopes/sns.ts @@ -1,9 +1,8 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; -import { SnsSchema, SnsSqsNotificationSchema } from '../schemas/sns.js'; -import { SqsSchema } from '../schemas/sqs.js'; +import { SnsSchema } from '../schemas/sns.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * SNS Envelope to extract array of Records @@ -23,8 +22,19 @@ export const SnsEnvelope = { parse(data: unknown, schema: T): z.infer[] { const parsedEnvelope = SnsSchema.parse(data); - return parsedEnvelope.Records.map((record) => { - return Envelope.parse(record.Sns.Message, schema); + return parsedEnvelope.Records.map((record, index) => { + try { + return schema.parse(record.Sns.Message); + } catch (error) { + throw new ParseError(`Failed to parse SNS record at index ${index}`, { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'Sns', 'Message', ...issue.path], + })) + ), + }); + } }); }, @@ -44,112 +54,47 @@ export const SnsEnvelope = { }; } - const parsedMessages: z.infer[] = []; - for (const record of parsedEnvelope.data.Records) { - const parsedMessage = Envelope.safeParse(record.Sns.Message, schema); - if (!parsedMessage.success) { - return { - success: false, - error: new ParseError('Failed to parse SNS message', { - cause: parsedMessage.error, - }), - originalEvent: data, - }; - } - parsedMessages.push(parsedMessage.data); - } - - return { - success: true, - data: parsedMessages, - }; - }, -}; - -/** - * SNS plus SQS Envelope to extract array of Records - * - * Published messages from SNS to SQS has a slightly different payload. - * Since SNS payload is marshalled into `Record` key in SQS, we have to: - * - * 1. Parse SQS schema with incoming data - * 2. Unmarshall SNS payload and parse against SNS Notification schema not SNS/SNS Record - * 3. Finally, parse provided model against payload extracted - * - */ -export const SnsSqsEnvelope = { - /** - * This is a discriminator to differentiate whether an envelope returns an array or an object - * @hidden - */ - [envelopeDiscriminator]: 'array' as const, - parse(data: unknown, schema: T): z.infer[] { - const parsedEnvelope = SqsSchema.parse(data); - - return parsedEnvelope.Records.map((record) => { - const snsNotification = SnsSqsNotificationSchema.parse( - JSON.parse(record.body) - ); + const result = parsedEnvelope.data.Records.reduce<{ + success: boolean; + messages: z.infer[]; + errors: { index?: number; issues?: ZodIssue[] }; + }>( + (acc, message, index) => { + const parsedMessage = schema.safeParse(message.Sns.Message); + if (!parsedMessage.success) { + acc.success = false; + const issues = parsedMessage.error.issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'Sns', 'Message', ...issue.path], + })); + // @ts-expect-error - index is assigned + acc.errors[index] = { issues }; + return acc; + } - return Envelope.parse(snsNotification.Message, schema); - }); - }, + acc.messages.push(parsedMessage.data); + return acc; + }, + { success: true, messages: [], errors: {} } + ); - safeParse( - data: unknown, - schema: T - ): ParsedResult[]> { - const parsedEnvelope = SqsSchema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse SQS envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; + if (result.success) { + return { success: true, data: result.messages }; } - const parsedMessages: z.infer[] = []; + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse SNS messages at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse SNS message at index ${Object.keys(result.errors)[0]}`; + const errorCause = new ZodError( + // @ts-expect-error - issues are assigned because success is false + Object.values(result.errors).flatMap((error) => error.issues) + ); - // JSON.parse can throw an error, thus we catch it and return ParsedErrorResult - try { - for (const record of parsedEnvelope.data.Records) { - const snsNotification = SnsSqsNotificationSchema.safeParse( - JSON.parse(record.body) - ); - if (!snsNotification.success) { - return { - success: false, - error: new ParseError('Failed to parse SNS notification', { - cause: snsNotification.error, - }), - originalEvent: data, - }; - } - const parsedMessage = Envelope.safeParse( - snsNotification.data.Message, - schema - ); - if (!parsedMessage.success) { - return { - success: false, - error: new ParseError('Failed to parse SNS message', { - cause: parsedMessage.error, - }), - originalEvent: data, - }; - } - parsedMessages.push(parsedMessage.data); - } - } catch (e) { - return { - success: false, - error: e as Error, - originalEvent: data, - }; - } - - return { success: true, data: parsedMessages }; + return { + success: false, + error: new ParseError(errorMessage, { cause: errorCause }), + originalEvent: data, + }; }, }; diff --git a/packages/parser/src/envelopes/sqs.ts b/packages/parser/src/envelopes/sqs.ts index c7bf36a9d1..6ba651a4f5 100644 --- a/packages/parser/src/envelopes/sqs.ts +++ b/packages/parser/src/envelopes/sqs.ts @@ -1,5 +1,6 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; +import { SnsSqsNotificationSchema } from '../schemas/sns.js'; import { SqsSchema } from '../schemas/sqs.js'; import type { ParsedResult } from '../types/index.js'; import { Envelope, envelopeDiscriminator } from './envelope.js'; @@ -60,3 +61,91 @@ export const SqsEnvelope = { return { success: true, data: parsedRecords }; }, }; + +/** + * SNS plus SQS Envelope to extract array of Records + * + * Published messages from SNS to SQS has a slightly different payload. + * Since SNS payload is marshalled into `Record` key in SQS, we have to: + * + * 1. Parse SQS schema with incoming data + * 2. Unmarshall SNS payload and parse against SNS Notification schema not SNS/SNS Record + * 3. Finally, parse provided model against payload extracted + * + */ +export const SnsSqsEnvelope = { + /** + * This is a discriminator to differentiate whether an envelope returns an array or an object + * @hidden + */ + [envelopeDiscriminator]: 'array' as const, + parse(data: unknown, schema: T): z.infer[] { + const parsedEnvelope = SqsSchema.parse(data); + + return parsedEnvelope.Records.map((record) => { + const snsNotification = SnsSqsNotificationSchema.parse( + JSON.parse(record.body) + ); + + return Envelope.parse(snsNotification.Message, schema); + }); + }, + + safeParse( + data: unknown, + schema: T + ): ParsedResult[]> { + const parsedEnvelope = SqsSchema.safeParse(data); + if (!parsedEnvelope.success) { + return { + success: false, + error: new ParseError('Failed to parse SQS envelope', { + cause: parsedEnvelope.error, + }), + originalEvent: data, + }; + } + + const parsedMessages: z.infer[] = []; + + // JSON.parse can throw an error, thus we catch it and return ParsedErrorResult + try { + for (const record of parsedEnvelope.data.Records) { + const snsNotification = SnsSqsNotificationSchema.safeParse( + JSON.parse(record.body) + ); + if (!snsNotification.success) { + return { + success: false, + error: new ParseError('Failed to parse SNS notification', { + cause: snsNotification.error, + }), + originalEvent: data, + }; + } + const parsedMessage = Envelope.safeParse( + snsNotification.data.Message, + schema + ); + if (!parsedMessage.success) { + return { + success: false, + error: new ParseError('Failed to parse SNS message', { + cause: parsedMessage.error, + }), + originalEvent: data, + }; + } + parsedMessages.push(parsedMessage.data); + } + } catch (e) { + return { + success: false, + error: e as Error, + originalEvent: data, + }; + } + + return { success: true, data: parsedMessages }; + }, +}; diff --git a/packages/parser/src/schemas/sns.ts b/packages/parser/src/schemas/sns.ts index e13501b270..a76711e014 100644 --- a/packages/parser/src/schemas/sns.ts +++ b/packages/parser/src/schemas/sns.ts @@ -113,7 +113,7 @@ const SnsRecordSchema = z.object({ * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html#sns-sample-event} */ const SnsSchema = z.object({ - Records: z.array(SnsRecordSchema), + Records: z.array(SnsRecordSchema).min(1), }); export { diff --git a/packages/parser/tests/events/snsEvent.json b/packages/parser/tests/events/sns/base.json similarity index 91% rename from packages/parser/tests/events/snsEvent.json rename to packages/parser/tests/events/sns/base.json index e135d8d7c9..9cf3ec939a 100644 --- a/packages/parser/tests/events/snsEvent.json +++ b/packages/parser/tests/events/sns/base.json @@ -2,7 +2,7 @@ "Records": [ { "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:sns-la ...", + "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:ExampleTopic", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", @@ -23,9 +23,9 @@ }, "Type": "Notification", "UnsubscribeUrl": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe", - "TopicArn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "TopicArn": "arn:aws:sns:us-east-2:123456789012:ExampleTopic", "Subject": "TestInvoke" } } ] -} +} \ No newline at end of file diff --git a/packages/parser/tests/unit/envelopes/sns.test.ts b/packages/parser/tests/unit/envelopes/sns.test.ts index ff420961c9..be3e8c7925 100644 --- a/packages/parser/tests/unit/envelopes/sns.test.ts +++ b/packages/parser/tests/unit/envelopes/sns.test.ts @@ -1,168 +1,174 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { SNSEvent, SQSEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ZodError, type z } from 'zod'; -import { SnsEnvelope, SnsSqsEnvelope } from '../../../src/envelopes/index.js'; +import { ZodError, z } from 'zod'; +import { SnsEnvelope } from '../../../src/envelopes/sns.js'; import { ParseError } from '../../../src/errors.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; +import { JSONStringified } from '../../../src/helpers.js'; +import type { SnsEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from '../schema/utils.js'; + +describe('Envelope: SnsEnvelope', () => { + const baseEvent = getTestEvent({ + eventsPath: 'sns', + filename: 'base', + }); -describe('Sns and SQS Envelope', () => { - describe('SnsSqsEnvelope parse', () => { - it('should parse sqs inside sns envelope', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess + expect(() => + SnsEnvelope.parse( + event, + z + .object({ + Message: z.string(), + }) + .strict() + ) + ).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse SNS record at index 0' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['Records', 0, 'Sns', 'Message'], + message: 'Expected object, received string', + }, + ], + }), + }) + ); + }); - const data = generateMock(TestSchema); - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify(data); + it('parses a SNS event', () => { + // Prepare + const testEvent = structuredClone(baseEvent); - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + // Act + const result = SnsEnvelope.parse(testEvent, z.string()); - expect(SnsSqsEnvelope.parse(snsSqsTestEvent, TestSchema)).toEqual([data]); + // Assess + expect(result).toStrictEqual(['Hello from SNS!']); }); }); - describe('SnsSqsEnvelope safeParse', () => { - it('should parse sqs inside sns envelope', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - const data = generateMock(TestSchema); - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify(data); + describe('Method: safeParse', () => { + it('parses a SNS event', () => { + // Prepare + const testEvent = structuredClone(baseEvent); - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + // Act + const result = SnsEnvelope.safeParse(testEvent, z.string()); - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + // Assess + expect(result).toStrictEqual({ success: true, - data: [data], - }); - }); - it('should return error when envelope is not valid', () => { - expect(SnsSqsEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + data: ['Hello from SNS!'], }); }); - it('should return error if message does not match schema', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify({ - foo: 'bar', - }); + it('returns an error if the event is not a valid SNS event', () => { + // Prepare + const event = structuredClone(baseEvent); + // @ts-expect-error - force invalid event + event.Records[0].Sns = undefined; - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + // Act + const result = SnsEnvelope.safeParse(event, z.string()); - const parseResult = SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema); - expect(parseResult).toEqual({ + // Assess + expect(result).toStrictEqual({ success: false, - error: expect.any(ParseError), - originalEvent: snsSqsTestEvent, + error: new ParseError('Failed to parse SNS envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['Records', 0, 'Sns'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); - it('should return error if sns message is not valid', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - - snsSqsTestEvent.Records[0].body = JSON.stringify({ - foo: 'bar', - }); - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + it('returns an error if any of the messages do not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1] = structuredClone(event.Records[0]); + event.Records[0].Sns.Message = JSON.stringify({ foo: 'bar' }); + event.Records[1].Sns.Message = JSON.stringify({ foo: 36 }); + + // Act + const result = SnsEnvelope.safeParse( + event, + JSONStringified( + z.object({ + foo: z.string(), + }) + ) + ); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: snsSqsTestEvent, - }); - }); - it('should return error if JSON parse fails for record.body', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - - snsSqsTestEvent.Records[0].body = 'not a json string'; - - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ - success: false, - error: expect.any(SyntaxError), - originalEvent: snsSqsTestEvent, - }); - }); - }); -}); -describe('SnsEnvelope', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = TestEvents.snsEvent as SNSEvent; - - const testRecords = [] as z.infer[]; - - testEvent.Records.map((record) => { - const value = generateMock(TestSchema); - testRecords.push(value); - record.Sns.Message = JSON.stringify(value); - }); - - expect(SnsEnvelope.parse(testEvent, TestSchema)).toEqual(testRecords); - }); - - it('should throw if message does not macht schema', () => { - const testEvent = TestEvents.snsEvent as SNSEvent; - - testEvent.Records.map((record) => { - record.Sns.Message = JSON.stringify({ - foo: 'bar', - }); + error: new ParseError('Failed to parse SNS message at index 1', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'number', + path: ['Records', 1, 'Sns', 'Message', 'foo'], + message: 'Expected string, received number', + }, + ]), + }), + originalEvent: event, }); - - expect(() => SnsEnvelope.parse(testEvent, TestSchema)).toThrow(); - }); - it('should throw if envelope is not valid', () => { - expect(() => SnsEnvelope.parse({ foo: 'bar' }, TestSchema)).toThrow(); }); - }); - describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = TestEvents.snsEvent as SNSEvent; - - const testRecords = [] as z.infer[]; - testEvent.Records.map((record) => { - const value = generateMock(TestSchema); - testRecords.push(value); - record.Sns.Message = JSON.stringify(value); - }); - - expect(SnsEnvelope.safeParse(testEvent, TestSchema)).toEqual({ - success: true, - data: testRecords, - }); - }); - - it('should return error when message does not macht schema', () => { - const testEvent = TestEvents.snsEvent as SNSEvent; - - testEvent.Records.map((record) => { - record.Sns.Message = JSON.stringify({ - foo: 'bar', - }); - }); - - const parseResult = SnsEnvelope.safeParse(testEvent, TestSchema); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: testEvent, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } - }); - it('should return error when envelope is not valid', () => { - expect(SnsEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1] = structuredClone(event.Records[0]); + + // Act + const result = SnsEnvelope.safeParse( + event, + JSONStringified( + z.object({ + foo: z.string(), + }) + ) + ); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError('Failed to parse SNS messages at indexes 0, 1', { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 0, 'Sns', 'Message'], + }, + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 1, 'Sns', 'Message'], + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/envelopes/sqs.test.ts b/packages/parser/tests/unit/envelopes/sqs.test.ts index 9e09bbf1d2..004d1d71f9 100644 --- a/packages/parser/tests/unit/envelopes/sqs.test.ts +++ b/packages/parser/tests/unit/envelopes/sqs.test.ts @@ -2,7 +2,7 @@ import { generateMock } from '@anatine/zod-mock'; import type { SQSEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; import { ZodError } from 'zod'; -import { SqsEnvelope } from '../../../src/envelopes/sqs.js'; +import { SnsSqsEnvelope, SqsEnvelope } from '../../../src/envelopes/sqs.js'; import { ParseError } from '../../../src/errors.js'; import { TestEvents, TestSchema } from '../schema/utils.js'; @@ -68,4 +68,85 @@ describe('SqsEnvelope ', () => { }); }); }); + + describe('SnsSqsEnvelope safeParse', () => { + it('parse sqs inside sns envelope', () => { + const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + + const data = generateMock(TestSchema); + const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); + snsEvent.Message = JSON.stringify(data); + + snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + + expect(SnsSqsEnvelope.parse(snsSqsTestEvent, TestSchema)).toEqual([data]); + }); + + it('should parse sqs inside sns envelope', () => { + const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + + const data = generateMock(TestSchema); + const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); + snsEvent.Message = JSON.stringify(data); + + snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + + expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + success: true, + data: [data], + }); + }); + it('should return error when envelope is not valid', () => { + expect(SnsSqsEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: { foo: 'bar' }, + }); + }); + it('should return error if message does not match schema', () => { + const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + + const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); + snsEvent.Message = JSON.stringify({ + foo: 'bar', + }); + + snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); + + const parseResult = SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema); + expect(parseResult).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: snsSqsTestEvent, + }); + + if (!parseResult.success && parseResult.error) { + expect(parseResult.error.cause).toBeInstanceOf(ZodError); + } + }); + it('should return error if sns message is not valid', () => { + const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + + snsSqsTestEvent.Records[0].body = JSON.stringify({ + foo: 'bar', + }); + + expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: snsSqsTestEvent, + }); + }); + it('should return error if JSON parse fails for record.body', () => { + const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + + snsSqsTestEvent.Records[0].body = 'not a json string'; + + expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + success: false, + error: expect.any(SyntaxError), + originalEvent: snsSqsTestEvent, + }); + }); + }); }); diff --git a/packages/parser/tests/unit/helpers.test.ts b/packages/parser/tests/unit/helpers.test.ts index ae25400366..f8c4ce0b0a 100644 --- a/packages/parser/tests/unit/helpers.test.ts +++ b/packages/parser/tests/unit/helpers.test.ts @@ -133,8 +133,8 @@ describe('JSONStringified', () => { it('should parse extended SnsSchema', () => { // Prepare const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'snsEvent', + eventsPath: 'sns', + filename: 'base', }); testEvent.Records[0].Sns.Message = JSON.stringify(basePayload); diff --git a/packages/parser/tests/unit/schema/sns.test.ts b/packages/parser/tests/unit/schema/sns.test.ts index 8ea5bde8fc..808344e5fa 100644 --- a/packages/parser/tests/unit/schema/sns.test.ts +++ b/packages/parser/tests/unit/schema/sns.test.ts @@ -1,43 +1,66 @@ import { describe, expect, it } from 'vitest'; -import { - SnsNotificationSchema, - SnsRecordSchema, - SnsSchema, - SnsSqsNotificationSchema, -} from '../../../src/schemas/'; -import type { SnsEvent, SqsEvent } from '../../../src/types'; -import type { - SnsNotification, - SnsRecord, - SnsSqsNotification, -} from '../../../src/types/schema'; -import { TestEvents } from './utils.js'; +import { SnsSchema } from '../../../src/schemas/sns.js'; +import type { SnsEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from './utils.js'; -describe('SNS', () => { - it('should parse sns event', () => { - const snsEvent = TestEvents.snsEvent; - expect(SnsSchema.parse(snsEvent)).toEqual(snsEvent); +describe('Schema: SNS', () => { + const baseEvent = getTestEvent({ + eventsPath: 'sns', + filename: 'base', }); - it('should parse record from sns event', () => { - const snsEvent: SnsEvent = TestEvents.snsEvent as SnsEvent; - const parsed: SnsRecord = SnsRecordSchema.parse(snsEvent.Records[0]); - expect(parsed.Sns.Message).toEqual('Hello from SNS!'); - }); - it('should parse sns notification from sns event', () => { - const snsEvent: SnsEvent = TestEvents.snsEvent as SnsEvent; - const parsed: SnsNotification = SnsNotificationSchema.parse( - snsEvent.Records[0].Sns - ); - expect(parsed.Message).toEqual('Hello from SNS!'); + + it('parses a SNS event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = SnsSchema.parse(event); + + // Assess + expect(result).toStrictEqual({ + Records: [ + { + EventSource: 'aws:sns', + EventVersion: '1.0', + EventSubscriptionArn: + 'arn:aws:sns:us-east-2:123456789012:ExampleTopic', + Sns: { + SignatureVersion: '1', + Timestamp: '2019-01-02T12:45:07.000Z', + Signature: + 'tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==', + SigningCertUrl: + 'https://sns.us-east-2.amazonaws.com/SimpleNotification', + MessageId: '95df01b4-ee98-5cb9-9903-4c221d41eb5e', + Message: 'Hello from SNS!', + MessageAttributes: { + Test: { + Type: 'String', + Value: 'TestString', + }, + TestBinary: { + Type: 'Binary', + Value: 'TestBinary', + }, + }, + Type: 'Notification', + UnsubscribeUrl: + 'https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe', + TopicArn: 'arn:aws:sns:us-east-2:123456789012:ExampleTopic', + Subject: 'TestInvoke', + }, + }, + ], + }); }); - it('should parse sns notification from sqs -> sns event', () => { - const sqsEvent: SqsEvent = TestEvents.snsSqsEvent as SqsEvent; - console.log(sqsEvent.Records[0].body); - const parsed: SnsSqsNotification = SnsSqsNotificationSchema.parse( - JSON.parse(sqsEvent.Records[0].body) - ); - expect(parsed.TopicArn).toEqual( - 'arn:aws:sns:eu-west-1:231436140809:powertools265' - ); + + it('throws if the event is not a SNS event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => SnsSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index fe2ec91565..1a836462de 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -62,7 +62,6 @@ const filenames = [ 's3SqsEvent', 'secretsManagerEvent', 'sesEvent', - 'snsEvent', 'snsSqsEvent', 'snsSqsFifoEvent', 'sqsEvent', From 781a14e11b55767df24739badc77c6d309982d51 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Wed, 22 Jan 2025 16:19:24 +0100 Subject: [PATCH 17/31] fix(parser): CloudWatch Log Envelope handles non-JSON (#3505) Co-authored-by: Alexander Schueren --- packages/parser/src/envelopes/cloudwatch.ts | 115 ++++-- packages/parser/src/errors.ts | 12 +- packages/parser/src/schemas/cloudwatch.ts | 13 +- .../parser/tests/events/activeMQEvent.json | 54 --- .../awsConfigRuleConfigurationChanged.json | 13 - .../awsConfigRuleOversizedConfiguration.json | 12 - .../tests/events/awsConfigRuleScheduled.json | 13 - .../tests/events/bedrockAgentEvent.json | 16 - .../tests/events/bedrockAgentPostEvent.json | 35 -- .../events/cloudWatchDashboardEvent.json | 38 -- .../tests/events/cloudWatchLogEvent.json | 5 - .../parser/tests/events/cloudwatch/base.json | 5 + .../tests/events/codePipelineEvent.json | 34 -- .../tests/events/codePipelineEventData.json | 46 --- .../codePipelineEventEmptyUserParameters.json | 32 -- .../codePipelineEventWithEncryptionKey.json | 38 -- .../cognitoCreateAuthChallengeEvent.json | 29 -- .../events/cognitoCustomMessageEvent.json | 20 -- .../cognitoDefineAuthChallengeEvent.json | 32 -- .../cognitoPostAuthenticationEvent.json | 18 - .../events/cognitoPostConfirmationEvent.json | 18 - .../events/cognitoPreAuthenticationEvent.json | 20 -- .../tests/events/cognitoPreSignUpEvent.json | 18 - .../cognitoPreTokenGenerationEvent.json | 25 -- .../events/cognitoUserMigrationEvent.json | 15 - ...gnitoVerifyAuthChallengeResponseEvent.json | 28 -- .../events/connectContactFlowEventAll.json | 41 --- .../events/connectContactFlowEventMin.json | 27 -- .../parser/tests/events/rabbitMQEvent.json | 37 -- .../tests/events/secretsManagerEvent.json | 5 - .../tests/unit/envelopes/cloudwatch.test.ts | 327 +++++++++++++----- .../tests/unit/schema/cloudwatch.test.ts | 80 ++++- packages/parser/tests/unit/schema/utils.ts | 26 -- 33 files changed, 408 insertions(+), 839 deletions(-) delete mode 100644 packages/parser/tests/events/activeMQEvent.json delete mode 100644 packages/parser/tests/events/awsConfigRuleConfigurationChanged.json delete mode 100644 packages/parser/tests/events/awsConfigRuleOversizedConfiguration.json delete mode 100644 packages/parser/tests/events/awsConfigRuleScheduled.json delete mode 100644 packages/parser/tests/events/bedrockAgentEvent.json delete mode 100644 packages/parser/tests/events/bedrockAgentPostEvent.json delete mode 100644 packages/parser/tests/events/cloudWatchDashboardEvent.json delete mode 100644 packages/parser/tests/events/cloudWatchLogEvent.json create mode 100644 packages/parser/tests/events/cloudwatch/base.json delete mode 100644 packages/parser/tests/events/codePipelineEvent.json delete mode 100644 packages/parser/tests/events/codePipelineEventData.json delete mode 100644 packages/parser/tests/events/codePipelineEventEmptyUserParameters.json delete mode 100644 packages/parser/tests/events/codePipelineEventWithEncryptionKey.json delete mode 100644 packages/parser/tests/events/cognitoCreateAuthChallengeEvent.json delete mode 100644 packages/parser/tests/events/cognitoCustomMessageEvent.json delete mode 100644 packages/parser/tests/events/cognitoDefineAuthChallengeEvent.json delete mode 100644 packages/parser/tests/events/cognitoPostAuthenticationEvent.json delete mode 100644 packages/parser/tests/events/cognitoPostConfirmationEvent.json delete mode 100644 packages/parser/tests/events/cognitoPreAuthenticationEvent.json delete mode 100644 packages/parser/tests/events/cognitoPreSignUpEvent.json delete mode 100644 packages/parser/tests/events/cognitoPreTokenGenerationEvent.json delete mode 100644 packages/parser/tests/events/cognitoUserMigrationEvent.json delete mode 100644 packages/parser/tests/events/cognitoVerifyAuthChallengeResponseEvent.json delete mode 100644 packages/parser/tests/events/connectContactFlowEventAll.json delete mode 100644 packages/parser/tests/events/connectContactFlowEventMin.json delete mode 100644 packages/parser/tests/events/rabbitMQEvent.json delete mode 100644 packages/parser/tests/events/secretsManagerEvent.json diff --git a/packages/parser/src/envelopes/cloudwatch.ts b/packages/parser/src/envelopes/cloudwatch.ts index 4bdde3c9a4..36a57ffaf3 100644 --- a/packages/parser/src/envelopes/cloudwatch.ts +++ b/packages/parser/src/envelopes/cloudwatch.ts @@ -1,17 +1,11 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; import { CloudWatchLogsSchema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** - * CloudWatch Envelope to extract a List of log records. - * - * The record's body parameter is a string (after being base64 decoded and gzipped), - * though it can also be a JSON encoded string. - * Regardless of its type it'll be parsed into a BaseModel object. - * - * Note: The record will be parsed the same way so if model is str + * CloudWatch Envelope to extract messages from the `awslogs.data.logEvents` key. */ export const CloudWatchEnvelope = { /** @@ -22,8 +16,29 @@ export const CloudWatchEnvelope = { parse(data: unknown, schema: T): z.infer[] { const parsedEnvelope = CloudWatchLogsSchema.parse(data); - return parsedEnvelope.awslogs.data.logEvents.map((record) => { - return Envelope.parse(record.message, schema); + return parsedEnvelope.awslogs.data.logEvents.map((record, index) => { + try { + return schema.parse(record.message); + } catch (error) { + throw new ParseError( + `Failed to parse CloudWatch log event at index ${index}`, + { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: [ + 'awslogs', + 'data', + 'logEvents', + index, + 'message', + ...issue.path, + ], + })) + ), + } + ); + } }); }, @@ -31,36 +46,82 @@ export const CloudWatchEnvelope = { data: unknown, schema: T ): ParsedResult[]> { - const parsedEnvelope = CloudWatchLogsSchema.safeParse(data); + let parsedEnvelope: ParsedResult>; + try { + parsedEnvelope = CloudWatchLogsSchema.safeParse(data); + } catch (error) { + parsedEnvelope = { + success: false, + error: error as Error, + }; + } if (!parsedEnvelope.success) { return { success: false, - error: new ParseError('Failed to parse CloudWatch envelope', { + error: new ParseError('Failed to parse CloudWatch Log envelope', { cause: parsedEnvelope.error, }), originalEvent: data, }; } - const parsedLogEvents: z.infer[] = []; - for (const record of parsedEnvelope.data.awslogs.data.logEvents) { - const parsedMessage = Envelope.safeParse(record.message, schema); - if (!parsedMessage.success) { - return { - success: false, - error: new ParseError('Failed to parse CloudWatch log event', { - cause: parsedMessage.error, - }), - originalEvent: data, - }; + const result = parsedEnvelope.data.awslogs.data.logEvents.reduce( + ( + acc: { + success: boolean; + messages: z.infer; + errors: { [key: number]: { issues: ZodIssue[] } }; + }, + record: { message: string }, + index: number + ) => { + const result = schema.safeParse(record.message); + if (!result.success) { + const issues = result.error.issues.map((issue) => ({ + ...issue, + path: [ + 'awslogs', + 'data', + 'logEvents', + index, + 'message', + ...issue.path, + ], + })); + + acc.success = false; + acc.errors[index] = { issues }; + return acc; + } + + acc.messages.push(result.data); + return acc; + }, + { + success: true, + messages: [], + errors: {}, } - parsedLogEvents.push(parsedMessage.data); + ); + + if (result.success) { + return { success: true, data: result.messages }; } + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse CloudWatch Log messages at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse CloudWatch Log message at index ${Object.keys(result.errors)[0]}`; + const errorCause = new ZodError( + // @ts-expect-error - issues are assigned because success is false + Object.values(result.errors).flatMap((error) => error.issues) + ); + return { - success: true, - data: parsedLogEvents, + success: false, + error: new ParseError(errorMessage, { cause: errorCause }), + originalEvent: data, }; }, }; diff --git a/packages/parser/src/errors.ts b/packages/parser/src/errors.ts index c3068a731d..d4aac4d7ad 100644 --- a/packages/parser/src/errors.ts +++ b/packages/parser/src/errors.ts @@ -12,4 +12,14 @@ class ParseError extends Error { } } -export { ParseError }; +/** + * Custom error thrown when decompression fails. + */ +class DecompressError extends ParseError { + constructor(message: string, options?: { cause?: Error }) { + super(message, options); + this.name = 'DecompressError'; + } +} + +export { ParseError, DecompressError }; diff --git a/packages/parser/src/schemas/cloudwatch.ts b/packages/parser/src/schemas/cloudwatch.ts index d6bfd77078..cc3963fe0a 100644 --- a/packages/parser/src/schemas/cloudwatch.ts +++ b/packages/parser/src/schemas/cloudwatch.ts @@ -1,5 +1,6 @@ import { gunzipSync } from 'node:zlib'; import { z } from 'zod'; +import { DecompressError } from '../errors.js'; const CloudWatchLogEventSchema = z.object({ id: z.string(), @@ -13,15 +14,21 @@ const CloudWatchLogsDecodeSchema = z.object({ logGroup: z.string(), logStream: z.string(), subscriptionFilters: z.array(z.string()), - logEvents: z.array(CloudWatchLogEventSchema), + logEvents: z.array(CloudWatchLogEventSchema).min(1), }); const decompressRecordToJSON = ( data: string ): z.infer => { - const uncompressed = gunzipSync(Buffer.from(data, 'base64')).toString('utf8'); + try { + const uncompressed = gunzipSync(Buffer.from(data, 'base64')).toString( + 'utf8' + ); - return CloudWatchLogsDecodeSchema.parse(JSON.parse(uncompressed)); + return CloudWatchLogsDecodeSchema.parse(JSON.parse(uncompressed)); + } catch (error) { + throw new DecompressError('Failed to decompress CloudWatch log data'); + } }; /** diff --git a/packages/parser/tests/events/activeMQEvent.json b/packages/parser/tests/events/activeMQEvent.json deleted file mode 100644 index 555ed78e1f..0000000000 --- a/packages/parser/tests/events/activeMQEvent.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "eventSource": "aws:amq", - "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", - "messages": [ - { - "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", - "messageType": "jms/text-message", - "data": "QUJDOkFBQUE=", - "connectionId": "myJMSCoID", - "redelivered": false, - "destination": { - "physicalname": "testQueue" - }, - "timestamp": 1598827811958, - "brokerInTime": 1598827811958, - "brokerOutTime": 1598827811959, - "properties": { - "testKey": "testValue" - } - }, - { - "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", - "messageType": "jms/text-message", - "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==", - "connectionId": "myJMSCoID2", - "redelivered": false, - "destination": { - "physicalname": "testQueue" - }, - "timestamp": 1598827811958, - "brokerInTime": 1598827811958, - "brokerOutTime": 1598827811959, - "properties": { - "testKey": "testValue" - } - }, - { - "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", - "messageType": "jms/bytes-message", - "data": "3DTOOW7crj51prgVLQaGQ82S48k=", - "connectionId": "myJMSCoID1", - "persistent": false, - "destination": { - "physicalname": "testQueue" - }, - "timestamp": 1598827811958, - "brokerInTime": 1598827811958, - "brokerOutTime": 1598827811959, - "properties": { - "testKey": "testValue" - } - } - ] -} diff --git a/packages/parser/tests/events/awsConfigRuleConfigurationChanged.json b/packages/parser/tests/events/awsConfigRuleConfigurationChanged.json deleted file mode 100644 index e0f8929ddd..0000000000 --- a/packages/parser/tests/events/awsConfigRuleConfigurationChanged.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "1.0", - "invokingEvent": "{\"configurationItemDiff\":{\"changedProperties\":{\"Configuration.InstanceType\":{\"previousValue\":\"t2.micro\",\"updatedValue\":\"t2.medium\",\"changeType\":\"UPDATE\"},\"Configuration.State.Name\":{\"previousValue\":\"running\",\"updatedValue\":\"stopped\",\"changeType\":\"UPDATE\"},\"Configuration.StateTransitionReason\":{\"previousValue\":\"\",\"updatedValue\":\"User initiated (2023-04-27 15:01:07 GMT)\",\"changeType\":\"UPDATE\"},\"Configuration.StateReason\":{\"previousValue\":null,\"updatedValue\":{\"code\":\"Client.UserInitiatedShutdown\",\"message\":\"Client.UserInitiatedShutdown: User initiated shutdown\"},\"changeType\":\"CREATE\"},\"Configuration.CpuOptions.CoreCount\":{\"previousValue\":1,\"updatedValue\":2,\"changeType\":\"UPDATE\"}},\"changeType\":\"UPDATE\"},\"configurationItem\":{\"relatedEvents\":[],\"relationships\":[{\"resourceId\":\"eipalloc-0ebb4367662263cc1\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::EIP\",\"name\":\"Is attached to ElasticIp\"},{\"resourceId\":\"eni-034dd31c4b17ada8c\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::NetworkInterface\",\"name\":\"Contains NetworkInterface\"},{\"resourceId\":\"eni-09a604c0ec356b06f\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::NetworkInterface\",\"name\":\"Contains NetworkInterface\"},{\"resourceId\":\"sg-0fb295a327d9b4835\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::SecurityGroup\",\"name\":\"Is associated with SecurityGroup\"},{\"resourceId\":\"subnet-cad1f2f4\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::Subnet\",\"name\":\"Is contained in Subnet\"},{\"resourceId\":\"vol-0a288b5eb9fea4b30\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::Volume\",\"name\":\"Is attached to Volume\"},{\"resourceId\":\"vpc-2d96be57\",\"resourceName\":null,\"resourceType\":\"AWS::EC2::VPC\",\"name\":\"Is contained in Vpc\"}],\"configuration\":{\"amiLaunchIndex\":0,\"imageId\":\"ami-09d95fab7fff3776c\",\"instanceId\":\"i-042dd005362091826\",\"instanceType\":\"t2.medium\",\"kernelId\":null,\"keyName\":\"mihaec2\",\"launchTime\":\"2023-04-27T14:57:16.000Z\",\"monitoring\":{\"state\":\"disabled\"},\"placement\":{\"availabilityZone\":\"us-east-1e\",\"affinity\":null,\"groupName\":\"\",\"partitionNumber\":null,\"hostId\":null,\"tenancy\":\"default\",\"spreadDomain\":null,\"hostResourceGroupArn\":null},\"platform\":null,\"privateDnsName\":\"ip-172-31-78-41.ec2.internal\",\"privateIpAddress\":\"172.31.78.41\",\"productCodes\":[],\"publicDnsName\":\"ec2-3-232-229-57.compute-1.amazonaws.com\",\"publicIpAddress\":\"3.232.229.57\",\"ramdiskId\":null,\"state\":{\"code\":80,\"name\":\"stopped\"},\"stateTransitionReason\":\"User initiated (2023-04-27 15:01:07 GMT)\",\"subnetId\":\"subnet-cad1f2f4\",\"vpcId\":\"vpc-2d96be57\",\"architecture\":\"x86_64\",\"blockDeviceMappings\":[{\"deviceName\":\"/dev/xvda\",\"ebs\":{\"attachTime\":\"2020-05-30T15:21:58.000Z\",\"deleteOnTermination\":true,\"status\":\"attached\",\"volumeId\":\"vol-0a288b5eb9fea4b30\"}}],\"clientToken\":\"\",\"ebsOptimized\":false,\"enaSupport\":true,\"hypervisor\":\"xen\",\"iamInstanceProfile\":{\"arn\":\"arn:aws:iam::0123456789012:instance-profile/AmazonSSMRoleForInstancesQuickSetup\",\"id\":\"AIPAS5S4WFUBL72S3QXW5\"},\"instanceLifecycle\":null,\"elasticGpuAssociations\":[],\"elasticInferenceAcceleratorAssociations\":[],\"networkInterfaces\":[{\"association\":{\"carrierIp\":null,\"ipOwnerId\":\"0123456789012\",\"publicDnsName\":\"ec2-3-232-229-57.compute-1.amazonaws.com\",\"publicIp\":\"3.232.229.57\"},\"attachment\":{\"attachTime\":\"2020-05-30T15:21:57.000Z\",\"attachmentId\":\"eni-attach-0a7e75dc9c1c291a0\",\"deleteOnTermination\":true,\"deviceIndex\":0,\"status\":\"attached\",\"networkCardIndex\":0},\"description\":\"\",\"groups\":[{\"groupName\":\"minhaec2\",\"groupId\":\"sg-0fb295a327d9b4835\"}],\"ipv6Addresses\":[],\"macAddress\":\"06:cf:00:c2:17:db\",\"networkInterfaceId\":\"eni-034dd31c4b17ada8c\",\"ownerId\":\"0123456789012\",\"privateDnsName\":\"ip-172-31-78-41.ec2.internal\",\"privateIpAddress\":\"172.31.78.41\",\"privateIpAddresses\":[{\"association\":{\"carrierIp\":null,\"ipOwnerId\":\"0123456789012\",\"publicDnsName\":\"ec2-3-232-229-57.compute-1.amazonaws.com\",\"publicIp\":\"3.232.229.57\"},\"primary\":true,\"privateDnsName\":\"ip-172-31-78-41.ec2.internal\",\"privateIpAddress\":\"172.31.78.41\"}],\"sourceDestCheck\":true,\"status\":\"in-use\",\"subnetId\":\"subnet-cad1f2f4\",\"vpcId\":\"vpc-2d96be57\",\"interfaceType\":\"interface\"},{\"association\":null,\"attachment\":{\"attachTime\":\"2020-11-26T23:46:04.000Z\",\"attachmentId\":\"eni-attach-0e6d150ebbd19966e\",\"deleteOnTermination\":false,\"deviceIndex\":1,\"status\":\"attached\",\"networkCardIndex\":0},\"description\":\"MINHAEC2AAAAAA\",\"groups\":[{\"groupName\":\"minhaec2\",\"groupId\":\"sg-0fb295a327d9b4835\"},{\"groupName\":\"default\",\"groupId\":\"sg-88105fa0\"}],\"ipv6Addresses\":[],\"macAddress\":\"06:0a:62:00:64:5f\",\"networkInterfaceId\":\"eni-09a604c0ec356b06f\",\"ownerId\":\"0123456789012\",\"privateDnsName\":\"ip-172-31-70-9.ec2.internal\",\"privateIpAddress\":\"172.31.70.9\",\"privateIpAddresses\":[{\"association\":null,\"primary\":true,\"privateDnsName\":\"ip-172-31-70-9.ec2.internal\",\"privateIpAddress\":\"172.31.70.9\"}],\"sourceDestCheck\":true,\"status\":\"in-use\",\"subnetId\":\"subnet-cad1f2f4\",\"vpcId\":\"vpc-2d96be57\",\"interfaceType\":\"interface\"}],\"outpostArn\":null,\"rootDeviceName\":\"/dev/xvda\",\"rootDeviceType\":\"ebs\",\"securityGroups\":[{\"groupName\":\"minhaec2\",\"groupId\":\"sg-0fb295a327d9b4835\"}],\"sourceDestCheck\":true,\"spotInstanceRequestId\":null,\"sriovNetSupport\":null,\"stateReason\":{\"code\":\"Client.UserInitiatedShutdown\",\"message\":\"Client.UserInitiatedShutdown: User initiated shutdown\"},\"tags\":[{\"key\":\"projeto\",\"value\":\"meetup\"},{\"key\":\"Name\",\"value\":\"Minha\"},{\"key\":\"CentroCusto\",\"value\":\"TI\"},{\"key\":\"Setor\",\"value\":\"Desenvolvimento\"}],\"virtualizationType\":\"hvm\",\"cpuOptions\":{\"coreCount\":2,\"threadsPerCore\":1},\"capacityReservationId\":null,\"capacityReservationSpecification\":{\"capacityReservationPreference\":\"open\",\"capacityReservationTarget\":null},\"hibernationOptions\":{\"configured\":false},\"licenses\":[],\"metadataOptions\":{\"state\":\"applied\",\"httpTokens\":\"optional\",\"httpPutResponseHopLimit\":1,\"httpEndpoint\":\"enabled\"},\"enclaveOptions\":{\"enabled\":false},\"bootMode\":null},\"supplementaryConfiguration\":{},\"tags\":{\"projeto\":\"meetup\",\"Setor\":\"Desenvolvimento\",\"CentroCusto\":\"TI\",\"Name\":\"Minha\"},\"configurationItemVersion\":\"1.3\",\"configurationItemCaptureTime\":\"2023-04-27T15:03:11.636Z\",\"configurationStateId\":1682607791636,\"awsAccountId\":\"0123456789012\",\"configurationItemStatus\":\"OK\",\"resourceType\":\"AWS::EC2::Instance\",\"resourceId\":\"i-042dd005362091826\",\"resourceName\":null,\"ARN\":\"arn:aws:ec2:us-east-1:0123456789012:instance/i-042dd005362091826\",\"awsRegion\":\"us-east-1\",\"availabilityZone\":\"us-east-1e\",\"configurationStateMd5Hash\":\"\",\"resourceCreationTime\":\"2023-04-27T14:57:16.000Z\"},\"notificationCreationTime\":\"2023-04-27T15:03:13.332Z\",\"messageType\":\"ConfigurationItemChangeNotification\",\"recordVersion\":\"1.3\"}", - "ruleParameters": "{\"desiredInstanceType\": \"t2.micro\"}", - "resultToken": "eyJlbmNyeXB0ZWREYXRhIjpbLTQxLDEsLTU3LC0zMCwtMTIxLDUzLDUyLDQ1LC01NywtOCw3MywtODEsLTExNiwtMTAyLC01MiwxMTIsLTQ3LDU4LDY1LC0xMjcsMTAyLDUsLTY5LDQ0LC0xNSwxMTQsNDEsLTksMTExLC0zMCw2NSwtNzUsLTM1LDU0LDEwNSwtODksODYsNDAsLTEwNSw5OCw2NSwtMTE5LC02OSwyNCw2NiwtMjAsODAsLTExMiwtNzgsLTgwLDQzLC01NywzMCwtMjUsODIsLTEwLDMsLTQsLTg1LC01MywtMzcsLTkwLC04OCwtOTgsLTk4LC00MSwxOSwxMTYsNjIsLTIzLC0xMjEsLTEwOCw1NywtNTgsLTUyLDI5LDEwMSwxMjIsLTU2LC03MSwtODEsLTQ3LDc3LC0yMiwtMTI0LC0zLC04NiwtMTIyLC00MCwtODksLTEwMSw1NywtMTI3LC0zNywtMzcsLTMxLC05OCwtMzEsMTEsLTEyNSwwLDEwOCwtMzIsNjQsNjIsLTIyLDAsNDcsLTEwNiwtMTAwLDEwNCwxNCw1OCwxMjIsLTEwLC01MCwtOTAsLTgwLC01MCwtNSw2NSwwLC0yNSw4NSw4Miw3LDkzLDEyMiwtODIsLTExNiwtNzksLTQ0LDcyLC03MywtNjksMTQsLTU2LDk0LDkwLDExNCwtMjksLTExOSwtNzEsODgsMTA3LDEwNywxMTAsLTcsMTI3LC0xMjUsLTU3LC0xMjYsLTEyMCw2OSwtMTI3LC03NiwtMTE5LDcxLDEsLTY4LDEwNywxMTMsLTU2LDg3LC0xMDIsLTE2LDEwOCwtMTA3LC00MywtOTQsLTEwNiwzLDkwLDE0LDcyLC0xMiwtMTE2LC03Myw4MCwtMTIyLDQ0LC0xMDQsMTIsNzQsNTcsLTEwLC0xMDUsLTExMiwtMzYsMjgsLTQ1LDk3LDExLC00OSwtMTEsNjEsMzYsLTE3LC03NCw1MCw0LC0yNiwxMDQsLTI4LC0xMjUsMjQsNzAsLTg1LC00Niw5MiwtMTAzLC00MSwtMTA2LDY5LDEyMiwyMSwtMjUsODAsOTksLTkzLC01NiwtMjUsLTQ3LC0xMjMsLTU5LC0xMjQsLTUyLC0xNiwxMjcsLTM4LC0xNiwxMDEsMTE5LDEwNywyNywxMCwtNDYsLTg3LC0xMiwtMzksMTQsNDUsMiw3MCwxMDcsMTA0LC00LC02OSwtMTIsNTksLTEyNiwtOTEsMTI3LDU0LDEwNiwtMTI2LC0xMTYsLTEwMiw3Miw4MSw1MCw3NSwtNTEsMTA4LDQxLC0zLC02LC00NSwxMDMsLTg2LDM3LC00NiwtMzIsLTExMSwxMjQsMTExLDg3LDU0LC03NiwxMjIsLTUsLTM2LC04OCw5LC0xMTMsMTE2LC01OSw4Myw3NywyOCwxMiwtNjUsLTExMywtNzksLTEyOCw4MiwtMTE4LC04MywtMTI0LDMxLDk5LC05MCwtOTksMTYsLTEyMywyMSwtMTE0LC05OCwtMTE2LC0xMTksMiwtNzMsNDYsODIsLTEzLDU0LDcxLC00MiwyNSw3NCw3MywtODYsOTQsNDYsOTksOTMsLTgyLDU1LDY1LC05OCw0OSwtNjAsMTEyLDEwMSwyMiw2OSwtMTYsNzcsLTk0LC01OSwtNDYsMTE1LDMwLC00Myw5Myw4OCwtMjgsMzgsNiw4NCwzMSwtMTAxLDMyLC0yMiwtNjMsLTk1LDExNCwtNzUsMTE0LDM2LC04NCw0MCwtNDQsLTEzLDU5LDcyLC0xLC0xMDMsMzEsMTA1LDY5LDY5LDc3LC02NCwtNTYsMTE4LDEzLC0xMTQsODAsOTksLTUzLDI1LDQyLDk0LDczLC04MCwyNSwzOCwyNCwtMTcsNjYsLTExOCwtMjMsMTE5LDkwLDEyMSwxMTgsLTUxLDUxLC0xMiwtNzYsLTUxLDksLTIxLDExNCwtMzcsLTY0LC0yLC0xMjYsLTk1LDYzLDczLC00MSwtMzQsLTkwLC0yMiw1OSwtNzksMzAsLTQsLTEsLTUsMTIsMzksLTk5LC0xMDUsLTEwNCwtNjEsNjUsLTc0LDE5LC0xMywtNjAsLTI4LC04LDQsLTgsMTIxLC0xMTgsMTIyLC02NSwtMjEsMjMsMTcsLTg0LDQwLC05MiwxNCwtMTI2LC02MCwtNzksLTUzLDM3LC04Myw2NSwxMDQsLTM2LC02MCwtMTEwLC0zMywtMTE3LDYsMTA3LDEsLTMsOTMsNzgsLTk1LC0xMjIsNTMsMTA4LC00OSwtNDksMjQsLTY1LDgzLDEyNSwtNzcsLTE5LC04MSwzNCwtNjcsLTQzLC03MCwtMjYsMTgsMTA0LDY1LDQsLTEyNiw0NCwtMTE5LDUyLC00NiwyMiw2NywxMTMsMTE4LC0zMywzNCwtOTYsMTIxLDE5LC0yLC0zNSwwLC04MiwxNyw2NiwtMjcsNjksLTM2LC0xNCw1NiwtOTcsLTE2LDEyMywyOCwtOTUsLTMyLC02MywtNjksNzAsNjQsLTMzLC0xMDAsNDMsLTExMywxMDUsMTAwLDEwOCwtNjAsNDAsLTIsLTk2LC0xMjQsMzcsLTQ1LC0xMjQsLTY4LC02OSwtMTIzLDE3LC02LDg2LC01OSwtOTQsMTEwLDczLDU3LC0xMTYsMTA3LC00MSwtOTQsLTExOCwtMTI2LDEwLC04MCwtNzAsMTAyLDg4LC0xMjYsODcsLTI3LC0xMDEsLTk0LC0zNSwtMTA2LC02LC03MiwtODYsNTAsMTE2LC0yOCw5MCwxMywtMTIwLDYsMjcsOTIsNTYsLTkwLDM5LDQ5LC0xMywtODYsLTI1LC04NiwxMTMsLTEzLDQxLC0xMTksOTQsLTk0LC0xMDMsLTgzLC02MCwxMjcsLTE1LC0zOSwxMTksLTk1LDI3LDQ0LDExNiwxMDksNywtMTAyLC0xNyw0OCwtODIsLTMxLC04LC02OSwzNSw5NCw1NCwtNTUsMSwtMTE5LDU3LC0xMDgsLTMsLTkxLC0xMjIsLTUzLC04OCw0LC05NywtMzUsMTI2LDExOSw1OSwtMSw4NSw3MywtNTgsLTEyMCwtNjQsMTE5LC0xMTIsOTIsMTksOSwtNjYsLTkyLDEwOCwtMTEsLTQyLDExMSwtMTA0LC0xMjAsMjcsLTEwMywtNjksMTksMTExLDEyLDIzLDEwNyw1NCw0MSwtMjYsNjAsLTMxLC01XSwibWF0ZXJpYWxTZXRTZXJpYWxOdW1iZXIiOjEsIml2UGFyYW1ldGVyU3BlYyI6eyJpdiI6Wy05NSwzMiwxMDgsOTEsMzUsLTgyLC0zNywyNCwtNDQsLTExNSwtODIsLTEyOCwtMTIyLDMsNTMsLTI0XX19", - "eventLeftScope": false, - "executionRoleArn": "arn:aws:iam::0123456789012:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig", - "configRuleArn": "arn:aws:config:us-east-1:0123456789012:config-rule/config-rule-i9y8j9", - "configRuleName": "MyRule", - "configRuleId": "config-rule-i9y8j9", - "accountId": "0123456789012", - "evaluationMode": "DETECTIVE" -} diff --git a/packages/parser/tests/events/awsConfigRuleOversizedConfiguration.json b/packages/parser/tests/events/awsConfigRuleOversizedConfiguration.json deleted file mode 100644 index c731919c6a..0000000000 --- a/packages/parser/tests/events/awsConfigRuleOversizedConfiguration.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "invokingEvent": "{\"configurationItemSummary\": {\"changeType\": \"UPDATE\",\"configurationItemVersion\": \"1.2\",\"configurationItemCaptureTime\":\"2016-10-06T16:46:16.261Z\",\"configurationStateId\": 0,\"awsAccountId\":\"123456789012\",\"configurationItemStatus\": \"OK\",\"resourceType\": \"AWS::EC2::Instance\",\"resourceId\":\"i-00000000\",\"resourceName\":null,\"ARN\":\"arn:aws:ec2:us-west-2:123456789012:instance/i-00000000\",\"awsRegion\": \"us-west-2\",\"availabilityZone\":\"us-west-2a\",\"configurationStateMd5Hash\":\"8f1ee69b287895a0f8bc5753eca68e96\",\"resourceCreationTime\":\"2016-10-06T16:46:10.489Z\"},\"messageType\":\"OversizedConfigurationItemChangeNotification\", \"notificationCreationTime\": \"2016-10-06T16:46:16.261Z\", \"recordVersion\": \"1.0\"}", - "ruleParameters": "{\"myParameterKey\":\"myParameterValue\"}", - "resultToken": "myResultToken", - "eventLeftScope": false, - "executionRoleArn": "arn:aws:iam::123456789012:role/config-role", - "configRuleArn": "arn:aws:config:us-east-2:123456789012:config-rule/config-rule-ec2-managed-instance-inventory", - "configRuleName": "change-triggered-config-rule", - "configRuleId": "config-rule-0123456", - "accountId": "123456789012", - "version": "1.0" -} diff --git a/packages/parser/tests/events/awsConfigRuleScheduled.json b/packages/parser/tests/events/awsConfigRuleScheduled.json deleted file mode 100644 index 491855621a..0000000000 --- a/packages/parser/tests/events/awsConfigRuleScheduled.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "1.0", - "invokingEvent": "{\"awsAccountId\":\"0123456789012\",\"notificationCreationTime\":\"2023-04-27T13:26:17.741Z\",\"messageType\":\"ScheduledNotification\",\"recordVersion\":\"1.0\"}", - "ruleParameters": "{\"test\":\"x\"}", - "resultToken": "eyJlbmNyeXB0ZWREYXRhIjpbLTQyLDEyNiw1MiwtMzcsLTI5LDExNCwxMjYsLTk3LDcxLDIyLC0xMTAsMTEyLC0zMSwtOTMsLTQ5LC0xMDEsODIsMyw1NCw0OSwzLC02OSwtNzEsLTcyLDYyLDgxLC03MiwtODEsNTAsMzUsLTUwLC03NSwtMTE4LC0xMTgsNzcsMTIsLTEsMTQsMTIwLC03MCwxMTAsLTMsNTAsLTYwLDEwNSwtNTcsNDUsMTAyLC0xMDksLTYxLC0xMDEsLTYxLDQsNDcsLTg0LC0yNSwxMTIsNTQsLTcxLC0xMDksNDUsMTksMTIzLC0yNiwxMiwtOTYsLTczLDU0LC0xMDksOTIsNDgsLTU5LC04MywtMzIsODIsLTM2LC05MCwxOSw5OCw3Nyw3OCw0MCw4MCw3OCwtMTA1LDg3LC0xMTMsLTExNiwtNzIsMzAsLTY4LC00MCwtODksMTA5LC0xMDgsLTEyOCwyMiw3Miw3NywtMjEsNzYsODksOTQsLTU5LDgxLC0xMjEsLTEwNywtNjcsNjMsLTcsODIsLTg5LC00NiwtMzQsLTkyLDEyMiwtOTAsMTcsLTEyMywyMCwtODUsLTU5LC03MCw4MSwyNyw2Miw3NCwtODAsODAsMzcsNDAsMTE2LDkxLC0yNCw1MSwtNDEsLTc5LDI4LDEyMCw1MywtMTIyLC04MywxMjYsLTc4LDI1LC05OCwtMzYsMTMsMzIsODYsLTI1LDQ4LDMsLTEwMiwtMTYsMjQsLTMsODUsNDQsLTI4LDE0LDIyLDI3LC0xMjIsMTE4LDEwMSw3Myw1LDE4LDU4LC02NCwyMywtODYsLTExNCwyNCwwLDEwMCwyLDExNywtNjIsLTExOSwtMTI4LDE4LDY1LDkwLDE0LC0xMDIsMjEsODUsMTAwLDExNyw1NSwyOSwxMjcsNTQsNzcsNzIsNzQsMzIsNzgsMywtMTExLDExOCwtNzAsLTg2LDEyNywtNzQsNjAsMjIsNDgsMzcsODcsMTMsMCwtMTA1LDUsLTEyMiwtNzEsLTEwMCwxMDQsLTEyNiwtMTYsNzksLTMwLDEyMCw3NywtNzYsLTQxLC0xMDksMiw5NywtMTAxLC0xLDE1LDEyMywxMTksMTA4LDkxLC0yMCwtMTI1LC05NiwyLC05MiwtMTUsLTY3LC03NiwxMjEsMTA0LDEwNSw2NCwtNjIsMTAyLDgsNCwxMjEsLTQ1LC04MCwtODEsLTgsMTE4LDQ0LC04MiwtNDEsLTg0LDczLC0zNiwxMTcsODAsLTY5LC03MywxNCwtMTgsNzIsMzEsLTUsLTExMSwtMTI3LC00MywzNCwtOCw1NywxMDMsLTQyLDE4LC0zMywxMTcsLTI2LC0xMjQsLTEyNCwxNSw4OCwyMywxNiwtNTcsNTQsLTYsLTEwMiwxMTYsLTk5LC00NSwxMDAsLTM1LDg3LDM3LDYsOTgsMiwxMTIsNjAsLTMzLDE3LDI2LDk5LC0xMDUsNDgsLTEwNCwtMTE5LDc4LDYsLTU4LDk1LDksNDEsLTE2LDk2LDQxLC0yMiw5Niw3MiwxMTYsLTk1LC0xMDUsLTM2LC0xMjMsLTU1LDkxLC00NiwtNywtOTIsMzksNDUsODQsMTYsLTEyNCwtMTIyLC02OCwxLC0yOCwxMjIsLTYwLDgyLDEwMywtNTQsLTkyLDI3LC05OSwtMTI4LDY1LDcsLTcyLC0xMjcsNjIsLTIyLDIsLTExLDE4LC04OSwtMTA2LC03NCw3MSw4NiwtMTE2LC0yNSwtMTE1LC05Niw1NywtMzQsMjIsLTEyNCwtMTI1LC00LC00MSw0MiwtNTcsLTEwMyw0NSw3OCwxNCwtMTA2LDExMSw5OCwtOTQsLTcxLDUsNzUsMTksLTEyNCwtMzAsMzQsLTUwLDc1LC04NCwtNTAsLTU2LDUxLC0xNSwtMzYsNjEsLTk0LC03OSwtNDUsMTI2LC03NywtMTA1LC0yLC05MywtNiw4LC0zLDYsLTQyLDQ2LDEyNSw1LC05OCwxMyw2NywtMTAsLTEzLC05NCwtNzgsLTEyNywxMjEsLTI2LC04LC0xMDEsLTkxLDEyMSwtNDAsLTEyNCwtNjQsODQsLTcyLDYzLDE5LC04NF0sIm1hdGVyaWFsU2V0U2VyaWFsTnVtYmVyIjoxLCJpdlBhcmFtZXRlclNwZWMiOnsiaXYiOlszLC0xMCwtODUsMTE0LC05MCwxMTUsNzcsNTUsNTQsMTUsMzgsODQsLTExNiwxNCwtNDAsMjhdfX0=", - "eventLeftScope": false, - "executionRoleArn": "arn:aws:iam::0123456789012:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig", - "configRuleArn": "arn:aws:config:us-east-1:0123456789012:config-rule/config-rule-pdmyw1", - "configRuleName": "rule-ec2-test", - "configRuleId": "config-rule-pdmyw1", - "accountId": "0123456789012", - "evaluationMode": "DETECTIVE" -} diff --git a/packages/parser/tests/events/bedrockAgentEvent.json b/packages/parser/tests/events/bedrockAgentEvent.json deleted file mode 100644 index b7ad75b3c4..0000000000 --- a/packages/parser/tests/events/bedrockAgentEvent.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "actionGroup": "ClaimManagementActionGroup", - "messageVersion": "1.0", - "sessionId": "12345678912345", - "sessionAttributes": {}, - "promptSessionAttributes": {}, - "inputText": "I want to claim my insurance", - "agent": { - "alias": "TSTALIASID", - "name": "test", - "version": "DRAFT", - "id": "8ZXY0W8P1H" - }, - "httpMethod": "GET", - "apiPath": "/claims" -} diff --git a/packages/parser/tests/events/bedrockAgentPostEvent.json b/packages/parser/tests/events/bedrockAgentPostEvent.json deleted file mode 100644 index f223bfcd51..0000000000 --- a/packages/parser/tests/events/bedrockAgentPostEvent.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "actionGroup": "ClaimManagementActionGroup", - "messageVersion": "1.0", - "sessionId": "12345678912345", - "sessionAttributes": {}, - "promptSessionAttributes": {}, - "inputText": "Send reminders to all pending documents", - "agent": { - "alias": "TSTALIASID", - "name": "test", - "version": "DRAFT", - "id": "8ZXY0W8P1H" - }, - "httpMethod": "POST", - "apiPath": "/send-reminders", - "requestBody": { - "content": { - "application/json": { - "properties": [ - { - "name": "claimId", - "type": "string", - "value": "20" - }, - { - "name": "pendingDocuments", - "type": "string", - "value": "social number and vat" - } - ] - } - } - }, - "parameters": [] -} diff --git a/packages/parser/tests/events/cloudWatchDashboardEvent.json b/packages/parser/tests/events/cloudWatchDashboardEvent.json deleted file mode 100644 index fd2d3be62d..0000000000 --- a/packages/parser/tests/events/cloudWatchDashboardEvent.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "original": "param-to-widget", - "widgetContext": { - "dashboardName": "Name-of-current-dashboard", - "widgetId": "widget-16", - "domain": "https://us-east-1.console.aws.amazon.com", - "accountId": "123456789123", - "locale": "en", - "timezone": { - "label": "UTC", - "offsetISO": "+00:00", - "offsetInMinutes": 0 - }, - "period": 300, - "isAutoPeriod": true, - "timeRange": { - "mode": "relative", - "start": 1627236199729, - "end": 1627322599729, - "relativeStart": 86400012, - "zoom": { - "start": 1627276030434, - "end": 1627282956521 - } - }, - "theme": "light", - "linkCharts": true, - "title": "Tweets for Amazon website problem", - "forms": { - "all": {} - }, - "params": { - "original": "param-to-widget" - }, - "width": 588, - "height": 369 - } -} diff --git a/packages/parser/tests/events/cloudWatchLogEvent.json b/packages/parser/tests/events/cloudWatchLogEvent.json deleted file mode 100644 index aa184c1d01..0000000000 --- a/packages/parser/tests/events/cloudWatchLogEvent.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "awslogs": { - "data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwWQRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpLwivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQDQiMdxRQEAAA==" - } -} diff --git a/packages/parser/tests/events/cloudwatch/base.json b/packages/parser/tests/events/cloudwatch/base.json new file mode 100644 index 0000000000..e0eed9de38 --- /dev/null +++ b/packages/parser/tests/events/cloudwatch/base.json @@ -0,0 +1,5 @@ +{ + "awslogs": { + "data": "H4sIAAAAAAAAE6WRTU/bQBCG/0q06jEmO7uzX76lNAGqtkjY6qEYRWt7Eqz6I7U3oQjx3ysbqDgUCam31ewzo2feeWANDYPfUXq/JxazT8t0ufm6SpLl2YrNWXfXUs9ipqQWCgVHEJrNWd3tzvrusGcxW/i7YVH7Ji/9YugairpwS33U+oaewCT05BsWM8EFLoAvBCwuR2bdXn/4skxXSXoDugCjvNpaJ1B770tVWGM95Z7IF4bN2XDIh6Kv9qHq2nVVB+oHFl+z07vQV7sd9Unwxc/o633yijt1egXrjyoqYHl+mwo82s+37GbSWh2pDeOIB1aVLGbSKu00R+MsKglKGo0ASmjLDUotUVsEB+gUGOBSobQguBvTCFVDQ/DNnsVghFOCW6dA2flLts/LR8AjASlgLGwM6gSU/ZEF8mXhoLCRFUZG6EUZ5WB4lHNvrJW5BkdZuPi2vszCOdV1N9v2XTObYj4JQ9ayx/n/7WDeuUOSLq/S2RX9OtAQLsp49h712Xfqh6pr49nzsd8SNgoVKu4kSOOsdkZxxTmCNCgEaIVacXTGCQX4trB7LfyQsZqOVGcsztiUIJtnL/9T8V+Bjszgm31dtbtN78NI8rFG/bEqnvqe35tDW9K2aqmcuv46TcybJx/R372/34TeF7SpygmHSBvQGrfbSLucU2G0QBSSOCrEggu5zdjjmN7N4x+T93ZttgMAAA==" + } +} \ No newline at end of file diff --git a/packages/parser/tests/events/codePipelineEvent.json b/packages/parser/tests/events/codePipelineEvent.json deleted file mode 100644 index 4c46b0172b..0000000000 --- a/packages/parser/tests/events/codePipelineEvent.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "CodePipeline.job": { - "id": "11111111-abcd-1111-abcd-111111abcdef", - "accountId": "111111111111", - "data": { - "actionConfiguration": { - "configuration": { - "FunctionName": "MyLambdaFunctionForAWSCodePipeline", - "UserParameters": "some-input-such-as-a-URL" - } - }, - "inputArtifacts": [ - { - "name": "ArtifactName", - "revision": null, - "location": { - "type": "S3", - "s3Location": { - "bucketName": "the name of the bucket configured as the pipeline artifact store in Amazon S3, for example codepipeline-us-east-2-1234567890", - "objectKey": "the name of the application, for example CodePipelineDemoApplication.zip" - } - } - } - ], - "outputArtifacts": [], - "artifactCredentials": { - "accessKeyId": "AKIAIOSFODNN7EXAMPLE", - "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "sessionToken": "MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=" - }, - "continuationToken": "A continuation token if continuing job" - } - } -} diff --git a/packages/parser/tests/events/codePipelineEventData.json b/packages/parser/tests/events/codePipelineEventData.json deleted file mode 100644 index dbbc18ea7b..0000000000 --- a/packages/parser/tests/events/codePipelineEventData.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "CodePipeline.job": { - "id": "c0d76431-b0e7-xmpl-97e3-e8ee786eb6f6", - "accountId": "123456789012", - "data": { - "actionConfiguration": { - "configuration": { - "FunctionName": "my-function", - "UserParameters": "{\"KEY\": \"VALUE\"}" - } - }, - "inputArtifacts": [ - { - "name": "my-pipeline-SourceArtifact", - "revision": "e0c7xmpl2308ca3071aa7bab414de234ab52eea", - "location": { - "type": "S3", - "s3Location": { - "bucketName": "us-west-2-123456789012-my-pipeline", - "objectKey": "my-pipeline/test-api-2/TdOSFRV" - } - } - } - ], - "outputArtifacts": [ - { - "name": "invokeOutput", - "revision": null, - "location": { - "type": "S3", - "s3Location": { - "bucketName": "us-west-2-123456789012-my-pipeline", - "objectKey": "my-pipeline/invokeOutp/D0YHsJn" - } - } - } - ], - "artifactCredentials": { - "accessKeyId": "AKIAIOSFODNN7EXAMPLE", - "secretAccessKey": "6CGtmAa3lzWtV7a...", - "sessionToken": "IQoJb3JpZ2luX2VjEA...", - "expirationTime": 1575493418000 - } - } - } -} diff --git a/packages/parser/tests/events/codePipelineEventEmptyUserParameters.json b/packages/parser/tests/events/codePipelineEventEmptyUserParameters.json deleted file mode 100644 index cf395efc19..0000000000 --- a/packages/parser/tests/events/codePipelineEventEmptyUserParameters.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "CodePipeline.job": { - "id": "11111111-abcd-1111-abcd-111111abcdef", - "accountId": "111111111111", - "data": { - "actionConfiguration": { - "configuration": { - "FunctionName": "MyLambdaFunctionForAWSCodePipeline" - } - }, - "inputArtifacts": [ - { - "name": "ArtifactName", - "revision": null, - "location": { - "type": "S3", - "s3Location": { - "bucketName": "the name of the bucket configured as the pipeline artifact store in Amazon S3, for example codepipeline-us-east-2-1234567890", - "objectKey": "the name of the application, for example CodePipelineDemoApplication.zip" - } - } - } - ], - "outputArtifacts": [], - "artifactCredentials": { - "accessKeyId": "AKIAIOSFODNN7EXAMPLE", - "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "sessionToken": "MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=" - } - } - } -} diff --git a/packages/parser/tests/events/codePipelineEventWithEncryptionKey.json b/packages/parser/tests/events/codePipelineEventWithEncryptionKey.json deleted file mode 100644 index 1e81b70b71..0000000000 --- a/packages/parser/tests/events/codePipelineEventWithEncryptionKey.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "CodePipeline.job": { - "id": "11111111-abcd-1111-abcd-111111abcdef", - "accountId": "111111111111", - "data": { - "actionConfiguration": { - "configuration": { - "FunctionName": "MyLambdaFunctionForAWSCodePipeline", - "UserParameters": "some-input-such-as-a-URL" - } - }, - "inputArtifacts": [ - { - "name": "ArtifactName", - "revision": null, - "location": { - "type": "S3", - "s3Location": { - "bucketName": "the name of the bucket configured as the pipeline artifact store in Amazon S3, for example codepipeline-us-east-2-1234567890", - "objectKey": "the name of the application, for example CodePipelineDemoApplication.zip" - } - } - } - ], - "outputArtifacts": [], - "artifactCredentials": { - "accessKeyId": "AKIAIOSFODNN7EXAMPLE", - "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "sessionToken": "MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=" - }, - "continuationToken": "A continuation token if continuing job", - "encryptionKey": { - "id": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", - "type": "KMS" - } - } - } -} diff --git a/packages/parser/tests/events/cognitoCreateAuthChallengeEvent.json b/packages/parser/tests/events/cognitoCreateAuthChallengeEvent.json deleted file mode 100644 index ac2e593684..0000000000 --- a/packages/parser/tests/events/cognitoCreateAuthChallengeEvent.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "1", - "region": "us-east-1", - "userPoolId": "us-east-1_example", - "userName": "UserName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "triggerSource": "CreateAuthChallenge_Authentication", - "request": { - "userAttributes": { - "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", - "email_verified": "true", - "name": "First Last", - "email": "create-auth@mail.com" - }, - "challengeName": "PASSWORD_VERIFIER", - "session": [ - { - "challengeName": "CUSTOM_CHALLENGE", - "challengeResult": true, - "challengeMetadata": "CAPTCHA_CHALLENGE" - } - ], - "userNotFound": false - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoCustomMessageEvent.json b/packages/parser/tests/events/cognitoCustomMessageEvent.json deleted file mode 100644 index 8652c3bff4..0000000000 --- a/packages/parser/tests/events/cognitoCustomMessageEvent.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1", - "triggerSource": "CustomMessage_AdminCreateUser", - "region": "region", - "userPoolId": "userPoolId", - "userName": "userName", - "callerContext": { - "awsSdk": "awsSdkVersion", - "clientId": "clientId" - }, - "request": { - "userAttributes": { - "phone_number_verified": false, - "email_verified": true - }, - "codeParameter": "####", - "usernameParameter": "username" - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoDefineAuthChallengeEvent.json b/packages/parser/tests/events/cognitoDefineAuthChallengeEvent.json deleted file mode 100644 index 5ab2b02038..0000000000 --- a/packages/parser/tests/events/cognitoDefineAuthChallengeEvent.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "version": "1", - "region": "us-east-1", - "userPoolId": "us-east-1_example", - "userName": "UserName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "triggerSource": "DefineAuthChallenge_Authentication", - "request": { - "userAttributes": { - "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", - "email_verified": "true", - "name": "First Last", - "email": "define-auth@mail.com" - }, - "session": [ - { - "challengeName": "PASSWORD_VERIFIER", - "challengeResult": true - }, - { - "challengeName": "CUSTOM_CHALLENGE", - "challengeResult": true, - "challengeMetadata": "CAPTCHA_CHALLENGE" - } - ], - "userNotFound": true - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoPostAuthenticationEvent.json b/packages/parser/tests/events/cognitoPostAuthenticationEvent.json deleted file mode 100644 index d34b18eeba..0000000000 --- a/packages/parser/tests/events/cognitoPostAuthenticationEvent.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "1", - "region": "us-east-1", - "userPoolId": "us-east-1_example", - "userName": "UserName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "triggerSource": "PostAuthentication_Authentication", - "request": { - "newDeviceUsed": true, - "userAttributes": { - "email": "post-auth@mail.com" - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoPostConfirmationEvent.json b/packages/parser/tests/events/cognitoPostConfirmationEvent.json deleted file mode 100644 index e88f98150c..0000000000 --- a/packages/parser/tests/events/cognitoPostConfirmationEvent.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "string", - "triggerSource": "PostConfirmation_ConfirmSignUp", - "region": "us-east-1", - "userPoolId": "string", - "userName": "userName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "request": { - "userAttributes": { - "email": "user@example.com", - "email_verified": true - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoPreAuthenticationEvent.json b/packages/parser/tests/events/cognitoPreAuthenticationEvent.json deleted file mode 100644 index 661fea6372..0000000000 --- a/packages/parser/tests/events/cognitoPreAuthenticationEvent.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1", - "region": "us-east-1", - "userPoolId": "us-east-1_example", - "userName": "UserName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "triggerSource": "PreAuthentication_Authentication", - "request": { - "userAttributes": { - "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", - "email_verified": "true", - "name": "First Last", - "email": "pre-auth@mail.com" - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoPreSignUpEvent.json b/packages/parser/tests/events/cognitoPreSignUpEvent.json deleted file mode 100644 index feb4eba25d..0000000000 --- a/packages/parser/tests/events/cognitoPreSignUpEvent.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "string", - "triggerSource": "PreSignUp_SignUp", - "region": "us-east-1", - "userPoolId": "string", - "userName": "userName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "request": { - "userAttributes": { - "email": "user@example.com", - "phone_number": "+12065550100" - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoPreTokenGenerationEvent.json b/packages/parser/tests/events/cognitoPreTokenGenerationEvent.json deleted file mode 100644 index f5ee69e0d2..0000000000 --- a/packages/parser/tests/events/cognitoPreTokenGenerationEvent.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "1", - "triggerSource": "TokenGeneration_Authentication", - "region": "us-west-2", - "userPoolId": "us-west-2_example", - "userName": "testqq", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "71ghuul37mresr7h373b704tua" - }, - "request": { - "userAttributes": { - "sub": "0b0a57c5-f013-426a-81a1-f8ffbfba21f0", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "test@mail.com" - }, - "groupConfiguration": { - "groupsToOverride": [], - "iamRolesToOverride": [], - "preferredRole": null - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoUserMigrationEvent.json b/packages/parser/tests/events/cognitoUserMigrationEvent.json deleted file mode 100644 index 2eae4e6618..0000000000 --- a/packages/parser/tests/events/cognitoUserMigrationEvent.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": "string", - "triggerSource": "UserMigration_Authentication", - "region": "us-east-1", - "userPoolId": "string", - "userName": "userName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "request": { - "password": "password" - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognitoVerifyAuthChallengeResponseEvent.json b/packages/parser/tests/events/cognitoVerifyAuthChallengeResponseEvent.json deleted file mode 100644 index 286da2c1d7..0000000000 --- a/packages/parser/tests/events/cognitoVerifyAuthChallengeResponseEvent.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": "1", - "region": "us-east-1", - "userPoolId": "us-east-1_example", - "userName": "UserName", - "callerContext": { - "awsSdkVersion": "awsSdkVersion", - "clientId": "clientId" - }, - "triggerSource": "VerifyAuthChallengeResponse_Authentication", - "request": { - "userAttributes": { - "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", - "email_verified": "true", - "name": "First Last", - "email": "verify-auth@mail.com" - }, - "privateChallengeParameters": { - "answer": "challengeAnswer" - }, - "clientMetadata": { - "foo": "value" - }, - "challengeAnswer": "challengeAnswer", - "userNotFound": true - }, - "response": {} -} diff --git a/packages/parser/tests/events/connectContactFlowEventAll.json b/packages/parser/tests/events/connectContactFlowEventAll.json deleted file mode 100644 index 0685b85b8b..0000000000 --- a/packages/parser/tests/events/connectContactFlowEventAll.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "Name": "ContactFlowEvent", - "Details": { - "ContactData": { - "Attributes": { - "Language": "en-US" - }, - "Channel": "VOICE", - "ContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "CustomerEndpoint": { - "Address": "+11234567890", - "Type": "TELEPHONE_NUMBER" - }, - "InitialContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "InitiationMethod": "API", - "InstanceARN": "arn:aws:connect:eu-central-1:123456789012:instance/9308c2a1-9bc6-4cea-8290-6c0b4a6d38fa", - "MediaStreams": { - "Customer": { - "Audio": { - "StartFragmentNumber": "91343852333181432392682062622220590765191907586", - "StartTimestamp": "1565781909613", - "StreamARN": "arn:aws:kinesisvideo:eu-central-1:123456789012:stream/connect-contact-a3d73b84-ce0e-479a-a9dc-5637c9d30ac9/1565272947806" - } - } - }, - "PreviousContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "Queue": { - "ARN": "arn:aws:connect:eu-central-1:123456789012:instance/9308c2a1-9bc6-4cea-8290-6c0b4a6d38fa/queue/5cba7cbf-1ecb-4b6d-b8bd-fe91079b3fc8", - "Name": "QueueOne" - }, - "SystemEndpoint": { - "Address": "+11234567890", - "Type": "TELEPHONE_NUMBER" - } - }, - "Parameters": { - "ParameterOne": "One", - "ParameterTwo": "Two" - } - } -} diff --git a/packages/parser/tests/events/connectContactFlowEventMin.json b/packages/parser/tests/events/connectContactFlowEventMin.json deleted file mode 100644 index 5c69558ae8..0000000000 --- a/packages/parser/tests/events/connectContactFlowEventMin.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "Name": "ContactFlowEvent", - "Details": { - "ContactData": { - "Attributes": {}, - "Channel": "VOICE", - "ContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "CustomerEndpoint": null, - "InitialContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "InitiationMethod": "API", - "InstanceARN": "arn:aws:connect:eu-central-1:123456789012:instance/9308c2a1-9bc6-4cea-8290-6c0b4a6d38fa", - "MediaStreams": { - "Customer": { - "Audio": { - "StartFragmentNumber": null, - "StartTimestamp": null, - "StreamARN": null - } - } - }, - "PreviousContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe", - "Queue": null, - "SystemEndpoint": null - }, - "Parameters": {} - } -} diff --git a/packages/parser/tests/events/rabbitMQEvent.json b/packages/parser/tests/events/rabbitMQEvent.json deleted file mode 100644 index 5196b45327..0000000000 --- a/packages/parser/tests/events/rabbitMQEvent.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "eventSource": "aws:rmq", - "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8", - "rmqMessagesByQueue": { - "pizzaQueue::/": [ - { - "basicProperties": { - "contentType": "text/plain", - "contentEncoding": null, - "headers": { - "header1": { - "bytes": [118, 97, 108, 117, 101, 49] - }, - "header2": { - "bytes": [118, 97, 108, 117, 101, 50] - }, - "numberInHeader": 10 - }, - "deliveryMode": 1, - "priority": 34, - "correlationId": null, - "replyTo": null, - "expiration": "60000", - "messageId": null, - "timestamp": "Jan 1, 1970, 12:33:41 AM", - "type": null, - "userId": "AIDACKCEVSQ6C2EXAMPLE", - "appId": null, - "clusterId": null, - "bodySize": 80 - }, - "redelivered": false, - "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" - } - ] - } -} diff --git a/packages/parser/tests/events/secretsManagerEvent.json b/packages/parser/tests/events/secretsManagerEvent.json deleted file mode 100644 index d0cd2c1291..0000000000 --- a/packages/parser/tests/events/secretsManagerEvent.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "SecretId": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", - "ClientRequestToken": "550e8400-e29b-41d4-a716-446655440000", - "Step": "createSecret" -} diff --git a/packages/parser/tests/unit/envelopes/cloudwatch.test.ts b/packages/parser/tests/unit/envelopes/cloudwatch.test.ts index 40f13ac6b7..505e95d34a 100644 --- a/packages/parser/tests/unit/envelopes/cloudwatch.test.ts +++ b/packages/parser/tests/unit/envelopes/cloudwatch.test.ts @@ -1,131 +1,270 @@ -import { gzipSync } from 'node:zlib'; -import { generateMock } from '@anatine/zod-mock'; +import { gunzipSync, gzipSync } from 'node:zlib'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { ParseError } from '../../../src'; import { CloudWatchEnvelope } from '../../../src/envelopes/index.js'; -import { - CloudWatchLogEventSchema, - CloudWatchLogsDecodeSchema, -} from '../../../src/schemas/'; -import { TestSchema } from '../schema/utils.js'; - -describe('CloudWatch', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = { - awslogs: { - data: '', - }, - }; +import { DecompressError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; +import { getTestEvent } from '../schema/utils.js'; - const data = generateMock(TestSchema); - const eventMock = generateMock(CloudWatchLogEventSchema, { - stringMap: { - message: () => JSON.stringify(data), - }, - }); +const decompressRecordToJSON = ( + data: string +): { + logEvents: { + message: string; + id: string; + timestamp: number; + }[]; + messageType: string; + owner: string; + logGroup: string; + logStream: string; + subscriptionFilters: string[]; +} => { + const uncompressed = gunzipSync(Buffer.from(data, 'base64')).toString('utf8'); - const logMock = generateMock(CloudWatchLogsDecodeSchema); - logMock.logEvents = [eventMock]; + return JSON.parse(uncompressed); +}; - testEvent.awslogs.data = gzipSync( - Buffer.from(JSON.stringify(logMock), 'utf8') - ).toString('base64'); +const compressJSONToRecord = (data: unknown): string => { + const jsonString = JSON.stringify(data); + return gzipSync(Buffer.from(jsonString, 'utf8')).toString('base64'); +}; - expect(CloudWatchEnvelope.parse(testEvent, TestSchema)).toEqual([data]); - }); +describe('Envelope: CloudWatch', () => { + const baseEvent = getTestEvent<{ awslogs: { data: string } }>({ + eventsPath: 'cloudwatch', + filename: 'base', + }); + const data = decompressRecordToJSON(structuredClone(baseEvent).awslogs.data); + const mockLogMessages = [ + { + level: 'DEBUG', + message: 'Hello from other.ts', + sample_rate: 1, + }, + { + level: 'INFO', + message: 'processing event', + sample_rate: 1, + }, + ]; + const JSONOnlyEvent = { + awslogs: { + data: compressJSONToRecord({ + ...data, + logEvents: [ + { + ...data.logEvents[0], + message: JSON.stringify(mockLogMessages[0]), + }, + { + ...data.logEvents[1], + message: JSON.stringify(mockLogMessages[1]), + }, + ], + }), + }, + }; - it('should throw when schema does not match', () => { - const testEvent = { - awslogs: { - data: '', - }, - }; + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); - const eventMock = generateMock(CloudWatchLogEventSchema, { - stringMap: { - message: () => JSON.stringify({ foo: 'bar' }), - }, - }); + // Act & Assess + expect(() => + CloudWatchEnvelope.parse( + event, + z + .object({ + message: z.string(), + }) + .strict() + ) + ).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse CloudWatch log event at index 0' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['awslogs', 'data', 'logEvents', 0, 'message'], + message: 'Expected object, received string', + }, + ], + }), + }) + ); + }); - const logMock = generateMock(CloudWatchLogsDecodeSchema); - logMock.logEvents = [eventMock]; + it('parses a CloudWatch Logs event', () => { + // Prepare + const event = structuredClone(JSONOnlyEvent); - testEvent.awslogs.data = gzipSync( - Buffer.from(JSON.stringify(logMock), 'utf8') - ).toString('base64'); + // Act + const result = CloudWatchEnvelope.parse( + event, + JSONStringified( + z.object({ + level: z.string(), + message: z.string(), + sample_rate: z.number(), + }) + ) + ); - expect(() => CloudWatchEnvelope.parse(testEvent, TestSchema)).toThrow(); + // Assess + expect(result).toStrictEqual(mockLogMessages); }); }); - describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = { - awslogs: { - data: '', - }, - }; - - const data = generateMock(TestSchema); - const eventMock = generateMock(CloudWatchLogEventSchema, { - stringMap: { - message: () => JSON.stringify(data), - }, - }); - - const logMock = generateMock(CloudWatchLogsDecodeSchema); - logMock.logEvents = [eventMock]; + describe('Method: safeParse', () => { + it('parses a CloudWatch Logs event', () => { + // Prepare + const event = structuredClone(JSONOnlyEvent); - testEvent.awslogs.data = gzipSync( - Buffer.from(JSON.stringify(logMock), 'utf8') - ).toString('base64'); + // Act + const result = CloudWatchEnvelope.safeParse( + event, + JSONStringified( + z.object({ + level: z.string(), + message: z.string(), + sample_rate: z.number(), + }) + ) + ); - const actual = CloudWatchEnvelope.safeParse(testEvent, TestSchema); - expect(actual).toEqual({ + // Assess + expect(result).toStrictEqual({ success: true, - data: [data], + data: mockLogMessages, }); }); - it('should return success false when schema does not match', () => { - const testEvent = { + it('returns an error if the event is not a valid CloudWatch Logs event', () => { + // Prepare + const event = { awslogs: { - data: '', + data: 'invalid', }, }; - const eventMock = generateMock(CloudWatchLogEventSchema, { - stringMap: { - message: () => JSON.stringify({ foo: 'bar' }), - }, + // Act + const result = CloudWatchEnvelope.safeParse(event, z.object({})); + + // Assess + expect(result).toStrictEqual({ + success: false, + error: new ParseError('Failed to parse CloudWatch Log envelope', { + cause: new DecompressError( + 'Failed to decompress CloudWatch log data' + ), + }), + originalEvent: event, }); + }); - const logMock = generateMock(CloudWatchLogsDecodeSchema); - logMock.logEvents = [eventMock]; + it('returns an error if any of the messages fail to parse', () => { + // Prepare + const event = { + awslogs: { + data: compressJSONToRecord({ + ...data, + logEvents: [ + { + ...data.logEvents[0], + message: 'invalid', + }, + { + ...data.logEvents[1], + message: JSON.stringify(mockLogMessages[1]), + }, + ], + }), + }, + }; - testEvent.awslogs.data = gzipSync( - Buffer.from(JSON.stringify(logMock), 'utf8') - ).toString('base64'); + // Act + const result = CloudWatchEnvelope.safeParse( + event, + JSONStringified( + z.object({ + level: z.string(), + message: z.string(), + sample_rate: z.number(), + }) + ) + ); - const parseResult = CloudWatchEnvelope.safeParse(testEvent, TestSchema); - expect(parseResult).toEqual({ + // Assess + expect(result).toStrictEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError( + 'Failed to parse CloudWatch Log message at index 0', + { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['awslogs', 'data', 'logEvents', 0, 'message'], + }, + ]), + } + ), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); - it('should return success false when envelope does not match', () => { - expect(CloudWatchEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = CloudWatchEnvelope.safeParse( + event, + z.object({ + message: z.string(), + }) + ); + + // Assess + expect(result).toStrictEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError( + 'Failed to parse CloudWatch Log messages at indexes 0, 1, 2', + { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['awslogs', 'data', 'logEvents', 0, 'message'], + message: 'Expected object, received string', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['awslogs', 'data', 'logEvents', 1, 'message'], + message: 'Expected object, received string', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['awslogs', 'data', 'logEvents', 2, 'message'], + message: 'Expected object, received string', + }, + ]), + } + ), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/schema/cloudwatch.test.ts b/packages/parser/tests/unit/schema/cloudwatch.test.ts index 3fd6dc115f..b3d99d3a18 100644 --- a/packages/parser/tests/unit/schema/cloudwatch.test.ts +++ b/packages/parser/tests/unit/schema/cloudwatch.test.ts @@ -1,25 +1,67 @@ import { describe, expect, it } from 'vitest'; -import { CloudWatchLogsSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { CloudWatchLogsSchema } from '../../../src/schemas/cloudwatch.js'; +import type { CloudWatchLogsEvent } from '../../../src/types/index.js'; +import { getTestEvent } from './utils.js'; -describe('CloudWatchLogs ', () => { - it('should parse cloudwatch logs event', () => { - const cloudWatchLogEvent = TestEvents.cloudWatchLogEvent; - const parsed = CloudWatchLogsSchema.parse(cloudWatchLogEvent); - expect(parsed.awslogs.data).toBeDefined(); - expect(parsed.awslogs.data?.logEvents[0]).toEqual({ - id: 'eventId1', - timestamp: 1440442987000, - message: '[ERROR] First test message', - }); +describe('Schema: CloudWatchLogs', () => { + const baseEvent = getTestEvent({ + eventsPath: 'cloudwatch', + filename: 'base', }); - it('should throw error if cloudwatch logs event is invalid', () => { - expect(() => - CloudWatchLogsSchema.parse({ - awslogs: { - data: 'invalid', + + it('parses a CloudWatch Logs event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = CloudWatchLogsSchema.parse(event); + + // Assess + expect(result).toStrictEqual({ + awslogs: { + data: { + logEvents: [ + { + id: '38569604798453153764115268074363468419149517103543812096', + message: `2024-10-21T14:28:15.158Z eadc91c8-8273-4a2d-b170-b0a7883b619e INFO Hello from other.ts +`, + timestamp: 1729520895158, + }, + { + id: '38569604798453153764115268074363468419149517103543812097', + message: `START RequestId: eadc91c8-8273-4a2d-b170-b0a7883b619e Version: $LATEST +`, + timestamp: 1729520895158, + }, + { + id: '38569604798475454509313798697505004137422165465049792514', + message: `{"level":"INFO","message":"Hello from other.ts","sampling_rate":0,"service":"service_undefined","timestamp":"2024-10-21T14:28:15.158Z","xray_trace_id":"1-671664ff-69b0ec7624423e04544c023f"} +`, + timestamp: 1729520895159, + }, + ], + logGroup: '/aws/lambda/some-other-name', + logStream: + '2024/10/21/OtherFn[$LATEST]16c175a5f89246aaad5c878aebaeeac7', + messageType: 'DATA_MESSAGE', + owner: '536254204126', + subscriptionFilters: [ + 'CwtriggerStack-MySubscriptionC96E1FB5-c1AHhT24v8Jh', + ], }, - }) - ).toThrowError(); + }, + }); + }); + + it('throws if the event is not a CloudWatch Logs event', () => { + // Prepare + const event = { + awslogs: { + data: 'invalid', + }, + }; + + // Act & Assess + expect(() => CloudWatchLogsSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index 1a836462de..cf1da36e99 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -8,36 +8,12 @@ export const TestSchema = z.object({ }); const filenames = [ - 'activeMQEvent', 'albEvent', 'albEventPathTrailingSlash', 'albMultiValueHeadersEvent', - 'awsConfigRuleConfigurationChanged', - 'awsConfigRuleOversizedConfiguration', - 'awsConfigRuleScheduled', - 'bedrockAgentEvent', - 'bedrockAgentPostEvent', 'cloudFormationCustomResourceCreateEvent', 'cloudFormationCustomResourceDeleteEvent', 'cloudFormationCustomResourceUpdateEvent', - 'cloudWatchDashboardEvent', - 'cloudWatchLogEvent', - 'codePipelineEvent', - 'codePipelineEventData', - 'codePipelineEventEmptyUserParameters', - 'codePipelineEventWithEncryptionKey', - 'cognitoCreateAuthChallengeEvent', - 'cognitoCustomMessageEvent', - 'cognitoDefineAuthChallengeEvent', - 'cognitoPostAuthenticationEvent', - 'cognitoPostConfirmationEvent', - 'cognitoPreAuthenticationEvent', - 'cognitoPreSignUpEvent', - 'cognitoPreTokenGenerationEvent', - 'cognitoUserMigrationEvent', - 'cognitoVerifyAuthChallengeResponseEvent', - 'connectContactFlowEventAll', - 'connectContactFlowEventMin', 'kinesisFirehoseKinesisEvent', 'kinesisFirehosePutEvent', 'kinesisFirehoseSQSEvent', @@ -47,7 +23,6 @@ const filenames = [ 'lambdaFunctionUrlEvent', 'lambdaFunctionUrlEventPathTrailingSlash', 'lambdaFunctionUrlIAMEvent', - 'rabbitMQEvent', 's3Event', 's3EventBridgeNotificationObjectCreatedEvent', 's3EventBridgeNotificationObjectDeletedEvent', @@ -60,7 +35,6 @@ const filenames = [ 's3ObjectEventIAMUser', 's3ObjectEventTempCredentials', 's3SqsEvent', - 'secretsManagerEvent', 'sesEvent', 'snsSqsEvent', 'snsSqsFifoEvent', From a4846afd09c29032f79b79cfa1410675440d7dae Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 23 Jan 2025 09:54:41 +0100 Subject: [PATCH 18/31] fix(parser): API Gateway Envelopes handle non-JSON (#3511) --- packages/parser/src/envelopes/apigw.ts | 38 +++-- packages/parser/src/envelopes/apigwv2.ts | 42 +++-- packages/parser/src/envelopes/envelope.ts | 7 +- .../parser/tests/unit/envelopes/apigw.test.ts | 155 ++++++++++-------- .../tests/unit/envelopes/apigwv2.test.ts | 152 +++++++++-------- .../parser/tests/unit/schema/apigw.test.ts | 24 +-- .../parser/tests/unit/schema/apigwv2.test.ts | 18 +- 7 files changed, 234 insertions(+), 202 deletions(-) diff --git a/packages/parser/src/envelopes/apigw.ts b/packages/parser/src/envelopes/apigw.ts index 86f716b234..2ff9d3b8ab 100644 --- a/packages/parser/src/envelopes/apigw.ts +++ b/packages/parser/src/envelopes/apigw.ts @@ -2,7 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { APIGatewayProxyEventSchema } from '../schemas/apigw.js'; import type { ParsedResult } from '../types/parser.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * API Gateway envelope to extract data within body key @@ -14,36 +14,38 @@ export const ApiGatewayEnvelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - return Envelope.parse(APIGatewayProxyEventSchema.parse(data).body, schema); + try { + return APIGatewayProxyEventSchema.extend({ + body: schema, + }).parse(data).body; + } catch (error) { + throw new ParseError('Failed to parse API Gateway body', { + cause: error as Error, + }); + } }, safeParse( data: unknown, schema: T ): ParsedResult> { - const parsedEnvelope = APIGatewayProxyEventSchema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse ApiGatewayEnvelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; - } - - const parsedBody = Envelope.safeParse(parsedEnvelope.data.body, schema); + const result = APIGatewayProxyEventSchema.extend({ + body: schema, + }).safeParse(data); - if (!parsedBody.success) { + if (!result.success) { return { success: false, - error: new ParseError('Failed to parse ApiGatewayEnvelope body', { - cause: parsedBody.error, + error: new ParseError('Failed to parse API Gateway body', { + cause: result.error, }), originalEvent: data, }; } - return parsedBody; + return { + success: true, + data: result.data.body, + }; }, }; diff --git a/packages/parser/src/envelopes/apigwv2.ts b/packages/parser/src/envelopes/apigwv2.ts index 45c80f0727..486fb74593 100644 --- a/packages/parser/src/envelopes/apigwv2.ts +++ b/packages/parser/src/envelopes/apigwv2.ts @@ -2,7 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { APIGatewayProxyEventV2Schema } from '../schemas/apigwv2.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * API Gateway V2 envelope to extract data within body key @@ -14,40 +14,38 @@ export const ApiGatewayV2Envelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - return Envelope.parse( - APIGatewayProxyEventV2Schema.parse(data).body, - schema - ); + try { + return APIGatewayProxyEventV2Schema.extend({ + body: schema, + }).parse(data).body; + } catch (error) { + throw new ParseError('Failed to parse API Gateway HTTP body', { + cause: error as Error, + }); + } }, safeParse( data: unknown, schema: T ): ParsedResult> { - const parsedEnvelope = APIGatewayProxyEventV2Schema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse API Gateway V2 envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; - } - - const parsedBody = Envelope.safeParse(parsedEnvelope.data.body, schema); + const result = APIGatewayProxyEventV2Schema.extend({ + body: schema, + }).safeParse(data); - if (!parsedBody.success) { + if (!result.success) { return { success: false, - error: new ParseError('Failed to parse API Gateway V2 envelope body', { - cause: parsedBody.error, + error: new ParseError('Failed to parse API Gateway HTTP body', { + cause: result.error, }), originalEvent: data, }; } - // use type assertion to avoid type check, we know it's success here - return parsedBody; + return { + success: true, + data: result.data.body, + }; }, }; diff --git a/packages/parser/src/envelopes/envelope.ts b/packages/parser/src/envelopes/envelope.ts index 85cdef225f..312dc022ec 100644 --- a/packages/parser/src/envelopes/envelope.ts +++ b/packages/parser/src/envelopes/envelope.ts @@ -2,6 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import type { ParsedResult } from '../types/parser.js'; +/* v8 ignore start */ const Envelope = { /** * Abstract function to parse the content of the envelope using provided schema. @@ -35,7 +36,10 @@ const Envelope = { * @param input * @param schema */ - safeParse(input: unknown, schema: T): ParsedResult> { + safeParse( + input: unknown, + schema: T + ): ParsedResult> { try { if (typeof input !== 'object' && typeof input !== 'string') { return { @@ -75,3 +79,4 @@ const Envelope = { const envelopeDiscriminator = Symbol.for('returnType'); export { Envelope, envelopeDiscriminator }; +/* v8 ignore stop */ diff --git a/packages/parser/tests/unit/envelopes/apigw.test.ts b/packages/parser/tests/unit/envelopes/apigw.test.ts index f50ffb9174..b298e1eec4 100644 --- a/packages/parser/tests/unit/envelopes/apigw.test.ts +++ b/packages/parser/tests/unit/envelopes/apigw.test.ts @@ -1,123 +1,134 @@ import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { ApiGatewayEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; import type { APIGatewayProxyEvent } from '../../../src/types/schema.js'; -import { TestSchema, getTestEvent } from '../schema/utils.js'; - -describe('API Gateway REST Envelope', () => { - const eventsPath = 'apigw-rest'; - const eventPrototype = getTestEvent({ - eventsPath, +import { getTestEvent, omit } from '../schema/utils.js'; + +describe('Envelope: API Gateway REST', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'apigw-rest', filename: 'no-auth', }); describe('Method: parse', () => { - it('should throw if the payload does not match the schema', () => { - // Prepare - const event = { ...eventPrototype }; - event.body = JSON.stringify({ name: 'foo' }); - - // Act & Assess - expect(() => ApiGatewayEnvelope.parse(event, TestSchema)).toThrow( - ParseError - ); - }); - - it('should throw if the body is null', () => { + it('throws if the payload does not match the schema', () => { // Prepare - const event = { ...eventPrototype }; - event.body = null; + const event = structuredClone(baseEvent); // Act & Assess - expect(() => ApiGatewayEnvelope.parse(event, TestSchema)).toThrow( - ParseError + expect(() => ApiGatewayEnvelope.parse(event, schema)).toThrow( + expect.objectContaining({ + message: expect.stringContaining('Failed to parse API Gateway body'), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'null', + path: ['body'], + message: 'Expected object, received null', + }, + ], + }), + }) ); }); - it('should parse and return the inner schema in an envelope', () => { + it('parses an API Gateway REST event with plain text', () => { // Prepare - const event = { ...eventPrototype }; - const payload = { name: 'foo', age: 42 }; - event.body = JSON.stringify(payload); + const event = structuredClone(baseEvent); + event.body = 'hello world'; // Act - const parsedEvent = ApiGatewayEnvelope.parse(event, TestSchema); + const result = ApiGatewayEnvelope.parse(event, z.string()); // Assess - expect(parsedEvent).toEqual(payload); + expect(result).toEqual('hello world'); }); - }); - describe('Method: safeParse', () => { - it('should not throw if the payload does not match the schema', () => { + it('parses an API Gateway REST event with JSON-stringified body', () => { // Prepare - const event = { ...eventPrototype }; - event.body = JSON.stringify({ name: 'foo' }); + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); // Act - const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + const result = ApiGatewayEnvelope.parse(event, JSONStringified(schema)); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } + expect(result).toStrictEqual({ message: 'hello world' }); }); - it('should not throw if the body is null', () => { + it('parses an API Gateway REST event with binary body', () => { // Prepare - const event = { ...eventPrototype }; - event.body = null; + const event = structuredClone(baseEvent); + event.body = 'aGVsbG8gd29ybGQ='; // base64 encoded 'hello world' + // @ts-expect-error - we know the headers exist + event.headers['content-type'] = 'application/octet-stream'; + event.isBase64Encoded = true; // Act - const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + const result = ApiGatewayEnvelope.parse(event, z.string()); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } + expect(result).toEqual('aGVsbG8gd29ybGQ='); }); + }); - it('should not throw if the event is invalid', () => { + describe('Method: safeParse', () => { + it('parses an API Gateway REST event', () => { // Prepare - const event = getTestEvent({ eventsPath, filename: 'invalid' }); + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); // Act - const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + const result = ApiGatewayEnvelope.safeParse( + event, + JSONStringified(schema) + ); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, + expect(result).toEqual({ + success: true, + data: { message: 'hello world' }, }); }); - it('should parse and return the inner schema in an envelope', () => { + it('returns an error if the event is not a valid API Gateway REST event', () => { // Prepare - const event = { ...eventPrototype }; - const payload = { name: 'foo', age: 42 }; - event.body = JSON.stringify(payload); + const event = omit(['path'], structuredClone(baseEvent)); // Act - const parsedEvent = ApiGatewayEnvelope.safeParse(event, TestSchema); + const result = ApiGatewayEnvelope.safeParse(event, schema); // Assess - expect(parsedEvent).toEqual({ - success: true, - data: payload, + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse API Gateway body', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['path'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'null', + path: ['body'], + message: 'Expected object, received null', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/envelopes/apigwv2.test.ts b/packages/parser/tests/unit/envelopes/apigwv2.test.ts index 8c96c7cdc3..edf1b9de3b 100644 --- a/packages/parser/tests/unit/envelopes/apigwv2.test.ts +++ b/packages/parser/tests/unit/envelopes/apigwv2.test.ts @@ -1,119 +1,135 @@ import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { ApiGatewayV2Envelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; import type { APIGatewayProxyEventV2 } from '../../../src/types/schema.js'; -import { TestSchema, getTestEvent } from '../schema/utils.js'; - -describe('API Gateway HTTP Envelope', () => { - const eventsPath = 'apigw-http'; - const eventPrototype = getTestEvent({ - eventsPath, +import { getTestEvent, omit } from '../schema/utils.js'; + +describe('Envelope: API Gateway HTTP', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'apigw-http', filename: 'no-auth', }); describe('Method: parse', () => { - it('should throw if the payload does not match the schema', () => { - // Prepare - const event = { ...eventPrototype }; - event.body = JSON.stringify({ name: 'foo' }); - - // Act & Assess - expect(() => ApiGatewayV2Envelope.parse(event, TestSchema)).toThrow( - ParseError - ); - }); - - it('should throw if the body is undefined', () => { + it('throws if the payload does not match the schema', () => { // Prepare - const event = { ...eventPrototype }; - event.body = undefined; + const event = structuredClone(baseEvent); // Act & Assess - expect(() => ApiGatewayV2Envelope.parse(event, TestSchema)).toThrow( - ParseError + expect(() => ApiGatewayV2Envelope.parse(event, schema)).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse API Gateway HTTP body' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['body'], + message: 'Required', + }, + ], + }), + }) ); }); - it('should parse and return the inner schema in an envelope', () => { + it('parses an API Gateway HTTP event with plain text', () => { // Prepare - const event = { ...eventPrototype }; - const payload = { name: 'foo', age: 42 }; - event.body = JSON.stringify(payload); + const event = structuredClone(baseEvent); + event.body = 'hello world'; // Act - const parsedEvent = ApiGatewayV2Envelope.parse(event, TestSchema); + const result = ApiGatewayV2Envelope.parse(event, z.string()); // Assess - expect(parsedEvent).toEqual(payload); + expect(result).toEqual('hello world'); }); - }); - describe('Method: safeParse', () => { - it('should not throw if the payload does not match the schema', () => { + it('parses an API Gateway HTTP event with JSON-stringified body', () => { // Prepare - const event = { ...eventPrototype }; - event.body = JSON.stringify({ name: 'foo' }); + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); // Act - const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); + const result = ApiGatewayV2Envelope.parse(event, JSONStringified(schema)); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } + expect(result).toStrictEqual({ message: 'hello world' }); }); - it('should not throw if the body is undefined', () => { + it('parses an API Gateway HTTP event with binary body', () => { // Prepare - const event = { ...eventPrototype }; - event.body = undefined; + const event = structuredClone(baseEvent); + event.body = 'aGVsbG8gd29ybGQ='; // base64 encoded 'hello world' + event.headers['content-type'] = 'application/octet-stream'; + event.isBase64Encoded = true; // Act - const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); + const result = ApiGatewayV2Envelope.parse(event, z.string()); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, - }); + expect(result).toEqual('aGVsbG8gd29ybGQ='); }); + }); - it('should not throw if the event is invalid', () => { + describe('Method: safeParse', () => { + it('parses an API Gateway HTTP event', () => { // Prepare - const event = getTestEvent({ eventsPath, filename: 'invalid' }); + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); // Act - const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); + const result = ApiGatewayV2Envelope.safeParse( + event, + JSONStringified(schema) + ); // Assess - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, + expect(result).toEqual({ + success: true, + data: { message: 'hello world' }, }); }); - it('should parse and return the inner schema in an envelope', () => { + it('returns an error if the event is not a valid API Gateway HTTP event', () => { // Prepare - const event = { ...eventPrototype }; - const payload = { name: 'foo', age: 42 }; - event.body = JSON.stringify(payload); + const event = omit(['rawPath'], structuredClone(baseEvent)); // Act - const parsedEvent = ApiGatewayV2Envelope.safeParse(event, TestSchema); + const result = ApiGatewayV2Envelope.safeParse(event, schema); // Assess - expect(parsedEvent).toEqual({ - success: true, - data: payload, + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse API Gateway HTTP body', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['rawPath'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['body'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/schema/apigw.test.ts b/packages/parser/tests/unit/schema/apigw.test.ts index fa205b532b..b9bedbcaec 100644 --- a/packages/parser/tests/unit/schema/apigw.test.ts +++ b/packages/parser/tests/unit/schema/apigw.test.ts @@ -6,11 +6,11 @@ import { } from '../../../src/schemas/index.js'; import { getTestEvent } from './utils.js'; -describe('API Gateway REST Schemas', () => { +describe('Schema: API Gateway REST', () => { const eventsPath = 'apigw-rest'; describe('APIGatewayProxyEventSchema', () => { - it('should throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'invalid' }); @@ -18,7 +18,7 @@ describe('API Gateway REST Schemas', () => { expect(() => APIGatewayProxyEventSchema.parse(event)).toThrow(); }); - it('should parse an event with no authorizer', () => { + it('parses an event with no authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'no-auth' }); @@ -29,7 +29,7 @@ describe('API Gateway REST Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with a lambda authorizer', () => { + it('parses an event with a lambda authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -43,7 +43,7 @@ describe('API Gateway REST Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with a JWT authorizer', () => { + it('parses an event with a JWT authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -57,7 +57,7 @@ describe('API Gateway REST Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with an IAM authorizer', () => { + it('parses an event with an IAM authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -71,7 +71,7 @@ describe('API Gateway REST Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event sent by the AWS console test UI', () => { + it('parses an event sent by the AWS console test UI', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -85,7 +85,7 @@ describe('API Gateway REST Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event sent as a part of a websocket API', () => { + it('parses an event sent as a part of a websocket API', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -101,7 +101,7 @@ describe('API Gateway REST Schemas', () => { }); describe('APIGatewayRequestAuthorizerEventSchema', () => { - it('should throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'invalid' }); @@ -111,7 +111,7 @@ describe('API Gateway REST Schemas', () => { ).toThrow(); }); - it('should parse the authorizer event', () => { + it('parses the authorizer event', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -127,7 +127,7 @@ describe('API Gateway REST Schemas', () => { }); describe('APIGatewayTokenAuthorizerEventSchema', () => { - it('should throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'invalid' }); @@ -135,7 +135,7 @@ describe('API Gateway REST Schemas', () => { expect(() => APIGatewayTokenAuthorizerEventSchema.parse(event)).toThrow(); }); - it('should parse the event', () => { + it('parses the event', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'authorizer-token' }); diff --git a/packages/parser/tests/unit/schema/apigwv2.test.ts b/packages/parser/tests/unit/schema/apigwv2.test.ts index 916b20e2f8..b0dfe1e551 100644 --- a/packages/parser/tests/unit/schema/apigwv2.test.ts +++ b/packages/parser/tests/unit/schema/apigwv2.test.ts @@ -8,11 +8,11 @@ import { import type { APIGatewayProxyEventV2 } from '../../../src/types/schema.js'; import { getTestEvent } from './utils.js'; -describe('API Gateway HTTP (v2) Schemas', () => { +describe('Schema: API Gateway HTTP (v2)', () => { const eventsPath = 'apigw-http'; describe('APIGatewayProxyEventV2Schema', () => { - it('should throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'invalid' }); @@ -20,7 +20,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { expect(() => APIGatewayProxyEventV2Schema.parse(event)).toThrow(); }); - it('should parse an event with no authorizer', () => { + it('parses an event with no authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'no-auth' }); @@ -31,7 +31,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with a lambda authorizer', () => { + it('parses an event with a lambda authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -45,7 +45,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with a JWT authorizer', () => { + it('parses an event with a JWT authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -59,7 +59,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse an event with an IAM authorizer', () => { + it('parses an event with an IAM authorizer', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -75,7 +75,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { }); describe('APIGatewayRequestAuthorizerEventV2Schema', () => { - it('should throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare const event = getTestEvent({ eventsPath, filename: 'invalid' }); @@ -85,7 +85,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { ).toThrow(); }); - it('should parse the authorizer event', () => { + it('parses the authorizer event', () => { // Prepare const event = getTestEvent({ eventsPath, @@ -99,7 +99,7 @@ describe('API Gateway HTTP (v2) Schemas', () => { expect(parsedEvent).toEqual(event); }); - it('should parse the authorizer event with null identitySource', () => { + it('parses the authorizer event with null identitySource', () => { // Prepare const event = getTestEvent({ eventsPath, From 09aa287c9d44e50b843c0702d86a682c939b9525 Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Thu, 23 Jan 2025 14:42:09 +0100 Subject: [PATCH 19/31] fix(parser): LambdaFunctionUrl envelope assumes JSON string in body (#3514) --- packages/parser/src/envelopes/lambda.ts | 43 ++--- .../base.json} | 6 +- .../get-request.json} | 0 .../iam-auth.json} | 0 .../parser/tests/events/lambda/invalid.json | 48 +++++ .../tests/unit/envelopes/lambda.test.ts | 177 +++++++++++------- .../parser/tests/unit/schema/lambda.test.ts | 38 +++- 7 files changed, 210 insertions(+), 102 deletions(-) rename packages/parser/tests/events/{lambdaFunctionUrlEventPathTrailingSlash.json => lambda/base.json} (93%) rename packages/parser/tests/events/{lambdaFunctionUrlEvent.json => lambda/get-request.json} (100%) rename packages/parser/tests/events/{lambdaFunctionUrlIAMEvent.json => lambda/iam-auth.json} (100%) create mode 100644 packages/parser/tests/events/lambda/invalid.json diff --git a/packages/parser/src/envelopes/lambda.ts b/packages/parser/src/envelopes/lambda.ts index 91d609646f..d68af29a88 100644 --- a/packages/parser/src/envelopes/lambda.ts +++ b/packages/parser/src/envelopes/lambda.ts @@ -2,7 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { LambdaFunctionUrlSchema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Lambda function URL envelope to extract data within body key @@ -14,37 +14,38 @@ export const LambdaFunctionUrlEnvelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - const parsedEnvelope = LambdaFunctionUrlSchema.parse(data); - - if (!parsedEnvelope.body) { - throw new Error('Body field of Lambda function URL event is undefined'); + try { + return LambdaFunctionUrlSchema.extend({ + body: schema, + }).parse(data).body; + } catch (error) { + throw new ParseError('Failed to parse Lambda function URL body', { + cause: error as Error, + }); } - - return Envelope.parse(parsedEnvelope.body, schema); }, - safeParse(data: unknown, schema: T): ParsedResult> { - const parsedEnvelope = LambdaFunctionUrlSchema.safeParse(data); - - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse Lambda function URL envelope'), - originalEvent: data, - }; - } + safeParse( + data: unknown, + schema: T + ): ParsedResult> { + const results = LambdaFunctionUrlSchema.extend({ + body: schema, + }).safeParse(data); - const parsedBody = Envelope.safeParse(parsedEnvelope.data.body, schema); - if (!parsedBody.success) { + if (!results.success) { return { success: false, error: new ParseError('Failed to parse Lambda function URL body', { - cause: parsedBody.error, + cause: results.error, }), originalEvent: data, }; } - return parsedBody; + return { + success: true, + data: results.data.body, + }; }, }; diff --git a/packages/parser/tests/events/lambdaFunctionUrlEventPathTrailingSlash.json b/packages/parser/tests/events/lambda/base.json similarity index 93% rename from packages/parser/tests/events/lambdaFunctionUrlEventPathTrailingSlash.json rename to packages/parser/tests/events/lambda/base.json index 54f6560655..33a516428f 100644 --- a/packages/parser/tests/events/lambdaFunctionUrlEventPathTrailingSlash.json +++ b/packages/parser/tests/events/lambda/base.json @@ -1,7 +1,7 @@ { "version": "2.0", "routeKey": "$default", - "rawPath": "/my/path/", + "rawPath": "/", "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", "cookies": ["cookie1", "cookie2"], "headers": { @@ -31,7 +31,7 @@ "domainPrefix": "", "http": { "method": "POST", - "path": "/my/path", + "path": "/", "protocol": "HTTP/1.1", "sourceIp": "123.123.123.123", "userAgent": "agent" @@ -42,7 +42,7 @@ "time": "12/Mar/2020:19:03:58 +0000", "timeEpoch": 1583348638390 }, - "body": "Hello from client!", + "body": null, "pathParameters": null, "isBase64Encoded": false, "stageVariables": null diff --git a/packages/parser/tests/events/lambdaFunctionUrlEvent.json b/packages/parser/tests/events/lambda/get-request.json similarity index 100% rename from packages/parser/tests/events/lambdaFunctionUrlEvent.json rename to packages/parser/tests/events/lambda/get-request.json diff --git a/packages/parser/tests/events/lambdaFunctionUrlIAMEvent.json b/packages/parser/tests/events/lambda/iam-auth.json similarity index 100% rename from packages/parser/tests/events/lambdaFunctionUrlIAMEvent.json rename to packages/parser/tests/events/lambda/iam-auth.json diff --git a/packages/parser/tests/events/lambda/invalid.json b/packages/parser/tests/events/lambda/invalid.json new file mode 100644 index 0000000000..2832ef9f1a --- /dev/null +++ b/packages/parser/tests/events/lambda/invalid.json @@ -0,0 +1,48 @@ +{ + "version": "2.0", + "routeKey": "$default", + "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", + "cookies": ["cookie1", "cookie2"], + "headers": { + "header1": "value1", + "header2": "value1,value2" + }, + "queryStringParameters": { + "parameter1": "value1,value2", + "parameter2": "value" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "", + "authentication": null, + "authorizer": { + "iam": { + "accessKey": "AKIA...", + "accountId": "111122223333", + "callerId": "AIDA...", + "cognitoIdentity": null, + "principalOrgId": null, + "userArn": "arn:aws:iam::111122223333:user/example-user", + "userId": "AIDA..." + } + }, + "domainName": ".lambda-url.us-west-2.on.aws", + "domainPrefix": "", + "http": { + "method": "POST", + "path": "/", + "protocol": "HTTP/1.1", + "sourceIp": "123.123.123.123", + "userAgent": "agent" + }, + "requestId": "id", + "routeKey": "$default", + "stage": "$default", + "time": "12/Mar/2020:19:03:58 +0000", + "timeEpoch": 1583348638390 + }, + "body": null, + "pathParameters": null, + "isBase64Encoded": false, + "stageVariables": null +} diff --git a/packages/parser/tests/unit/envelopes/lambda.test.ts b/packages/parser/tests/unit/envelopes/lambda.test.ts index b76228bb6e..eee9ff28e8 100644 --- a/packages/parser/tests/unit/envelopes/lambda.test.ts +++ b/packages/parser/tests/unit/envelopes/lambda.test.ts @@ -1,98 +1,139 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { - APIGatewayProxyEventV2, - LambdaFunctionURLEvent, -} from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { ParseError } from '../../../src'; import { LambdaFunctionUrlEnvelope } from '../../../src/envelopes/index.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; +import { JSONStringified } from '../../../src/helpers'; +import type { LambdaFunctionUrlEvent } from '../../../src/types'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('Lambda Functions Url ', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = - TestEvents.lambdaFunctionUrlEvent as APIGatewayProxyEventV2; - const data = generateMock(TestSchema); +describe('Envelope: Lambda function URL', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); - testEvent.body = JSON.stringify(data); + const baseEvent = getTestEvent({ + eventsPath: 'lambda', + filename: 'base', + }); + + describe('Method: parse', () => { + it('throws if the payload does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); - expect(LambdaFunctionUrlEnvelope.parse(testEvent, TestSchema)).toEqual( - data + // Act & Assess + expect(() => LambdaFunctionUrlEnvelope.parse(event, schema)).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse Lambda function URL body' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'null', + path: ['body'], + message: 'Expected object, received null', + }, + ], + }), + }) ); }); - it('should throw when no body provided', () => { - const testEvent = - TestEvents.lambdaFunctionUrlEvent as LambdaFunctionURLEvent; - testEvent.body = undefined; + it('parses a Lambda function URL event with plain text', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = 'hello world'; - expect(() => - LambdaFunctionUrlEnvelope.parse(testEvent, TestSchema) - ).toThrow(); + // Act + const result = LambdaFunctionUrlEnvelope.parse(event, z.string()); + + // Assess + expect(result).toEqual('hello world'); }); - it('should throw when envelope is not valid', () => { - expect(() => - LambdaFunctionUrlEnvelope.parse({ foo: 'bar' }, TestSchema) - ).toThrow(); + it('parses a Lambda function URL event with JSON-stringified body', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); + + // Act + const result = LambdaFunctionUrlEnvelope.parse( + event, + JSONStringified(schema) + ); + + // Assess + expect(result).toEqual({ message: 'hello world' }); }); - it('should throw when body does not match schema', () => { - const testEvent = - TestEvents.lambdaFunctionUrlEvent as APIGatewayProxyEventV2; - testEvent.body = JSON.stringify({ foo: 'bar' }); + it('parses a Lambda function URL event with binary body', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = Buffer.from('hello world').toString('base64'); + event.headers['content-type'] = 'application/octet-stream'; + event.isBase64Encoded = true; + + // Act + const result = LambdaFunctionUrlEnvelope.parse(event, z.string()); - expect(() => - LambdaFunctionUrlEnvelope.parse(testEvent, TestSchema) - ).toThrow(); + // Assess + expect(result).toEqual('aGVsbG8gd29ybGQ='); }); }); - describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = - TestEvents.lambdaFunctionUrlEvent as APIGatewayProxyEventV2; - const data = generateMock(TestSchema); + describe('Method: safeParse', () => { + it('parses Lambda function URL event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = JSON.stringify({ message: 'hello world' }); - testEvent.body = JSON.stringify(data); + // Act + const result = LambdaFunctionUrlEnvelope.safeParse( + event, + JSONStringified(schema) + ); - expect( - LambdaFunctionUrlEnvelope.safeParse(testEvent, TestSchema) - ).toEqual({ + // Assess + expect(result).toEqual({ success: true, - data, + data: { message: 'hello world' }, }); }); - it('should return original event when envelope is not valid', () => { - expect( - LambdaFunctionUrlEnvelope.safeParse({ foo: 'bar' }, TestSchema) - ).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, - }); - }); + it('returns an error when the event is not valid', () => { + // Prepare + const event = omit(['rawPath'], structuredClone(baseEvent)); - it('should return original event when body does not match schema', () => { - const testEvent = - TestEvents.lambdaFunctionUrlEvent as APIGatewayProxyEventV2; - testEvent.body = JSON.stringify({ foo: 'bar' }); + // Act + const result = LambdaFunctionUrlEnvelope.safeParse(event, schema); - const parseResult = LambdaFunctionUrlEnvelope.safeParse( - testEvent, - TestSchema - ); - expect(parseResult).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError('Failed to parse Lambda function URL body', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['rawPath'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'null', + path: ['body'], + message: 'Expected object, received null', + }, + ]), + }), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); }); }); diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index c5fd260112..42adf84ff8 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -1,19 +1,37 @@ import { describe, expect, it } from 'vitest'; import { LambdaFunctionUrlSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { getTestEvent } from './utils.js'; -describe('Lambda ', () => { - it('should parse lambda event', () => { - const lambdaFunctionUrlEvent = TestEvents.lambdaFunctionUrlEvent; +describe('Schema: LambdaFunctionUrl', () => { + const eventsPath = 'lambda'; - expect(LambdaFunctionUrlSchema.parse(lambdaFunctionUrlEvent)).toEqual( - lambdaFunctionUrlEvent - ); + it('throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act & Assess + expect(() => LambdaFunctionUrlSchema.parse(event)).toThrow(); + }); + + it('parses a valid event', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'get-request' }); + + // Act + const parsedEvent = LambdaFunctionUrlSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); }); - it('should parse url IAM event', () => { - const urlIAMEvent = TestEvents.lambdaFunctionUrlIAMEvent; + it('parses iam event', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'iam-auth' }); + + // Act + const parsedEvent = LambdaFunctionUrlSchema.parse(event); - expect(LambdaFunctionUrlSchema.parse(urlIAMEvent)).toEqual(urlIAMEvent); + // + expect(parsedEvent).toEqual(event); }); }); From 89f0006e9b50448372a5ce70592ea1af5a75ec35 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 23 Jan 2025 15:05:29 +0100 Subject: [PATCH 20/31] fix(parser): allow SQS envelopes to handle non-JSON strings (#3513) --- packages/parser/src/envelopes/index.ts | 3 +- packages/parser/src/envelopes/snssqs.ts | 185 +++++++++ packages/parser/src/envelopes/sqs.ts | 193 ++++----- packages/parser/src/schemas/sqs.ts | 2 +- .../parser/tests/events/snsSqsFifoEvent.json | 23 -- .../events/{sqsEvent.json => sqs/base.json} | 0 .../{snsSqsEvent.json => sqs/sns-body.json} | 2 +- .../tests/unit/envelopes/snssqs.test.ts | 350 ++++++++++++++++ .../parser/tests/unit/envelopes/sqs.test.ts | 238 +++++------ packages/parser/tests/unit/helpers.test.ts | 4 +- .../parser/tests/unit/parser.middy.test.ts | 381 ++++++++---------- packages/parser/tests/unit/schema/sqs.test.ts | 39 +- packages/parser/tests/unit/schema/utils.ts | 3 - 13 files changed, 934 insertions(+), 489 deletions(-) create mode 100644 packages/parser/src/envelopes/snssqs.ts delete mode 100644 packages/parser/tests/events/snsSqsFifoEvent.json rename packages/parser/tests/events/{sqsEvent.json => sqs/base.json} (100%) rename packages/parser/tests/events/{snsSqsEvent.json => sqs/sns-body.json} (59%) create mode 100644 packages/parser/tests/unit/envelopes/snssqs.test.ts diff --git a/packages/parser/src/envelopes/index.ts b/packages/parser/src/envelopes/index.ts index 6ab0522ecd..40932efac5 100644 --- a/packages/parser/src/envelopes/index.ts +++ b/packages/parser/src/envelopes/index.ts @@ -8,6 +8,7 @@ export { KinesisEnvelope } from './kinesis.js'; export { KinesisFirehoseEnvelope } from './kinesis-firehose.js'; export { LambdaFunctionUrlEnvelope } from './lambda.js'; export { SnsEnvelope } from './sns.js'; -export { SqsEnvelope, SnsSqsEnvelope } from './sqs.js'; +export { SqsEnvelope } from './sqs.js'; +export { SnsSqsEnvelope } from './snssqs.js'; export { VpcLatticeEnvelope } from './vpc-lattice.js'; export { VpcLatticeV2Envelope } from './vpc-latticev2.js'; diff --git a/packages/parser/src/envelopes/snssqs.ts b/packages/parser/src/envelopes/snssqs.ts new file mode 100644 index 0000000000..a75a709f31 --- /dev/null +++ b/packages/parser/src/envelopes/snssqs.ts @@ -0,0 +1,185 @@ +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; +import { ParseError } from '../errors.js'; +import { SnsSqsNotificationSchema } from '../schemas/sns.js'; +import { SqsSchema } from '../schemas/sqs.js'; +import type { ParsedResult, SnsSqsNotification } from '../types/index.js'; +import { envelopeDiscriminator } from './envelope.js'; + +const createError = (index: number, issues: ZodIssue[]) => ({ + issues: issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'body', ...issue.path], + })), +}); + +type ParseStepSuccess = { + success: true; + data: T; +}; + +type ParseStepError = { + success: false; + error: { issues: ZodIssue[] }; +}; + +type ParseStepResult = ParseStepSuccess | ParseStepError; + +const parseStep = ( + parser: (data: unknown) => z.SafeParseReturnType, + data: unknown, + index: number +): ParseStepResult => { + const result = parser(data); + return result.success + ? { success: true, data: result.data } + : { + success: false, + error: createError(index, result.error.issues), + }; +}; + +/** + * SNS plus SQS Envelope to extract array of Records + * + * Published messages from SNS to SQS has a slightly different payload structure + * than regular SNS messages, and when sent to SQS, they are stringified into the + * `body` field of each SQS record. + * + * To parse the `Message` field of the SNS notification, we need to: + * 1. Parse SQS schema with incoming data + * 2. `JSON.parse()` the SNS payload and parse against SNS Notification schema + * 3. Finally, parse the payload against the provided schema + */ +export const SnsSqsEnvelope = { + /** + * This is a discriminator to differentiate whether an envelope returns an array or an object + * @hidden + */ + [envelopeDiscriminator]: 'array' as const, + parse(data: unknown, schema: T): z.infer[] { + let parsedEnvelope: z.infer; + try { + parsedEnvelope = SqsSchema.parse(data); + } catch (error) { + throw new ParseError('Failed to parse SQS Envelope', { + cause: error as Error, + }); + } + + return parsedEnvelope.Records.map((record, recordIndex) => { + try { + return schema.parse( + SnsSqsNotificationSchema.parse(JSON.parse(record.body)).Message + ); + } catch (error) { + throw new ParseError( + `Failed to parse SQS Record at index ${recordIndex}`, + { + cause: new ZodError( + error instanceof ZodError + ? (error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['Records', recordIndex, 'body', ...issue.path], + })) + : [ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', recordIndex, 'body'], + }, + ] + ), + } + ); + } + }); + }, + + safeParse( + data: unknown, + schema: T + ): ParsedResult[]> { + const parsedEnvelope = SqsSchema.safeParse(data); + if (!parsedEnvelope.success) { + return { + success: false, + error: new ParseError('Failed to parse SQS envelope', { + cause: parsedEnvelope.error, + }), + originalEvent: data, + }; + } + + const parseRecord = ( + record: { body: string }, + index: number + ): ParseStepResult> => { + try { + const body = JSON.parse(record.body); + const notification = parseStep( + (data) => SnsSqsNotificationSchema.safeParse(data), + body, + index + ); + if (!notification.success) return notification; + + return parseStep>( + (data) => schema.safeParse(data), + notification.data.Message, + index + ); + } catch { + return { + success: false, + error: createError(index, [ + { + code: 'custom', + message: 'Invalid JSON', + path: [], + }, + ]), + }; + } + }; + + const result = parsedEnvelope.data.Records.reduce<{ + success: boolean; + records: z.infer[]; + errors: { + [key: number | string]: { issues: ZodIssue[] }; + }; + }>( + (acc, record, index) => { + const parsed = parseRecord(record, index); + if (!parsed.success) { + acc.success = false; + acc.errors[index] = parsed.error; + } else { + acc.records.push(parsed.data); + } + return acc; + }, + { success: true, records: [], errors: {} } + ); + + if (result.success) { + return { success: true, data: result.records }; + } + + const indexes = Object.keys(result.errors); + const errorMessage = + indexes.length > 1 + ? `Failed to parse SQS Records at indexes ${indexes.join(', ')}` + : `Failed to parse SQS Record at index ${indexes[0]}`; + + return { + success: false, + error: new ParseError(errorMessage, { + cause: new ZodError( + Object.values(result.errors).flatMap((e) => e.issues) + ), + }), + originalEvent: data, + }; + }, +}; diff --git a/packages/parser/src/envelopes/sqs.ts b/packages/parser/src/envelopes/sqs.ts index 6ba651a4f5..6d57606f7b 100644 --- a/packages/parser/src/envelopes/sqs.ts +++ b/packages/parser/src/envelopes/sqs.ts @@ -1,93 +1,62 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; -import { SnsSqsNotificationSchema } from '../schemas/sns.js'; -import { SqsSchema } from '../schemas/sqs.js'; +import { type SqsRecordSchema, SqsSchema } from '../schemas/sqs.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** - * SQS Envelope to extract array of Records + * SQS Envelope to extract array of Records * - * The record's body parameter is a string, though it can also be a JSON encoded string. - * Regardless of its type it'll be parsed into a BaseModel object. + * The record's `body` parameter is a string and needs to be parsed against the provided schema. * - * Note: Records will be parsed the same way so if model is str, - * all items in the list will be parsed as str and npt as JSON (and vice versa) - */ -export const SqsEnvelope = { - /** - * This is a discriminator to differentiate whether an envelope returns an array or an object - * @hidden - */ - [envelopeDiscriminator]: 'array' as const, - parse(data: unknown, schema: T): z.infer[] { - const parsedEnvelope = SqsSchema.parse(data); - - return parsedEnvelope.Records.map((record) => { - return Envelope.parse(record.body, schema); - }); - }, - - safeParse( - data: unknown, - schema: T - ): ParsedResult[]> { - const parsedEnvelope = SqsSchema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse Sqs Envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; - } - - const parsedRecords: z.infer[] = []; - for (const record of parsedEnvelope.data.Records) { - const parsedRecord = Envelope.safeParse(record.body, schema); - if (!parsedRecord.success) { - return { - success: false, - error: new ParseError('Failed to parse Sqs Record', { - cause: parsedRecord.error, - }), - originalEvent: data, - }; - } - parsedRecords.push(parsedRecord.data); - } - - return { success: true, data: parsedRecords }; - }, -}; - -/** - * SNS plus SQS Envelope to extract array of Records + * If you know that the `body` is a JSON string, you can use `JSONStringified` to parse it, + * for example: * - * Published messages from SNS to SQS has a slightly different payload. - * Since SNS payload is marshalled into `Record` key in SQS, we have to: + * ```ts + * import { JSONStringified } from '@aws-lambda-powertools/helpers'; + * import { SqsEnvelope } from '@aws-lambda-powertools/parser/envelopes/sqs'; * - * 1. Parse SQS schema with incoming data - * 2. Unmarshall SNS payload and parse against SNS Notification schema not SNS/SNS Record - * 3. Finally, parse provided model against payload extracted + * const schema = z.object({ + * name: z.string(), + * }); * + * const parsed = SqsEnvelope.parse(event, JSONStringified(schema)); + * ``` */ -export const SnsSqsEnvelope = { +const SqsEnvelope = { /** * This is a discriminator to differentiate whether an envelope returns an array or an object * @hidden */ [envelopeDiscriminator]: 'array' as const, parse(data: unknown, schema: T): z.infer[] { - const parsedEnvelope = SqsSchema.parse(data); - - return parsedEnvelope.Records.map((record) => { - const snsNotification = SnsSqsNotificationSchema.parse( - JSON.parse(record.body) - ); + let parsedEnvelope: z.infer; + try { + parsedEnvelope = SqsSchema.parse(data); + } catch (error) { + throw new ParseError('Failed to parse SQS Envelope', { + cause: error as Error, + }); + } - return Envelope.parse(snsNotification.Message, schema); + return parsedEnvelope.Records.map((record, recordIndex) => { + let parsedRecord: z.infer; + try { + parsedRecord = schema.parse(record.body); + } catch (error) { + throw new ParseError( + `Failed to parse SQS Record at index ${recordIndex}`, + { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['Records', recordIndex, 'body', ...issue.path], + })) + ), + } + ); + } + return parsedRecord; }); }, @@ -106,46 +75,50 @@ export const SnsSqsEnvelope = { }; } - const parsedMessages: z.infer[] = []; + const result = parsedEnvelope.data.Records.reduce<{ + success: boolean; + records: z.infer[]; + errors: { index?: number; issues?: ZodIssue[] }; + }>( + (acc, record, index) => { + const parsedRecord = schema.safeParse(record.body); - // JSON.parse can throw an error, thus we catch it and return ParsedErrorResult - try { - for (const record of parsedEnvelope.data.Records) { - const snsNotification = SnsSqsNotificationSchema.safeParse( - JSON.parse(record.body) - ); - if (!snsNotification.success) { - return { - success: false, - error: new ParseError('Failed to parse SNS notification', { - cause: snsNotification.error, - }), - originalEvent: data, - }; - } - const parsedMessage = Envelope.safeParse( - snsNotification.data.Message, - schema - ); - if (!parsedMessage.success) { - return { - success: false, - error: new ParseError('Failed to parse SNS message', { - cause: parsedMessage.error, - }), - originalEvent: data, - }; + if (!parsedRecord.success) { + const issues = parsedRecord.error.issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'body', ...issue.path], + })); + acc.success = false; + // @ts-expect-error - index is assigned + acc.errors[index] = { issues }; + return acc; } - parsedMessages.push(parsedMessage.data); - } - } catch (e) { - return { - success: false, - error: e as Error, - originalEvent: data, - }; + + acc.records.push(parsedRecord.data); + return acc; + }, + { success: true, records: [], errors: {} } + ); + + if (result.success) { + return { success: true, data: result.records }; } - return { success: true, data: parsedMessages }; + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse SQS Records at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse SQS Record at index ${Object.keys(result.errors)[0]}`; + return { + success: false, + error: new ParseError(errorMessage, { + cause: new ZodError( + // @ts-expect-error - issues are assigned because success is false + Object.values(result.errors).flatMap((error) => error.issues) + ), + }), + originalEvent: data, + }; }, }; + +export { SqsEnvelope }; diff --git a/packages/parser/src/schemas/sqs.ts b/packages/parser/src/schemas/sqs.ts index 42aa348d30..f3c8ecd11b 100644 --- a/packages/parser/src/schemas/sqs.ts +++ b/packages/parser/src/schemas/sqs.ts @@ -93,7 +93,7 @@ const SqsRecordSchema = z.object({ * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#example-standard-queue-message-event} */ const SqsSchema = z.object({ - Records: z.array(SqsRecordSchema), + Records: z.array(SqsRecordSchema).min(1), }); export { SqsSchema, SqsRecordSchema }; diff --git a/packages/parser/tests/events/snsSqsFifoEvent.json b/packages/parser/tests/events/snsSqsFifoEvent.json deleted file mode 100644 index 52e45ce24e..0000000000 --- a/packages/parser/tests/events/snsSqsFifoEvent.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Records": [ - { - "messageId": "69bc4bbd-ed69-4325-a434-85c3b428ceab", - "receiptHandle": "AQEBbfAqjhrgIdW3HGWYPz57mdDatG/dT9LZhRPAsNQ1pJmw495w4esDc8ZSbOwMZuPBol7wtiNWug8U25GpSQDDLY1qv//8/lfmdzXOiprG6xRVeiXSHj0j731rJQ3xo+GPdGjOzjIxI09CrE3HtZ4lpXY9NjjHzP8hdxkCLlbttumc8hDBUR365/Tk+GfV2nNP9qvZtLGEbKCdTm/GYdTSoAr+ML9HnnGrS9T25Md71ASiZMI4DZqptN6g7CYYojFPs1LVM9o1258ferA72zbNoQ==", - "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"a7c9d2fa-77fa-5184-9de9-89391027cc7d\",\n \"SequenceNumber\" : \"10000000000000004000\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:Test.fifo\",\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\", \\\"username\\\": \\\"lessa\\\"}\",\n \"Timestamp\" : \"2022-10-14T13:35:25.419Z\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:Test.fifo:bb81d3de-a0f9-46e4-b619-d3152a4d545f\"\n}", - "attributes": { - "ApproximateReceiveCount": "1", - "SentTimestamp": "1665754525442", - "SequenceNumber": "18873177232222703872", - "MessageGroupId": "powertools-test", - "SenderId": "AIDAWYJAWPFU7SUQGUJC6", - "MessageDeduplicationId": "4e0a0f61eed277a4b9e4c01d5722b07b0725e42fe782102abee5711adfac701f", - "ApproximateFirstReceiveTimestamp": "1665754525442" - }, - "messageAttributes": {}, - "md5OfBody": "f3c788e623445e3feb263e80c1bffc0b", - "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:eu-west-1:231436140809:Test.fifo", - "awsRegion": "eu-west-1" - } - ] -} diff --git a/packages/parser/tests/events/sqsEvent.json b/packages/parser/tests/events/sqs/base.json similarity index 100% rename from packages/parser/tests/events/sqsEvent.json rename to packages/parser/tests/events/sqs/base.json diff --git a/packages/parser/tests/events/snsSqsEvent.json b/packages/parser/tests/events/sqs/sns-body.json similarity index 59% rename from packages/parser/tests/events/snsSqsEvent.json rename to packages/parser/tests/events/sqs/sns-body.json index 1162ffdb4e..79b55d19eb 100644 --- a/packages/parser/tests/events/snsSqsEvent.json +++ b/packages/parser/tests/events/sqs/sns-body.json @@ -3,7 +3,7 @@ { "messageId": "79406a00-bf15-46ca-978c-22c3613fcb30", "receiptHandle": "AQEB3fkqlBqq239bMCAHIr5mZkxJYKtxsTTy1lMImmpY7zqpQdfcAE8zFiuRh7X5ciROy24taT2rRXfuJFN/yEUVcQ6d5CIOCEK4htmRJJOHIyGdZPAm2NUUG5nNn2aEzgfzVvrkPBsrCbr7XTzK5s6eUZNH/Nn9AJtHKHpzweRK34Bon9OU/mvyIT7EJbwHPsdhL14NrCp8pLWBiIhkaJkG2G6gPO89dwHtGVUARJL+zP70AuIu/f7QgmPtY2eeE4AVbcUT1qaIlSGHUXxoHq/VMHLd/c4zWl0EXQOo/90DbyCUMejTIKL7N15YfkHoQDHprvMiAr9S75cdMiNOduiHzZLg/qVcv4kxsksKLFMKjwlzmYuQYy2KslVGwoHMd4PD", - "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"d88d4479-6ec0-54fe-b63f-1cf9df4bb16e\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:powertools265\",\n \"Subject\" : null,\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\", \\\"username\\\": \\\"lessa\\\"}\",\n \"Timestamp\" : \"2021-01-19T10:07:07.287Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"tEo2i6Lw6/Dr7Jdlulh0sXgnkF0idd3hqs8QZCorQpzkIWVOuu583NT0Gv0epuZD1Bo+tex6NgP5p6415yNVujGHJKnkrA9ztzXaVgFiol8rf8AFGQbmb7RsM9BqATQUJeg9nCTe0jksmWXmjxEFr8XKyyRuQBwSlRTngAvOw8jUnCe1vyYD5xPec1xpfOEGLi5BqSog+6tBtsry3oAtcENX8SV1tVuMpp6D+UrrU8xNT/5D70uRDppkPE3vq+t7rR0fVSdQRdUV9KmQD2bflA1Dyb2y37EzwJOMHDDQ82aOhj/JmPxvEAlV8RkZl6J0HIveraRy9wbNLbI7jpiOCw==\",\n \"SigningCertURL\" : \"https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:powertools265:15189ad7-870e-40e5-a7dd-a48898cd9f86\"\n}", + "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"d88d4479-6ec0-54fe-b63f-1cf9df4bb16e\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:powertools265\",\n \"Subject\" : null,\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\"}\",\n \"Timestamp\" : \"2021-01-19T10:07:07.287Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"tEo2i6Lw6/Dr7Jdlulh0sXgnkF0idd3hqs8QZCorQpzkIWVOuu583NT0Gv0epuZD1Bo+tex6NgP5p6415yNVujGHJKnkrA9ztzXaVgFiol8rf8AFGQbmb7RsM9BqATQUJeg9nCTe0jksmWXmjxEFr8XKyyRuQBwSlRTngAvOw8jUnCe1vyYD5xPec1xpfOEGLi5BqSog+6tBtsry3oAtcENX8SV1tVuMpp6D+UrrU8xNT/5D70uRDppkPE3vq+t7rR0fVSdQRdUV9KmQD2bflA1Dyb2y37EzwJOMHDDQ82aOhj/JmPxvEAlV8RkZl6J0HIveraRy9wbNLbI7jpiOCw==\",\n \"SigningCertURL\" : \"https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:powertools265:15189ad7-870e-40e5-a7dd-a48898cd9f86\"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1611050827340", diff --git a/packages/parser/tests/unit/envelopes/snssqs.test.ts b/packages/parser/tests/unit/envelopes/snssqs.test.ts new file mode 100644 index 0000000000..a7986d2a09 --- /dev/null +++ b/packages/parser/tests/unit/envelopes/snssqs.test.ts @@ -0,0 +1,350 @@ +import { describe, expect, it } from 'vitest'; +import { ZodError, z } from 'zod'; +import { SnsSqsEnvelope } from '../../../src/envelopes/snssqs.js'; +import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; +import type { SqsEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from '../schema/utils.js'; + +describe('Envelope: SnsSqsEnvelope', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'sqs', + filename: 'sns-body', + }); + + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess + expect(() => SnsSqsEnvelope.parse(event, z.number())).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse SQS Record at index 0' + ), + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 0, 'body'], + message: 'Expected number, received string', + }, + ]), + }) + ); + }); + + it('parses an SNS notification within an SQS envelope', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = SnsSqsEnvelope.parse(event, JSONStringified(schema)); + + // Assess + expect(result).toStrictEqual([{ message: 'hello world' }]); + }); + + it('throws if the envelope is not a valid SQS event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => SnsSqsEnvelope.parse(event, schema)).toThrow( + new ParseError('Failed to parse SQS Envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['Records'], + }, + ]), + }) + ); + }); + + it('throws if the SQS message is not a valid JSON string', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].body = 'invalid'; + + // Act & Assess + expect(() => SnsSqsEnvelope.parse(event, schema)).toThrow( + new ParseError('Failed to parse SQS Record at index 0', { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 0, 'body'], + }, + ]), + }) + ); + }); + + it('throws if the SQS message is not a valid SNS notification', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].body = JSON.stringify({ invalid: 'message' }); + + // Act & Assess + expect(() => SnsSqsEnvelope.parse(event, schema)).toThrow( + new ParseError('Failed to parse SQS Record at index 0', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'TopicArn'], + message: 'Required', + }, + { + code: 'invalid_literal', + expected: 'Notification', + path: ['Records', 0, 'body', 'Type'], + message: 'Invalid literal value, expected "Notification"', + received: undefined, + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'Message'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'MessageId'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'Timestamp'], + message: 'Required', + }, + ]), + }) + ); + }); + }); + + describe('Method: safeParse', () => { + it('parses an SNS notification within an SQS envelope', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = SnsSqsEnvelope.safeParse(event, JSONStringified(schema)); + + // Assess + expect(result).toStrictEqual({ + success: true, + data: [{ message: 'hello world' }], + }); + }); + + it('returns an error if the envelope is not a valid SQS event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act + const result = SnsSqsEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse SQS envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['Records'], + }, + ]), + }), + originalEvent: event, + }); + }); + + it('returns an error if the SQS message is not a valid JSON string', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].body = 'invalid'; + + // Act + const result = SnsSqsEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse SQS Record at index 0', { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 0, 'body'], + }, + ]), + }), + originalEvent: event, + }); + }); + + it('returns an error if the SQS message is not a valid SNS notification', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].body = JSON.stringify({ invalid: 'message' }); + + // Act + const result = SnsSqsEnvelope.safeParse(event, schema); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse SQS Record at index 0', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'TopicArn'], + message: 'Required', + }, + { + code: 'invalid_literal', + expected: 'Notification', + path: ['Records', 0, 'body', 'Type'], + message: 'Invalid literal value, expected "Notification"', + received: undefined, + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'Message'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'MessageId'], + message: 'Required', + }, + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['Records', 0, 'body', 'Timestamp'], + message: 'Required', + }, + ]), + }), + originalEvent: event, + }); + }); + + it('returns an error if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1] = structuredClone(event.Records[0]); + const parsedBody = JSON.parse(event.Records[0].body); + const invalidSNSNotification = { + ...parsedBody, + Message: 'hello', + }; + event.Records[1].body = JSON.stringify(invalidSNSNotification, null, 2); + + // Act + const result = SnsSqsEnvelope.safeParse(event, JSONStringified(schema)); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse SQS Record at index 1', { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 1, 'body'], + }, + ]), + }), + originalEvent: event, + }); + }); + + it('returns a combined error if multiple payloads do not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1] = structuredClone(event.Records[0]); + const parsedBody = JSON.parse(event.Records[0].body); + event.Records[0].body = JSON.stringify( + { + ...parsedBody, + Message: 'hello', + }, + null, + 2 + ); + event.Records[1].body = JSON.stringify( + { + ...parsedBody, + Message: 'world', + }, + null, + 2 + ); + + // Act + const result = SnsSqsEnvelope.safeParse(event, z.number()); + + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse SQS Records at indexes 0, 1', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 0, 'body'], + message: 'Expected number, received string', + }, + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 1, 'body'], + message: 'Expected number, received string', + }, + ]), + }), + originalEvent: event, + }); + }); + }); +}); diff --git a/packages/parser/tests/unit/envelopes/sqs.test.ts b/packages/parser/tests/unit/envelopes/sqs.test.ts index 004d1d71f9..d21273d47b 100644 --- a/packages/parser/tests/unit/envelopes/sqs.test.ts +++ b/packages/parser/tests/unit/envelopes/sqs.test.ts @@ -1,151 +1,153 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { SQSEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; -import { SnsSqsEnvelope, SqsEnvelope } from '../../../src/envelopes/sqs.js'; +import { ZodError, z } from 'zod'; +import { SqsEnvelope } from '../../../src/envelopes/sqs.js'; import { ParseError } from '../../../src/errors.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; - -describe('SqsEnvelope ', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const mock = generateMock(TestSchema); - - const sqsEvent = TestEvents.sqsEvent as SQSEvent; - sqsEvent.Records[0].body = JSON.stringify(mock); - sqsEvent.Records[1].body = JSON.stringify(mock); +import { JSONStringified } from '../../../src/helpers.js'; +import type { SqsEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from '../schema/utils.js'; + +describe('Envelope: SqsEnvelope', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'sqs', + filename: 'base', + }); - const resp = SqsEnvelope.parse(sqsEvent, TestSchema); - expect(resp).toEqual([mock, mock]); + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess + expect(() => SqsEnvelope.parse(event, JSONStringified(schema))).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse SQS Record at index 0' + ), + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 0, 'body'], + }, + ]), + }) + ); }); - it('should throw error if invalid keys for a schema', () => { - expect(() => { - SqsEnvelope.parse({ Records: [{ foo: 'bar' }] }, TestSchema); - }).toThrow(); - }); + it('parses an SQS event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[0].body = JSON.stringify({ message: 'hello' }); - it('should throw if invalid envelope', () => { - expect(() => { - SqsEnvelope.parse({ foo: 'bar' }, TestSchema); - }).toThrow(); + // Act + const result = SqsEnvelope.parse(event, JSONStringified(schema)); + + // Assess + expect(result).toStrictEqual([{ message: 'hello' }, { message: 'foo1' }]); }); }); describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const mock = generateMock(TestSchema); + it('parses an SQS event', () => { + // Prepare + const event = structuredClone(baseEvent); + event.Records[1].body = 'bar'; - const sqsEvent = TestEvents.sqsEvent as SQSEvent; - sqsEvent.Records[0].body = JSON.stringify(mock); - sqsEvent.Records[1].body = JSON.stringify(mock); + // Act + const result = SqsEnvelope.safeParse(event, z.string()); - expect(SqsEnvelope.safeParse(sqsEvent, TestSchema)).toEqual({ + // Assess + expect(result).toStrictEqual({ success: true, - data: [mock, mock], + data: ['Test message.', 'bar'], }); }); - it('should return error if event does not match schema', () => { - const sqsEvent = TestEvents.sqsEvent as SQSEvent; - sqsEvent.Records[0].body = JSON.stringify({ foo: 'bar' }); - const parseResult = SqsEnvelope.safeParse(sqsEvent, TestSchema); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: sqsEvent, - }); + it('returns an error if the event is not a valid SQS event', () => { + // Prepare + const event = { + Records: [], + }; - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } - }); + // Act + const result = SqsEnvelope.safeParse(event, z.string()); - it('should return error if envelope is invalid', () => { - expect(SqsEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError('Failed to parse SQS envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['Records'], + }, + ]), + }), + originalEvent: event, }); }); - }); - - describe('SnsSqsEnvelope safeParse', () => { - it('parse sqs inside sns envelope', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - - const data = generateMock(TestSchema); - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify(data); - - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); - expect(SnsSqsEnvelope.parse(snsSqsTestEvent, TestSchema)).toEqual([data]); - }); - - it('should parse sqs inside sns envelope', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + it('returns an error if any of the records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); - const data = generateMock(TestSchema); - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify(data); + // Act + const result = SqsEnvelope.safeParse(event, JSONStringified(schema)); - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); - - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ - success: true, - data: [data], - }); - }); - it('should return error when envelope is not valid', () => { - expect(SnsSqsEnvelope.safeParse({ foo: 'bar' }, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError('Failed to parse SQS Record at index 0', { + cause: new ZodError([ + { + code: 'custom', + message: 'Invalid JSON', + path: ['Records', 0, 'body'], + }, + ]), + }), + originalEvent: event, }); }); - it('should return error if message does not match schema', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - - const snsEvent = JSON.parse(snsSqsTestEvent.Records[0].body); - snsEvent.Message = JSON.stringify({ - foo: 'bar', - }); - - snsSqsTestEvent.Records[0].body = JSON.stringify(snsEvent); - - const parseResult = SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: snsSqsTestEvent, - }); - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } - }); - it('should return error if sns message is not valid', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; - - snsSqsTestEvent.Records[0].body = JSON.stringify({ - foo: 'bar', - }); - - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: snsSqsTestEvent, - }); - }); - it('should return error if JSON parse fails for record.body', () => { - const snsSqsTestEvent = TestEvents.snsSqsEvent as SQSEvent; + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(baseEvent); - snsSqsTestEvent.Records[0].body = 'not a json string'; + // Act + const result = SqsEnvelope.safeParse(event, z.number()); - expect(SnsSqsEnvelope.safeParse(snsSqsTestEvent, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(SyntaxError), - originalEvent: snsSqsTestEvent, + error: new ParseError('Failed to parse SQS Records at indexes 0, 1', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 0, 'body'], + message: 'Expected number, received string', + }, + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 1, 'body'], + message: 'Expected number, received string', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/helpers.test.ts b/packages/parser/tests/unit/helpers.test.ts index f8c4ce0b0a..4df9d32be1 100644 --- a/packages/parser/tests/unit/helpers.test.ts +++ b/packages/parser/tests/unit/helpers.test.ts @@ -104,8 +104,8 @@ describe('JSONStringified', () => { it('should parse extended SqsSchema', () => { // Prepare const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'sqsEvent', + eventsPath: 'sqs', + filename: 'base', }); const stringifiedBody = JSON.stringify(basePayload); testEvent.Records[0].body = stringifiedBody; diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index 805c0fd98f..50893dc10b 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -1,248 +1,193 @@ -import { generateMock } from '@anatine/zod-mock'; import middy from '@middy/core'; import type { Context } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import type { ZodSchema, z } from 'zod'; -import { ParseError } from '../../src'; -import { EventBridgeEnvelope, SqsEnvelope } from '../../src/envelopes'; +import { z } from 'zod'; +import { EventBridgeEnvelope } from '../../src/envelopes/event-bridge.js'; +import { SqsEnvelope } from '../../src/envelopes/sqs.js'; +import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/middleware/parser.js'; -import { SqsSchema } from '../../src/schemas'; -import type { EventBridgeEvent, ParsedResult, SqsEvent } from '../../src/types'; -import { TestSchema, getTestEvent } from './schema/utils'; +import type { + EventBridgeEvent, + ParsedResult, + SqsEvent, +} from '../../src/types/index.js'; +import { getTestEvent } from './schema/utils.js'; describe('Middleware: parser', () => { - type TestEvent = z.infer; - const handler = async ( - event: unknown, - _context: Context - ): Promise => { - return event; - }; - - describe(' when envelope is provided ', () => { - const middyfiedHandlerSchemaEnvelope = middy() - .use(parser({ schema: TestSchema, envelope: SqsEnvelope })) - .handler(async (event, _): Promise => { - return event; - }); - it('should parse request body with schema and envelope', async () => { - const bodyMock = generateMock(TestSchema); - - const event = generateMock(SqsSchema, { - stringMap: { - body: () => JSON.stringify(bodyMock), - }, - }); - - const result = (await middyfiedHandlerSchemaEnvelope( - event as unknown as TestEvent[], - {} as Context - )) as TestEvent[]; - for (const item of result) { - expect(item).toEqual(bodyMock); - } - }); + const schema = z + .object({ + name: z.string(), + age: z.number(), + }) + .strict(); + const baseSqsEvent = getTestEvent({ + eventsPath: 'sqs', + filename: 'base', + }); + const baseEventBridgeEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); + const JSONPayload = { name: 'John', age: 18 }; - it('should throw when envelope does not match', async () => { - await expect(async () => { - await middyfiedHandlerSchemaEnvelope( - { name: 'John', age: 18 } as unknown as TestEvent[], - {} as Context - ); - }).rejects.toThrow(); - }); + const handlerWithSchemaAndEnvelope = middy() + .use(parser({ schema: z.string(), envelope: SqsEnvelope })) + .handler(async (event) => event); - it('should throw when schema does not match', async () => { - const event = generateMock(SqsSchema, { - stringMap: { - body: () => '42', - }, - }); - - await expect( - middyfiedHandlerSchemaEnvelope( - event as unknown as TestEvent[], - {} as Context - ) - ).rejects.toThrow(); - }); + it('parses an event with schema and envelope', async () => { + // Prepare + const event = structuredClone(baseSqsEvent); + event.Records[1].body = 'bar'; - it('should throw when provided schema is invalid', async () => { - const middyfiedHandler = middy(handler).use( - parser({ schema: {} as ZodSchema, envelope: SqsEnvelope }) - ); + // Act + const result = await handlerWithSchemaAndEnvelope( + event as unknown as string[], + {} as Context + ); - await expect( - middyfiedHandler(42 as unknown as TestEvent[], {} as Context) - ).rejects.toThrow(); - }); - - it('should throw when envelope is correct but schema is invalid', async () => { - const event = generateMock(SqsSchema, { - stringMap: { - body: () => JSON.stringify({ name: 'John', foo: 'bar' }), - }, - }); + // Assess + expect(result).toStrictEqual(['Test message.', 'bar']); + }); - const middyfiedHandler = middy(handler).use( - parser({ schema: {} as ZodSchema, envelope: SqsEnvelope }) - ); + it('throws when envelope does not match', async () => { + // Prepare + const event = structuredClone(baseEventBridgeEvent); - await expect( - middyfiedHandler(event as unknown as TestEvent[], {} as Context) - ).rejects.toThrow(); - }); + // Act & Assess + expect( + middy() + .use(parser({ schema: z.string(), envelope: SqsEnvelope })) + .handler((event) => event)(event as unknown as string[], {} as Context) + ).rejects.toThrow(); }); - describe(' when envelope is not provided', () => { - it('should parse the event with built-in schema', async () => { - const event = generateMock(SqsSchema); - - const middyfiedHandler = middy() - .use(parser({ schema: SqsSchema })) - .handler(async (event, _) => { - return event; - }); + it('throws when schema does not match', async () => { + // Prepare + const event = structuredClone(baseSqsEvent); + // @ts-expect-error - setting an invalid body + event.Records[1].body = undefined; - expect( - await middyfiedHandler(event as unknown as SqsEvent, {} as Context) - ).toEqual(event); - }); + // Act & Assess + expect( + handlerWithSchemaAndEnvelope(event as unknown as string[], {} as Context) + ).rejects.toThrow(); + }); - it('should parse custom event', async () => { - const event = { name: 'John', age: 18 }; - const middyfiedHandler = middy() - .use(parser({ schema: TestSchema })) - .handler(async (event, _): Promise => { - return event; - }); - - expect( - await middyfiedHandler(event as unknown as TestEvent, {} as Context) - ).toEqual(event); - }); + it('parses the event successfully', async () => { + // Prepare + const event = 42; - it('should throw when the schema does not match', async () => { - const middyfiedHandler = middy(handler).use( - parser({ schema: TestSchema }) - ); + // Act + const result = await middy() + .use(parser({ schema: z.number() })) + .handler((event) => event)(event as unknown as number, {} as Context); - await expect( - middyfiedHandler(42 as unknown as TestEvent, {} as Context) - ).rejects.toThrow(); - }); + // Assess + expect(result).toEqual(event); + }); - it('should throw when provided schema is invalid', async () => { - const middyfiedHandler = middy(handler).use( - parser({ schema: {} as ZodSchema }) - ); + it('throws when the event does not match the schema', async () => { + // Prepare + const event = structuredClone(JSONPayload); - await expect( - middyfiedHandler({ foo: 'bar' } as unknown as TestEvent, {} as Context) - ).rejects.toThrow(); - }); + // Act & Assess + expect( + middy((event) => event).use(parser({ schema: z.number() }))( + event as unknown as number, + {} as Context + ) + ).rejects.toThrow(); + }); - it('should return the event when safeParse is true', async () => { - const event = { name: 'John', age: 18 }; - const middyfiedHandler = middy() - .use(parser({ schema: TestSchema, safeParse: true })) - .handler( - async (event, _): Promise> => { - return event; - } - ); - - expect( - await middyfiedHandler( - event as unknown as ParsedResult, - {} as Context - ) - ).toEqual({ - success: true, - data: event, - }); + it('returns the payload when using safeParse', async () => { + // Prepare + const event = structuredClone(JSONPayload); + + // Act + const result = await middy() + .use(parser({ schema: schema, safeParse: true })) + .handler((event) => event)( + event as unknown as ParsedResult>, + {} as Context + ); + + // Assess + expect(result).toEqual({ + success: true, + data: event, }); + }); - it('should return error when safeParse is true and schema does not match', async () => { - const middyfiedHandler = middy(handler).use( - parser({ schema: TestSchema, safeParse: true }) - ); - - expect( - await middyfiedHandler( - 42 as unknown as ParsedResult, - {} as Context - ) - ).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: 42, - }); + it('returns the error when using safeParse and the payload is invalid', async () => { + // Prepare + const event = structuredClone(JSONPayload); + + // Act + const result = await middy() + .use(parser({ schema: z.string(), safeParse: true })) + .handler((event) => event)( + event as unknown as ParsedResult, + {} as Context + ); + + // Assess + expect(result).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, }); + }); - it('should return event when envelope and safeParse are true', async () => { - const detail = generateMock(TestSchema); - const event = getTestEvent({ - eventsPath: 'eventbridge', - filename: 'base', - }); - - event.detail = detail; - - const middyfiedHandler = middy() - .use( - parser({ - schema: TestSchema, - envelope: EventBridgeEnvelope, - safeParse: true, - }) - ) - .handler( - async (event, _): Promise> => { - return event; - } - ); - - expect( - await middyfiedHandler( - event as unknown as ParsedResult, - {} as Context - ) - ).toEqual({ - success: true, - data: detail, - }); + it('returns the payload when using safeParse with envelope', async () => { + // Prepare + const detail = structuredClone(JSONPayload); + const event = structuredClone(baseEventBridgeEvent); + event.detail = detail; + + // Act + const result = await middy() + .use( + parser({ + schema: schema, + envelope: EventBridgeEnvelope, + safeParse: true, + }) + ) + .handler((event) => event)( + event as unknown as ParsedResult>, + {} as Context + ); + + // Assess + expect(result).toStrictEqual({ + success: true, + data: detail, }); + }); - it('should return error when envelope provided, safeParse is true, and schema does not match', async () => { - const event = getTestEvent({ - eventsPath: 'eventbridge', - filename: 'base', - }); - - const middyfiedHandler = middy() - .use( - parser({ - schema: TestSchema, - envelope: EventBridgeEnvelope, - safeParse: true, - }) - ) - .handler( - async (event, _): Promise> => { - return event; - } - ); - expect( - await middyfiedHandler( - event as unknown as ParsedResult, - {} as Context - ) - ).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: event, - }); + it('returns an error when using safeParse with envelope and the payload is invalid', async () => { + // Prepare + const event = structuredClone(baseEventBridgeEvent); + + // Act + const result = await middy() + .use( + parser({ + schema: z.string(), + envelope: EventBridgeEnvelope, + safeParse: true, + }) + ) + .handler((event) => event)( + event as unknown as ParsedResult, + {} as Context + ); + + // Assess + expect(result).toStrictEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/schema/sqs.test.ts b/packages/parser/tests/unit/schema/sqs.test.ts index 7e52ce99ef..4fcba4c30f 100644 --- a/packages/parser/tests/unit/schema/sqs.test.ts +++ b/packages/parser/tests/unit/schema/sqs.test.ts @@ -1,17 +1,32 @@ import { describe, expect, it } from 'vitest'; -import { SqsRecordSchema, SqsSchema } from '../../../src/schemas/'; -import type { SqsEvent } from '../../../src/types'; -import type { SqsRecord } from '../../../src/types/schema'; -import { TestEvents } from './utils.js'; +import { SqsSchema } from '../../../src/schemas/sqs.js'; +import type { SqsEvent } from '../../../src/types/schema.js'; +import { getTestEvent } from './utils.js'; -describe('SQS', () => { - it('should parse sqs event', () => { - const sqsEvent = TestEvents.sqsEvent; - expect(SqsSchema.parse(sqsEvent)).toEqual(sqsEvent); +describe('Schema: SQS', () => { + const baseEvent = getTestEvent({ + eventsPath: 'sqs', + filename: 'base', }); - it('should parse record from sqs event', () => { - const sqsEvent: SqsEvent = TestEvents.sqsEvent as SqsEvent; - const parsed: SqsRecord = SqsRecordSchema.parse(sqsEvent.Records[0]); - expect(parsed.body).toEqual('Test message.'); + + it('parses an SQS event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = SqsSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not an SQS event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => SqsSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index cf1da36e99..de56e12a60 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -36,9 +36,6 @@ const filenames = [ 's3ObjectEventTempCredentials', 's3SqsEvent', 'sesEvent', - 'snsSqsEvent', - 'snsSqsFifoEvent', - 'sqsEvent', 'vpcLatticeEvent', 'vpcLatticeEventPathTrailingSlash', 'vpcLatticeEventV2PathTrailingSlash', From 00204fa0511e130b18dc7f7d978d3c7f8cfb4549 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:53:45 +0100 Subject: [PATCH 21/31] chore(deps-dev): bump lint-staged from 15.3.0 to 15.4.2 (#3517) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrea Amorosi --- package-lock.json | 47 +++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4de280668..b5feb62b89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@vitest/coverage-v8": "^2.1.8", "husky": "^9.1.7", "lerna": "8.1.2", - "lint-staged": "^15.3.0", + "lint-staged": "^15.4.2", "markdownlint-cli2": "^0.17.1", "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", @@ -5910,10 +5910,11 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -8633,21 +8634,22 @@ } }, "node_modules/lint-staged": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.3.0.tgz", - "integrity": "sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==", - "dev": true, - "dependencies": { - "chalk": "~5.4.1", - "commander": "~12.1.0", - "debug": "~4.4.0", - "execa": "~8.0.1", - "lilconfig": "~3.1.3", - "listr2": "~8.2.5", - "micromatch": "~4.0.8", - "pidtree": "~0.6.0", - "string-argv": "~0.3.2", - "yaml": "~2.6.1" + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.2.tgz", + "integrity": "sha512-gCqzB/Li281uZJgReNci+oXXqUEdrFAQAzTE/LwoxxiEuP41vozNe4BATS+4ehdqkWn+Z6bGc3EDcBja3npBVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -15331,10 +15333,11 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index 5a131f6830..5c38dc75cb 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@vitest/coverage-v8": "^2.1.8", "husky": "^9.1.7", "lerna": "8.1.2", - "lint-staged": "^15.3.0", + "lint-staged": "^15.4.2", "markdownlint-cli2": "^0.17.1", "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", From 4099eab308a1b7ab31157252be091a1e7b486b08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:05:42 +0100 Subject: [PATCH 22/31] chore(deps-dev): bump markdownlint-cli2 from 0.17.1 to 0.17.2 (#3498) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 83 +++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 64 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5feb62b89..0688e17eda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "husky": "^9.1.7", "lerna": "8.1.2", "lint-staged": "^15.4.2", - "markdownlint-cli2": "^0.17.1", + "markdownlint-cli2": "^0.17.2", "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", "middy6": "npm:@middy/core@^6.0.0", @@ -4153,6 +4153,7 @@ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -4176,7 +4177,8 @@ "version": "0.16.7", "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.17.4", @@ -4206,10 +4208,11 @@ "dev": true }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "22.10.7", @@ -5520,6 +5523,7 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5530,6 +5534,7 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5540,6 +5545,7 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6197,6 +6203,7 @@ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, + "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -6285,6 +6292,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6303,6 +6311,7 @@ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, + "license": "MIT", "dependencies": { "dequal": "^2.0.0" }, @@ -7765,6 +7774,7 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7775,6 +7785,7 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, + "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" @@ -7847,6 +7858,7 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7920,6 +7932,7 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8306,6 +8319,7 @@ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], + "license": "MIT", "dependencies": { "commander": "^8.3.0" }, @@ -8318,6 +8332,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } @@ -9309,10 +9324,11 @@ } }, "node_modules/markdownlint": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.3.tgz", - "integrity": "sha512-eoQqH0291YCCjd+Pe1PUQ9AmWthlVmS0XWgcionkZ8q34ceZyRI+pYvsWksXJJL8OBkWCPwp1h/pnXxrPFC4oA==", + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", + "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "14.1.0", "micromark": "4.0.1", @@ -9332,15 +9348,16 @@ } }, "node_modules/markdownlint-cli2": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.1.tgz", - "integrity": "sha512-n1Im9lhKJJE12/u2N0GWBwPqeb0HGdylN8XpSFg9hbj35+QalY9Vi6mxwUQdG6wlSrrIq9ZDQ0Q85AQG9V2WOg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.2.tgz", + "integrity": "sha512-XH06ZOi8wCrtOSSj3p8y3yJzwgzYOSa7lglNyS3fP05JPRzRGyjauBb5UvlLUSCGysMmULS1moxdRHHudV+g/Q==", "dev": true, + "license": "MIT", "dependencies": { "globby": "14.0.2", "js-yaml": "4.1.0", "jsonc-parser": "3.3.1", - "markdownlint": "0.37.3", + "markdownlint": "0.37.4", "markdownlint-cli2-formatter-default": "0.0.5", "micromatch": "4.0.8" }, @@ -9569,6 +9586,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -9604,6 +9622,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -9628,6 +9647,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -9647,6 +9667,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", @@ -9663,6 +9684,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", @@ -9683,6 +9705,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -9700,6 +9723,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/katex": "^0.16.0", "devlop": "^1.0.0", @@ -9729,6 +9753,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -9750,6 +9775,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -9772,6 +9798,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -9792,6 +9819,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -9814,6 +9842,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -9836,6 +9865,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -9856,6 +9886,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -9875,6 +9906,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -9896,6 +9928,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -9916,6 +9949,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -9934,7 +9968,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", @@ -9950,7 +9985,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", @@ -9967,6 +10003,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -9986,6 +10023,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" } @@ -10005,6 +10043,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -10012,9 +10051,9 @@ } }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", - "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", + "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", "dev": true, "funding": [ { @@ -10026,6 +10065,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -10047,7 +10087,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-types": { "version": "2.0.1", @@ -10063,7 +10104,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", @@ -11717,6 +11759,7 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", diff --git a/package.json b/package.json index 5c38dc75cb..4b62a9e4b4 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "husky": "^9.1.7", "lerna": "8.1.2", "lint-staged": "^15.4.2", - "markdownlint-cli2": "^0.17.1", + "markdownlint-cli2": "^0.17.2", "middy4": "npm:@middy/core@^4.7.0", "middy5": "npm:@middy/core@^5.4.3", "middy6": "npm:@middy/core@^6.0.0", From d283a0e19bcfbf4978f4a18db867f799bbafda4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:22:04 +0100 Subject: [PATCH 23/31] chore(deps): bump mkdocs-material from 9.5.49 to 9.5.50 in /docs (#3502) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrea Amorosi --- docs/requirements.in | 2 +- docs/requirements.txt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/requirements.in b/docs/requirements.in index 1b5f7fb671..d98b9616de 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,4 +1,4 @@ mike==1.1.2 -mkdocs-material==9.5.49 +mkdocs-material==9.5.50 mkdocs-git-revision-date-plugin==0.3.2 mkdocs-exclude==1.0.2 \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index 73f1ff0198..a6ef05ed06 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -235,9 +235,9 @@ mkdocs-get-deps==0.2.0 \ mkdocs-git-revision-date-plugin==0.3.2 \ --hash=sha256:2e67956cb01823dd2418e2833f3623dee8604cdf223bddd005fe36226a56f6ef # via -r requirements.in -mkdocs-material==9.5.49 \ - --hash=sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d \ - --hash=sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e +mkdocs-material==9.5.50 \ + --hash=sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825 \ + --hash=sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385 # via -r requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ From 06e997574aabc051b27c755a0a83b995b4628f34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:25:37 +0100 Subject: [PATCH 24/31] chore(deps): bump squidfunk/mkdocs-material from `ba73db5` to `41942f7` in /docs (#3501) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrea Amorosi --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index e6da297cb6..dda0803507 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,5 @@ # version 9.5.35 -FROM squidfunk/mkdocs-material@sha256:ba73db5ab937632760a59742ba89e199ca6122cfad4ca21d1f27125fefa31a33 +FROM squidfunk/mkdocs-material@sha256:41942f7a2f5163aacd0e866e076d95db4f26550b97d76c1594c04250cbb580e9 COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 5bb4a6af1dcd6f528a7830fa49f7df7e57b3d733 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 24 Jan 2025 10:25:46 +0100 Subject: [PATCH 25/31] chore(parser): deprecate `AlbMultiValueHeadersSchema` (#3523) --- packages/parser/src/schemas/alb.ts | 51 ++++-- .../events/{albEvent.json => alb/base.json} | 2 +- .../parser/tests/events/alb/multi-fields.json | 35 ++++ .../events/albEventPathTrailingSlash.json | 28 ---- .../events/albMultiValueHeadersEvent.json | 23 --- packages/parser/tests/unit/helpers.test.ts | 155 ++++++++---------- packages/parser/tests/unit/schema/alb.test.ts | 69 ++++++-- 7 files changed, 192 insertions(+), 171 deletions(-) rename packages/parser/tests/events/{albEvent.json => alb/base.json} (99%) create mode 100644 packages/parser/tests/events/alb/multi-fields.json delete mode 100644 packages/parser/tests/events/albEventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/albMultiValueHeadersEvent.json diff --git a/packages/parser/src/schemas/alb.ts b/packages/parser/src/schemas/alb.ts index 4afa283de2..f22e53fcbb 100644 --- a/packages/parser/src/schemas/alb.ts +++ b/packages/parser/src/schemas/alb.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; /** - * Zod schema for Application load balancer event + * Zod schema for Application Load Balancer events. * * @example * ```json @@ -33,6 +33,32 @@ import { z } from 'zod'; * } * ``` * + * With multi-value headers and multi-value query string parameters: + * + * @example + * ```json + * { + * "requestContext": { + * "elb": { + * "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" + * } + * }, + * "httpMethod": "GET", + * "path": "/", + * "multiValueHeaders": { + * "Set-cookie": [ + * "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", + * "cookie-name=cookie-value;Expires=May 8, 2019" + * ], + * "Content-Type": [ + * "application/json" + * ] + * }, + * "isBase64Encoded": false, + * "body": "request_body" + * } + * ``` + * * @see {@link types.ALBEvent | ALBEvent} * @see {@link https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html} * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html} @@ -43,7 +69,11 @@ const AlbSchema = z.object({ body: z.string(), isBase64Encoded: z.boolean(), headers: z.record(z.string(), z.string()).optional(), + multiValueHeaders: z.record(z.string(), z.array(z.string())).optional(), queryStringParameters: z.record(z.string(), z.string()).optional(), + multiValueQueryStringParameters: z + .record(z.string(), z.array(z.string())) + .optional(), requestContext: z.object({ elb: z.object({ targetGroupArn: z.string(), @@ -52,26 +82,15 @@ const AlbSchema = z.object({ }); /** - * Zod schema for Application load balancer event with multi-value headers + * @deprecated Use `AlbSchema` instead, which handles both types of headers & querystring parameters. * - * @example - * ```json - * { - * "multiValueHeaders": { - * "Set-cookie": [ - * "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", - * "cookie-name=cookie-value;Expires=May 8, 2019" - * ], - * "Content-Type": [ - * "application/json" - * ] - * } - * } - * ``` + * This schema will be removed in a future major release. */ +/* v8 ignore start */ const AlbMultiValueHeadersSchema = AlbSchema.extend({ multiValueHeaders: z.record(z.string(), z.array(z.string())), multiValueQueryStringParameters: z.record(z.string(), z.array(z.string())), }); +/* v8 ignore stop */ export { AlbSchema, AlbMultiValueHeadersSchema }; diff --git a/packages/parser/tests/events/albEvent.json b/packages/parser/tests/events/alb/base.json similarity index 99% rename from packages/parser/tests/events/albEvent.json rename to packages/parser/tests/events/alb/base.json index 9328cb39e1..0ce1b680f0 100644 --- a/packages/parser/tests/events/albEvent.json +++ b/packages/parser/tests/events/alb/base.json @@ -25,4 +25,4 @@ }, "body": "Test", "isBase64Encoded": false -} +} \ No newline at end of file diff --git a/packages/parser/tests/events/alb/multi-fields.json b/packages/parser/tests/events/alb/multi-fields.json new file mode 100644 index 0000000000..e555b7840b --- /dev/null +++ b/packages/parser/tests/events/alb/multi-fields.json @@ -0,0 +1,35 @@ +{ + "requestContext": { + "elb": { + "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a" + } + }, + "httpMethod": "GET", + "path": "/lambda", + "multiValueQueryStringParameters": {}, + "multiValueHeaders": { + "accept": [ + "*/*" + ], + "host": [ + "alb-c-LoadB-14POFKYCLBNSF-1815800096.eu-central-1.elb.amazonaws.com" + ], + "user-agent": [ + "curl/7.79.1" + ], + "x-amzn-trace-id": [ + "Root=1-62fa9327-21cdd4da4c6db451490a5fb7" + ], + "x-forwarded-for": [ + "123.123.123.123" + ], + "x-forwarded-port": [ + "80" + ], + "x-forwarded-proto": [ + "http" + ] + }, + "body": "Test", + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/albEventPathTrailingSlash.json b/packages/parser/tests/events/albEventPathTrailingSlash.json deleted file mode 100644 index d365fa84b2..0000000000 --- a/packages/parser/tests/events/albEventPathTrailingSlash.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "requestContext": { - "elb": { - "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a" - } - }, - "httpMethod": "GET", - "path": "/lambda/", - "queryStringParameters": { - "query": "1234ABCD" - }, - "headers": { - "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", - "accept-encoding": "gzip", - "accept-language": "en-US,en;q=0.9", - "connection": "keep-alive", - "host": "lambda-alb-123578498.us-east-2.elb.amazonaws.com", - "upgrade-insecure-requests": "1", - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", - "x-amzn-trace-id": "Root=1-5c536348-3d683b8b04734faae651f476", - "x-forwarded-for": "72.12.164.125", - "x-forwarded-port": "80", - "x-forwarded-proto": "http", - "x-imforwards": "20" - }, - "body": "Test", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/albMultiValueHeadersEvent.json b/packages/parser/tests/events/albMultiValueHeadersEvent.json deleted file mode 100644 index 67421f5130..0000000000 --- a/packages/parser/tests/events/albMultiValueHeadersEvent.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "requestContext": { - "elb": { - "targetGroupArn": "arn:aws:elasticloadbalancing:eu-central-1:1234567890:targetgroup/alb-c-Targe-11GDXTPQ7663S/804a67588bfdc10f" - } - }, - "httpMethod": "GET", - "path": "/todos", - "multiValueQueryStringParameters": {}, - "multiValueHeaders": { - "accept": ["*/*"], - "host": [ - "alb-c-LoadB-14POFKYCLBNSF-1815800096.eu-central-1.elb.amazonaws.com" - ], - "user-agent": ["curl/7.79.1"], - "x-amzn-trace-id": ["Root=1-62fa9327-21cdd4da4c6db451490a5fb7"], - "x-forwarded-for": ["123.123.123.123"], - "x-forwarded-port": ["80"], - "x-forwarded-proto": ["http"] - }, - "body": "", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/unit/helpers.test.ts b/packages/parser/tests/unit/helpers.test.ts index 4df9d32be1..b8c49ac2d6 100644 --- a/packages/parser/tests/unit/helpers.test.ts +++ b/packages/parser/tests/unit/helpers.test.ts @@ -6,7 +6,7 @@ import { AlbSchema } from '../../src/schemas/alb.js'; import { DynamoDBStreamRecord, DynamoDBStreamSchema, -} from '../../src/schemas/dynamodb'; +} from '../../src/schemas/dynamodb.js'; import { SnsNotificationSchema, SnsRecordSchema, @@ -33,8 +33,8 @@ const basePayload = { email: 'foo@bar.baz', }; -describe('JSONStringified', () => { - it('should return a valid JSON', () => { +describe('Helper: JSONStringified', () => { + it('returns a valid JSON', () => { // Prepare const data = { body: JSON.stringify(structuredClone(basePayload)), @@ -51,7 +51,7 @@ describe('JSONStringified', () => { }); }); - it('should throw an error if the JSON payload is invalid', () => { + it('throws an error if the JSON payload is invalid', () => { // Prepare const data = { body: JSON.stringify({ ...basePayload, email: 'invalid' }), @@ -66,7 +66,7 @@ describe('JSONStringified', () => { expect(() => extendedSchema.parse(data)).toThrow(); }); - it('should throw an error if the JSON is malformed', () => { + it('throws an error if the JSON is malformed', () => { // Prepare const data = { body: 'invalid', @@ -81,11 +81,11 @@ describe('JSONStringified', () => { expect(() => extendedSchema.parse(data)).toThrow(); }); - it('should parse extended AlbSchema', () => { + it('parses extended AlbSchema', () => { // Prepare const testEvent = getTestEvent({ - eventsPath: '.', - filename: 'albEvent', + eventsPath: 'alb', + filename: 'base', }); testEvent.body = JSON.stringify(structuredClone(basePayload)); @@ -101,7 +101,7 @@ describe('JSONStringified', () => { }); }); - it('should parse extended SqsSchema', () => { + it('parses extended SqsSchema', () => { // Prepare const testEvent = getTestEvent({ eventsPath: 'sqs', @@ -130,7 +130,7 @@ describe('JSONStringified', () => { }); }); - it('should parse extended SnsSchema', () => { + it('parses extended SnsSchema', () => { // Prepare const testEvent = getTestEvent({ eventsPath: 'sns', @@ -162,7 +162,7 @@ describe('JSONStringified', () => { }); }); -describe('DynamoDBMarshalled', () => { +describe('Helper: DynamoDBMarshalled', () => { // Prepare const schema = z.object({ Message: z.string(), @@ -184,115 +184,96 @@ describe('DynamoDBMarshalled', () => { ), }); - it('should correctly unmarshall and validate a valid DynamoDB stream record', () => { + it('unmarshalls and validates a valid DynamoDB stream record', () => { // Prepare - const testInput = [ - { - Message: { - S: 'New item!', - }, - Id: { - N: '101', - }, + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.NewImage = { + Message: { + S: 'New item!', }, - { - Message: { - S: 'This item has changed', - }, - Id: { - N: '101', - }, + Id: { + N: '101', }, - ]; - const expectedOutput = [ - { - Id: 101, - Message: 'New item!', + }; + event.Records[1].dynamodb.NewImage = { + Message: { + S: 'This item has changed', }, - { - Id: 101, - Message: 'This item has changed', + Id: { + N: '101', }, - ]; - - const testEvent = structuredClone(baseEvent); - testEvent.Records[0].dynamodb.NewImage = testInput[0]; - testEvent.Records[1].dynamodb.NewImage = testInput[1]; + }; // Act & Assess - expect(extendedSchema.parse(testEvent)).toStrictEqual({ + expect(extendedSchema.parse(event)).toStrictEqual({ Records: [ { - ...testEvent.Records[0], + ...event.Records[0], dynamodb: { - NewImage: expectedOutput[0], + NewImage: { + Id: 101, + Message: 'New item!', + }, }, }, { - ...testEvent.Records[1], + ...event.Records[1], dynamodb: { - NewImage: expectedOutput[1], + NewImage: { + Id: 101, + Message: 'This item has changed', + }, }, }, ], }); }); - it('should throw an error if the DynamoDB stream record cannot be unmarshalled', () => { + it('throws an error if the DynamoDB stream record cannot be unmarshalled', () => { // Prepare - const testInput = [ - { - Message: { - S: 'New item!', - }, - Id: { - NNN: '101', //unknown type - }, + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.NewImage = { + Message: { + S: 'New item!', }, - { - Message: { - S: 'This item has changed', - }, - Id: { - N: '101', - }, + Id: { + NNN: '101', //unknown type }, - ]; - - const testEvent = structuredClone(baseEvent); - testEvent.Records[0].dynamodb.NewImage = testInput[0]; - testEvent.Records[1].dynamodb.NewImage = testInput[1]; + }; + event.Records[1].dynamodb.NewImage = { + Message: { + S: 'This item has changed', + }, + Id: { + N: '101', + }, + }; // Act & Assess - expect(() => extendedSchema.parse(testEvent)).toThrow( + expect(() => extendedSchema.parse(event)).toThrow( 'Could not unmarshall DynamoDB stream record' ); }); - it('should throw a validation error if the unmarshalled record does not match the schema', () => { + it('throws a validation error if the unmarshalled record does not match the schema', () => { // Prepare - const testInput = [ - { - Message: { - S: 'New item!', - }, - Id: { - N: '101', - }, + const event = structuredClone(baseEvent); + event.Records[0].dynamodb.NewImage = { + Message: { + S: 'New item!', }, - { - Message: { - S: 'This item has changed', - }, - // Id is missing + Id: { + N: '101', }, - ]; - - const testEvent = structuredClone(baseEvent); - testEvent.Records[0].dynamodb.NewImage = testInput[0]; - testEvent.Records[1].dynamodb.NewImage = testInput[1]; + }; + event.Records[1].dynamodb.NewImage = { + // Id is missing + Message: { + S: 'This item has changed', + }, + }; // Act & Assess - expect(() => extendedSchema.parse(testEvent)).toThrow(); + expect(() => extendedSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/alb.test.ts b/packages/parser/tests/unit/schema/alb.test.ts index 2e71f92438..01cea17b76 100644 --- a/packages/parser/tests/unit/schema/alb.test.ts +++ b/packages/parser/tests/unit/schema/alb.test.ts @@ -1,23 +1,60 @@ import { describe, expect, it } from 'vitest'; -import { AlbMultiValueHeadersSchema, AlbSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { AlbSchema } from '../../../src/schemas/alb.js'; +import type { ALBEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from './utils.js'; -describe('ALB ', () => { - it('should parse alb event', () => { - const albEvent = TestEvents.albEvent; - expect(AlbSchema.parse(albEvent)).toEqual(albEvent); +describe('Schema: ALB', () => { + const eventsPath = 'alb'; + const baseEvent = getTestEvent({ + eventsPath, + filename: 'base', }); - it('should parse alb event path trailing slash', () => { - const albEventPathTrailingSlash = TestEvents.albEventPathTrailingSlash; - expect(AlbSchema.parse(albEventPathTrailingSlash)).toEqual( - albEventPathTrailingSlash - ); + + it('parses an ALB event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = AlbSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an ALB event with a base64 encoded body', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = 'aGVsbG8gd29ybGQ='; // base64 encoded 'hello world' + // @ts-expect-error - we know the headers exist + event.headers['content-type'] = 'application/octet-stream'; + event.isBase64Encoded = true; + + // Act + const result = AlbSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an ALB event with multi-value headers and query string parameters', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'multi-fields', + }); + + // Act + const result = AlbSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse alb event with multi value headers event', () => { - const albMultiValueHeadersEvent = TestEvents.albMultiValueHeadersEvent; - expect(AlbMultiValueHeadersSchema.parse(albMultiValueHeadersEvent)).toEqual( - albMultiValueHeadersEvent - ); + it('throws if the event is not an ALB event', () => { + // Prepare + const event = omit(['path'], structuredClone(baseEvent)); + + // Act & Assess + expect(() => AlbSchema.parse(event)).toThrow(); }); }); From 937be641b3ee82748fc1bdec0291abe5ef0e7a97 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 24 Jan 2025 10:34:54 +0100 Subject: [PATCH 26/31] fix(parser): set min length of 1 to s3 event lists (#3524) --- packages/parser/src/schemas/s3.ts | 4 +- .../events/{s3Event.json => s3/base.json} | 0 .../decoded-key.json} | 0 .../delete-object.json} | 0 .../eventbridge-object-created.json} | 0 .../eventbridge-object-deleted.json} | 0 .../eventbridge-object-expired.json} | 0 .../eventbridge-object-restored.json} | 0 .../{s3EventGlacier.json => s3/glacier.json} | 0 .../object-iam-user.json} | 0 .../object-temp-credentials.json} | 0 .../{s3SqsEvent.json => s3/sqs-event.json} | 0 packages/parser/tests/unit/schema/s3.test.ts | 254 +++++++++++++----- packages/parser/tests/unit/schema/utils.ts | 12 - 14 files changed, 186 insertions(+), 84 deletions(-) rename packages/parser/tests/events/{s3Event.json => s3/base.json} (100%) rename packages/parser/tests/events/{s3EventDecodedKey.json => s3/decoded-key.json} (100%) rename packages/parser/tests/events/{s3EventDeleteObject.json => s3/delete-object.json} (100%) rename packages/parser/tests/events/{s3EventBridgeNotificationObjectCreatedEvent.json => s3/eventbridge-object-created.json} (100%) rename packages/parser/tests/events/{s3EventBridgeNotificationObjectDeletedEvent.json => s3/eventbridge-object-deleted.json} (100%) rename packages/parser/tests/events/{s3EventBridgeNotificationObjectExpiredEvent.json => s3/eventbridge-object-expired.json} (100%) rename packages/parser/tests/events/{s3EventBridgeNotificationObjectRestoreCompletedEvent.json => s3/eventbridge-object-restored.json} (100%) rename packages/parser/tests/events/{s3EventGlacier.json => s3/glacier.json} (100%) rename packages/parser/tests/events/{s3ObjectEventIAMUser.json => s3/object-iam-user.json} (100%) rename packages/parser/tests/events/{s3ObjectEventTempCredentials.json => s3/object-temp-credentials.json} (100%) rename packages/parser/tests/events/{s3SqsEvent.json => s3/sqs-event.json} (100%) diff --git a/packages/parser/src/schemas/s3.ts b/packages/parser/src/schemas/s3.ts index 68c77a9755..07f5a01e33 100644 --- a/packages/parser/src/schemas/s3.ts +++ b/packages/parser/src/schemas/s3.ts @@ -166,7 +166,7 @@ const S3EventNotificationEventBridgeSchema = EventBridgeSchema.extend({ * @see {@link https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-content-structure.html} */ const S3Schema = z.object({ - Records: z.array(S3RecordSchema), + Records: z.array(S3RecordSchema).min(1), }); const S3SqsEventNotificationRecordSchema = SqsRecordSchema.extend({ @@ -204,7 +204,7 @@ const S3SqsEventNotificationRecordSchema = SqsRecordSchema.extend({ * @see {@link types.S3SqsEventNotification | S3SqsEventNotification } */ const S3SqsEventNotificationSchema = z.object({ - Records: z.array(S3SqsEventNotificationRecordSchema), + Records: z.array(S3SqsEventNotificationRecordSchema).min(1), }); const S3ObjectContext = z.object({ diff --git a/packages/parser/tests/events/s3Event.json b/packages/parser/tests/events/s3/base.json similarity index 100% rename from packages/parser/tests/events/s3Event.json rename to packages/parser/tests/events/s3/base.json diff --git a/packages/parser/tests/events/s3EventDecodedKey.json b/packages/parser/tests/events/s3/decoded-key.json similarity index 100% rename from packages/parser/tests/events/s3EventDecodedKey.json rename to packages/parser/tests/events/s3/decoded-key.json diff --git a/packages/parser/tests/events/s3EventDeleteObject.json b/packages/parser/tests/events/s3/delete-object.json similarity index 100% rename from packages/parser/tests/events/s3EventDeleteObject.json rename to packages/parser/tests/events/s3/delete-object.json diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json b/packages/parser/tests/events/s3/eventbridge-object-created.json similarity index 100% rename from packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json rename to packages/parser/tests/events/s3/eventbridge-object-created.json diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json b/packages/parser/tests/events/s3/eventbridge-object-deleted.json similarity index 100% rename from packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json rename to packages/parser/tests/events/s3/eventbridge-object-deleted.json diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectExpiredEvent.json b/packages/parser/tests/events/s3/eventbridge-object-expired.json similarity index 100% rename from packages/parser/tests/events/s3EventBridgeNotificationObjectExpiredEvent.json rename to packages/parser/tests/events/s3/eventbridge-object-expired.json diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectRestoreCompletedEvent.json b/packages/parser/tests/events/s3/eventbridge-object-restored.json similarity index 100% rename from packages/parser/tests/events/s3EventBridgeNotificationObjectRestoreCompletedEvent.json rename to packages/parser/tests/events/s3/eventbridge-object-restored.json diff --git a/packages/parser/tests/events/s3EventGlacier.json b/packages/parser/tests/events/s3/glacier.json similarity index 100% rename from packages/parser/tests/events/s3EventGlacier.json rename to packages/parser/tests/events/s3/glacier.json diff --git a/packages/parser/tests/events/s3ObjectEventIAMUser.json b/packages/parser/tests/events/s3/object-iam-user.json similarity index 100% rename from packages/parser/tests/events/s3ObjectEventIAMUser.json rename to packages/parser/tests/events/s3/object-iam-user.json diff --git a/packages/parser/tests/events/s3ObjectEventTempCredentials.json b/packages/parser/tests/events/s3/object-temp-credentials.json similarity index 100% rename from packages/parser/tests/events/s3ObjectEventTempCredentials.json rename to packages/parser/tests/events/s3/object-temp-credentials.json diff --git a/packages/parser/tests/events/s3SqsEvent.json b/packages/parser/tests/events/s3/sqs-event.json similarity index 100% rename from packages/parser/tests/events/s3SqsEvent.json rename to packages/parser/tests/events/s3/sqs-event.json diff --git a/packages/parser/tests/unit/schema/s3.test.ts b/packages/parser/tests/unit/schema/s3.test.ts index dcc3a7918e..600aa6a1bf 100644 --- a/packages/parser/tests/unit/schema/s3.test.ts +++ b/packages/parser/tests/unit/schema/s3.test.ts @@ -4,98 +4,212 @@ import { S3ObjectLambdaEventSchema, S3Schema, S3SqsEventNotificationSchema, -} from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +} from '../../../src/schemas/s3.js'; +import type { + S3Event, + S3EventNotificationEventBridge, + S3ObjectLambdaEvent, + S3SqsEventNotification, +} from '../../../src/types/schema.js'; +import { getTestEvent, omit } from './utils.js'; -describe('S3 ', () => { - it('should parse s3 event', () => { - const s3Event = TestEvents.s3Event; +describe('Schema: S3', () => { + const eventsPath = 's3'; + const baseEvent = getTestEvent({ + eventsPath, + filename: 'base', + }); + const baseLambdaEvent = getTestEvent({ + eventsPath, + filename: 'object-iam-user', + }); + + it('parses an S3 event', () => { + // Prepare + const event = structuredClone(baseEvent); - expect(S3Schema.parse(s3Event)).toEqual(s3Event); + // Act + const result = S3Schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse s3 event bridge notification event created', () => { - const s3EventBridgeNotificationObjectCreatedEvent = - TestEvents.s3EventBridgeNotificationObjectCreatedEvent; + it('throws if the event is not an S3 event', () => { + // Prepare + const event = { + Records: [], + }; - expect( - S3EventNotificationEventBridgeSchema.parse( - s3EventBridgeNotificationObjectCreatedEvent - ) - ).toEqual(s3EventBridgeNotificationObjectCreatedEvent); + // Act & Assess + expect(() => S3Schema.parse(event)).toThrow(); }); - it('should parse s3 event bridge notification event detelted', () => { - const s3EventBridgeNotificationObjectDeletedEvent = - TestEvents.s3EventBridgeNotificationObjectDeletedEvent; + it('throws if the event is missing required fields', () => { + // Prepare + const event = structuredClone(baseEvent); + // @ts-expect-error - Intentionally remove required field + event.Records[0].s3.bucket.name = undefined; - expect( - S3EventNotificationEventBridgeSchema.parse( - s3EventBridgeNotificationObjectDeletedEvent - ) - ).toEqual(s3EventBridgeNotificationObjectDeletedEvent); + // Act & Assess + expect(() => S3Schema.parse(event)).toThrow(); }); - it('should parse s3 event bridge notification event expired', () => { - const s3EventBridgeNotificationObjectExpiredEvent = - TestEvents.s3EventBridgeNotificationObjectExpiredEvent; - expect( - S3EventNotificationEventBridgeSchema.parse( - s3EventBridgeNotificationObjectExpiredEvent - ) - ).toEqual(s3EventBridgeNotificationObjectExpiredEvent); + it('parses an S3 Glacier event', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'glacier', + }); + + // Act + const result = S3Schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an S3 event with a decoded key', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'decoded-key', + }); + + // Act + const result = S3Schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse s3 sqs notification event', () => { - const s3SqsEvent = TestEvents.s3SqsEvent; - expect(S3SqsEventNotificationSchema.parse(s3SqsEvent)).toEqual(s3SqsEvent); + it('parses an S3 event with a deleted object', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'delete-object', + }); + + // Act + const result = S3Schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse s3 event with decoded key', () => { - const s3EventDecodedKey = TestEvents.s3EventDecodedKey; - expect(S3Schema.parse(s3EventDecodedKey)).toEqual(s3EventDecodedKey); + it('parses an S3 Object Lambda with an IAM user', () => { + // Prepare + const event = structuredClone(baseLambdaEvent); + + // Act + const result = S3ObjectLambdaEventSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse s3 event delete object', () => { - const s3EventDeleteObject = TestEvents.s3EventDeleteObject; - expect(S3Schema.parse(s3EventDeleteObject)).toEqual(s3EventDeleteObject); + it('throws if the S3 Object Lambda event is missing required fields', () => { + // Prepare + const event = omit(['getObjectContext'], structuredClone(baseLambdaEvent)); + + // Act & Assess + expect(() => S3ObjectLambdaEventSchema.parse(event)).toThrow(); }); - it('should parse s3 event glacier', () => { - const s3EventGlacier = TestEvents.s3EventGlacier; - expect(S3Schema.parse(s3EventGlacier)).toEqual(s3EventGlacier); + it('parses an S3 Object Lambda with temporary credentials', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'object-temp-credentials', + }); + const expected = structuredClone(event); + // @ts-expect-error - Modifying the expected result to account for type coercion + expected.userIdentity.sessionContext.attributes.mfaAuthenticated = false; + + // Act + const result = S3ObjectLambdaEventSchema.parse(event); + + // Assess + expect(result).toStrictEqual(expected); }); - it('should parse s3 object event iam user', () => { - const s3ObjectEventIAMUser = TestEvents.s3ObjectEventIAMUser; - expect(S3ObjectLambdaEventSchema.parse(s3ObjectEventIAMUser)).toEqual( - s3ObjectEventIAMUser - ); + it('parses an S3 Object Notification EventBridge event', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'eventbridge-object-created', + }); + + // Act + const result = S3EventNotificationEventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an S3 Object Notification EventBridge event for an object deleted', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'eventbridge-object-deleted', + }); + + // Act + const result = S3EventNotificationEventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an S3 Object Notification EventBridge event for an object expired', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'eventbridge-object-expired', + }); + + // Act + const result = S3EventNotificationEventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an S3 Object Notification EventBridge event for an object restored', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'eventbridge-object-restored', + }); + + // Act + const result = S3EventNotificationEventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('parses an S3 event notification SQS event', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'sqs-event', + }); + + // Prepare + const result = S3SqsEventNotificationSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); - it('should parse s3 object event temp credentials', () => { - // ignore any because we don't want typed json - const s3ObjectEventTempCredentials = - // biome-ignore lint/suspicious/noExplicitAny: no specific typing needed - TestEvents.s3ObjectEventTempCredentials as any; - const parsed = S3ObjectLambdaEventSchema.parse( - s3ObjectEventTempCredentials - ); + it('throws if the S3 event notification SQS event is not valid', () => { + // Prepare + const event = { + Records: [], + }; - expect(parsed.userRequest).toEqual( - s3ObjectEventTempCredentials.userRequest - ); - expect(parsed.getObjectContext).toEqual( - s3ObjectEventTempCredentials.getObjectContext - ); - expect(parsed.configuration).toEqual( - s3ObjectEventTempCredentials.configuration - ); - expect(parsed.userRequest).toEqual( - s3ObjectEventTempCredentials.userRequest - ); - expect( - parsed.userIdentity?.sessionContext?.attributes.mfaAuthenticated - ).toEqual(false); + // Act & Assess + expect(() => S3SqsEventNotificationSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index de56e12a60..048b374ba5 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -23,18 +23,6 @@ const filenames = [ 'lambdaFunctionUrlEvent', 'lambdaFunctionUrlEventPathTrailingSlash', 'lambdaFunctionUrlIAMEvent', - 's3Event', - 's3EventBridgeNotificationObjectCreatedEvent', - 's3EventBridgeNotificationObjectDeletedEvent', - 's3EventBridgeNotificationObjectExpiredEvent', - 's3EventBridgeNotificationObjectRestoreCompletedEvent', - 's3EventDecodedKey', - 's3EventDeleteObject', - 's3EventDeleteObjectWithoutEtagSize', - 's3EventGlacier', - 's3ObjectEventIAMUser', - 's3ObjectEventTempCredentials', - 's3SqsEvent', 'sesEvent', 'vpcLatticeEvent', 'vpcLatticeEventPathTrailingSlash', From 89a62811c4b1732b77c225d64e8cda98b38968fa Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 24 Jan 2025 10:49:09 +0100 Subject: [PATCH 27/31] fix(parser): min array length on Records (#3521) --- packages/parser/src/schemas/ses.ts | 2 +- .../custom-resource-create.json} | 0 .../custom-resource-delete.json} | 0 .../custom-resource-update.json} | 0 .../events/{sesEvent.json => ses/base.json} | 0 .../parser/tests/unit/envelopes/sqs.test.ts | 3 +- .../tests/unit/parser.decorator.test.ts | 180 +++++++----------- .../parser/tests/unit/schema/appsync.test.ts | 99 +++------- .../cloudformation-custom-resource.test.ts | 117 ++++++++---- .../parser/tests/unit/schema/dynamodb.test.ts | 2 +- .../tests/unit/schema/eventbridge.test.ts | 2 +- .../parser/tests/unit/schema/lambda.test.ts | 24 ++- packages/parser/tests/unit/schema/ses.test.ts | 37 ++-- packages/parser/tests/unit/schema/utils.ts | 7 - 14 files changed, 223 insertions(+), 250 deletions(-) rename packages/parser/tests/events/{cloudFormationCustomResourceCreateEvent.json => cloudformation/custom-resource-create.json} (100%) rename packages/parser/tests/events/{cloudFormationCustomResourceDeleteEvent.json => cloudformation/custom-resource-delete.json} (100%) rename packages/parser/tests/events/{cloudFormationCustomResourceUpdateEvent.json => cloudformation/custom-resource-update.json} (100%) rename packages/parser/tests/events/{sesEvent.json => ses/base.json} (100%) diff --git a/packages/parser/src/schemas/ses.ts b/packages/parser/src/schemas/ses.ts index 0ed9866cc9..8121d70c70 100644 --- a/packages/parser/src/schemas/ses.ts +++ b/packages/parser/src/schemas/ses.ts @@ -173,7 +173,7 @@ const SesRecordSchema = z.object({ * @see {@link https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-examples.html} */ const SesSchema = z.object({ - Records: z.array(SesRecordSchema), + Records: z.array(SesRecordSchema).min(1), }); export { SesSchema, SesRecordSchema }; diff --git a/packages/parser/tests/events/cloudFormationCustomResourceCreateEvent.json b/packages/parser/tests/events/cloudformation/custom-resource-create.json similarity index 100% rename from packages/parser/tests/events/cloudFormationCustomResourceCreateEvent.json rename to packages/parser/tests/events/cloudformation/custom-resource-create.json diff --git a/packages/parser/tests/events/cloudFormationCustomResourceDeleteEvent.json b/packages/parser/tests/events/cloudformation/custom-resource-delete.json similarity index 100% rename from packages/parser/tests/events/cloudFormationCustomResourceDeleteEvent.json rename to packages/parser/tests/events/cloudformation/custom-resource-delete.json diff --git a/packages/parser/tests/events/cloudFormationCustomResourceUpdateEvent.json b/packages/parser/tests/events/cloudformation/custom-resource-update.json similarity index 100% rename from packages/parser/tests/events/cloudFormationCustomResourceUpdateEvent.json rename to packages/parser/tests/events/cloudformation/custom-resource-update.json diff --git a/packages/parser/tests/events/sesEvent.json b/packages/parser/tests/events/ses/base.json similarity index 100% rename from packages/parser/tests/events/sesEvent.json rename to packages/parser/tests/events/ses/base.json diff --git a/packages/parser/tests/unit/envelopes/sqs.test.ts b/packages/parser/tests/unit/envelopes/sqs.test.ts index d21273d47b..ea6135df98 100644 --- a/packages/parser/tests/unit/envelopes/sqs.test.ts +++ b/packages/parser/tests/unit/envelopes/sqs.test.ts @@ -51,7 +51,8 @@ describe('Envelope: SqsEnvelope', () => { expect(result).toStrictEqual([{ message: 'hello' }, { message: 'foo1' }]); }); }); - describe('safeParse', () => { + + describe('Method: safeParse', () => { it('parses an SQS event', () => { // Prepare const event = structuredClone(baseEvent); diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index 5ce14f7d04..9224ae181f 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -1,159 +1,109 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { LambdaInterface } from '@aws-lambda-powertools/commons/lib/esm/types'; +import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; import type { Context } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import type { z } from 'zod'; +import { type ZodSchema, z } from 'zod'; import { EventBridgeEnvelope } from '../../src/envelopes/index.js'; import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/index.js'; import { EventBridgeSchema } from '../../src/schemas/index.js'; -import type { EventBridgeEvent, ParsedResult } from '../../src/types'; -import { TestSchema, getTestEvent } from './schema/utils'; +import type { EventBridgeEvent, ParsedResult } from '../../src/types/index.js'; +import { getTestEvent } from './schema/utils.js'; -describe('Parser Decorator', () => { - const customEventBridgeSchema = EventBridgeSchema.extend({ - detail: TestSchema, +describe('Decorator: parser', () => { + const schema = z.object({ + name: z.string(), + age: z.number(), + }); + const payload = { + name: 'John Doe', + age: 30, + }; + const extendedSchema = EventBridgeSchema.extend({ + detail: schema, + }); + type event = z.infer; + const baseEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', }); - - type TestEvent = z.infer; class TestClass implements LambdaInterface { - @parser({ schema: TestSchema }) - public async handler( - event: TestEvent, - _context: Context - ): Promise { - return event; - } - - @parser({ schema: customEventBridgeSchema }) - public async handlerWithCustomSchema( - event: unknown, - _context: Context - ): Promise { + @parser({ schema: extendedSchema }) + public async handler(event: event, _context: Context): Promise { return event; } - @parser({ schema: TestSchema, envelope: EventBridgeEnvelope }) + @parser({ schema, envelope: EventBridgeEnvelope }) public async handlerWithParserCallsAnotherMethod( - event: TestEvent, + event: z.infer, _context: Context ): Promise { return this.anotherMethod(event); } - @parser({ schema: TestSchema, envelope: EventBridgeEnvelope }) - public async handlerWithSchemaAndEnvelope( - event: TestEvent, - _context: Context - ): Promise { - return event; - } - @parser({ - schema: TestSchema, + schema, safeParse: true, }) public async handlerWithSchemaAndSafeParse( - event: ParsedResult, + event: ParsedResult, _context: Context - ): Promise { + ): Promise> { return event; } @parser({ - schema: TestSchema, + schema, envelope: EventBridgeEnvelope, safeParse: true, }) public async harndlerWithEnvelopeAndSafeParse( - event: ParsedResult, + event: ParsedResult, _context: Context ): Promise { return event; } - private async anotherMethod(event: TestEvent): Promise { + private async anotherMethod( + event: z.infer + ): Promise> { return event; } } - const lambda = new TestClass(); - it('should parse custom schema event', async () => { - const testEvent = generateMock(TestSchema); + it('parses the event using the schema provided', async () => { + // Prepare + const event = structuredClone(baseEvent); + event.detail = payload; - const resp = await lambda.handler(testEvent, {} as Context); + // Act + // @ts-expect-error - extended schema + const result = await lambda.handler(event, {} as Context); - expect(resp).toEqual(testEvent); + // Assess + expect(result).toEqual(event); }); - it('should parse custom schema with envelope event', async () => { - const customPayload = generateMock(TestSchema); - const testEvent = getTestEvent({ - eventsPath: 'eventbridge', - filename: 'base', - }); - testEvent.detail = customPayload; + it('preserves the class method scope when decorated', async () => { + // Prepare + const event = structuredClone(baseEvent); + event.detail = payload; - const resp = await lambda.handlerWithSchemaAndEnvelope( - testEvent as unknown as TestEvent, + const result = await lambda.handlerWithParserCallsAnotherMethod( + // @ts-expect-error - extended schema + event, {} as Context ); - expect(resp).toEqual(customPayload); + expect(result).toEqual(event.detail); }); - it('should parse extended envelope event', async () => { - const customPayload = generateMock(TestSchema); - - const testEvent = generateMock(customEventBridgeSchema); - testEvent.detail = customPayload; - - const resp: z.infer = - (await lambda.handlerWithCustomSchema( - testEvent, - {} as Context - )) as z.infer; - - expect(customEventBridgeSchema.parse(resp)).toEqual(testEvent); - expect(resp.detail).toEqual(customPayload); - }); - - it('should parse and call private async method', async () => { - const customPayload = generateMock(TestSchema); - const testEvent = getTestEvent({ - eventsPath: 'eventbridge', - filename: 'base', - }); - testEvent.detail = customPayload; - - const resp = await lambda.handlerWithParserCallsAnotherMethod( - testEvent as unknown as TestEvent, - {} as Context - ); - - expect(resp).toEqual(customPayload); - }); - - it('should parse event with schema and safeParse', async () => { - const testEvent = generateMock(TestSchema); - - const resp = await lambda.handlerWithSchemaAndSafeParse( - testEvent as unknown as ParsedResult, - {} as Context - ); - - expect(resp).toEqual({ - success: true, - data: testEvent, - }); - }); - - it('should parse event with schema and safeParse and return error', async () => { + it('returns a parse error when schema validation fails with safeParse enabled', async () => { + // Act & Assess expect( await lambda.handlerWithSchemaAndSafeParse( - { foo: 'bar' } as unknown as ParsedResult, + { foo: 'bar' } as unknown as ParsedResult, {} as Context ) ).toEqual({ @@ -163,29 +113,29 @@ describe('Parser Decorator', () => { }); }); - it('should parse event with envelope and safeParse', async () => { - const testEvent = generateMock(TestSchema); - const event = getTestEvent({ - eventsPath: 'eventbridge', - filename: 'base', - }); - event.detail = testEvent; + it('parses the event with envelope and safeParse', async () => { + // Prepare + const event = structuredClone(baseEvent); + event.detail = payload; - const resp = await lambda.harndlerWithEnvelopeAndSafeParse( - event as unknown as ParsedResult, + // Act + const result = await lambda.harndlerWithEnvelopeAndSafeParse( + event as unknown as ParsedResult, {} as Context ); - expect(resp).toEqual({ + // Assess + expect(result).toEqual({ success: true, - data: testEvent, + data: event.detail, }); }); - it('should parse event with envelope and safeParse and return error', async () => { + it('returns a parse error when schema/envelope validation fails with safeParse enabled', async () => { + // Act & Assess expect( await lambda.harndlerWithEnvelopeAndSafeParse( - { foo: 'bar' } as unknown as ParsedResult, + { foo: 'bar' } as unknown as ParsedResult, {} as Context ) ).toEqual({ diff --git a/packages/parser/tests/unit/schema/appsync.test.ts b/packages/parser/tests/unit/schema/appsync.test.ts index fe6fffd7f1..50c09dcc31 100644 --- a/packages/parser/tests/unit/schema/appsync.test.ts +++ b/packages/parser/tests/unit/schema/appsync.test.ts @@ -1,24 +1,19 @@ -/** - * Test built-in AppSync resolver schemas - */ - import { describe, expect, it } from 'vitest'; import { AppSyncBatchResolverSchema, AppSyncResolverSchema, -} from '../../../src/schemas/appsync'; -import type { AppSyncResolverEvent } from '../../../src/types'; -import { getTestEvent, omit } from './utils'; +} from '../../../src/schemas/appsync.js'; +import type { AppSyncResolverEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from './utils.js'; -describe('AppSync Resolver Schemas', () => { +describe('Schema: AppSync Resolver', () => { const eventsPath = 'appsync'; - - const appSyncResolverEvent: AppSyncResolverEvent = getTestEvent({ + const appSyncResolverEvent = getTestEvent({ eventsPath, filename: 'resolver', }); - const table = [ + const events = [ { name: 'null source', event: { @@ -119,73 +114,33 @@ describe('AppSync Resolver Schemas', () => { }, ]; - describe('AppSync Resolver Schema', () => { - it('should return validation error when the event is invalid', () => { - const { error } = AppSyncResolverSchema.safeParse( - omit(['request', 'info'], appSyncResolverEvent) - ); + it.each(events)('parses an AppSyn resolver event with $name', ({ event }) => { + // Assess + const result = AppSyncResolverSchema.parse(event); - expect(error?.issues).toEqual([ - { - code: 'invalid_type', - expected: 'object', - received: 'undefined', - path: ['request'], - message: 'Required', - }, - { - code: 'invalid_type', - expected: 'object', - received: 'undefined', - path: ['info'], - message: 'Required', - }, - ]); - }); + // Assess + expect(result).toEqual(event); + }); - it('should parse resolver event without identity field', () => { - const event: Omit = omit( - ['identity'], - appSyncResolverEvent - ); - const parsedEvent = AppSyncResolverSchema.parse(event); - expect(parsedEvent).toEqual(event); - }); + it('throws when the event is not an AppSync resolver event', () => { + // Prepare + const event = omit( + ['request', 'info'], + structuredClone(appSyncResolverEvent) + ); - it.each(table)('should parse resolver event with $name', ({ event }) => { - const parsedEvent = AppSyncResolverSchema.parse(event); - expect(parsedEvent).toEqual(event); - }); + // Act & Assess + expect(() => AppSyncResolverSchema.parse(event)).toThrow(); }); - describe('Batch AppSync Resolver Schema', () => { - it('should return validation error when the event is invalid', () => { - const event = omit(['request', 'info'], appSyncResolverEvent); - - const { error } = AppSyncBatchResolverSchema.safeParse([event]); + it('parses batches of AppSync resolver events', () => { + // Prepare + const event = events.map((event) => structuredClone(event.event)); - expect(error?.issues).toEqual([ - { - code: 'invalid_type', - expected: 'object', - received: 'undefined', - path: [0, 'request'], - message: 'Required', - }, - { - code: 'invalid_type', - expected: 'object', - received: 'undefined', - path: [0, 'info'], - message: 'Required', - }, - ]); - }); + // Act + const result = AppSyncBatchResolverSchema.parse(event); - it('should parse batches of appsync resolver events', () => { - const events = table.map((table) => table.event); - const parsedEvent = AppSyncBatchResolverSchema.parse(events); - expect(parsedEvent).toEqual(events); - }); + // Assess + expect(result).toEqual(event); }); }); diff --git a/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts b/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts index 445aac7366..594069b926 100644 --- a/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts +++ b/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts @@ -3,38 +3,89 @@ import { CloudFormationCustomResourceCreateSchema, CloudFormationCustomResourceDeleteSchema, CloudFormationCustomResourceUpdateSchema, -} from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; - -describe('CloudFormationCustomResource ', () => { - it('should parse create event', () => { - const cloudFormationCustomResourceCreateEvent = - TestEvents.cloudFormationCustomResourceCreateEvent; - - expect( - CloudFormationCustomResourceCreateSchema.parse( - cloudFormationCustomResourceCreateEvent - ) - ).toEqual(cloudFormationCustomResourceCreateEvent); - }); - it('should parse update event', () => { - const cloudFormationCustomResourceUpdateEvent = - TestEvents.cloudFormationCustomResourceUpdateEvent; - - expect( - CloudFormationCustomResourceUpdateSchema.parse( - cloudFormationCustomResourceUpdateEvent - ) - ).toEqual(cloudFormationCustomResourceUpdateEvent); - }); - it('should parse delete event', () => { - const cloudFormationCustomResourceDeleteEvent = - TestEvents.cloudFormationCustomResourceDeleteEvent; - - expect( - CloudFormationCustomResourceDeleteSchema.parse( - cloudFormationCustomResourceDeleteEvent - ) - ).toEqual(cloudFormationCustomResourceDeleteEvent); +} from '../../../src/schemas/cloudformation-custom-resource.js'; +import type { + CloudFormationCustomResourceCreateEvent, + CloudFormationCustomResourceDeleteEvent, + CloudFormationCustomResourceUpdateEvent, +} from '../../../src/types/schema.js'; +import { getTestEvent, omit } from './utils.js'; + +describe('Schema: CloudFormationCustomResource ', () => { + const eventsPath = 'cloudformation'; + const baseCreate = getTestEvent({ + eventsPath, + filename: 'custom-resource-create', + }); + const baseDelete = getTestEvent({ + eventsPath, + filename: 'custom-resource-delete', + }); + const baseUpdate = getTestEvent({ + eventsPath, + filename: 'custom-resource-update', + }); + + it('parses a CloudFormation Custom Resource Create event', () => { + // Prepare + const event = structuredClone(baseCreate); + + // Act + const result = CloudFormationCustomResourceCreateSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not a CloudFormation Custom Resource Create event', () => { + // Prepare + const event = omit(['RequestType'], structuredClone(baseCreate)); + + // Act & Assess + expect(() => + CloudFormationCustomResourceCreateSchema.parse(event) + ).toThrow(); + }); + + it('parses a CloudFormation Custom Resource Delete event', () => { + // Prepare + const event = structuredClone(baseDelete); + + // Act + const result = CloudFormationCustomResourceDeleteSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not a CloudFormation Custom Resource Delete event', () => { + // Prepare + const event = omit(['LogicalResourceId'], structuredClone(baseDelete)); + + // Act & Assess + expect(() => + CloudFormationCustomResourceDeleteSchema.parse(event) + ).toThrow(); + }); + + it('parses a CloudFormation Custom Resource Update event', () => { + // Prepare + const event = structuredClone(baseUpdate); + + // Act + const result = CloudFormationCustomResourceUpdateSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not a CloudFormation Custom Resource Update event', () => { + // Prepare + const event = omit(['OldResourceProperties'], structuredClone(baseUpdate)); + + // Act & Assess + expect(() => + CloudFormationCustomResourceUpdateSchema.parse(event) + ).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/dynamodb.test.ts b/packages/parser/tests/unit/schema/dynamodb.test.ts index e3522edb85..db684da308 100644 --- a/packages/parser/tests/unit/schema/dynamodb.test.ts +++ b/packages/parser/tests/unit/schema/dynamodb.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { DynamoDBStreamSchema } from '../../../src/schemas/dynamodb.js'; import type { DynamoDBStreamEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from './utils.js'; describe('Schema: DynamoDB', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/eventbridge.test.ts b/packages/parser/tests/unit/schema/eventbridge.test.ts index 49297b3a6c..8e612ea425 100644 --- a/packages/parser/tests/unit/schema/eventbridge.test.ts +++ b/packages/parser/tests/unit/schema/eventbridge.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { EventBridgeSchema } from '../../../src/schemas/eventbridge.js'; import type { EventBridgeEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from './utils.js'; describe('Schema: EventBridge', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index 42adf84ff8..e57e0e4d23 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -1,21 +1,28 @@ import { describe, expect, it } from 'vitest'; -import { LambdaFunctionUrlSchema } from '../../../src/schemas/'; +import { LambdaFunctionUrlSchema } from '../../../src/schemas/lambda.js'; +import type { LambdaFunctionUrlEvent } from '../../../src/types/schema.js'; import { getTestEvent } from './utils.js'; describe('Schema: LambdaFunctionUrl', () => { const eventsPath = 'lambda'; - it('throw when the event is invalid', () => { + it('throws when the event is invalid', () => { // Prepare - const event = getTestEvent({ eventsPath, filename: 'invalid' }); + const event = getTestEvent({ + eventsPath, + filename: 'invalid', + }); // Act & Assess expect(() => LambdaFunctionUrlSchema.parse(event)).toThrow(); }); - it('parses a valid event', () => { + it('parses a valid Lambda Function URL event', () => { // Prepare - const event = getTestEvent({ eventsPath, filename: 'get-request' }); + const event = getTestEvent({ + eventsPath, + filename: 'get-request', + }); // Act const parsedEvent = LambdaFunctionUrlSchema.parse(event); @@ -24,9 +31,12 @@ describe('Schema: LambdaFunctionUrl', () => { expect(parsedEvent).toEqual(event); }); - it('parses iam event', () => { + it('parses a Lambda Function URL event with iam', () => { // Prepare - const event = getTestEvent({ eventsPath, filename: 'iam-auth' }); + const event = getTestEvent({ + eventsPath, + filename: 'iam-auth', + }); // Act const parsedEvent = LambdaFunctionUrlSchema.parse(event); diff --git a/packages/parser/tests/unit/schema/ses.test.ts b/packages/parser/tests/unit/schema/ses.test.ts index 67ee78ac95..3829dd8362 100644 --- a/packages/parser/tests/unit/schema/ses.test.ts +++ b/packages/parser/tests/unit/schema/ses.test.ts @@ -1,19 +1,32 @@ import { describe, expect, it } from 'vitest'; -import { SesRecordSchema, SesSchema } from '../../../src/schemas/'; -import type { SesEvent } from '../../../src/types'; -import type { SesRecord } from '../../../src/types/schema'; -import { TestEvents } from './utils.js'; +import { SesSchema } from '../../../src/schemas/ses.js'; +import type { SesEvent } from '../../../src/types/index.js'; +import { getTestEvent } from './utils.js'; -describe('SES', () => { - it('should parse ses event', () => { - const sesEvent = TestEvents.sesEvent; - expect(SesSchema.parse(sesEvent)).toEqual(sesEvent); +describe('Schema: SES', () => { + const baseEvent = getTestEvent({ + eventsPath: 'ses', + filename: 'base', }); - it('should parse record from ses event', () => { - const sesEvent: SesEvent = TestEvents.sesEvent as SesEvent; - const parsed: SesRecord = SesRecordSchema.parse(sesEvent.Records[0]); + it('parses a SES event', () => { + // Prepare + const event = structuredClone(baseEvent); - expect(parsed.ses.mail.source).toEqual('janedoe@example.com'); + // Act + const result = SesSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not a SES event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => SesSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index 048b374ba5..8ca72681e1 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -11,19 +11,12 @@ const filenames = [ 'albEvent', 'albEventPathTrailingSlash', 'albMultiValueHeadersEvent', - 'cloudFormationCustomResourceCreateEvent', - 'cloudFormationCustomResourceDeleteEvent', - 'cloudFormationCustomResourceUpdateEvent', 'kinesisFirehoseKinesisEvent', 'kinesisFirehosePutEvent', 'kinesisFirehoseSQSEvent', 'kinesisStreamCloudWatchLogsEvent', 'kinesisStreamEvent', 'kinesisStreamEventOneRecord', - 'lambdaFunctionUrlEvent', - 'lambdaFunctionUrlEventPathTrailingSlash', - 'lambdaFunctionUrlIAMEvent', - 'sesEvent', 'vpcLatticeEvent', 'vpcLatticeEventPathTrailingSlash', 'vpcLatticeEventV2PathTrailingSlash', From 4721ddaf943ec6695536bdd19e7c29ebf03cb4ed Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Fri, 24 Jan 2025 14:51:48 +0100 Subject: [PATCH 28/31] fix(parser): Firehose SQS should fail for invalid SQS message (#3526) --- .../parser/src/schemas/kinesis-firehose.ts | 10 ++- .../events/kinesis/firehose-sqs-invalid.json | 12 +++ .../parser/tests/unit/schema/kinesis.test.ts | 77 ++++++++++++++----- 3 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 packages/parser/tests/events/kinesis/firehose-sqs-invalid.json diff --git a/packages/parser/src/schemas/kinesis-firehose.ts b/packages/parser/src/schemas/kinesis-firehose.ts index a983a7b017..529eab2cf5 100644 --- a/packages/parser/src/schemas/kinesis-firehose.ts +++ b/packages/parser/src/schemas/kinesis-firehose.ts @@ -35,13 +35,19 @@ const KinesisFirehoseRecordSchema = KinesisFireHoseRecordBase.extend({ * Zod schema for a SQS record from an Kinesis Firehose event. */ const KinesisFirehoseSqsRecordSchema = KinesisFireHoseRecordBase.extend({ - data: z.string().transform((data) => { + data: z.string().transform((data, ctx) => { try { return SqsRecordSchema.parse( JSON.parse(Buffer.from(data, 'base64').toString('utf8')) ); } catch (e) { - return data; + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Failed to parse SQS record', + fatal: true, + }); + + return z.NEVER; } }), }); diff --git a/packages/parser/tests/events/kinesis/firehose-sqs-invalid.json b/packages/parser/tests/events/kinesis/firehose-sqs-invalid.json new file mode 100644 index 0000000000..757b8afbad --- /dev/null +++ b/packages/parser/tests/events/kinesis/firehose-sqs-invalid.json @@ -0,0 +1,12 @@ +{ + "invocationId": "556b67a3-48fc-4385-af49-e133aade9cb9", + "deliveryStreamArn": "arn:aws:firehose:us-east-1:123456789012:deliverystream/PUT-S3-tdyyE", + "region": "us-east-1", + "records": [ + { + "recordId": "49640912821178817833517986466168945147170627572855734274000000", + "approximateArrivalTimestamp": 1684864917398, + "data": "bm90IGEgdmFsaWQgamFzb24=" + } + ] +} diff --git a/packages/parser/tests/unit/schema/kinesis.test.ts b/packages/parser/tests/unit/schema/kinesis.test.ts index f2c638770a..5948e1fc45 100644 --- a/packages/parser/tests/unit/schema/kinesis.test.ts +++ b/packages/parser/tests/unit/schema/kinesis.test.ts @@ -21,7 +21,7 @@ import type { } from '../../../src/types/schema'; import { getTestEvent } from './utils.js'; -describe('Kinesis ', () => { +describe('Schema: Kinesis', () => { const eventsPath = 'kinesis'; const kinesisStreamEvent = getTestEvent({ @@ -56,8 +56,11 @@ describe('Kinesis ', () => { } ); - it('should parse kinesis event', () => { + it('parses kinesis event', () => { + // Prepare const testEvent = structuredClone(kinesisStreamEvent); + + // Act const parsed = KinesisDataStreamSchema.parse(testEvent); const transformedInput = { @@ -72,10 +75,14 @@ describe('Kinesis ', () => { }), }; + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should parse single kinesis record', () => { + it('parses single kinesis record', () => { + // Prepare const testEvent = structuredClone(kinesisStreamEventOneRecord); + + // Act const parsed = KinesisDataStreamSchema.parse(testEvent); const transformedInput = { @@ -92,10 +99,14 @@ describe('Kinesis ', () => { }), }; + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should parse Firehose event', () => { + it('parses Firehose event', () => { + // Prepare const testEvent = structuredClone(kinesisFirehoseEvent); + + // Act const parsed = KinesisFirehoseSchema.parse(testEvent); const transformedInput = { @@ -108,11 +119,15 @@ describe('Kinesis ', () => { }; }), }; + + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should parse Kinesis Firehose PutEvents event', () => { + it('parses Kinesis Firehose PutEvents event', () => { + // Prepare const testEvent = structuredClone(kinesisFirehosePutEvent); + // Act const parsed = KinesisFirehoseSchema.parse(testEvent); const transformedInput = { @@ -125,11 +140,14 @@ describe('Kinesis ', () => { }), }; + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should parse Firehose event with SQS event', () => { + it('parses Firehose event with SQS event', () => { + // Prepare const testEvent = structuredClone(kinesisFirehoseSQSEvent); + // Act const parsed = KinesisFirehoseSqsSchema.parse(testEvent); const transformedInput = { @@ -138,21 +156,24 @@ describe('Kinesis ', () => { return { ...record, data: JSON.parse( - Buffer.from(record.data as string, 'base64').toString() + Buffer.from(record.data as unknown as string, 'base64').toString() ), }; }), }; + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should parse Kinesis event with CloudWatch event', () => { + it('parses Kinesis event with CloudWatch event', () => { + // Prepare const testEvent = structuredClone(kinesisStreamCloudWatchLogsEvent); + // Act const parsed = KinesisDataStreamSchema.parse(testEvent); const transformedInput = { - Records: testEvent.Records.map((record, index) => { + Records: testEvent.Records.map((record) => { return { ...record, kinesis: { @@ -167,31 +188,39 @@ describe('Kinesis ', () => { }), }; + // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('should return original value if cannot parse KinesisFirehoseSqsRecord', () => { - const testEvent = structuredClone(kinesisFirehoseSQSEvent); - testEvent.records[0].data = 'not a valid json'; - - const parsed = KinesisFirehoseSqsSchema.parse(testEvent); + it('throws if cannot parse SQS record of KinesisFirehoseSqsRecord', () => { + // Prepare + const testEvent = getTestEvent({ + eventsPath, + filename: 'firehose-sqs-invalid', + }); - expect(parsed).toStrictEqual(testEvent); + // Act & Assess + expect(() => KinesisFirehoseSqsSchema.parse(testEvent)).toThrow(); }); - it('should parse a kinesis record from a kinesis event', () => { + it('parses a kinesis record from a kinesis event', () => { + // Prepare const testEvent: KinesisDataStreamEvent = structuredClone(kinesisStreamEvent); + // Act const parsedRecord = KinesisDataStreamRecord.parse(testEvent.Records[0]); + // Assess expect(parsedRecord.eventSource).toEqual('aws:kinesis'); expect(parsedRecord.eventName).toEqual('aws:kinesis:record'); }); - it('should parse a kinesis record from dynamodb stream event', () => { + it('parses a kinesis record from dynamodb stream event', () => { + // Prepare const testEvent = getTestEvent({ eventsPath, filename: 'dynamodb-stream', }); + const expectedRecords = [ { awsRegion: 'eu-west-1', @@ -231,26 +260,36 @@ describe('Kinesis ', () => { }, ]; + // Act const parsedRecord = KinesisDynamoDBStreamSchema.parse(testEvent); + // Assess expect(parsedRecord.Records.map((record) => record.kinesis.data)).toEqual( expectedRecords ); }); - it('should parse a kinesis firehose record from a kinesis firehose event', () => { + it('parses a kinesis firehose record from a kinesis firehose event', () => { + // Prepare const testEvent = structuredClone(kinesisFirehoseEvent); + + // Act const parsedRecord: KinesisFirehoseRecord = KinesisFirehoseRecordSchema.parse(testEvent.records[0]); + // Assess expect(parsedRecord.data).toEqual('Hello World'); }); - it('should parse a sqs record from a kinesis firehose event', () => { + it('parses a sqs record from a kinesis firehose event', () => { + // Prepare const kinesisFireHoseSqsEvent = structuredClone(kinesisFirehoseSQSEvent); + + // Act const parsed: KinesisFirehoseSqsRecord = KinesisFirehoseSqsRecordSchema.parse(kinesisFireHoseSqsEvent.records[0]); + // Assess expect(parsed.recordId).toEqual( '49640912821178817833517986466168945147170627572855734274000000' ); From d18e03d06e4fa4970aa24c4c041793d58a7cde79 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 27 Jan 2025 09:33:09 +0100 Subject: [PATCH 29/31] fix(parser): allow Kinesis envelopes to handle non-JSON strings (#3531) --- .../parser/src/envelopes/kinesis-firehose.ts | 93 ++++-- packages/parser/src/envelopes/kinesis.ts | 97 ++++-- packages/parser/src/schemas/dynamodb.ts | 142 ++++++--- .../parser/src/schemas/kinesis-firehose.ts | 4 +- packages/parser/src/schemas/kinesis.ts | 12 +- .../events/kinesis/stream-one-record.json | 20 -- .../unit/envelopes/kinesis-firehose.test.ts | 296 +++++++++++------- .../tests/unit/envelopes/kinesis.test.ts | 219 ++++++++++--- .../parser/tests/unit/schema/kinesis.test.ts | 61 ++-- packages/parser/typedoc.json | 3 +- 10 files changed, 630 insertions(+), 317 deletions(-) delete mode 100644 packages/parser/tests/events/kinesis/stream-one-record.json diff --git a/packages/parser/src/envelopes/kinesis-firehose.ts b/packages/parser/src/envelopes/kinesis-firehose.ts index 6f03bcd331..859f5b15f3 100644 --- a/packages/parser/src/envelopes/kinesis-firehose.ts +++ b/packages/parser/src/envelopes/kinesis-firehose.ts @@ -1,8 +1,11 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; -import { KinesisFirehoseSchema } from '../schemas/index.js'; +import { + type KinesisFirehoseRecordSchema, + KinesisFirehoseSchema, +} from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Kinesis Firehose Envelope to extract array of Records @@ -23,10 +26,33 @@ export const KinesisFirehoseEnvelope = { */ [envelopeDiscriminator]: 'array' as const, parse(data: unknown, schema: T): z.infer[] { - const parsedEnvelope = KinesisFirehoseSchema.parse(data); + let parsedEnvelope: z.infer; + try { + parsedEnvelope = KinesisFirehoseSchema.parse(data); + } catch (error) { + throw new ParseError('Failed to parse Kinesis Firehose envelope', { + cause: error as Error, + }); + } - return parsedEnvelope.records.map((record) => { - return Envelope.parse(record.data, schema); + return parsedEnvelope.records.map((record, recordIndex) => { + let parsedRecord: z.infer; + try { + parsedRecord = schema.parse(record.data); + } catch (error) { + throw new ParseError( + `Failed to parse Kinesis Firehose record at index ${recordIndex}`, + { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: ['records', recordIndex, 'data', ...issue.path], + })) + ), + } + ); + } + return parsedRecord; }); }, @@ -35,7 +61,6 @@ export const KinesisFirehoseEnvelope = { schema: T ): ParsedResult[]> { const parsedEnvelope = KinesisFirehoseSchema.safeParse(data); - if (!parsedEnvelope.success) { return { success: false, @@ -45,25 +70,49 @@ export const KinesisFirehoseEnvelope = { originalEvent: data, }; } - const parsedRecords: z.infer[] = []; - for (const record of parsedEnvelope.data.records) { - const parsedData = Envelope.safeParse(record.data, schema); - if (!parsedData.success) { - return { - success: false, - error: new ParseError('Failed to parse Kinesis Firehose record', { - cause: parsedData.error, - }), - originalEvent: data, - }; - } - parsedRecords.push(parsedData.data); + const result = parsedEnvelope.data.records.reduce<{ + success: boolean; + records: z.infer[]; + errors: { + [key: number | string]: { issues: ZodIssue[] }; + }; + }>( + (acc, record, index) => { + const parsedRecord = schema.safeParse(record.data); + + if (!parsedRecord.success) { + const issues = parsedRecord.error.issues.map((issue) => ({ + ...issue, + path: ['records', index, 'data', ...issue.path], + })); + acc.success = false; + acc.errors[index] = { issues }; + return acc; + } + + acc.records.push(parsedRecord.data); + return acc; + }, + { success: true, records: [], errors: {} } + ); + + if (result.success) { + return { success: true, data: result.records }; } + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse Kinesis Firehose records at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse Kinesis Firehose record at index ${Object.keys(result.errors)[0]}`; return { - success: true, - data: parsedRecords, + success: false, + error: new ParseError(errorMessage, { + cause: new ZodError( + Object.values(result.errors).flatMap((error) => error.issues) + ), + }), + originalEvent: data, }; }, }; diff --git a/packages/parser/src/envelopes/kinesis.ts b/packages/parser/src/envelopes/kinesis.ts index 248b753acf..9259a56f0b 100644 --- a/packages/parser/src/envelopes/kinesis.ts +++ b/packages/parser/src/envelopes/kinesis.ts @@ -1,8 +1,11 @@ -import type { ZodSchema, z } from 'zod'; +import { ZodError, type ZodIssue, type ZodSchema, type z } from 'zod'; import { ParseError } from '../errors.js'; -import { KinesisDataStreamSchema } from '../schemas/kinesis.js'; +import { + type KinesisDataStreamRecord, + KinesisDataStreamSchema, +} from '../schemas/kinesis.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Kinesis Data Stream Envelope to extract array of Records @@ -21,10 +24,39 @@ export const KinesisEnvelope = { */ [envelopeDiscriminator]: 'array' as const, parse(data: unknown, schema: T): z.infer[] { - const parsedEnvelope = KinesisDataStreamSchema.parse(data); + let parsedEnvelope: z.infer; + try { + parsedEnvelope = KinesisDataStreamSchema.parse(data); + } catch (error) { + throw new ParseError('Failed to parse Kinesis Data Stream envelope', { + cause: error as Error, + }); + } - return parsedEnvelope.Records.map((record) => { - return Envelope.parse(record.kinesis.data, schema); + return parsedEnvelope.Records.map((record, recordIndex) => { + let parsedRecord: z.infer; + try { + parsedRecord = schema.parse(record.kinesis.data); + } catch (error) { + throw new ParseError( + `Failed to parse Kinesis Data Stream record at index ${recordIndex}`, + { + cause: new ZodError( + (error as ZodError).issues.map((issue) => ({ + ...issue, + path: [ + 'Records', + recordIndex, + 'kinesis', + 'data', + ...issue.path, + ], + })) + ), + } + ); + } + return parsedRecord; }); }, @@ -43,25 +75,48 @@ export const KinesisEnvelope = { }; } - const parsedRecords: z.infer[] = []; + const result = parsedEnvelope.data.Records.reduce<{ + success: boolean; + records: z.infer[]; + errors: { index?: number; issues?: ZodIssue[] }; + }>( + (acc, record, index) => { + const parsedRecord = schema.safeParse(record.kinesis.data); - for (const record of parsedEnvelope.data.Records) { - const parsedRecord = Envelope.safeParse(record.kinesis.data, schema); - if (!parsedRecord.success) { - return { - success: false, - error: new ParseError('Failed to parse Kinesis Data Stream record', { - cause: parsedRecord.error, - }), - originalEvent: data, - }; - } - parsedRecords.push(parsedRecord.data); + if (!parsedRecord.success) { + const issues = parsedRecord.error.issues.map((issue) => ({ + ...issue, + path: ['Records', index, 'kinesis', 'data', ...issue.path], + })); + acc.success = false; + // @ts-expect-error - index is assigned + acc.errors[index] = { issues }; + return acc; + } + + acc.records.push(parsedRecord.data); + return acc; + }, + { success: true, records: [], errors: {} } + ); + + if (result.success) { + return { success: true, data: result.records }; } + const errorMessage = + Object.keys(result.errors).length > 1 + ? `Failed to parse Kinesis Data Stream records at indexes ${Object.keys(result.errors).join(', ')}` + : `Failed to parse Kinesis Data Stream record at index ${Object.keys(result.errors)[0]}`; return { - success: true, - data: parsedRecords, + success: false, + error: new ParseError(errorMessage, { + cause: new ZodError( + // @ts-expect-error - issues are assigned because success is false + Object.values(result.errors).flatMap((error) => error.issues) + ), + }), + originalEvent: data, }; }, }; diff --git a/packages/parser/src/schemas/dynamodb.ts b/packages/parser/src/schemas/dynamodb.ts index 6f4f51ca80..ee361b783b 100644 --- a/packages/parser/src/schemas/dynamodb.ts +++ b/packages/parser/src/schemas/dynamodb.ts @@ -1,5 +1,7 @@ import { unmarshallDynamoDB } from '@aws-lambda-powertools/commons/utils/unmarshallDynamoDB'; import { z } from 'zod'; +import type { KinesisEnvelope } from '../envelopes/kinesis.js'; +import type { DynamoDBMarshalled } from '../helpers/dynamodb.js'; const DynamoDBStreamChangeRecordBase = z.object({ ApproximateCreationDateTime: z.number().optional(), @@ -16,53 +18,61 @@ const DynamoDBStreamChangeRecordBase = z.object({ ]), }); -const DynamoDBStreamChangeRecord = DynamoDBStreamChangeRecordBase.transform( - (object, ctx) => { - const result = { ...object }; - - const unmarshallAttributeValue = ( - imageName: 'NewImage' | 'OldImage' | 'Keys', - image: Record - ) => { - try { - // @ts-expect-error - return unmarshallDynamoDB(image) as Record; - } catch (err) { - ctx.addIssue({ - code: 'custom', - message: `Could not unmarshall ${imageName} in DynamoDB stream record`, - fatal: true, - path: [imageName], - }); - return z.NEVER; - } - }; +const DynamoDBStreamToKinesisChangeRecord = DynamoDBStreamChangeRecordBase.omit( + { + SequenceNumber: true, + StreamViewType: true, + } +); - const unmarshalledKeys = unmarshallAttributeValue('Keys', object.Keys); - if (unmarshalledKeys === z.NEVER) return z.NEVER; - // @ts-expect-error - We are intentionally mutating the object - result.Keys = unmarshalledKeys; +const unmarshallDynamoDBTransform = ( + object: + | z.infer + | z.infer, + ctx: z.RefinementCtx +) => { + const result = { ...object }; - if (object.NewImage) { - const unmarshalled = unmarshallAttributeValue( - 'NewImage', - object.NewImage - ); - if (unmarshalled === z.NEVER) return z.NEVER; - result.NewImage = unmarshalled; + const unmarshallAttributeValue = ( + imageName: 'NewImage' | 'OldImage' | 'Keys', + image: Record + ) => { + try { + // @ts-expect-error + return unmarshallDynamoDB(image) as Record; + } catch (err) { + ctx.addIssue({ + code: 'custom', + message: `Could not unmarshall ${imageName} in DynamoDB stream record`, + fatal: true, + path: [imageName], + }); + return z.NEVER; } + }; - if (object.OldImage) { - const unmarshalled = unmarshallAttributeValue( - 'OldImage', - object.OldImage - ); - if (unmarshalled === z.NEVER) return z.NEVER; - result.OldImage = unmarshalled; - } + const unmarshalledKeys = unmarshallAttributeValue('Keys', object.Keys); + if (unmarshalledKeys === z.NEVER) return z.NEVER; + // @ts-expect-error - We are intentionally mutating the object + result.Keys = unmarshalledKeys; - return result; + if (object.NewImage) { + const unmarshalled = unmarshallAttributeValue('NewImage', object.NewImage); + if (unmarshalled === z.NEVER) return z.NEVER; + result.NewImage = unmarshalled; } + + if (object.OldImage) { + const unmarshalled = unmarshallAttributeValue('OldImage', object.OldImage); + if (unmarshalled === z.NEVER) return z.NEVER; + result.OldImage = unmarshalled; + } + + return result; +}; + +const DynamoDBStreamChangeRecord = DynamoDBStreamChangeRecordBase.transform( + unmarshallDynamoDBTransform ); const UserIdentity = z.object({ @@ -81,14 +91,55 @@ const DynamoDBStreamRecord = z.object({ userIdentity: UserIdentity.optional(), }); +/** + * Zod schema for Amazon DynamoDB Stream event sent to an Amazon Kinesis Stream. + * + * This schema is best used in conjunction with the {@link KinesisEnvelope | `KinesisEnvelope`} when + * you want to work with the DynamoDB stream event coming from an Amazon Kinesis Stream. + * + * By default, we unmarshall the `dynamodb.Keys`, `dynamodb.NewImage`, and `dynamodb.OldImage` fields + * for you. + * + * If you want to extend the schema and provide your own Zod schema for any of these fields, + * you can use the {@link DynamoDBMarshalled | `DynamoDBMarshalled`} helper. In that case, we won't unmarshall the other fields. + * + * To extend the schema, you can use the {@link DynamoDBStreamToKinesisRecord | `DynamoDBStreamToKinesisRecord`} child schema and the {@link DynamoDBMarshalled | `DynamoDBMarshalled`} + * helper together. + * + * @example + * ```ts + * import { + * DynamoDBStreamToKinesisRecord, + * DynamoDBStreamToKinesisChangeRecord, + * } from '@aws-lambda-powertools/parser/schemas/dynamodb'; + * import { KinesisEnvelope } from '@aws-lambda-powertools/parser/envelopes/dynamodb'; + * import { DynamoDBMarshalled } from '@aws-lambda-powertools/parser/helpers/dynamodb'; + * + * const CustomSchema = DynamoDBStreamToKinesisRecord.extend({ + * dynamodb: DynamoDBStreamToKinesisChangeRecord.extend({ + * NewImage: DynamoDBMarshalled( + * z.object({ + * id: z.string(), + * attribute: z.number(), + * stuff: z.array(z.string()), + * }) + * ), + * // Add the lines below only if you want these keys to be unmarshalled + * Keys: DynamoDBMarshalled(z.unknown()), + * OldImage: DynamoDBMarshalled(z.unknown()), + * }), + * }); + * + * type CustomEvent = z.infer; + * ``` + */ const DynamoDBStreamToKinesisRecord = DynamoDBStreamRecord.extend({ recordFormat: z.literal('application/json'), tableName: z.string(), userIdentity: UserIdentity.nullish(), - dynamodb: DynamoDBStreamChangeRecordBase.omit({ - SequenceNumber: true, - StreamViewType: true, - }), + dynamodb: DynamoDBStreamToKinesisChangeRecord.transform( + unmarshallDynamoDBTransform + ), }).omit({ eventVersion: true, eventSourceARN: true, @@ -175,6 +226,7 @@ const DynamoDBStreamSchema = z.object({ export { DynamoDBStreamToKinesisRecord, + DynamoDBStreamToKinesisChangeRecord, DynamoDBStreamSchema, DynamoDBStreamRecord, DynamoDBStreamChangeRecord, diff --git a/packages/parser/src/schemas/kinesis-firehose.ts b/packages/parser/src/schemas/kinesis-firehose.ts index 529eab2cf5..cb0bbab57b 100644 --- a/packages/parser/src/schemas/kinesis-firehose.ts +++ b/packages/parser/src/schemas/kinesis-firehose.ts @@ -95,7 +95,7 @@ const KinesisFirehoseSqsRecordSchema = KinesisFireHoseRecordBase.extend({ * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/services-kinesisfirehose.html} */ const KinesisFirehoseSchema = KinesisFireHoseBaseSchema.extend({ - records: z.array(KinesisFirehoseRecordSchema), + records: z.array(KinesisFirehoseRecordSchema).min(1), }); /** @@ -120,7 +120,7 @@ const KinesisFirehoseSchema = KinesisFireHoseBaseSchema.extend({ * @see {@link types.KinesisFireHoseSqsEvent | KinesisFireHoseSqsEvent} */ const KinesisFirehoseSqsSchema = KinesisFireHoseBaseSchema.extend({ - records: z.array(KinesisFirehoseSqsRecordSchema), + records: z.array(KinesisFirehoseSqsRecordSchema).min(1), }); export { diff --git a/packages/parser/src/schemas/kinesis.ts b/packages/parser/src/schemas/kinesis.ts index 083f39ddce..8e21724305 100644 --- a/packages/parser/src/schemas/kinesis.ts +++ b/packages/parser/src/schemas/kinesis.ts @@ -1,7 +1,10 @@ import { gunzipSync } from 'node:zlib'; +import { fromBase64 } from '@aws-lambda-powertools/commons/utils/base64'; import { z } from 'zod'; import { DynamoDBStreamToKinesisRecord } from './dynamodb.js'; +const decoder = new TextDecoder(); + const KinesisDataStreamRecordPayload = z.object({ kinesisSchemaVersion: z.string(), partitionKey: z.string(), @@ -9,7 +12,7 @@ const KinesisDataStreamRecordPayload = z.object({ approximateArrivalTimestamp: z.number(), data: z.string().transform((data) => { const decompressed = decompress(data); - const decoded = Buffer.from(data, 'base64').toString('utf-8'); + const decoded = decoder.decode(fromBase64(data, 'base64')); try { // If data was not compressed, try to parse it as JSON otherwise it must be string return decompressed === data ? JSON.parse(decoded) : decompressed; @@ -21,7 +24,7 @@ const KinesisDataStreamRecordPayload = z.object({ const decompress = (data: string): string => { try { - return JSON.parse(gunzipSync(Buffer.from(data, 'base64')).toString('utf8')); + return JSON.parse(gunzipSync(fromBase64(data, 'base64')).toString('utf8')); } catch (e) { return data; } @@ -45,7 +48,8 @@ const KinesisDynamoDBStreamSchema = z.object({ data: z .string() .transform((data) => { - return JSON.parse(Buffer.from(data, 'base64').toString('utf8')); + const decoded = decoder.decode(fromBase64(data, 'base64')); + return JSON.parse(decoded); }) .pipe(DynamoDBStreamToKinesisRecord), }), @@ -100,7 +104,7 @@ const KinesisDynamoDBStreamSchema = z.object({ * */ const KinesisDataStreamSchema = z.object({ - Records: z.array(KinesisDataStreamRecord), + Records: z.array(KinesisDataStreamRecord).min(1), }); export { diff --git a/packages/parser/tests/events/kinesis/stream-one-record.json b/packages/parser/tests/events/kinesis/stream-one-record.json deleted file mode 100644 index 1c65b949dd..0000000000 --- a/packages/parser/tests/events/kinesis/stream-one-record.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Records": [ - { - "kinesis": { - "kinesisSchemaVersion": "1.0", - "partitionKey": "1", - "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", - "data": "eyJtZXNzYWdlIjogInRlc3QgbWVzc2FnZSIsICJ1c2VybmFtZSI6ICJ0ZXN0In0=", - "approximateArrivalTimestamp": 1545084650.987 - }, - "eventSource": "aws:kinesis", - "eventVersion": "1.0", - "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", - "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", - "awsRegion": "us-east-2", - "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" - } - ] -} diff --git a/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts b/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts index 32d7bb610f..b271721381 100644 --- a/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts +++ b/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts @@ -1,157 +1,231 @@ -import { generateMock } from '@anatine/zod-mock'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; -import { ParseError } from '../../../src'; +import { ZodError, z } from 'zod'; import { KinesisFirehoseEnvelope } from '../../../src/envelopes/index.js'; +import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; import type { KinesisFireHoseEvent, KinesisFireHoseSqsEvent, -} from '../../../src/types'; -import { TestSchema, getTestEvent } from '../schema/utils.js'; +} from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('Kinesis Firehose Envelope', () => { +const encode = (data: unknown) => Buffer.from(String(data)).toString('base64'); + +describe('Envelope: Kinesis Firehose', () => { const eventsPath = 'kinesis'; const kinesisFirehosePutEvent = getTestEvent({ eventsPath, filename: 'firehose-put', }); - const kinesisFirehoseSQSEvent = getTestEvent({ eventsPath, filename: 'firehose-sqs', }); - const kinesisFirehoseEvent = getTestEvent({ - eventsPath, - filename: 'firehose', - }); - - describe('parse', () => { - it('should parse records for PutEvent', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehosePutEvent); - - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); - }); - - const resp = KinesisFirehoseEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual([mock, mock]); + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + + // Act & Assess + expect(() => KinesisFirehoseEnvelope.parse(event, z.number())).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse Kinesis Firehose record at index 0' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['records', 0, 'data'], + message: 'Expected number, received string', + }, + ], + }), + }) + ); }); - it('should parse a single record for SQS event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehoseSQSEvent); + it('parses a Kinesis Firehose event', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + event.records[1].data = encode('foo'); - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); - }); + // Act + const result = KinesisFirehoseEnvelope.parse(event, z.string()); - const resp = KinesisFirehoseEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual([mock]); + // Assess + expect(result).toEqual(['Hello World', 'foo']); }); - it('should parse records for kinesis event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehoseEvent); - - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); - }); - - const resp = KinesisFirehoseEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual([mock, mock]); - }); - it('should throw if record is not base64 encoded', () => { - const testEvent = structuredClone(kinesisFirehosePutEvent); + it('parses a Kinesis Firehose event and applies the schema transformation', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + event.records[0].data = encode(JSON.stringify({ Hello: 'foo' })); - testEvent.records.map((record) => { - record.data = 'not base64 encoded'; - }); + // Act + const result = KinesisFirehoseEnvelope.parse( + event, + JSONStringified(z.object({ Hello: z.string() })) + ); - expect(() => { - KinesisFirehoseEnvelope.parse(testEvent, TestSchema); - }).toThrow(); + // Assess + expect(result).toStrictEqual([{ Hello: 'foo' }, { Hello: 'World' }]); }); - it('should throw if envelope is invalid', () => { - expect(() => { - KinesisFirehoseEnvelope.parse({ foo: 'bar' }, TestSchema); - }).toThrow(); - }); - it('should throw when schema does not match record', () => { - const testEvent = structuredClone(kinesisFirehosePutEvent); - - testEvent.records.map((record) => { - record.data = Buffer.from('not a valid json').toString('base64'); - }); - expect(() => { - KinesisFirehoseEnvelope.parse(testEvent, TestSchema); - }).toThrow(); + it('throws if the event is not a Kinesis Data Stream event', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + event.records = []; + + // Act & Assess + expect(() => KinesisFirehoseEnvelope.parse(event, z.string())).toThrow( + new ParseError('Failed to parse Kinesis Firehose envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['records'], + }, + ]), + }) + ); }); }); - describe('safeParse', () => { - it('should parse records for PutEvent', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehosePutEvent); - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); - }); - - const resp = KinesisFirehoseEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: [mock, mock] }); - }); - - it('should parse a single record for SQS event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehoseSQSEvent); + describe('Method: safeParse', () => { + it('parses a Kinesis Firehose event with SQS data', () => { + // Prepare + const event = structuredClone(kinesisFirehoseSQSEvent); + + // Act + const result = KinesisFirehoseEnvelope.safeParse( + event, + JSONStringified( + z.object({ + body: z.string(), + }) + ) + ); - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); + // Assess + expect(result).toEqual({ + success: true, + data: [ + { + body: 'Test message.', + }, + ], }); - - const resp = KinesisFirehoseEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: [mock] }); }); - it('should parse records for kinesis event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisFirehoseEvent); + it('returns an error if the event is not a Kinesis Data Stream event', () => { + // Prepare + const event = omit( + ['invocationId'], + structuredClone(kinesisFirehosePutEvent) + ); + + // Act + const result = KinesisFirehoseEnvelope.safeParse(event, z.string()); - testEvent.records.map((record) => { - record.data = Buffer.from(JSON.stringify(mock)).toString('base64'); + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError('Failed to parse Kinesis Firehose envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['invocationId'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); - - const resp = KinesisFirehoseEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: [mock, mock] }); }); - it('should return original event if envelope is invalid', () => { - const parseResult = KinesisFirehoseEnvelope.safeParse( - { foo: 'bar' }, - TestSchema + + it('returns an error if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + event.records[0].data = encode(JSON.stringify({ foo: 'bar' })); + + // Act + const result = KinesisFirehoseEnvelope.safeParse( + event, + JSONStringified( + z.object({ + foo: z.string(), + }) + ) ); - expect(parseResult).toEqual({ + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + error: new ParseError( + 'Failed to parse Kinesis Firehose record at index 1', + { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['records', 1, 'data', 'foo'], + message: 'Required', + }, + ]), + } + ), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); - it('should return original event if record is not base64 encoded', () => { - const testEvent = structuredClone(kinesisFirehosePutEvent); - testEvent.records.map((record) => { - record.data = 'not base64 encoded'; - }); + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(kinesisFirehosePutEvent); + + // Act + const result = KinesisFirehoseEnvelope.safeParse( + event, + z.object({ + foo: z.string(), + }) + ); - expect(KinesisFirehoseEnvelope.safeParse(testEvent, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError( + 'Failed to parse Kinesis Firehose records at indexes 0, 1', + { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['records', 0, 'data'], + message: 'Expected object, received string', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['records', 1, 'data'], + message: 'Expected object, received string', + }, + ]), + } + ), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/envelopes/kinesis.test.ts b/packages/parser/tests/unit/envelopes/kinesis.test.ts index fc04c4e9d4..df9d51dd0c 100644 --- a/packages/parser/tests/unit/envelopes/kinesis.test.ts +++ b/packages/parser/tests/unit/envelopes/kinesis.test.ts @@ -1,79 +1,200 @@ -import { generateMock } from '@anatine/zod-mock'; import { describe, expect, it } from 'vitest'; +import { ZodError, z } from 'zod'; import { KinesisEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import type { KinesisDataStreamEvent } from '../../../src/types/schema.js'; -import { TestSchema, getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../schema/utils.js'; -describe('KinesisEnvelope', () => { - const eventsPath = 'kinesis'; +const encode = (data: unknown) => Buffer.from(String(data)).toString('base64'); +describe('Envelope: Kinesis', () => { + const eventsPath = 'kinesis'; const kinesisStreamEvent = getTestEvent({ eventsPath, filename: 'stream', }); - describe('parse', () => { - it('should parse Kinesis Stream event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisStreamEvent); - - testEvent.Records.map((record) => { - record.kinesis.data = Buffer.from(JSON.stringify(mock)).toString( - 'base64' - ); - }); + describe('Method: parse', () => { + it('throws if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(kinesisStreamEvent); - const resp = KinesisEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual([mock, mock]); + // Act & Assess + expect(() => KinesisEnvelope.parse(event, z.number())).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse Kinesis Data Stream record at index 0' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'number', + received: 'string', + path: ['Records', 0, 'kinesis', 'data'], + message: 'Expected number, received string', + }, + ], + }), + }) + ); }); - it('should throw if envelope is invalid', () => { - expect(() => KinesisEnvelope.parse({ foo: 'bar' }, TestSchema)).toThrow(); + + it('parses a Kinesis Data Stream event', () => { + // Prepare + const event = structuredClone(kinesisStreamEvent); + + // Act + const result = KinesisEnvelope.parse(event, z.string()); + + // Assess + expect(result).toEqual([ + 'Hello, this is a test.', + 'This is only a test.', + ]); }); - it('should throw if record is invalid', () => { - const testEvent = structuredClone(kinesisStreamEvent); - testEvent.Records[0].kinesis.data = 'invalid'; - expect(() => KinesisEnvelope.parse(testEvent, TestSchema)).toThrow(); + it('throws if the event is not a Kinesis Data Stream event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act & Assess + expect(() => KinesisEnvelope.parse(event, z.string())).toThrow( + new ParseError('Failed to parse Kinesis Data Stream envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['Records'], + }, + ]), + }) + ); }); }); - describe('safeParse', () => { - it('should parse Kinesis Stream event', () => { - const mock = generateMock(TestSchema); - const testEvent = structuredClone(kinesisStreamEvent); + describe('Method: safeParse', () => { + it('parses a Kinesis Data Stream event', () => { + // Prepare + const event = structuredClone(kinesisStreamEvent); - testEvent.Records.map((record) => { - record.kinesis.data = Buffer.from(JSON.stringify(mock)).toString( - 'base64' - ); - }); + // Act + const result = KinesisEnvelope.safeParse(event, z.string()); - const resp = KinesisEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: [mock, mock] }); + // Assess + expect(result).toEqual({ + success: true, + data: ['Hello, this is a test.', 'This is only a test.'], + }); }); - it('should return original event if envelope is invalid', () => { - const testEvent = { foo: 'bar' }; - const resp = KinesisEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ + + it('returns an error if the event is not a Kinesis Data Stream event', () => { + // Prepare + const event = { + Records: [], + }; + + // Act + const result = KinesisEnvelope.safeParse(event, z.string()); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError('Failed to parse Kinesis Data Stream envelope', { + cause: new ZodError([ + { + code: 'too_small', + minimum: 1, + type: 'array', + inclusive: true, + exact: false, + message: 'Array must contain at least 1 element(s)', + path: ['Records'], + }, + ]), + }), + originalEvent: event, }); }); - it('should return original event if record is invalid', () => { - const testEvent = structuredClone(kinesisStreamEvent); - testEvent.Records[0].kinesis.data = 'invalid'; - const parseResult = KinesisEnvelope.safeParse(testEvent, TestSchema); - expect(parseResult).toEqual({ + + it('returns an error if one of the payloads does not match the schema', () => { + // Prepare + const event = structuredClone(kinesisStreamEvent); + event.Records[0].kinesis.data = encode(JSON.stringify({ foo: 'bar' })); + + // Act + const result = KinesisEnvelope.safeParse( + event, + z.object({ + foo: z.string(), + }) + ); + + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError( + 'Failed to parse Kinesis Data Stream record at index 1', + { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['Records', 1, 'kinesis', 'data'], + message: 'Expected object, received string', + }, + ]), + } + ), + originalEvent: event, }); + }); + + it('returns a combined error if multiple records fail to parse', () => { + // Prepare + const event = structuredClone(kinesisStreamEvent); + + // Act + const result = KinesisEnvelope.safeParse( + event, + z.object({ + foo: z.string(), + }) + ); - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(SyntaxError); - } + // Assess + expect(result).toEqual({ + success: false, + error: new ParseError( + 'Failed to parse Kinesis Data Stream records at indexes 0, 1', + { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['Records', 0, 'kinesis', 'data'], + message: 'Expected object, received string', + }, + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['Records', 1, 'kinesis', 'data'], + message: 'Expected object, received string', + }, + ]), + } + ), + originalEvent: event, + }); }); }); }); diff --git a/packages/parser/tests/unit/schema/kinesis.test.ts b/packages/parser/tests/unit/schema/kinesis.test.ts index 5948e1fc45..4751348a7f 100644 --- a/packages/parser/tests/unit/schema/kinesis.test.ts +++ b/packages/parser/tests/unit/schema/kinesis.test.ts @@ -1,24 +1,24 @@ import { gunzipSync } from 'node:zlib'; import { describe, expect, it } from 'vitest'; import { - KinesisDataStreamRecord, - KinesisDataStreamSchema, KinesisFirehoseRecordSchema, KinesisFirehoseSchema, KinesisFirehoseSqsRecordSchema, KinesisFirehoseSqsSchema, -} from '../../../src/schemas/'; -import { KinesisDynamoDBStreamSchema } from '../../../src/schemas/kinesis'; +} from '../../../src/schemas/kinesis-firehose.js'; +import { + KinesisDataStreamRecord, + KinesisDataStreamSchema, + KinesisDynamoDBStreamSchema, +} from '../../../src/schemas/kinesis.js'; import type { KinesisDataStreamEvent, + KinesisDynamoDBStreamEvent, KinesisFireHoseEvent, KinesisFireHoseSqsEvent, -} from '../../../src/types'; -import type { - KinesisDynamoDBStreamEvent, KinesisFirehoseRecord, KinesisFirehoseSqsRecord, -} from '../../../src/types/schema'; +} from '../../../src/types/schema.js'; import { getTestEvent } from './utils.js'; describe('Schema: Kinesis', () => { @@ -29,11 +29,6 @@ describe('Schema: Kinesis', () => { filename: 'stream', }); - const kinesisStreamEventOneRecord = getTestEvent({ - eventsPath, - filename: 'stream-one-record', - }); - const kinesisFirehoseEvent = getTestEvent({ eventsPath, filename: 'firehose', @@ -78,30 +73,7 @@ describe('Schema: Kinesis', () => { // Assess expect(parsed).toStrictEqual(transformedInput); }); - it('parses single kinesis record', () => { - // Prepare - const testEvent = structuredClone(kinesisStreamEventOneRecord); - - // Act - const parsed = KinesisDataStreamSchema.parse(testEvent); - - const transformedInput = { - Records: testEvent.Records.map((record, index) => { - return { - ...record, - kinesis: { - ...record.kinesis, - data: JSON.parse( - Buffer.from(record.kinesis.data, 'base64').toString() - ), - }, - }; - }), - }; - // Assess - expect(parsed).toStrictEqual(transformedInput); - }); it('parses Firehose event', () => { // Prepare const testEvent = structuredClone(kinesisFirehoseEvent); @@ -123,6 +95,7 @@ describe('Schema: Kinesis', () => { // Assess expect(parsed).toStrictEqual(transformedInput); }); + it('parses Kinesis Firehose PutEvents event', () => { // Prepare const testEvent = structuredClone(kinesisFirehosePutEvent); @@ -143,6 +116,7 @@ describe('Schema: Kinesis', () => { // Assess expect(parsed).toStrictEqual(transformedInput); }); + it('parses Firehose event with SQS event', () => { // Prepare const testEvent = structuredClone(kinesisFirehoseSQSEvent); @@ -165,6 +139,7 @@ describe('Schema: Kinesis', () => { // Assess expect(parsed).toStrictEqual(transformedInput); }); + it('parses Kinesis event with CloudWatch event', () => { // Prepare const testEvent = structuredClone(kinesisStreamCloudWatchLogsEvent); @@ -191,6 +166,7 @@ describe('Schema: Kinesis', () => { // Assess expect(parsed).toStrictEqual(transformedInput); }); + it('throws if cannot parse SQS record of KinesisFirehoseSqsRecord', () => { // Prepare const testEvent = getTestEvent({ @@ -201,6 +177,7 @@ describe('Schema: Kinesis', () => { // Act & Assess expect(() => KinesisFirehoseSqsSchema.parse(testEvent)).toThrow(); }); + it('parses a kinesis record from a kinesis event', () => { // Prepare const testEvent: KinesisDataStreamEvent = @@ -231,10 +208,10 @@ describe('Schema: Kinesis', () => { tableName: 'PowertoolsEventsStack-DynamoDBTable59784FC0-8NKAMTERTAXY', dynamodb: { ApproximateCreationDateTime: 1731924555370, - Keys: { id: { S: 'record-1qit2y819gi' } }, + Keys: { id: 'record-1qit2y819gi' }, NewImage: { - id: { S: 'record-1qit2y819gi' }, - data: { S: 'data-x6aq7ckdpgk' }, + id: 'record-1qit2y819gi', + data: 'data-x6aq7ckdpgk', }, SizeBytes: 60, }, @@ -249,10 +226,10 @@ describe('Schema: Kinesis', () => { tableName: 'PowertoolsEventsStack-DynamoDBTable59784FC0-8NKAMTERTAXY', dynamodb: { ApproximateCreationDateTime: 1731924555370, - Keys: { id: { S: 'record-fvxn3q4q5jw' } }, + Keys: { id: 'record-fvxn3q4q5jw' }, NewImage: { - id: { S: 'record-fvxn3q4q5jw' }, - data: { S: 'data-4eompjs89n5' }, + id: 'record-fvxn3q4q5jw', + data: 'data-4eompjs89n5', }, SizeBytes: 60, }, diff --git a/packages/parser/typedoc.json b/packages/parser/typedoc.json index bda7b8332e..0650b79fad 100644 --- a/packages/parser/typedoc.json +++ b/packages/parser/typedoc.json @@ -6,7 +6,8 @@ "./src/types/index.ts", "./src/envelopes/index.ts", "./src/schemas/index.ts", - "./src/helpers.ts" + "./src/helpers.ts", + "./src/helpers/dynamodb.ts" ], "readme": "README.md" } From 603988d4ad187501aa93ea405a3a136e260dba13 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 27 Jan 2025 10:29:45 +0100 Subject: [PATCH 30/31] fix(parser): allow VPC envelopes to handle non-JSON strings (#3534) --- package-lock.json | 64 ------- packages/parser/package.json | 3 - packages/parser/src/envelopes/envelope.ts | 77 +------- packages/parser/src/envelopes/vpc-lattice.ts | 45 ++--- .../parser/src/envelopes/vpc-latticev2.ts | 45 ++--- .../base.json} | 0 .../base.json} | 6 +- .../vpcLatticeEventPathTrailingSlash.json | 15 -- .../vpcLatticeEventV2PathTrailingSlash.json | 30 ---- packages/parser/tests/unit/envelope.test.ts | 83 --------- .../parser/tests/unit/envelopes/apigw.test.ts | 2 +- .../tests/unit/envelopes/apigwv2.test.ts | 2 +- .../tests/unit/envelopes/cloudwatch.test.ts | 2 +- .../tests/unit/envelopes/dynamodb.test.ts | 2 +- .../tests/unit/envelopes/eventbridge.test.ts | 2 +- .../parser/tests/unit/envelopes/kafka.test.ts | 2 +- .../unit/envelopes/kinesis-firehose.test.ts | 2 +- .../tests/unit/envelopes/kinesis.test.ts | 2 +- .../tests/unit/envelopes/lambda.test.ts | 2 +- .../parser/tests/unit/envelopes/sns.test.ts | 2 +- .../tests/unit/envelopes/snssqs.test.ts | 2 +- .../parser/tests/unit/envelopes/sqs.test.ts | 2 +- .../tests/unit/envelopes/vpc-lattice.test.ts | 166 +++++++++-------- .../unit/envelopes/vpc-latticev2.test.ts | 168 ++++++++++-------- packages/parser/tests/unit/helpers.test.ts | 2 +- packages/parser/tests/unit/helpers/utils.ts | 47 +++++ .../tests/unit/parser.decorator.test.ts | 2 +- .../parser/tests/unit/parser.middy.test.ts | 2 +- packages/parser/tests/unit/schema/alb.test.ts | 2 +- .../parser/tests/unit/schema/apigw.test.ts | 2 +- .../parser/tests/unit/schema/apigwv2.test.ts | 2 +- .../parser/tests/unit/schema/appsync.test.ts | 2 +- .../cloudformation-custom-resource.test.ts | 2 +- .../tests/unit/schema/cloudwatch.test.ts | 2 +- .../parser/tests/unit/schema/dynamodb.test.ts | 2 +- .../tests/unit/schema/eventbridge.test.ts | 2 +- .../parser/tests/unit/schema/kafka.test.ts | 2 +- .../parser/tests/unit/schema/kinesis.test.ts | 2 +- .../parser/tests/unit/schema/lambda.test.ts | 2 +- packages/parser/tests/unit/schema/s3.test.ts | 2 +- packages/parser/tests/unit/schema/ses.test.ts | 2 +- packages/parser/tests/unit/schema/sns.test.ts | 2 +- packages/parser/tests/unit/schema/sqs.test.ts | 2 +- packages/parser/tests/unit/schema/utils.ts | 80 --------- .../tests/unit/schema/vpc-lattice.test.ts | 37 ++-- .../tests/unit/schema/vpc-latticev2.test.ts | 36 ++-- 46 files changed, 372 insertions(+), 590 deletions(-) rename packages/parser/tests/events/{vpcLatticeV2Event.json => vpc-lattice-v2/base.json} (100%) rename packages/parser/tests/events/{vpcLatticeEvent.json => vpc-lattice/base.json} (79%) delete mode 100644 packages/parser/tests/events/vpcLatticeEventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/vpcLatticeEventV2PathTrailingSlash.json delete mode 100644 packages/parser/tests/unit/envelope.test.ts create mode 100644 packages/parser/tests/unit/helpers/utils.ts delete mode 100644 packages/parser/tests/unit/schema/utils.ts diff --git a/package-lock.json b/package-lock.json index 0688e17eda..cf6acc709c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -133,19 +133,6 @@ "node": ">=6.0.0" } }, - "node_modules/@anatine/zod-mock": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@anatine/zod-mock/-/zod-mock-3.13.4.tgz", - "integrity": "sha512-yO/KeuyYsEDCTcQ+7CiRuY3dnafMHIZUMok6Ci7aERRCTQ+/XmsiPk/RnMx5wlLmWBTmX9kw+PavbMsjM+sAJA==", - "dev": true, - "dependencies": { - "randexp": "^0.5.3" - }, - "peerDependencies": { - "@faker-js/faker": "^7.0.0 || ^8.0.0", - "zod": "^3.21.4" - } - }, "node_modules/@aws-cdk/asset-awscli-v1": { "version": "2.2.209", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.209.tgz", @@ -1882,23 +1869,6 @@ "node": ">=18" } }, - "node_modules/@faker-js/faker": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.2.tgz", - "integrity": "sha512-nI/FP30ZGXb+UaR7yXawVTH40NVKXPIx0tA3GKjkKLjorqBoMAeq4iSEacl8mJmpVhOCDa0vYHwYDmOOcFMrYw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], - "peer": true, - "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" - } - }, "node_modules/@gerrit0/mini-shiki": { "version": "1.26.1", "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.26.1.tgz", @@ -6374,15 +6344,6 @@ "node": ">=12" } }, - "node_modules/drange": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", - "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -12152,19 +12113,6 @@ "node": ">=8" } }, - "node_modules/randexp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", - "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "dev": true, - "dependencies": { - "drange": "^1.0.2", - "ret": "^0.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -12586,15 +12534,6 @@ "node": ">=8" } }, - "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -15583,9 +15522,6 @@ "dependencies": { "@aws-lambda-powertools/commons": "^2.13.0" }, - "devDependencies": { - "@anatine/zod-mock": "^3.13.3" - }, "peerDependencies": { "@middy/core": "4.x || 5.x || 6.x", "zod": ">=3.x" diff --git a/packages/parser/package.json b/packages/parser/package.json index caf8da2320..73d3b6c19c 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -379,8 +379,5 @@ "@middy/core": { "optional": true } - }, - "devDependencies": { - "@anatine/zod-mock": "^3.13.3" } } diff --git a/packages/parser/src/envelopes/envelope.ts b/packages/parser/src/envelopes/envelope.ts index 312dc022ec..f088bec785 100644 --- a/packages/parser/src/envelopes/envelope.ts +++ b/packages/parser/src/envelopes/envelope.ts @@ -1,82 +1,7 @@ -import type { ZodSchema, z } from 'zod'; -import { ParseError } from '../errors.js'; -import type { ParsedResult } from '../types/parser.js'; - -/* v8 ignore start */ -const Envelope = { - /** - * Abstract function to parse the content of the envelope using provided schema. - * Both inputs are provided as unknown by the user. - * We expect the data to be either string that can be parsed to json or object. - * @internal - * @param data data to parse - * @param schema schema - */ - parse(data: unknown, schema: T): z.infer { - if (typeof data !== 'object' && typeof data !== 'string') { - throw new ParseError( - `Invalid data type for envelope. Expected string or object, got ${typeof data}` - ); - } - try { - if (typeof data === 'string') { - return schema.parse(JSON.parse(data)); - } - if (typeof data === 'object') { - return schema.parse(data); - } - } catch (e) { - throw new ParseError('Failed to parse envelope', { cause: e as Error }); - } - }, - - /** - * Abstract function to safely parse the content of the envelope using provided schema. - * safeParse is used to avoid throwing errors, thus we catuch all errors and wrap them in the result. - * @param input - * @param schema - */ - safeParse( - input: unknown, - schema: T - ): ParsedResult> { - try { - if (typeof input !== 'object' && typeof input !== 'string') { - return { - success: false, - error: new Error( - `Invalid data type for envelope. Expected string or object, got ${typeof input}` - ), - }; - } - - const parsed = schema.safeParse( - typeof input === 'string' ? JSON.parse(input) : input - ); - - return parsed.success - ? { - success: true, - data: parsed.data, - } - : { - success: false, - error: parsed.error, - }; - } catch (e) { - return { - success: false, - error: e as Error, - }; - } - }, -}; - /** * This is a discriminator to differentiate whether an envelope returns an array or an object * @hidden */ const envelopeDiscriminator = Symbol.for('returnType'); -export { Envelope, envelopeDiscriminator }; -/* v8 ignore stop */ +export { envelopeDiscriminator }; diff --git a/packages/parser/src/envelopes/vpc-lattice.ts b/packages/parser/src/envelopes/vpc-lattice.ts index 64d031c668..6c8190ae8c 100644 --- a/packages/parser/src/envelopes/vpc-lattice.ts +++ b/packages/parser/src/envelopes/vpc-lattice.ts @@ -2,7 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { VpcLatticeSchema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Amazon VPC Lattice envelope to extract data within body key @@ -15,35 +15,38 @@ export const VpcLatticeEnvelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - const parsedEnvelope = VpcLatticeSchema.parse(data); - - return Envelope.parse(parsedEnvelope.body, schema); - }, - - safeParse(data: unknown, schema: T): ParsedResult> { - const parsedEnvelope = VpcLatticeSchema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse VpcLattice envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; + try { + return VpcLatticeSchema.extend({ + body: schema, + }).parse(data).body; + } catch (error) { + throw new ParseError('Failed to parse VPC Lattice body', { + cause: error as Error, + }); } + }, - const parsedBody = Envelope.safeParse(parsedEnvelope.data.body, schema); + safeParse( + data: unknown, + schema: T + ): ParsedResult> { + const result = VpcLatticeSchema.extend({ + body: schema, + }).safeParse(data); - if (!parsedBody.success) { + if (!result.success) { return { success: false, - error: new ParseError('Failed to parse VpcLattice envelope body', { - cause: parsedBody.error, + error: new ParseError('Failed to parse VPC Lattice body', { + cause: result.error, }), originalEvent: data, }; } - return parsedBody; + return { + success: true, + data: result.data.body, + }; }, }; diff --git a/packages/parser/src/envelopes/vpc-latticev2.ts b/packages/parser/src/envelopes/vpc-latticev2.ts index 8a40f0f927..0ff99dffe6 100644 --- a/packages/parser/src/envelopes/vpc-latticev2.ts +++ b/packages/parser/src/envelopes/vpc-latticev2.ts @@ -2,7 +2,7 @@ import type { ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { VpcLatticeV2Schema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Amazon VPC Lattice envelope to extract data within body key @@ -14,35 +14,38 @@ export const VpcLatticeV2Envelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - const parsedEnvelope = VpcLatticeV2Schema.parse(data); - - return Envelope.parse(parsedEnvelope.body, schema); - }, - - safeParse(data: unknown, schema: T): ParsedResult> { - const parsedEnvelope = VpcLatticeV2Schema.safeParse(data); - if (!parsedEnvelope.success) { - return { - success: false, - error: new ParseError('Failed to parse VpcLatticeV2 envelope.', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; + try { + return VpcLatticeV2Schema.extend({ + body: schema, + }).parse(data).body; + } catch (error) { + throw new ParseError('Failed to parse VPC Lattice v2 body', { + cause: error as Error, + }); } + }, - const parsedBody = Envelope.safeParse(parsedEnvelope.data.body, schema); + safeParse( + data: unknown, + schema: T + ): ParsedResult> { + const result = VpcLatticeV2Schema.extend({ + body: schema, + }).safeParse(data); - if (!parsedBody.success) { + if (!result.success) { return { success: false, - error: new ParseError('Failed to parse VpcLatticeV2 body.', { - cause: parsedBody.error, + error: new ParseError('Failed to parse VPC Lattice v2 body', { + cause: result.error, }), originalEvent: data, }; } - return parsedBody; + return { + success: true, + data: result.data.body, + }; }, }; diff --git a/packages/parser/tests/events/vpcLatticeV2Event.json b/packages/parser/tests/events/vpc-lattice-v2/base.json similarity index 100% rename from packages/parser/tests/events/vpcLatticeV2Event.json rename to packages/parser/tests/events/vpc-lattice-v2/base.json diff --git a/packages/parser/tests/events/vpcLatticeEvent.json b/packages/parser/tests/events/vpc-lattice/base.json similarity index 79% rename from packages/parser/tests/events/vpcLatticeEvent.json rename to packages/parser/tests/events/vpc-lattice/base.json index 936bfb22d1..39880b4365 100644 --- a/packages/parser/tests/events/vpcLatticeEvent.json +++ b/packages/parser/tests/events/vpc-lattice/base.json @@ -10,6 +10,6 @@ "query_string_parameters": { "order-id": "1" }, - "body": "eyJ0ZXN0IjogImV2ZW50In0=", - "is_base64_encoded": true -} + "body": "{\"message\": \"Hello from Lambda!\"}", + "is_base64_encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/vpcLatticeEventPathTrailingSlash.json b/packages/parser/tests/events/vpcLatticeEventPathTrailingSlash.json deleted file mode 100644 index 7f6c0cfd9a..0000000000 --- a/packages/parser/tests/events/vpcLatticeEventPathTrailingSlash.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "raw_path": "/testpath/", - "method": "GET", - "headers": { - "user_agent": "curl/7.64.1", - "x-forwarded-for": "10.213.229.10", - "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", - "accept": "*/*" - }, - "query_string_parameters": { - "order-id": "1" - }, - "body": "eyJ0ZXN0IjogImV2ZW50In0=", - "is_base64_encoded": true -} diff --git a/packages/parser/tests/events/vpcLatticeEventV2PathTrailingSlash.json b/packages/parser/tests/events/vpcLatticeEventV2PathTrailingSlash.json deleted file mode 100644 index 9c0005f99b..0000000000 --- a/packages/parser/tests/events/vpcLatticeEventV2PathTrailingSlash.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "version": "2.0", - "path": "/newpath/", - "method": "GET", - "headers": { - "user_agent": "curl/7.64.1", - "x-forwarded-for": "10.213.229.10", - "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", - "accept": "*/*" - }, - "queryStringParameters": { - "order-id": "1" - }, - "body": "{\"message\": \"Hello from Lambda!\"}", - "isBase64Encoded": false, - "requestContext": { - "serviceNetworkArn": "arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", - "serviceArn": "arn:aws:vpc-lattice:us-east-2:123456789012:service/svc-0a40eebed65f8d69c", - "targetGroupArn": "arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-6d0ecf831eec9f09", - "identity": { - "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", - "type": "AWS_IAM", - "principal": "arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf", - "sessionName": "057d00f8b51257ba3c853a0f248943cf", - "x509SanDns": "example.com" - }, - "region": "us-east-2", - "timeEpoch": "1696331543569073" - } -} diff --git a/packages/parser/tests/unit/envelope.test.ts b/packages/parser/tests/unit/envelope.test.ts deleted file mode 100644 index 17659a6941..0000000000 --- a/packages/parser/tests/unit/envelope.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { ZodError, z } from 'zod'; -import { Envelope } from '../../src/envelopes/envelope.js'; - -describe('envelope: ', () => { - describe('parseSafe', () => { - it('returns success response when input is object', () => { - const result = Envelope.safeParse( - '{"name": "John"}', - z.object({ name: z.string() }) - ); - expect(result).toEqual({ - success: true, - data: { name: 'John' }, - }); - }); - it('returns success response when input is string', () => { - const result = Envelope.safeParse( - { name: 'John' }, - z.object({ name: z.string() }) - ); - expect(result).toEqual({ - success: true, - data: { name: 'John' }, - }); - }); - it('returns error when input does not match schema', () => { - const result = Envelope.safeParse( - { name: 123 }, - z.object({ name: z.string() }) - ); - expect(result).toEqual({ - success: false, - error: expect.any(Error), - }); - }); - - it('returns error when input is invalid JSON string', () => { - const result = Envelope.safeParse( - '{name: "John"}', - z.object({ name: z.string() }) - ); - expect(result).toEqual({ - success: false, - error: expect.any(Error), - }); - }); - }); - - describe('parse', () => { - it('returns parsed data when input is object', () => { - const result = Envelope.parse( - { name: 'John' }, - z.object({ name: z.string() }) - ); - expect(result).toEqual({ name: 'John' }); - }); - it('returns parsed data when input is string', () => { - const result = Envelope.parse( - '{"name": "John"}', - z.object({ name: z.string() }) - ); - expect(result).toEqual({ name: 'John' }); - }); - it('throw custom error if input is not string or object', () => { - expect(() => Envelope.parse(123, z.object({ name: z.string() }))).toThrow( - 'Invalid data type for envelope. Expected string or object, got number' - ); - }); - it('throws error when input does not match schema', () => { - expect(() => - Envelope.parse({ name: 123 }, z.object({ name: z.string() })) - ).toThrow(); - }); - it('includes the ZodError as the cause of the ParseError', () => { - try { - Envelope.parse('{"name": "John"}', z.object({ name: z.number() })); - } catch (error) { - expect((error as Error).cause).toBeInstanceOf(ZodError); - } - }); - }); -}); diff --git a/packages/parser/tests/unit/envelopes/apigw.test.ts b/packages/parser/tests/unit/envelopes/apigw.test.ts index b298e1eec4..07b554d8cc 100644 --- a/packages/parser/tests/unit/envelopes/apigw.test.ts +++ b/packages/parser/tests/unit/envelopes/apigw.test.ts @@ -4,7 +4,7 @@ import { ApiGatewayEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; import type { APIGatewayProxyEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Envelope: API Gateway REST', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/apigwv2.test.ts b/packages/parser/tests/unit/envelopes/apigwv2.test.ts index edf1b9de3b..0f25aa6d31 100644 --- a/packages/parser/tests/unit/envelopes/apigwv2.test.ts +++ b/packages/parser/tests/unit/envelopes/apigwv2.test.ts @@ -4,7 +4,7 @@ import { ApiGatewayV2Envelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; import type { APIGatewayProxyEventV2 } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Envelope: API Gateway HTTP', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/cloudwatch.test.ts b/packages/parser/tests/unit/envelopes/cloudwatch.test.ts index 505e95d34a..42d4a9fdc2 100644 --- a/packages/parser/tests/unit/envelopes/cloudwatch.test.ts +++ b/packages/parser/tests/unit/envelopes/cloudwatch.test.ts @@ -5,7 +5,7 @@ import { ParseError } from '../../../src'; import { CloudWatchEnvelope } from '../../../src/envelopes/index.js'; import { DecompressError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; const decompressRecordToJSON = ( data: string diff --git a/packages/parser/tests/unit/envelopes/dynamodb.test.ts b/packages/parser/tests/unit/envelopes/dynamodb.test.ts index 372dfb732d..dcc3c9d0aa 100644 --- a/packages/parser/tests/unit/envelopes/dynamodb.test.ts +++ b/packages/parser/tests/unit/envelopes/dynamodb.test.ts @@ -4,7 +4,7 @@ import { ZodError, z } from 'zod'; import { DynamoDBStreamEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import type { DynamoDBStreamEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Envelope: DynamoDB Stream', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/eventbridge.test.ts b/packages/parser/tests/unit/envelopes/eventbridge.test.ts index c66658ba97..505ab80702 100644 --- a/packages/parser/tests/unit/envelopes/eventbridge.test.ts +++ b/packages/parser/tests/unit/envelopes/eventbridge.test.ts @@ -3,7 +3,7 @@ import { ZodError, z } from 'zod'; import { EventBridgeEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import type { EventBridgeEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Envelope: EventBridgeEnvelope', () => { const schema = z.object({ diff --git a/packages/parser/tests/unit/envelopes/kafka.test.ts b/packages/parser/tests/unit/envelopes/kafka.test.ts index 3ac48dada7..f5a4a4a06a 100644 --- a/packages/parser/tests/unit/envelopes/kafka.test.ts +++ b/packages/parser/tests/unit/envelopes/kafka.test.ts @@ -3,7 +3,7 @@ import { ZodError, z } from 'zod'; import { KafkaEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Envelope: Kafka', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts b/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts index b271721381..911f974197 100644 --- a/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts +++ b/packages/parser/tests/unit/envelopes/kinesis-firehose.test.ts @@ -7,7 +7,7 @@ import type { KinesisFireHoseEvent, KinesisFireHoseSqsEvent, } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; const encode = (data: unknown) => Buffer.from(String(data)).toString('base64'); diff --git a/packages/parser/tests/unit/envelopes/kinesis.test.ts b/packages/parser/tests/unit/envelopes/kinesis.test.ts index df9d51dd0c..ff2531d01f 100644 --- a/packages/parser/tests/unit/envelopes/kinesis.test.ts +++ b/packages/parser/tests/unit/envelopes/kinesis.test.ts @@ -3,7 +3,7 @@ import { ZodError, z } from 'zod'; import { KinesisEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; import type { KinesisDataStreamEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; const encode = (data: unknown) => Buffer.from(String(data)).toString('base64'); diff --git a/packages/parser/tests/unit/envelopes/lambda.test.ts b/packages/parser/tests/unit/envelopes/lambda.test.ts index eee9ff28e8..fa8ff25227 100644 --- a/packages/parser/tests/unit/envelopes/lambda.test.ts +++ b/packages/parser/tests/unit/envelopes/lambda.test.ts @@ -4,7 +4,7 @@ import { ParseError } from '../../../src'; import { LambdaFunctionUrlEnvelope } from '../../../src/envelopes/index.js'; import { JSONStringified } from '../../../src/helpers'; import type { LambdaFunctionUrlEvent } from '../../../src/types'; -import { getTestEvent, omit } from '../schema/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Envelope: Lambda function URL', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/sns.test.ts b/packages/parser/tests/unit/envelopes/sns.test.ts index be3e8c7925..f189e9528c 100644 --- a/packages/parser/tests/unit/envelopes/sns.test.ts +++ b/packages/parser/tests/unit/envelopes/sns.test.ts @@ -4,7 +4,7 @@ import { SnsEnvelope } from '../../../src/envelopes/sns.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; import type { SnsEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Envelope: SnsEnvelope', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/envelopes/snssqs.test.ts b/packages/parser/tests/unit/envelopes/snssqs.test.ts index a7986d2a09..7c15884c7a 100644 --- a/packages/parser/tests/unit/envelopes/snssqs.test.ts +++ b/packages/parser/tests/unit/envelopes/snssqs.test.ts @@ -4,7 +4,7 @@ import { SnsSqsEnvelope } from '../../../src/envelopes/snssqs.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; import type { SqsEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Envelope: SnsSqsEnvelope', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/sqs.test.ts b/packages/parser/tests/unit/envelopes/sqs.test.ts index ea6135df98..ffe4e08bdb 100644 --- a/packages/parser/tests/unit/envelopes/sqs.test.ts +++ b/packages/parser/tests/unit/envelopes/sqs.test.ts @@ -4,7 +4,7 @@ import { SqsEnvelope } from '../../../src/envelopes/sqs.js'; import { ParseError } from '../../../src/errors.js'; import { JSONStringified } from '../../../src/helpers.js'; import type { SqsEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from '../schema/utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Envelope: SqsEnvelope', () => { const schema = z diff --git a/packages/parser/tests/unit/envelopes/vpc-lattice.test.ts b/packages/parser/tests/unit/envelopes/vpc-lattice.test.ts index f9390315ad..33bf6f3350 100644 --- a/packages/parser/tests/unit/envelopes/vpc-lattice.test.ts +++ b/packages/parser/tests/unit/envelopes/vpc-lattice.test.ts @@ -1,98 +1,124 @@ -import { generateMock } from '@anatine/zod-mock'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; -import { ParseError } from '../../../src'; +import { ZodError, z } from 'zod'; import { VpcLatticeEnvelope } from '../../../src/envelopes/index.js'; +import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; import type { VpcLatticeEvent } from '../../../src/types/index.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; - -describe('VpcLatticeEnvelope', () => { - describe('parse', () => { - it('should parse VPC Lattice event', () => { - const mock = generateMock(TestSchema); - const testEvent = TestEvents.vpcLatticeEvent as VpcLatticeEvent; - - testEvent.body = JSON.stringify(mock); - - const resp = VpcLatticeEnvelope.parse(testEvent, TestSchema); - - expect(resp).toEqual(mock); - }); - - it('should parse VPC Lattice event with trailing slash', () => { - const mock = generateMock(TestSchema); - const testEvent = - TestEvents.vpcLatticeEventPathTrailingSlash as VpcLatticeEvent; - - testEvent.body = JSON.stringify(mock); - - const resp = VpcLatticeEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual(mock); - }); +import { getTestEvent, omit } from '../helpers/utils.js'; + +describe('Envelope: VPC Lattice', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'vpc-lattice', + filename: 'base', + }); - it('should throw if event is not a VPC Lattice event', () => { - expect(() => - VpcLatticeEnvelope.parse({ foo: 'bar' }, TestSchema) - ).toThrow(); + describe('Method: parse', () => { + it('throws if the payload does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess + expect(() => VpcLatticeEnvelope.parse(event, schema)).toThrow( + expect.objectContaining({ + message: expect.stringContaining('Failed to parse VPC Lattice body'), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['body'], + message: 'Expected object, received string', + }, + ], + }), + }) + ); }); - it('should throw if body does not match schema', () => { - const testEvent = TestEvents.vpcLatticeEvent as VpcLatticeEvent; + it('parses a VPC Lattice event with plain text', () => { + // Prepare + const event = structuredClone(baseEvent); - testEvent.body = JSON.stringify({ foo: 'bar' }); + // Act + const result = VpcLatticeEnvelope.parse(event, z.string()); - expect(() => VpcLatticeEnvelope.parse(testEvent, TestSchema)).toThrow(); + // Assess + expect(result).toEqual('{"message": "Hello from Lambda!"}'); }); - }); - - describe('safeParse', () => { - it('should parse VPC Lattice event', () => { - const mock = generateMock(TestSchema); - const testEvent = TestEvents.vpcLatticeEvent as VpcLatticeEvent; - testEvent.body = JSON.stringify(mock); + it('parses an VPC Lattice event with JSON-stringified body', () => { + // Prepare + const event = structuredClone(baseEvent); - const resp = VpcLatticeEnvelope.safeParse(testEvent, TestSchema); + // Act + const result = VpcLatticeEnvelope.parse(event, JSONStringified(schema)); - expect(resp).toEqual({ success: true, data: mock }); + // Assess + expect(result).toStrictEqual({ message: 'Hello from Lambda!' }); }); - it('should parse VPC Lattice event with trailing slash', () => { - const mock = generateMock(TestSchema); - const testEvent = - TestEvents.vpcLatticeEventPathTrailingSlash as VpcLatticeEvent; + it('parses a VPC Lattice event with binary body', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = 'aGVsbG8gd29ybGQ='; // base64 encoded 'hello world' + event.headers['content-type'] = 'application/octet-stream'; + event.is_base64_encoded = true; - testEvent.body = JSON.stringify(mock); + // Act + const result = VpcLatticeEnvelope.parse(event, z.string()); - const resp = VpcLatticeEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: mock }); + // Assess + expect(result).toEqual('aGVsbG8gd29ybGQ='); }); + }); - it('should return error if event is not a VPC Lattice event', () => { - const resp = VpcLatticeEnvelope.safeParse({ foo: 'bar' }, TestSchema); - - expect(resp).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + describe('Method: safeParse', () => { + it('parses a VPC Lattice event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = VpcLatticeEnvelope.safeParse( + event, + JSONStringified(schema) + ); + + // Assess + expect(result).toEqual({ + success: true, + data: { message: 'Hello from Lambda!' }, }); }); - it('should return error if body does not match schema', () => { - const testEvent = TestEvents.vpcLatticeEvent as VpcLatticeEvent; + it('returns an error if the event is not a valid VPC Lattice event', () => { + // Prepare + const event = omit(['is_base64_encoded'], structuredClone(baseEvent)); - testEvent.body = JSON.stringify({ foo: 'bar' }); + // Act + const result = VpcLatticeEnvelope.safeParse(event, z.string()); - const parseResult = VpcLatticeEnvelope.safeParse(testEvent, TestSchema); - expect(parseResult).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError('Failed to parse VPC Lattice body', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'boolean', + received: 'undefined', + path: ['is_base64_encoded'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); }); }); diff --git a/packages/parser/tests/unit/envelopes/vpc-latticev2.test.ts b/packages/parser/tests/unit/envelopes/vpc-latticev2.test.ts index 83f656b766..34eed08816 100644 --- a/packages/parser/tests/unit/envelopes/vpc-latticev2.test.ts +++ b/packages/parser/tests/unit/envelopes/vpc-latticev2.test.ts @@ -1,98 +1,126 @@ -import { generateMock } from '@anatine/zod-mock'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; -import { ParseError } from '../../../src'; +import { ZodError, z } from 'zod'; import { VpcLatticeV2Envelope } from '../../../src/envelopes/index.js'; +import { ParseError } from '../../../src/errors.js'; +import { JSONStringified } from '../../../src/helpers.js'; import type { VpcLatticeEventV2 } from '../../../src/types/index.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; - -describe('VpcLatticeV2Envelope2', () => { - describe('parse', () => { - it('should parse VPC Lattice event', () => { - const mock = generateMock(TestSchema); - const testEvent = TestEvents.vpcLatticeV2Event as VpcLatticeEventV2; - - testEvent.body = JSON.stringify(mock); - - const resp = VpcLatticeV2Envelope.parse(testEvent, TestSchema); - - expect(resp).toEqual(mock); - }); - - it('should parse VPC Lattice event with trailing slash', () => { - const mock = generateMock(TestSchema); - const testEvent = - TestEvents.vpcLatticeEventV2PathTrailingSlash as VpcLatticeEventV2; - - testEvent.body = JSON.stringify(mock); - - const resp = VpcLatticeV2Envelope.parse(testEvent, TestSchema); - expect(resp).toEqual(mock); - }); +import { getTestEvent, omit } from '../helpers/utils.js'; + +describe('Envelope: VPC Lattice v2', () => { + const schema = z + .object({ + message: z.string(), + }) + .strict(); + const baseEvent = getTestEvent({ + eventsPath: 'vpc-lattice-v2', + filename: 'base', + }); - it('should throw if event is not a VPC Lattice event', () => { - expect(() => - VpcLatticeV2Envelope.parse({ foo: 'bar' }, TestSchema) - ).toThrow(); + describe('Method: parse', () => { + it('throws if the payload does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act & Assess + expect(() => VpcLatticeV2Envelope.parse(event, schema)).toThrow( + expect.objectContaining({ + message: expect.stringContaining( + 'Failed to parse VPC Lattice v2 body' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'object', + received: 'string', + path: ['body'], + message: 'Expected object, received string', + }, + ], + }), + }) + ); }); - it('should throw if body does not match schema', () => { - const testEvent = TestEvents.vpcLatticeV2Event as VpcLatticeEventV2; + it('parses a VPC Lattice v2 event with plain text', () => { + // Prepare + const event = structuredClone(baseEvent); - testEvent.body = JSON.stringify({ foo: 'bar' }); + // Act + const result = VpcLatticeV2Envelope.parse(event, z.string()); - expect(() => VpcLatticeV2Envelope.parse(testEvent, TestSchema)).toThrow(); + // Assess + expect(result).toEqual('{"message": "Hello from Lambda!"}'); }); - }); - - describe('safeParse', () => { - it('should parse VPC Lattice event', () => { - const mock = generateMock(TestSchema); - const testEvent = TestEvents.vpcLatticeV2Event as VpcLatticeEventV2; - testEvent.body = JSON.stringify(mock); + it('parses an VPC Lattice v2 event with JSON-stringified body', () => { + // Prepare + const event = structuredClone(baseEvent); - const resp = VpcLatticeV2Envelope.safeParse(testEvent, TestSchema); + // Act + const result = VpcLatticeV2Envelope.parse(event, JSONStringified(schema)); - expect(resp).toEqual({ success: true, data: mock }); + // Assess + expect(result).toStrictEqual({ message: 'Hello from Lambda!' }); }); - it('should parse VPC Lattice event with trailing slash', () => { - const mock = generateMock(TestSchema); - const testEvent = - TestEvents.vpcLatticeEventV2PathTrailingSlash as VpcLatticeEventV2; + it('parses an VPC Lattice v2 event with binary body', () => { + // Prepare + const event = structuredClone(baseEvent); + event.body = 'aGVsbG8gd29ybGQ='; // base64 encoded 'hello world' + event.headers['content-type'] = 'application/octet-stream'; + event.isBase64Encoded = true; - testEvent.body = JSON.stringify(mock); + // Act + const result = VpcLatticeV2Envelope.parse(event, z.string()); - const resp = VpcLatticeV2Envelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ success: true, data: mock }); + // Assess + expect(result).toEqual('aGVsbG8gd29ybGQ='); }); + }); - it('should return error if event is not a VPC Lattice event', () => { - const resp = VpcLatticeV2Envelope.safeParse({ foo: 'bar' }, TestSchema); - - expect(resp).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: { foo: 'bar' }, + describe('Method: safeParse', () => { + it('parses a VPC Lattice v2 event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = VpcLatticeV2Envelope.safeParse( + event, + JSONStringified(schema) + ); + + // Assess + expect(result).toEqual({ + success: true, + data: { message: 'Hello from Lambda!' }, }); }); - it('should return error if body does not match schema', () => { - const testEvent = TestEvents.vpcLatticeV2Event as VpcLatticeEventV2; + it('returns an error if the event is not a valid VPC Lattice v2 event', () => { + // Prepare + const event = omit(['path'], structuredClone(baseEvent)); - testEvent.body = JSON.stringify({ foo: 'bar' }); + // Act + const result = VpcLatticeV2Envelope.safeParse(event, z.string()); - const parseResult = VpcLatticeV2Envelope.safeParse(testEvent, TestSchema); - expect(parseResult).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: testEvent, + error: new ParseError('Failed to parse VPC Lattice v2 body', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['path'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } }); }); }); diff --git a/packages/parser/tests/unit/helpers.test.ts b/packages/parser/tests/unit/helpers.test.ts index b8c49ac2d6..fd4b73eb14 100644 --- a/packages/parser/tests/unit/helpers.test.ts +++ b/packages/parser/tests/unit/helpers.test.ts @@ -17,7 +17,7 @@ import type { SnsEvent, SqsEvent, } from '../../src/types/schema.js'; -import { getTestEvent } from './schema/utils.js'; +import { getTestEvent } from './helpers/utils.js'; const bodySchema = z.object({ id: z.number(), diff --git a/packages/parser/tests/unit/helpers/utils.ts b/packages/parser/tests/unit/helpers/utils.ts new file mode 100644 index 0000000000..b319b78f99 --- /dev/null +++ b/packages/parser/tests/unit/helpers/utils.ts @@ -0,0 +1,47 @@ +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; + +/** + * Reads and parses a JSON file from the specified events path and filename, returning the parsed object. + * + * @template T - The expected type of the parsed JSON object. + * @param {Object} params - The parameters for the function. + * @param {string} params.eventsPath - The relative path to the directory containing the event files. + * @param {string} params.filename - The name of the JSON file (without extension) to be read and parsed. + */ +const getTestEvent = >({ + eventsPath, + filename, +}: { + eventsPath: string; + filename: string; +}): T => + JSON.parse( + readFileSync( + join(__dirname, '..', '..', 'events', eventsPath, `${filename}.json`), + 'utf-8' + ) + ) as T; + +/** + * Returns a new object with the specified keys omitted. + * + * @template T - The type of the object to omit keys from. + * @template Keys - The keys to omit from the object. + * @param {readonly Keys[]} keys - The keys to omit from the object. + * @param {T} obj - The object to omit keys from. + */ +const omit = , Keys extends keyof T>( + keys: readonly Keys[], + obj: T +): Omit => { + const result = { ...obj }; + + for (const key of keys) { + delete result[key]; + } + + return result; +}; + +export { getTestEvent, omit }; diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index 9224ae181f..1b843e8ecb 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -7,7 +7,7 @@ import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/index.js'; import { EventBridgeSchema } from '../../src/schemas/index.js'; import type { EventBridgeEvent, ParsedResult } from '../../src/types/index.js'; -import { getTestEvent } from './schema/utils.js'; +import { getTestEvent } from './helpers/utils.js'; describe('Decorator: parser', () => { const schema = z.object({ diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index 50893dc10b..8fd9dcafb2 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -11,7 +11,7 @@ import type { ParsedResult, SqsEvent, } from '../../src/types/index.js'; -import { getTestEvent } from './schema/utils.js'; +import { getTestEvent } from './helpers/utils.js'; describe('Middleware: parser', () => { const schema = z diff --git a/packages/parser/tests/unit/schema/alb.test.ts b/packages/parser/tests/unit/schema/alb.test.ts index 01cea17b76..8e5a481415 100644 --- a/packages/parser/tests/unit/schema/alb.test.ts +++ b/packages/parser/tests/unit/schema/alb.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { AlbSchema } from '../../../src/schemas/alb.js'; import type { ALBEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: ALB', () => { const eventsPath = 'alb'; diff --git a/packages/parser/tests/unit/schema/apigw.test.ts b/packages/parser/tests/unit/schema/apigw.test.ts index b9bedbcaec..62f92aabec 100644 --- a/packages/parser/tests/unit/schema/apigw.test.ts +++ b/packages/parser/tests/unit/schema/apigw.test.ts @@ -4,7 +4,7 @@ import { APIGatewayRequestAuthorizerEventSchema, APIGatewayTokenAuthorizerEventSchema, } from '../../../src/schemas/index.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: API Gateway REST', () => { const eventsPath = 'apigw-rest'; diff --git a/packages/parser/tests/unit/schema/apigwv2.test.ts b/packages/parser/tests/unit/schema/apigwv2.test.ts index b0dfe1e551..a205470143 100644 --- a/packages/parser/tests/unit/schema/apigwv2.test.ts +++ b/packages/parser/tests/unit/schema/apigwv2.test.ts @@ -6,7 +6,7 @@ import { APIGatewayRequestContextV2Schema, } from '../../../src/schemas/index.js'; import type { APIGatewayProxyEventV2 } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: API Gateway HTTP (v2)', () => { const eventsPath = 'apigw-http'; diff --git a/packages/parser/tests/unit/schema/appsync.test.ts b/packages/parser/tests/unit/schema/appsync.test.ts index 50c09dcc31..1b12d2bf2c 100644 --- a/packages/parser/tests/unit/schema/appsync.test.ts +++ b/packages/parser/tests/unit/schema/appsync.test.ts @@ -4,7 +4,7 @@ import { AppSyncResolverSchema, } from '../../../src/schemas/appsync.js'; import type { AppSyncResolverEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: AppSync Resolver', () => { const eventsPath = 'appsync'; diff --git a/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts b/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts index 594069b926..f29c04558e 100644 --- a/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts +++ b/packages/parser/tests/unit/schema/cloudformation-custom-resource.test.ts @@ -9,7 +9,7 @@ import type { CloudFormationCustomResourceDeleteEvent, CloudFormationCustomResourceUpdateEvent, } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: CloudFormationCustomResource ', () => { const eventsPath = 'cloudformation'; diff --git a/packages/parser/tests/unit/schema/cloudwatch.test.ts b/packages/parser/tests/unit/schema/cloudwatch.test.ts index b3d99d3a18..586d9735a0 100644 --- a/packages/parser/tests/unit/schema/cloudwatch.test.ts +++ b/packages/parser/tests/unit/schema/cloudwatch.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { CloudWatchLogsSchema } from '../../../src/schemas/cloudwatch.js'; import type { CloudWatchLogsEvent } from '../../../src/types/index.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: CloudWatchLogs', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/dynamodb.test.ts b/packages/parser/tests/unit/schema/dynamodb.test.ts index db684da308..62b4ab8d06 100644 --- a/packages/parser/tests/unit/schema/dynamodb.test.ts +++ b/packages/parser/tests/unit/schema/dynamodb.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { DynamoDBStreamSchema } from '../../../src/schemas/dynamodb.js'; import type { DynamoDBStreamEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: DynamoDB', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/eventbridge.test.ts b/packages/parser/tests/unit/schema/eventbridge.test.ts index 8e612ea425..9234b38c1c 100644 --- a/packages/parser/tests/unit/schema/eventbridge.test.ts +++ b/packages/parser/tests/unit/schema/eventbridge.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { EventBridgeSchema } from '../../../src/schemas/eventbridge.js'; import type { EventBridgeEvent } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: EventBridge', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/kafka.test.ts b/packages/parser/tests/unit/schema/kafka.test.ts index ac1c0316f8..845d20fcdf 100644 --- a/packages/parser/tests/unit/schema/kafka.test.ts +++ b/packages/parser/tests/unit/schema/kafka.test.ts @@ -7,7 +7,7 @@ import type { KafkaMskEvent, KafkaSelfManagedEvent, } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: Kafka', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/kinesis.test.ts b/packages/parser/tests/unit/schema/kinesis.test.ts index 4751348a7f..94f7bc944a 100644 --- a/packages/parser/tests/unit/schema/kinesis.test.ts +++ b/packages/parser/tests/unit/schema/kinesis.test.ts @@ -19,7 +19,7 @@ import type { KinesisFirehoseRecord, KinesisFirehoseSqsRecord, } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: Kinesis', () => { const eventsPath = 'kinesis'; diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index e57e0e4d23..b461627cfa 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { LambdaFunctionUrlSchema } from '../../../src/schemas/lambda.js'; import type { LambdaFunctionUrlEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: LambdaFunctionUrl', () => { const eventsPath = 'lambda'; diff --git a/packages/parser/tests/unit/schema/s3.test.ts b/packages/parser/tests/unit/schema/s3.test.ts index 600aa6a1bf..7afde06cfb 100644 --- a/packages/parser/tests/unit/schema/s3.test.ts +++ b/packages/parser/tests/unit/schema/s3.test.ts @@ -11,7 +11,7 @@ import type { S3ObjectLambdaEvent, S3SqsEventNotification, } from '../../../src/types/schema.js'; -import { getTestEvent, omit } from './utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schema: S3', () => { const eventsPath = 's3'; diff --git a/packages/parser/tests/unit/schema/ses.test.ts b/packages/parser/tests/unit/schema/ses.test.ts index 3829dd8362..12873e9c9d 100644 --- a/packages/parser/tests/unit/schema/ses.test.ts +++ b/packages/parser/tests/unit/schema/ses.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { SesSchema } from '../../../src/schemas/ses.js'; import type { SesEvent } from '../../../src/types/index.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: SES', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/sns.test.ts b/packages/parser/tests/unit/schema/sns.test.ts index 808344e5fa..c4a7d283aa 100644 --- a/packages/parser/tests/unit/schema/sns.test.ts +++ b/packages/parser/tests/unit/schema/sns.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { SnsSchema } from '../../../src/schemas/sns.js'; import type { SnsEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: SNS', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/sqs.test.ts b/packages/parser/tests/unit/schema/sqs.test.ts index 4fcba4c30f..b9d4b07dee 100644 --- a/packages/parser/tests/unit/schema/sqs.test.ts +++ b/packages/parser/tests/unit/schema/sqs.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { SqsSchema } from '../../../src/schemas/sqs.js'; import type { SqsEvent } from '../../../src/types/schema.js'; -import { getTestEvent } from './utils.js'; +import { getTestEvent } from '../helpers/utils.js'; describe('Schema: SQS', () => { const baseEvent = getTestEvent({ diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts deleted file mode 100644 index 8ca72681e1..0000000000 --- a/packages/parser/tests/unit/schema/utils.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { readFileSync } from 'node:fs'; -import { join } from 'node:path'; -import { z } from 'zod'; - -export const TestSchema = z.object({ - name: z.string(), - age: z.number().min(18).max(99), -}); - -const filenames = [ - 'albEvent', - 'albEventPathTrailingSlash', - 'albMultiValueHeadersEvent', - 'kinesisFirehoseKinesisEvent', - 'kinesisFirehosePutEvent', - 'kinesisFirehoseSQSEvent', - 'kinesisStreamCloudWatchLogsEvent', - 'kinesisStreamEvent', - 'kinesisStreamEventOneRecord', - 'vpcLatticeEvent', - 'vpcLatticeEventPathTrailingSlash', - 'vpcLatticeEventV2PathTrailingSlash', - 'vpcLatticeV2Event', -] as const; - -type TestEvents = { [K in (typeof filenames)[number]]: unknown }; -const loadFileContent = (filename: string): string => - readFileSync( - join(__dirname, '..', '..', 'events', `${filename}.json`), - 'utf-8' - ); - -const createTestEvents = (fileList: readonly string[]): TestEvents => { - const testEvents: Partial = {}; - - for (const filename of fileList) { - Object.defineProperty(testEvents, filename, { - get: () => JSON.parse(loadFileContent(filename)), - }); - } - - return testEvents as TestEvents; -}; - -export const TestEvents = createTestEvents(filenames); - -/** - * Reads and parses a JSON file from the specified events path and filename, returning the parsed object. - * - * @template T - The expected type of the parsed JSON object. - * @param {Object} params - The parameters for the function. - * @param {string} params.eventsPath - The relative path to the directory containing the event files. - * @param {string} params.filename - The name of the JSON file (without extension) to be read and parsed. - */ -export const getTestEvent = >({ - eventsPath, - filename, -}: { - eventsPath: string; - filename: string; -}): T => - JSON.parse( - readFileSync( - join(__dirname, '..', '..', 'events', eventsPath, `${filename}.json`), - 'utf-8' - ) - ) as T; - -export function omit, Keys extends keyof T>( - keys: readonly Keys[], - obj: T -): Omit { - const result = { ...obj }; - - for (const key of keys) { - delete result[key]; - } - - return result; -} diff --git a/packages/parser/tests/unit/schema/vpc-lattice.test.ts b/packages/parser/tests/unit/schema/vpc-lattice.test.ts index 472e6514e6..cb1f84c43c 100644 --- a/packages/parser/tests/unit/schema/vpc-lattice.test.ts +++ b/packages/parser/tests/unit/schema/vpc-lattice.test.ts @@ -1,17 +1,30 @@ import { describe, expect, it } from 'vitest'; -import { VpcLatticeSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { VpcLatticeSchema } from '../../../src/schemas/vpc-lattice.js'; +import type { VpcLatticeEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; -describe('VPC Lattice ', () => { - it('should parse vpc lattice event', () => { - const vpcLatticeEvent = TestEvents.vpcLatticeEvent; - expect(VpcLatticeSchema.parse(vpcLatticeEvent)).toEqual(vpcLatticeEvent); +describe('Schema: VPC Lattice', () => { + const baseEvent = getTestEvent({ + eventsPath: 'vpc-lattice', + filename: 'base', }); - it('should parse vpc lattice path trailing slash event', () => { - const vpcLatticeEventPathTrailingSlash = - TestEvents.vpcLatticeEventPathTrailingSlash; - expect(VpcLatticeSchema.parse(vpcLatticeEventPathTrailingSlash)).toEqual( - vpcLatticeEventPathTrailingSlash - ); + + it('throws when the event is invalid', () => { + // Prepare + const event = omit(['query_string_parameters'], structuredClone(baseEvent)); + + // Act & Assess + expect(() => VpcLatticeSchema.parse(event)).toThrow(); + }); + + it('parses a VPC Lattice event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = VpcLatticeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); }); diff --git a/packages/parser/tests/unit/schema/vpc-latticev2.test.ts b/packages/parser/tests/unit/schema/vpc-latticev2.test.ts index 5c731a3a70..d13ee3e454 100644 --- a/packages/parser/tests/unit/schema/vpc-latticev2.test.ts +++ b/packages/parser/tests/unit/schema/vpc-latticev2.test.ts @@ -1,18 +1,30 @@ import { describe, expect, it } from 'vitest'; -import { VpcLatticeV2Schema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { VpcLatticeV2Schema } from '../../../src/schemas/vpc-latticev2.js'; +import type { VpcLatticeEventV2 } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; -describe('VpcLatticeV2 ', () => { - it('should parse VpcLatticeV2 event', () => { - const vpcLatticeV2Event = TestEvents.vpcLatticeV2Event; - const parsed = VpcLatticeV2Schema.parse(vpcLatticeV2Event); - expect(parsed).toEqual(vpcLatticeV2Event); +describe('Schema: VPC Lattice v2', () => { + const baseEvent = getTestEvent({ + eventsPath: 'vpc-lattice-v2', + filename: 'base', }); - it('should parse VpcLatticeV2PathTrailingSlash event', () => { - const vpcLatticeEventV2PathTrailingSlash = - TestEvents.vpcLatticeEventV2PathTrailingSlash; - const parsed = VpcLatticeV2Schema.parse(vpcLatticeEventV2PathTrailingSlash); - expect(parsed).toEqual(vpcLatticeEventV2PathTrailingSlash); + it('throws when the event is invalid', () => { + // Prepare + const event = omit(['version', 'path'], structuredClone(baseEvent)); + + // Act & Assess + expect(() => VpcLatticeV2Schema.parse(event)).toThrow(); + }); + + it('parses a VPC Lattice v2 event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = VpcLatticeV2Schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); }); }); From 128e959158ec27c7d46f1a689ae2be7a9505db4c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:47:24 +0100 Subject: [PATCH 31/31] chore(ci): bump version to 2.13.1 (#3537) Co-authored-by: aws-powertools-bot <151832416+aws-powertools-bot@users.noreply.github.com> --- CHANGELOG.md | 24 ++++++++++ examples/app/CHANGELOG.md | 8 ++++ examples/app/package.json | 14 +++--- examples/snippets/CHANGELOG.md | 8 ++++ examples/snippets/package.json | 18 +++---- layers/CHANGELOG.md | 8 ++++ layers/package.json | 2 +- lerna.json | 2 +- package-lock.json | 74 ++++++++++++++--------------- packages/batch/CHANGELOG.md | 8 ++++ packages/batch/package.json | 2 +- packages/commons/CHANGELOG.md | 11 +++++ packages/commons/package.json | 2 +- packages/commons/src/version.ts | 2 +- packages/event-handler/CHANGELOG.md | 8 ++++ packages/event-handler/package.json | 4 +- packages/idempotency/CHANGELOG.md | 8 ++++ packages/idempotency/package.json | 6 +-- packages/jmespath/CHANGELOG.md | 8 ++++ packages/jmespath/package.json | 4 +- packages/logger/CHANGELOG.md | 8 ++++ packages/logger/package.json | 4 +- packages/metrics/CHANGELOG.md | 8 ++++ packages/metrics/package.json | 4 +- packages/parameters/CHANGELOG.md | 8 ++++ packages/parameters/package.json | 4 +- packages/parser/CHANGELOG.md | 24 ++++++++++ packages/parser/package.json | 4 +- packages/testing/CHANGELOG.md | 8 ++++ packages/testing/package.json | 2 +- packages/tracer/CHANGELOG.md | 8 ++++ packages/tracer/package.json | 4 +- 32 files changed, 231 insertions(+), 76 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 392c4d10b9..c6bd76a868 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + + +### Bug Fixes + +* **parser:** allow Kinesis envelopes to handle non-JSON strings ([#3531](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3531)) ([d18e03d](https://github.com/aws-powertools/powertools-lambda-typescript/commit/d18e03d06e4fa4970aa24c4c041793d58a7cde79)) +* **parser:** allow SQS envelopes to handle non-JSON strings ([#3513](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3513)) ([89f0006](https://github.com/aws-powertools/powertools-lambda-typescript/commit/89f0006e9b50448372a5ce70592ea1af5a75ec35)) +* **parser:** allow VPC envelopes to handle non-JSON strings ([#3534](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3534)) ([603988d](https://github.com/aws-powertools/powertools-lambda-typescript/commit/603988d4ad187501aa93ea405a3a136e260dba13)) +* **parser:** API Gateway Envelopes handle non-JSON ([#3511](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3511)) ([a4846af](https://github.com/aws-powertools/powertools-lambda-typescript/commit/a4846afd09c29032f79b79cfa1410675440d7dae)) +* **parser:** CloudWatch Log Envelope handles non-JSON ([#3505](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3505)) ([781a14e](https://github.com/aws-powertools/powertools-lambda-typescript/commit/781a14e11b55767df24739badc77c6d309982d51)) +* **parser:** DynamoDBStream schema & envelope ([#3482](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3482)) ([7f7f8ce](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7f7f8ced2953e0fc72a33cd2b6e8af15fae8d3d6)) +* **parser:** EventBridge envelope uses correct path ([#3504](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3504)) ([7cce60b](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7cce60b41b8b72c5aeee5eb17b87d159af3123ac)) +* **parser:** Firehose SQS should fail for invalid SQS message ([#3526](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3526)) ([4721dda](https://github.com/aws-powertools/powertools-lambda-typescript/commit/4721ddaf943ec6695536bdd19e7c29ebf03cb4ed)) +* **parser:** Kafka Envelope + tests ([#3489](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3489)) ([bd6b24a](https://github.com/aws-powertools/powertools-lambda-typescript/commit/bd6b24aa66b79ce267395b5376418bdabc0e31af)) +* **parser:** LambdaFunctionUrl envelope assumes JSON string in body ([#3514](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3514)) ([09aa287](https://github.com/aws-powertools/powertools-lambda-typescript/commit/09aa287c9d44e50b843c0702d86a682c939b9525)) +* **parser:** make identitySource nulablel in APIGatewayRequestAuthorizerEventV2Schema ([#3485](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3485)) ([8692de6](https://github.com/aws-powertools/powertools-lambda-typescript/commit/8692de67292cf77db5f25e0ca8c572d71d72eadb)) +* **parser:** min array length on Records ([#3521](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3521)) ([89a6281](https://github.com/aws-powertools/powertools-lambda-typescript/commit/89a62811c4b1732b77c225d64e8cda98b38968fa)) +* **parser:** set min length of 1 to s3 event lists ([#3524](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3524)) ([937be64](https://github.com/aws-powertools/powertools-lambda-typescript/commit/937be641b3ee82748fc1bdec0291abe5ef0e7a97)) +* **parser:** SNS Envelope handles non-JSON ([#3506](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3506)) ([4d7f05f](https://github.com/aws-powertools/powertools-lambda-typescript/commit/4d7f05f7415cc52fae42de643ceaffcf764c2472)) + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) diff --git a/examples/app/CHANGELOG.md b/examples/app/CHANGELOG.md index 042baa09aa..1c9c15929f 100644 --- a/examples/app/CHANGELOG.md +++ b/examples/app/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package powertools-sample-app + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package powertools-sample-app diff --git a/examples/app/package.json b/examples/app/package.json index 374bd5d11f..d78c1a97bc 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -1,6 +1,6 @@ { "name": "powertools-sample-app", - "version": "2.13.0", + "version": "2.13.1", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -38,12 +38,12 @@ "vitest": "^2.0.5" }, "dependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-lambda-powertools/batch": "^2.13.1", + "@aws-lambda-powertools/idempotency": "^2.13.1", + "@aws-lambda-powertools/logger": "^2.13.1", + "@aws-lambda-powertools/metrics": "^2.13.1", + "@aws-lambda-powertools/parameters": "^2.13.1", + "@aws-lambda-powertools/tracer": "^2.13.1", "@aws-sdk/client-ssm": "^3.731.1", "@aws-sdk/lib-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", diff --git a/examples/snippets/CHANGELOG.md b/examples/snippets/CHANGELOG.md index 16c115e38c..8c3f404c99 100644 --- a/examples/snippets/CHANGELOG.md +++ b/examples/snippets/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package code-snippets + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) diff --git a/examples/snippets/package.json b/examples/snippets/package.json index 2460b2072b..0855f318c2 100644 --- a/examples/snippets/package.json +++ b/examples/snippets/package.json @@ -1,6 +1,6 @@ { "name": "code-snippets", - "version": "2.13.0", + "version": "2.13.1", "description": "A collection code snippets for the Powertools for AWS Lambda (TypeScript) docs", "author": { "name": "Amazon Web Services", @@ -24,14 +24,14 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/parser": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-lambda-powertools/batch": "^2.13.1", + "@aws-lambda-powertools/idempotency": "^2.13.1", + "@aws-lambda-powertools/jmespath": "^2.13.1", + "@aws-lambda-powertools/logger": "^2.13.1", + "@aws-lambda-powertools/metrics": "^2.13.1", + "@aws-lambda-powertools/parameters": "^2.13.1", + "@aws-lambda-powertools/parser": "^2.13.1", + "@aws-lambda-powertools/tracer": "^2.13.1", "@aws-sdk/client-appconfigdata": "^3.731.1", "@aws-sdk/client-dynamodb": "^3.731.1", "@aws-sdk/client-secrets-manager": "^3.731.1", diff --git a/layers/CHANGELOG.md b/layers/CHANGELOG.md index 26a2879ef9..277040b5e5 100644 --- a/layers/CHANGELOG.md +++ b/layers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package layers + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package layers diff --git a/layers/package.json b/layers/package.json index c7d3280b0c..63c6f8d0a0 100644 --- a/layers/package.json +++ b/layers/package.json @@ -1,6 +1,6 @@ { "name": "layers", - "version": "2.13.0", + "version": "2.13.1", "bin": { "layer": "bin/layers.js" }, diff --git a/lerna.json b/lerna.json index 4c062708f6..fb6f4f366e 100644 --- a/lerna.json +++ b/lerna.json @@ -15,7 +15,7 @@ "layers", "examples/snippets" ], - "version": "2.13.0", + "version": "2.13.1", "npmClient": "npm", "message": "chore(release): %s [skip ci]" } diff --git a/package-lock.json b/package-lock.json index cf6acc709c..721c5f759b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,15 +48,15 @@ }, "examples/app": { "name": "powertools-sample-app", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-lambda-powertools/batch": "^2.13.1", + "@aws-lambda-powertools/idempotency": "^2.13.1", + "@aws-lambda-powertools/logger": "^2.13.1", + "@aws-lambda-powertools/metrics": "^2.13.1", + "@aws-lambda-powertools/parameters": "^2.13.1", + "@aws-lambda-powertools/tracer": "^2.13.1", "@aws-sdk/client-ssm": "^3.731.1", "@aws-sdk/lib-dynamodb": "^3.731.1", "@middy/core": "^4.7.0", @@ -80,17 +80,17 @@ }, "examples/snippets": { "name": "code-snippets", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "devDependencies": { - "@aws-lambda-powertools/batch": "^2.13.0", - "@aws-lambda-powertools/idempotency": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0", - "@aws-lambda-powertools/logger": "^2.13.0", - "@aws-lambda-powertools/metrics": "^2.13.0", - "@aws-lambda-powertools/parameters": "^2.13.0", - "@aws-lambda-powertools/parser": "^2.13.0", - "@aws-lambda-powertools/tracer": "^2.13.0", + "@aws-lambda-powertools/batch": "^2.13.1", + "@aws-lambda-powertools/idempotency": "^2.13.1", + "@aws-lambda-powertools/jmespath": "^2.13.1", + "@aws-lambda-powertools/logger": "^2.13.1", + "@aws-lambda-powertools/metrics": "^2.13.1", + "@aws-lambda-powertools/parameters": "^2.13.1", + "@aws-lambda-powertools/parser": "^2.13.1", + "@aws-lambda-powertools/tracer": "^2.13.1", "@aws-sdk/client-appconfigdata": "^3.731.1", "@aws-sdk/client-dynamodb": "^3.731.1", "@aws-sdk/client-secrets-manager": "^3.731.1", @@ -104,7 +104,7 @@ } }, "layers": { - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { "aws-cdk": "^2.176.0", @@ -15365,7 +15365,7 @@ }, "packages/batch": { "name": "@aws-lambda-powertools/batch", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -15373,7 +15373,7 @@ }, "packages/commons": { "name": "@aws-lambda-powertools/commons", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -15381,19 +15381,19 @@ }, "packages/event-handler": { "name": "@aws-lambda-powertools/event-handler", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" } }, "packages/idempotency": { "name": "@aws-lambda-powertools/idempotency", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1", + "@aws-lambda-powertools/jmespath": "^2.13.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", @@ -15420,18 +15420,18 @@ }, "packages/jmespath": { "name": "@aws-lambda-powertools/jmespath", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" } }, "packages/logger": { "name": "@aws-lambda-powertools/logger", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/commons": "^2.13.1", "lodash.merge": "^4.6.2" }, "devDependencies": { @@ -15449,10 +15449,10 @@ }, "packages/metrics": { "name": "@aws-lambda-powertools/metrics", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", @@ -15471,10 +15471,10 @@ }, "packages/parameters": { "name": "@aws-lambda-powertools/parameters", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", @@ -15517,10 +15517,10 @@ }, "packages/parser": { "name": "@aws-lambda-powertools/parser", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "peerDependencies": { "@middy/core": "4.x || 5.x || 6.x", @@ -15537,7 +15537,7 @@ }, "packages/testing": { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.176.0-alpha.0", @@ -15563,10 +15563,10 @@ }, "packages/tracer": { "name": "@aws-lambda-powertools/tracer", - "version": "2.13.0", + "version": "2.13.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/commons": "^2.13.1", "aws-xray-sdk-core": "^3.10.2" }, "devDependencies": { diff --git a/packages/batch/CHANGELOG.md b/packages/batch/CHANGELOG.md index 3522277b21..15f3c35b50 100644 --- a/packages/batch/CHANGELOG.md +++ b/packages/batch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/batch + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/batch diff --git a/packages/batch/package.json b/packages/batch/package.json index 3cf12818ba..b66a1dc739 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/batch", - "version": "2.13.0", + "version": "2.13.1", "description": "The batch processing package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index 2cdc0c158e..84b4932886 100644 --- a/packages/commons/CHANGELOG.md +++ b/packages/commons/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + + +### Bug Fixes + +* **parser:** DynamoDBStream schema & envelope ([#3482](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3482)) ([7f7f8ce](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7f7f8ced2953e0fc72a33cd2b6e8af15fae8d3d6)) + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/commons diff --git a/packages/commons/package.json b/packages/commons/package.json index f8a68c6105..ea7a41d051 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/commons", - "version": "2.13.0", + "version": "2.13.1", "description": "A shared utility package for Powertools for AWS Lambda (TypeScript) libraries", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/src/version.ts b/packages/commons/src/version.ts index 6c44732e90..9c8e6a484c 100644 --- a/packages/commons/src/version.ts +++ b/packages/commons/src/version.ts @@ -1,2 +1,2 @@ // this file is auto generated, do not modify -export const PT_VERSION = '2.13.0'; +export const PT_VERSION = '2.13.1'; diff --git a/packages/event-handler/CHANGELOG.md b/packages/event-handler/CHANGELOG.md index f0a2d43ef2..ed2add4b4b 100644 --- a/packages/event-handler/CHANGELOG.md +++ b/packages/event-handler/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/event-handler + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/event-handler diff --git a/packages/event-handler/package.json b/packages/event-handler/package.json index 464f5a5c5a..811127dc6c 100644 --- a/packages/event-handler/package.json +++ b/packages/event-handler/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/event-handler", - "version": "2.13.0", + "version": "2.13.1", "description": "Lightweight routing to reduce boilerplate for API Gateway REST/HTTP API, ALB and Lambda Function URLs", "author": { "name": "Amazon Web Services", @@ -51,7 +51,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "keywords": [ "aws", diff --git a/packages/idempotency/CHANGELOG.md b/packages/idempotency/CHANGELOG.md index f28023e492..edde202726 100644 --- a/packages/idempotency/CHANGELOG.md +++ b/packages/idempotency/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/idempotency + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/idempotency diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index a601a10893..a4ca177f2d 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/idempotency", - "version": "2.13.0", + "version": "2.13.1", "description": "The idempotency package for the Powertools for AWS Lambda (TypeScript) library. It provides options to make your Lambda functions idempotent and safe to retry.", "author": { "name": "Amazon Web Services", @@ -98,8 +98,8 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", - "@aws-lambda-powertools/jmespath": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1", + "@aws-lambda-powertools/jmespath": "^2.13.1" }, "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", diff --git a/packages/jmespath/CHANGELOG.md b/packages/jmespath/CHANGELOG.md index cf2d85308a..f889d7e080 100644 --- a/packages/jmespath/CHANGELOG.md +++ b/packages/jmespath/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/jmespath + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/jmespath diff --git a/packages/jmespath/package.json b/packages/jmespath/package.json index 7be008369f..4f6832e3b6 100644 --- a/packages/jmespath/package.json +++ b/packages/jmespath/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/jmespath", - "version": "2.13.0", + "version": "2.13.1", "description": "A type safe and modern jmespath module to parse and extract data from JSON documents using JMESPath", "author": { "name": "Amazon Web Services", @@ -71,7 +71,7 @@ "lib" ], "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "repository": { "type": "git", diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index 5590e78d60..0c2995b594 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/logger + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/logger diff --git a/packages/logger/package.json b/packages/logger/package.json index 71b321b7ef..5bd4ae1bcb 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/logger", - "version": "2.13.0", + "version": "2.13.1", "description": "The logging package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -86,7 +86,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/commons": "^2.13.1", "lodash.merge": "^4.6.2" }, "keywords": [ diff --git a/packages/metrics/CHANGELOG.md b/packages/metrics/CHANGELOG.md index 818c53c410..59c6829f84 100644 --- a/packages/metrics/CHANGELOG.md +++ b/packages/metrics/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/metrics + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/metrics diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 830a3381df..d6a2122b5a 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/metrics", - "version": "2.13.0", + "version": "2.13.1", "description": "The metrics package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -88,7 +88,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "keywords": [ "aws", diff --git a/packages/parameters/CHANGELOG.md b/packages/parameters/CHANGELOG.md index 258ec0212e..120f5ffad9 100644 --- a/packages/parameters/CHANGELOG.md +++ b/packages/parameters/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/parameters + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/parameters diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 0e5ae97619..494cb02fdd 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parameters", - "version": "2.13.0", + "version": "2.13.1", "description": "The parameters package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -165,7 +165,7 @@ "aws-sdk-client-mock": "^4.1.0" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "peerDependencies": { "@aws-sdk/client-appconfigdata": ">=3.x", diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index 77927b8458..201642ef4f 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + + +### Bug Fixes + +* **parser:** allow Kinesis envelopes to handle non-JSON strings ([#3531](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3531)) ([d18e03d](https://github.com/aws-powertools/powertools-lambda-typescript/commit/d18e03d06e4fa4970aa24c4c041793d58a7cde79)) +* **parser:** allow SQS envelopes to handle non-JSON strings ([#3513](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3513)) ([89f0006](https://github.com/aws-powertools/powertools-lambda-typescript/commit/89f0006e9b50448372a5ce70592ea1af5a75ec35)) +* **parser:** allow VPC envelopes to handle non-JSON strings ([#3534](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3534)) ([603988d](https://github.com/aws-powertools/powertools-lambda-typescript/commit/603988d4ad187501aa93ea405a3a136e260dba13)) +* **parser:** API Gateway Envelopes handle non-JSON ([#3511](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3511)) ([a4846af](https://github.com/aws-powertools/powertools-lambda-typescript/commit/a4846afd09c29032f79b79cfa1410675440d7dae)) +* **parser:** CloudWatch Log Envelope handles non-JSON ([#3505](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3505)) ([781a14e](https://github.com/aws-powertools/powertools-lambda-typescript/commit/781a14e11b55767df24739badc77c6d309982d51)) +* **parser:** DynamoDBStream schema & envelope ([#3482](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3482)) ([7f7f8ce](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7f7f8ced2953e0fc72a33cd2b6e8af15fae8d3d6)) +* **parser:** EventBridge envelope uses correct path ([#3504](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3504)) ([7cce60b](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7cce60b41b8b72c5aeee5eb17b87d159af3123ac)) +* **parser:** Firehose SQS should fail for invalid SQS message ([#3526](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3526)) ([4721dda](https://github.com/aws-powertools/powertools-lambda-typescript/commit/4721ddaf943ec6695536bdd19e7c29ebf03cb4ed)) +* **parser:** Kafka Envelope + tests ([#3489](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3489)) ([bd6b24a](https://github.com/aws-powertools/powertools-lambda-typescript/commit/bd6b24aa66b79ce267395b5376418bdabc0e31af)) +* **parser:** LambdaFunctionUrl envelope assumes JSON string in body ([#3514](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3514)) ([09aa287](https://github.com/aws-powertools/powertools-lambda-typescript/commit/09aa287c9d44e50b843c0702d86a682c939b9525)) +* **parser:** make identitySource nulablel in APIGatewayRequestAuthorizerEventV2Schema ([#3485](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3485)) ([8692de6](https://github.com/aws-powertools/powertools-lambda-typescript/commit/8692de67292cf77db5f25e0ca8c572d71d72eadb)) +* **parser:** min array length on Records ([#3521](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3521)) ([89a6281](https://github.com/aws-powertools/powertools-lambda-typescript/commit/89a62811c4b1732b77c225d64e8cda98b38968fa)) +* **parser:** set min length of 1 to s3 event lists ([#3524](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3524)) ([937be64](https://github.com/aws-powertools/powertools-lambda-typescript/commit/937be641b3ee82748fc1bdec0291abe5ef0e7a97)) +* **parser:** SNS Envelope handles non-JSON ([#3506](https://github.com/aws-powertools/powertools-lambda-typescript/issues/3506)) ([4d7f05f](https://github.com/aws-powertools/powertools-lambda-typescript/commit/4d7f05f7415cc52fae42de643ceaffcf764c2472)) + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) diff --git a/packages/parser/package.json b/packages/parser/package.json index 73d3b6c19c..e822c086b4 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parser", - "version": "2.13.0", + "version": "2.13.1", "description": "The parser package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", @@ -366,7 +366,7 @@ "nodejs" ], "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0" + "@aws-lambda-powertools/commons": "^2.13.1" }, "peerDependencies": { "@middy/core": "4.x || 5.x || 6.x", diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index 0aaf6136a5..bb13435eb5 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/testing-utils + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) **Note:** Version bump only for package @aws-lambda-powertools/testing-utils diff --git a/packages/testing/package.json b/packages/testing/package.json index aecaca4754..e01328074b 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.13.0", + "version": "2.13.1", "description": "A package containing utilities to test your serverless workloads", "author": { "name": "Amazon Web Services", diff --git a/packages/tracer/CHANGELOG.md b/packages/tracer/CHANGELOG.md index 42ca0faf29..73591f5d78 100644 --- a/packages/tracer/CHANGELOG.md +++ b/packages/tracer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.13.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.13.0...v2.13.1) (2025-01-28) + +**Note:** Version bump only for package @aws-lambda-powertools/tracer + + + + + # [2.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.12.0...v2.13.0) (2025-01-14) diff --git a/packages/tracer/package.json b/packages/tracer/package.json index e4b86e1643..7647059547 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/tracer", - "version": "2.13.0", + "version": "2.13.1", "description": "The tracer package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -87,7 +87,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.13.0", + "@aws-lambda-powertools/commons": "^2.13.1", "aws-xray-sdk-core": "^3.10.2" }, "keywords": [