From 70685f36bdd089711fab3ba6eab0c375dad35827 Mon Sep 17 00:00:00 2001 From: Amplifiyer <51211245+Amplifiyer@users.noreply.github.com> Date: Thu, 16 Nov 2023 01:57:19 +0100 Subject: [PATCH] feat: Add usage data metrics for sandbox (#642) * feat: Add usage data metrics for sandbox * update api * add more tests * add changeset * fix automated tests * Refactor packageJsonReader * update tsconfig * add comments * Add usage data emitter factory * Update interface of usage metrics to take metrics and dimensions * is it better? * remove extra variable * changing to 'on' data listener * update snapshots * minor changes * change to use readline * PR updates * Move the uuid types dep * PR updates * update to use __dirname * update snapshots * Replace package json reeader in create-amplify * small rename * remove packageJson.name from installationId --- .changeset/nervous-emus-deny.md | 11 + .eslint_dictionary.json | 4 + package-lock.json | 2525 ++++++++++------- packages/backend-deployer/API.md | 20 +- packages/backend-deployer/src/cdk_deployer.ts | 48 +- .../src/cdk_deployer_singleton_factory.ts | 17 +- .../src/cdk_error_mapper.test.ts | 61 +- .../backend-deployer/src/cdk_error_mapper.ts | 21 +- packages/backend-output-storage/API.md | 4 +- .../src/store_attribution_metadata.test.ts | 115 +- .../src/store_attribution_metadata.ts | 29 +- .../local_namespace_resolver.test.ts | 6 +- .../local_namespace_resolver.ts | 10 +- .../generate/generate_command_factory.ts | 4 +- .../sandbox_secret_command_factory.ts | 4 +- .../commands/sandbox/sandbox_command.test.ts | 1 + .../src/commands/sandbox/sandbox_command.ts | 3 +- .../sandbox/sandbox_command_factory.ts | 16 +- .../sandbox_event_handler_factory.test.ts | 27 +- .../sandbox/sandbox_event_handler_factory.ts | 30 +- .../cli/src/cwd_package_json_loader.test.ts | 52 - packages/cli/src/cwd_package_json_loader.ts | 47 - packages/create-amplify/package.json | 1 + packages/create-amplify/src/create_amplify.ts | 4 +- .../src/package_json_reader.test.ts | 33 - .../create-amplify/src/package_json_reader.ts | 29 - .../src/tsconfig_initializer.test.ts | 34 +- .../src/tsconfig_initializer.ts | 6 +- ...BranchName-branch-7d6f6c854a.template.json | 4 +- ...d6f6c854adataE67321C2.nested.template.json | 2 +- packages/create-amplify/tsconfig.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 4 +- ...d6f6c854adataE67321C2.nested.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 4 +- ...d6f6c854adataE67321C2.nested.template.json | 2 +- ...BranchName-branch-7d6f6c854a.template.json | 4 +- ...d6f6c854adataE67321C2.nested.template.json | 2 +- packages/platform-core/API.md | 41 + packages/platform-core/package.json | 9 +- .../src/cwd_package_json_reader.ts | 20 + packages/platform-core/src/index.ts | 3 + .../src/package_json_reader.test.ts | 34 + .../platform-core/src/package_json_reader.ts | 40 + .../src/usage-data/account_id_fetcher.ts | 22 + .../platform-core/src/usage-data/constants.ts | 9 + .../usage-data/get_installation_id.test.ts | 30 + .../src/usage-data/get_installation_id.ts | 16 + .../src/usage-data/get_usage_data_url.test.ts | 18 + .../src/usage-data/get_usage_data_url.ts | 23 + .../src/usage-data/serializable_error.test.ts | 74 + .../src/usage-data/serializable_error.ts | 78 + .../src/usage-data/usage_data.ts | 19 + .../src/usage-data/usage_data_emitter.test.ts | 151 + .../src/usage-data/usage_data_emitter.ts | 132 + .../usage-data/usage_data_emitter_factory.ts | 24 + packages/sandbox/API.md | 2 +- packages/sandbox/package.json | 6 +- packages/sandbox/src/file_watching_sandbox.ts | 7 +- packages/sandbox/src/sandbox.ts | 5 +- packages/sandbox/src/sandbox_executor.ts | 27 +- 64 files changed, 2524 insertions(+), 1462 deletions(-) create mode 100644 .changeset/nervous-emus-deny.md delete mode 100644 packages/cli/src/cwd_package_json_loader.test.ts delete mode 100644 packages/cli/src/cwd_package_json_loader.ts delete mode 100644 packages/create-amplify/src/package_json_reader.test.ts delete mode 100644 packages/create-amplify/src/package_json_reader.ts create mode 100644 packages/platform-core/src/cwd_package_json_reader.ts create mode 100644 packages/platform-core/src/package_json_reader.test.ts create mode 100644 packages/platform-core/src/package_json_reader.ts create mode 100644 packages/platform-core/src/usage-data/account_id_fetcher.ts create mode 100644 packages/platform-core/src/usage-data/constants.ts create mode 100644 packages/platform-core/src/usage-data/get_installation_id.test.ts create mode 100644 packages/platform-core/src/usage-data/get_installation_id.ts create mode 100644 packages/platform-core/src/usage-data/get_usage_data_url.test.ts create mode 100644 packages/platform-core/src/usage-data/get_usage_data_url.ts create mode 100644 packages/platform-core/src/usage-data/serializable_error.test.ts create mode 100644 packages/platform-core/src/usage-data/serializable_error.ts create mode 100644 packages/platform-core/src/usage-data/usage_data.ts create mode 100644 packages/platform-core/src/usage-data/usage_data_emitter.test.ts create mode 100644 packages/platform-core/src/usage-data/usage_data_emitter.ts create mode 100644 packages/platform-core/src/usage-data/usage_data_emitter_factory.ts diff --git a/.changeset/nervous-emus-deny.md b/.changeset/nervous-emus-deny.md new file mode 100644 index 0000000000..fc4e815f6a --- /dev/null +++ b/.changeset/nervous-emus-deny.md @@ -0,0 +1,11 @@ +--- +'@aws-amplify/backend-output-storage': patch +'@aws-amplify/integration-tests': patch +'@aws-amplify/backend-deployer': patch +'create-amplify': patch +'@aws-amplify/platform-core': patch +'@aws-amplify/sandbox': patch +'@aws-amplify/backend-cli': patch +--- + +Add usage data metrics diff --git a/.eslint_dictionary.json b/.eslint_dictionary.json index 527c38e62b..c1b2f35d00 100644 --- a/.eslint_dictionary.json +++ b/.eslint_dictionary.json @@ -26,6 +26,7 @@ "deployer", "disambiguator", "downlevel", + "durations", "dynamodb", "ecma", "enum", @@ -46,6 +47,7 @@ "graphql", "homedir", "hotswap", + "hotswapped", "iamv2", "identitypool", "idps", @@ -92,6 +94,8 @@ "schema", "schemas", "searchable", + "semver", + "serializable", "shopify", "shortstat", "sigint", diff --git a/package-lock.json b/package-lock.json index f13595525a..fb29e37527 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2624,25 +2624,25 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-amplify": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplify/-/client-amplify-3.441.0.tgz", - "integrity": "sha512-nFHVfkIRfDbUnYjzBVBgy10kHGfSEmVDH9givOv7xq5xlGIB2YTf1TcxWO9dBL15zWXVp7CZ8TExTTiFXUWJbg==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplify/-/client-amplify-3.450.0.tgz", + "integrity": "sha512-FXsiWleje9uGSkYzJzr1E3fVuqRt8gLdz7ydCgbwvuXAaOk+GBZlKg3nGm4UqbEHqNxf4OPZ78Nz5sM3JWID9A==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2673,25 +2673,25 @@ } }, "node_modules/@aws-sdk/client-amplifyuibuilder": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplifyuibuilder/-/client-amplifyuibuilder-3.441.0.tgz", - "integrity": "sha512-c7E8BYjXYwy5MZuphQgMZNjmPEdmOcZ345zaXKxn9zNAJd9UmqOekhwNW6eTvVbspaAqDFQnPxQEj/z3nHIi+A==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplifyuibuilder/-/client-amplifyuibuilder-3.450.0.tgz", + "integrity": "sha512-rxJbxqpi+kNQQJCCmjoj+R7lJ+nBo05Ex7HF2ldMcUnnwYtLuE1feFZQTM/lucSrANsSnBg7rfMm8ozkOF4JYw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2723,25 +2723,25 @@ } }, "node_modules/@aws-sdk/client-appsync": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.441.0.tgz", - "integrity": "sha512-xKVHLPG/viQREG7YSOpM5GV8zKDWBoDDYtk0g/spDF+E1YG3EK0Gp7h5bqmq7h39gh7wLjjGxPiIX+u+aKXZpg==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.450.0.tgz", + "integrity": "sha512-6UmCT2Rx3HKNyQDuKVF67pde32OdaarXgygvHNB20aDoxumPH8xNyKdskMVZQ/ZBMVZVzdfkkexF9lgEya+zUg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2773,25 +2773,25 @@ } }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.441.0.tgz", - "integrity": "sha512-AeeSHYhEAUwV9ixw63i9QC4W8/EMKkHWJOo3tx8hMT9T5ZYNGz+SKaWFvS/3g0BQPneU7H3D/HurTKF2IbSc7g==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.450.0.tgz", + "integrity": "sha512-7Smx4DPYPomhOY4JF8HN2ZWeMjk+LN5mW/78yrDvxZOV9UXPAPzStAJ82o+nbGQphqJO98ukXbQWcBjcFaTSYg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2825,25 +2825,25 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.441.0.tgz", - "integrity": "sha512-0BYe2YAoAIF2GdonU6IcrUb/r2pYJHICzqOCi85ixAiGKYokBSl53P7x17DkA7J2mjLWTv+S9nvuVa2RG/L7bA==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.450.0.tgz", + "integrity": "sha512-CO04SicNOQApzmoRbR3y9xACeh8j2xichrotlRYdYj8Yf/9XUyyTDEBoMpaXe3jmAlD+Q6+fOW86MckTVMFKww==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2874,26 +2874,26 @@ } }, "node_modules/@aws-sdk/client-cognito-identity-provider": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.441.0.tgz", - "integrity": "sha512-ycRa91qPP4ruRe6MI5Clniiw2J6x/IRMaGnJuoZxIC68mhwBFYb9BYNUpxj1bih9TEW21s3mdX4J/Exp9sQiuw==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.450.0.tgz", + "integrity": "sha512-0wqyWUPyCpp9INU+wBJFXwt3xcHw+GfBpmqjQYUIXqtqklAzxHDmMwVAAiw9OtIB640clAkK0LIWGqT4Xaad8w==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -2924,33 +2924,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.441.0.tgz", - "integrity": "sha512-tJUhHk4Nvakw/q3IVI2oDFCu48DzuPCMu2G3n42JPyvmY0RvmtRjduduoG1lYIGgRKJu81/MFr9i8CGYNK+/5A==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.450.0.tgz", + "integrity": "sha512-mw+zNVOXqsNjGrKjykcqxsiTMHTomcFEYODa5CEE6CeJQ2COwjNN9urzFO/uocA9z/2K3t1dG/q+2mvP0EcC2A==", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-bucket-endpoint": "3.433.0", - "@aws-sdk/middleware-expect-continue": "3.433.0", - "@aws-sdk/middleware-flexible-checksums": "3.433.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-location-constraint": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-s3": "3.440.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-ssec": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-bucket-endpoint": "3.449.0", + "@aws-sdk/middleware-expect-continue": "3.449.0", + "@aws-sdk/middleware-flexible-checksums": "3.449.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-location-constraint": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-sdk-s3": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-ssec": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/signature-v4-multi-region": "3.437.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/signature-v4-multi-region": "3.449.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@aws-sdk/xml-builder": "3.310.0", "@smithy/config-resolver": "^2.0.16", "@smithy/eventstream-serde-browser": "^2.0.12", @@ -2991,25 +2991,25 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.441.0.tgz", - "integrity": "sha512-6HVB6a9A3BiXsJe2HDHD7cYw6BfgDcHZ9vdIXYWkPTA9hp0UWZ4FAv9D2FviRCw9ixyW9Dx633NFiodsAmEiAA==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.450.0.tgz", + "integrity": "sha512-/BOUBrDt8xenciuveseEBkCL3jbj/72B5ZoBV4v5GvVI3e9ZWTbqlFVhmOf+gvCiJfj8zFPqlh7Nyc98R4B8YA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -3042,22 +3042,22 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.441.0.tgz", - "integrity": "sha512-gndGymu4cEIN7WWhQ67RO0JMda09EGBlay2L8IKCHBK/65Y34FHUX1tCNbO2qezEzsi6BPW5o2n53Rd9QqpHUw==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.450.0.tgz", + "integrity": "sha512-xutima6DhrTLMyBc1nmLhWXarvrqbH1zizrQpG7cLdwfqHEOi3thR3SWu+pUC4XN9kiXQUb2HUMcv/vdqmknkQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -3088,25 +3088,25 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.441.0.tgz", - "integrity": "sha512-GL0Cw2v7XL1cn0T+Sk5VHLlgBJoUdMsysXsHa1mFdk0l6XHMAAnwXVXiNnjmoDSPrG0psz7dL2AKzPVRXbIUjA==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.450.0.tgz", + "integrity": "sha512-pHZ/3NHHtK5YbjYrh2jT8eePSYSunyvcIhdASMqYVg3Enw/BxA0IKL8bZ/slolhqR1sAQx4sKRAO7dZK418Q6w==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-sts": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-sdk-sts": "3.449.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -3138,23 +3138,24 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.441.0.tgz", - "integrity": "sha512-gV0eQwR0VnSPUYAbgDkbBtfXbSpZgl/K6UB13DP1IFFjQYbF/BxYwvcQe4jHoPOBifSgjEbl8MfOOeIyI7k9vg==", + "version": "3.445.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.445.0.tgz", + "integrity": "sha512-6GYLElUG1QTOdmXG8zXa+Ull9IUeSeItKDYHKzHYfIkbsagMfYlf7wm9XIYlatjtgodNfZ3gPHAJfRyPmwKrsg==", "dependencies": { - "@smithy/smithy-client": "^2.1.12" + "@smithy/smithy-client": "^2.1.12", + "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.441.0.tgz", - "integrity": "sha512-mIs5vI3zcN/iVyUwpVdEhmFsUFX0x95aGErVh1ratX7fHdtENdSt0X5Bn3yQowze1DRUJBahqsPZuxe35gUt8w==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.450.0.tgz", + "integrity": "sha512-XBcifT9L1WLu6/WluOcmH04jHYtZGNnygrD1WMd6Y5JlW+JctUHfmevFHQ5IO48rJA8qV/Sl87yvL37EcVSZjA==", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.441.0", - "@aws-sdk/types": "3.433.0", + "@aws-sdk/client-cognito-identity": "3.450.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3164,11 +3165,11 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", - "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.449.0.tgz", + "integrity": "sha512-SwO9XQcBoyA0XrsSmgnMqCnR99wIyp+BjGhvzDU+Wetib7QPt++E2slJkLM/iCNc6YiqiHZtHsvXapSV7RzBJw==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3178,11 +3179,11 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.435.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.435.0.tgz", - "integrity": "sha512-i07YSy3+IrXwAzp3goCMo2OYzAwqRGIWPNMUX5ziFgA1eMlRWNC2slnbqJzax6xHrU8HdpNESAfflnQvUVBqYQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.449.0.tgz", + "integrity": "sha512-oIcww6Xsyux3LZVQr89Ps2FkULwCe3ZDUxzlyQNGD7gsMxJRD/fUBffpv+7ZmXUVoN8ZthlxuPwjpP568JVBJw==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/node-http-handler": "^2.1.8", "@smithy/property-provider": "^2.0.0", @@ -3197,15 +3198,15 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.441.0.tgz", - "integrity": "sha512-SQipQYxYqDUuSOfIhDmaTdwPTcndGQotGZXWJl56mMWqAhU8MkwjK+oMf3VgRt/umJC0QwUCF5HUHIj7gSB1JA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.441.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.450.0.tgz", + "integrity": "sha512-quil0bUH43irhEtHBBpnleVQd1ZBX9kDVf8HziK/LIhujTmHDAoDODnjhUczdJU6srMJgAJi1oVTaVek5emh9Q==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.449.0", + "@aws-sdk/credential-provider-process": "3.449.0", + "@aws-sdk/credential-provider-sso": "3.450.0", + "@aws-sdk/credential-provider-web-identity": "3.449.0", + "@aws-sdk/types": "3.449.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", @@ -3217,16 +3218,16 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.441.0.tgz", - "integrity": "sha512-WB9p37yHq6fGJt6Vll29ijHbkh9VDbPM/n5ns73bTAgFD7R0ht5kPmdmHGQA6m3RKjcHLPbymQ3lXykkMwWf/Q==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-ini": "3.441.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.441.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.450.0.tgz", + "integrity": "sha512-d4tQklhvsydNCer5Axd2sNptqqdalE78esDk0zA/cYaj56GniKqk3HLJLgb/wdv2/Ho6/4DhWeM5W4LaJNRivA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.449.0", + "@aws-sdk/credential-provider-ini": "3.450.0", + "@aws-sdk/credential-provider-process": "3.449.0", + "@aws-sdk/credential-provider-sso": "3.450.0", + "@aws-sdk/credential-provider-web-identity": "3.449.0", + "@aws-sdk/types": "3.449.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", @@ -3238,11 +3239,11 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", - "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.449.0.tgz", + "integrity": "sha512-IofhAgpwdSnaEg9H0dhydac07GCQ55Mc5oRzdzp/tm0Rl0MqnGdIvN8wYsxAeVhEi9pBSNla4eRiTu3LY6Z5+A==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", "@smithy/types": "^2.4.0", @@ -3253,13 +3254,13 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.441.0.tgz", - "integrity": "sha512-pTg16G+62mWCE8yGKuQnEBqPdpG5g71remf2jUqXaI1c7GCzbnkQDV9eD4DaAGOvzIs0wo9zAQnS2kVDPFlCYA==", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.450.0.tgz", + "integrity": "sha512-zzr9s5bG38TRn82eJXzG1/AglDihrcINn9TBfwOL8OBl0J6MF7EPAS92VpOuYs09H70MOWSZkmzEftq1urwC0g==", "dependencies": { - "@aws-sdk/client-sso": "3.441.0", - "@aws-sdk/token-providers": "3.438.0", - "@aws-sdk/types": "3.433.0", + "@aws-sdk/client-sso": "3.450.0", + "@aws-sdk/token-providers": "3.449.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", "@smithy/types": "^2.4.0", @@ -3270,11 +3271,11 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", - "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.449.0.tgz", + "integrity": "sha512-BdqATzdqg39z2VXnEH7I6dzuX/Di6F/4C8FyiiJYx2+VciYdqt6GPprlpGdpngtWct/f8pA/LxQysNBVuwU/RA==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3284,22 +3285,22 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.441.0.tgz", - "integrity": "sha512-DLx7s9/YR1CwWSjVmDMKLhyWrBXOFY3RtDLXh7AD4CAEGjhNr9mYWILMk4E6RtXl1ZhRKTMlkrUQnxNTwmct1w==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.441.0", - "@aws-sdk/client-sso": "3.441.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/credential-provider-cognito-identity": "3.441.0", - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-http": "3.435.0", - "@aws-sdk/credential-provider-ini": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.441.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", + "version": "3.450.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.450.0.tgz", + "integrity": "sha512-AWLYcwxNEsTX4hZBqq4cQsVuhVkYIwZP4DDaTAUoK6tR/WqmOFImuNB8DSPRGTEljdg+Q0qIWhMUGDWSKeJffw==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.450.0", + "@aws-sdk/client-sso": "3.450.0", + "@aws-sdk/client-sts": "3.450.0", + "@aws-sdk/credential-provider-cognito-identity": "3.450.0", + "@aws-sdk/credential-provider-env": "3.449.0", + "@aws-sdk/credential-provider-http": "3.449.0", + "@aws-sdk/credential-provider-ini": "3.450.0", + "@aws-sdk/credential-provider-node": "3.450.0", + "@aws-sdk/credential-provider-process": "3.449.0", + "@aws-sdk/credential-provider-sso": "3.450.0", + "@aws-sdk/credential-provider-web-identity": "3.449.0", + "@aws-sdk/types": "3.449.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.4.0", @@ -3310,11 +3311,11 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.433.0.tgz", - "integrity": "sha512-Lk1xIu2tWTRa1zDw5hCF1RrpWQYSodUhrS/q3oKz8IAoFqEy+lNaD5jx+fycuZb5EkE4IzWysT+8wVkd0mAnOg==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.449.0.tgz", + "integrity": "sha512-gH+IEdDfhzTmQLdWwfc23A40EhvvAhk8taXUu3DX/lXl+2lBqd4qCoGk8vfUtwh9y1kbRDnhLq04XM2DPvvj2w==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@aws-sdk/util-arn-parser": "3.310.0", "@smithy/node-config-provider": "^2.1.3", "@smithy/protocol-http": "^3.0.8", @@ -3327,11 +3328,11 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.433.0.tgz", - "integrity": "sha512-Uq2rPIsjz0CR2sulM/HyYr5WiqiefrSRLdwUZuA7opxFSfE808w5DBWSprHxbH3rbDSQR4nFiOiVYIH8Eth7nA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.449.0.tgz", + "integrity": "sha512-OOR78JoTbCo/42HViuA+F2Uy/cNWo31mN0YZJRbnY5oAMgLRrY7d2+NlJpvHlS4XPdUZ6UHeUecJ9BAWuVuWAQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/protocol-http": "^3.0.8", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3341,13 +3342,13 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.433.0.tgz", - "integrity": "sha512-Ptssx373+I7EzFUWjp/i/YiNFt6I6sDuRHz6DOUR9nmmRTlHHqmdcBXlJL2d9wwFxoBRCN8/PXGsTc/DJ4c95Q==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.449.0.tgz", + "integrity": "sha512-pKBgmwqA6jdiWZrYX0uaPOGdRldRiG2ArA7ufS5B7iz9X1JJP8ESZcO2wD+AbrLBtkZtVG31974qpqfNU6n4dQ==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/is-array-buffer": "^2.0.0", "@smithy/protocol-http": "^3.0.8", "@smithy/types": "^2.4.0", @@ -3359,11 +3360,11 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", - "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.449.0.tgz", + "integrity": "sha512-uO7ao5eFhqEEPk8uqkhNhYqqJPPv/+i2aLchvSYrviDcmcbz9HURc8j+Q9WkmIj3jf0hjAJ9UVMQggBUfoLEgg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/protocol-http": "^3.0.8", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3373,11 +3374,11 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.433.0.tgz", - "integrity": "sha512-2YD860TGntwZifIUbxm+lFnNJJhByR/RB/+fV1I8oGKg+XX2rZU+94pRfHXRywoZKlCA0L+LGDA1I56jxrB9sw==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.449.0.tgz", + "integrity": "sha512-MPCFKOpgke/ZV6WSxZZ/y9X4mn0ywLC2HVcaPJvDSKA0gsRtJLEQjWs2+I2QYTzEM0iwgoW9UOSgbFZYXF0Pow==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, @@ -3386,11 +3387,11 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", - "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.449.0.tgz", + "integrity": "sha512-YwmPLuSx5Zjdnloxr7bArT2KgF+VvlSe5+p5T/woZWEQgINRaCLdvDB37p7x/LlHrxxZRmk20MaFwSKlJU85qQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, @@ -3399,11 +3400,11 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", - "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.449.0.tgz", + "integrity": "sha512-8kWxxpPBHwFUADf8JaZsUbJ+FtS3K9MGQpMx0AZhh3P9xLaoh602CL0y0+UEEdb2uh6FJJjQiIk4eQXEolhG6Q==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/protocol-http": "^3.0.8", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3413,11 +3414,11 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.440.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.440.0.tgz", - "integrity": "sha512-DVTSr+82Z8jR9xTwDN3YHzxX7qvi0n96V92OfxvSRDq2BldCEx/KEL1orUZjw97SAXhINOlUWjRR7j4HpwWQtQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.449.0.tgz", + "integrity": "sha512-HbgWdv0txBdV9+9aJSGtGWXnQlVvpIXS6gqmJ5ESHKwZMiRHXswwptccZkvSrLjCQr5uuN37yIz3219MRrvrmw==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@aws-sdk/util-arn-parser": "3.310.0", "@smithy/protocol-http": "^3.0.8", "@smithy/smithy-client": "^2.1.12", @@ -3429,12 +3430,12 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", - "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.449.0.tgz", + "integrity": "sha512-a+mknJkS9jDiDoHg2sFW24B0f6MgT2zs/oF6zMFvVmImvUHjbhSgBzYStE+Phl/uM1zwp1lJfbuO+I+5tVwZEw==", "dependencies": { - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/types": "3.433.0", + "@aws-sdk/middleware-signing": "3.449.0", + "@aws-sdk/types": "3.449.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, @@ -3443,11 +3444,11 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", - "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.449.0.tgz", + "integrity": "sha512-L33efrgdDDY3myjLwraeS2tzUlebaZL6WS7ooACsOwkB9mRs6UQRpSpT90HbcSAjwLaa+xGqaxTA0biAuRjT5A==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/property-provider": "^2.0.0", "@smithy/protocol-http": "^3.0.8", "@smithy/signature-v4": "^2.0.0", @@ -3460,11 +3461,11 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.433.0.tgz", - "integrity": "sha512-2AMaPx0kYfCiekxoL7aqFqSSoA9du+yI4zefpQNLr+1cZOerYiDxdsZ4mbqStR1CVFaX6U6hrYokXzjInsvETw==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.449.0.tgz", + "integrity": "sha512-NY7jt1/ukqXCUqnaK2rlm5yGFyj9sOJBqK6X8Gpu5qQaYAvIP892U1UMj6VTPC7yBLPYhW2/YCfDvxOClbqKEg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, @@ -3473,12 +3474,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz", - "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.449.0.tgz", + "integrity": "sha512-0cRptIhIthxUYadrgb5FmcTgGhPIeXnFATBILaa2gA/ivfVY/CiqMAvOvLHxtBAYNK8/VXM9DFL5TfOt8mF2UQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", "@smithy/protocol-http": "^3.0.8", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3503,11 +3504,11 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.437.0.tgz", - "integrity": "sha512-MmrqudssOs87JgVg7HGVdvJws/t4kcOrJJd+975ki+DPeSoyK2U4zBDfDkJ+n0tFuZBs3sLwLh0QXE7BV28rRA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.449.0.tgz", + "integrity": "sha512-Ne8dF3R2Cj6JJBw0Utm7INtoJ2PdqGNgDpeTOFTnFGSGWnsumACbcVp4ikcZzgABTCQgKx88wPdXUHUZtaBqcg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/protocol-http": "^3.0.8", "@smithy/signature-v4": "^2.0.0", "@smithy/types": "^2.4.0", @@ -3518,21 +3519,21 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz", - "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.449.0.tgz", + "integrity": "sha512-Tgu6Z/l75uFuNQpKIidbn1gc5bI7OKmGdH5+E/ZAc58XYvxYs9N77HjhrhAGvYQEnXY6gRm26/WSeHAAh5wlgQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/middleware-host-header": "3.449.0", + "@aws-sdk/middleware-logger": "3.449.0", + "@aws-sdk/middleware-recursion-detection": "3.449.0", + "@aws-sdk/middleware-user-agent": "3.449.0", "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/types": "3.449.0", + "@aws-sdk/util-endpoints": "3.449.0", + "@aws-sdk/util-user-agent-browser": "3.449.0", + "@aws-sdk/util-user-agent-node": "3.449.0", "@smithy/config-resolver": "^2.0.16", "@smithy/fetch-http-handler": "^2.2.4", "@smithy/hash-node": "^2.0.12", @@ -3565,9 +3566,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", - "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.449.0.tgz", + "integrity": "sha512-tSQPAvknheB6XnRoc+AuEgdzn2KhY447hddeVW0Mbg8Yl9es4u4TKVINloKDEyUrCKhB/1f93Hb5uJkPe/e/Ww==", "dependencies": { "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3588,11 +3589,11 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz", - "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.449.0.tgz", + "integrity": "sha512-hWGM/e+BnbCExXLaIEa6gRb0JW3+XGfcHgRqWkAxsKCaxQuXVIPUA3HyifimxTZDKmTbGZcyWfxCnKGS7I19rw==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/util-endpoints": "^1.0.2", "tslib": "^2.5.0" }, @@ -3626,22 +3627,22 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", - "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.449.0.tgz", + "integrity": "sha512-MUQ8YIVZNZZso5w1qlatHu9c1JKYvdjlAugzKhj7npgV4U8D9RBOJUd2Ct8meXPaH4DTfW1qohPlZu/fWWqNVQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/types": "^2.4.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz", - "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==", + "version": "3.449.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.449.0.tgz", + "integrity": "sha512-PFMnFMSQTdhMAS63anMFFkzz56kWKcjGscgl0bBheEaxo8zgfLf1AAdFuBM+Ob2KYXeMezUbxYu9zOC/0S2hvw==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.449.0", "@smithy/node-config-provider": "^2.1.3", "@smithy/types": "^2.4.0", "tslib": "^2.5.0" @@ -3690,28 +3691,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/generator": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", + "@babel/parser": "^7.23.3", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -3735,9 +3736,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", - "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -3778,11 +3779,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.23.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -3909,9 +3910,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -4045,9 +4046,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -4102,9 +4103,9 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4116,9 +4117,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4141,9 +4142,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4155,9 +4156,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4169,9 +4170,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", + "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4183,17 +4184,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", + "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -4205,12 +4206,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -4220,9 +4221,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4234,12 +4235,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "@babel/plugin-syntax-flow": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -4249,9 +4250,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4263,12 +4264,12 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -4279,9 +4280,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4293,9 +4294,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4307,11 +4308,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -4323,12 +4324,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -4338,9 +4339,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4352,9 +4353,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4366,9 +4367,9 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4398,9 +4399,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4412,9 +4413,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -4427,9 +4428,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -4465,18 +4466,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dependencies": { "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/generator": "^7.23.3", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -4485,9 +4486,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -5404,9 +5405,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5910,11 +5911,11 @@ "dev": true }, "node_modules/@inquirer/checkbox": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-1.4.0.tgz", - "integrity": "sha512-7YcekwCvMTjrgjUursrH6AGZUSPw7gKPMvp0VhM3iq9mL46a7AeCfOTQTW0UPeiIfWmZK8wHyAD6wIhfDyLHpw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-1.5.0.tgz", + "integrity": "sha512-3cKJkW1vIZAs4NaS0reFsnpAjP0azffYII4I2R7PTI7ZTMg5Y1at4vzXccOH3762b2c2L4drBhpJpf9uiaGNxA==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", @@ -6014,11 +6015,11 @@ } }, "node_modules/@inquirer/confirm": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-2.0.14.tgz", - "integrity": "sha512-Elzo5VX5lO1q9xy8CChDtDQNVLaucufdZBAM12qdfX1L3NQ+TypnZytGmWDXHBTpBTwuhEuwxNvUw7B0HCURkw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-2.0.15.tgz", + "integrity": "sha512-hj8Q/z7sQXsF0DSpLQZVDhWYGN6KLM/gNjjqGkpKwBzljbQofGjn0ueHADy4HUY+OqDHmXuwk/bY+tZyIuuB0w==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "chalk": "^4.1.2" }, @@ -6091,13 +6092,13 @@ } }, "node_modules/@inquirer/core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-5.1.0.tgz", - "integrity": "sha512-EVnific72BhMOMo8mElvrYhGFWJZ73X6j0I+fITIPTsdAz6Z9A3w3csKy+XaH87/5QAEIQHR7RSCVXvQpIqNdQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-5.1.1.tgz", + "integrity": "sha512-IuJyZQUg75+L5AmopgnzxYrgcU6PJKL0hoIs332G1Gv55CnmZrhG6BzNOeZ5sOsTi1YCGOopw4rYICv74ejMFg==", "dependencies": { "@inquirer/type": "^1.1.5", - "@types/mute-stream": "^0.0.2", - "@types/node": "^20.8.2", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.9.0", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", @@ -6115,9 +6116,9 @@ } }, "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", "dependencies": { "undici-types": "~5.26.4" } @@ -6262,11 +6263,11 @@ } }, "node_modules/@inquirer/editor": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-1.2.12.tgz", - "integrity": "sha512-Y7zXQqcglPbbPkx0DPwx6HQFstJR5uex4hoQprjpdxSj8+Bf04+Og6mK/FNxoQbPvoNecegtmMGxDC+hVcMJZA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-1.2.13.tgz", + "integrity": "sha512-gBxjqt0B9GLN0j6M/tkEcmcIvB2fo9Cw0f5NRqDTkYyB9AaCzj7qvgG0onQ3GVPbMyMbbP4tWYxrBOaOdKpzNA==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "chalk": "^4.1.2", "external-editor": "^3.1.0" @@ -6340,11 +6341,11 @@ } }, "node_modules/@inquirer/expand": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-1.1.13.tgz", - "integrity": "sha512-/+7CGCa7iyJIpli0NtukEAjSI7+wGgjYzsByLVSSAk3U696ZlCCP6iPtsWx6d1qfmaMmCzejcjylOj6OAeu4bA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-1.1.14.tgz", + "integrity": "sha512-yS6fJ8jZYAsxdxuw2c8XTFMTvMR1NxZAw3LxDaFnqh7BZ++wTQ6rSp/2gGJhMacdZ85osb+tHxjVgx7F+ilv5g==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "chalk": "^4.1.2", "figures": "^3.2.0" @@ -6418,11 +6419,11 @@ } }, "node_modules/@inquirer/input": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-1.2.13.tgz", - "integrity": "sha512-gALuvSpZRYfqygPjlYWodMZ4TXwALvw7Pk4tRFhE1oMN79rLVlg88Z/X6JCUh+uV2qLaxxgbeP+cgPWTvuWsCg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-1.2.14.tgz", + "integrity": "sha512-tISLGpUKXixIQue7jypNEShrdzJoLvEvZOJ4QRsw5XTfrIYfoWFqAjMQLerGs9CzR86yAI89JR6snHmKwnNddw==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "chalk": "^4.1.2" }, @@ -6495,11 +6496,11 @@ } }, "node_modules/@inquirer/password": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-1.1.13.tgz", - "integrity": "sha512-6STGbL4Vm6ohE2yDBOSENCpCeywnvPux5psZVpvblGDop1oPiZkdsVI+NhsA0c4BE6YT0fNVK8Oqxf5Dgt5k7g==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-1.1.14.tgz", + "integrity": "sha512-vL2BFxfMo8EvuGuZYlryiyAB3XsgtbxOcFs4H9WI9szAS/VZCAwdVqs8rqEeaAf/GV/eZOghIOYxvD91IsRWSg==", "dependencies": { - "@inquirer/input": "^1.2.13", + "@inquirer/input": "^1.2.14", "@inquirer/type": "^1.1.5", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2" @@ -6598,30 +6599,30 @@ } }, "node_modules/@inquirer/prompts": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-3.2.0.tgz", - "integrity": "sha512-sfT7eDoveChXr8iIfwUYkoVBjUcKqXluhjM0EVhRhN59ZuJCc5DAdnuKwaFXomwESDoN0f+2zHy+MpxUg+EZuQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-3.3.0.tgz", + "integrity": "sha512-BBCqdSnhNs+WziSIo4f/RNDu6HAj4R/Q5nMgJb5MNPFX8sJGCvj9BoALdmR0HTWXyDS7TO8euKj6W6vtqCQG7A==", "dependencies": { - "@inquirer/checkbox": "^1.4.0", - "@inquirer/confirm": "^2.0.14", - "@inquirer/core": "^5.1.0", - "@inquirer/editor": "^1.2.12", - "@inquirer/expand": "^1.1.13", - "@inquirer/input": "^1.2.13", - "@inquirer/password": "^1.1.13", - "@inquirer/rawlist": "^1.2.13", - "@inquirer/select": "^1.3.0" + "@inquirer/checkbox": "^1.5.0", + "@inquirer/confirm": "^2.0.15", + "@inquirer/core": "^5.1.1", + "@inquirer/editor": "^1.2.13", + "@inquirer/expand": "^1.1.14", + "@inquirer/input": "^1.2.14", + "@inquirer/password": "^1.1.14", + "@inquirer/rawlist": "^1.2.14", + "@inquirer/select": "^1.3.1" }, "engines": { "node": ">=14.18.0" } }, "node_modules/@inquirer/rawlist": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-1.2.13.tgz", - "integrity": "sha512-f+bASrCY2x2F90MrBYX7nUSetL6FsVLfskhGWEyVwj6VIXzc9T878z3v7KU3V10D1trWrCVHOdeqEcbnO68yhg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-1.2.14.tgz", + "integrity": "sha512-xIYmDpYgfz2XGCKubSDLKEvadkIZAKbehHdWF082AyC2I4eHK44RUfXaoOAqnbqItZq4KHXS6jDJ78F2BmQvxg==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "chalk": "^4.1.2" }, @@ -6694,11 +6695,11 @@ } }, "node_modules/@inquirer/select": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-1.3.0.tgz", - "integrity": "sha512-3sL5odCDYI+i+piAFqFa5ULDUKEpc0U1zEY4Wm6gjP6nMAHWM8r1UzMlpQXCyHny91Tz+oeSLeKinAde0z6R7w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-1.3.1.tgz", + "integrity": "sha512-EgOPHv7XOHEqiBwBJTyiMg9r57ySyW4oyYCumGp+pGyOaXQaLb2kTnccWI6NFd9HSi5kDJhF7YjA+3RfMQJ2JQ==", "dependencies": { - "@inquirer/core": "^5.1.0", + "@inquirer/core": "^5.1.1", "@inquirer/type": "^1.1.5", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", @@ -7001,9 +7002,9 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.38.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.38.2.tgz", - "integrity": "sha512-JOARuhTwOcOMIU0O2czscoJy3ddVzIRhSA9/7T1ALuZSNphgWsPk+Bv4E7AnBDmTV4pP4lBNLtCxEHjjpWaytQ==", + "version": "7.38.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.38.3.tgz", + "integrity": "sha512-xt9iYyC5f39281j77JTA9C3ISJpW1XWkCcnw+2vM78CPnro6KhPfwQdPDfwS5JCPNuq0grm8cMdPUOPvrchDWw==", "dev": true, "dependencies": { "@microsoft/api-extractor-model": "7.28.2", @@ -7412,49 +7413,19 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@rushstack/node-core-library": { - "version": "3.61.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", - "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", - "dev": true, - "dependencies": { - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { "@types/node": "*" @@ -7554,16 +7525,16 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", - "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/type-utils": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -7589,15 +7560,15 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", + "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4" }, "engines": { @@ -7617,13 +7588,13 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7634,13 +7605,13 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", - "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -7661,9 +7632,9 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7674,13 +7645,13 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7701,17 +7672,17 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", - "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", "semver": "^7.5.4" }, "engines": { @@ -7726,12 +7697,12 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -7784,9 +7755,9 @@ } }, "node_modules/@shopify/eslint-plugin/node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true, "peer": true, "bin": { @@ -7844,11 +7815,11 @@ "dev": true }, "node_modules/@smithy/abort-controller": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz", - "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -7864,23 +7835,23 @@ } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", "dependencies": { - "@smithy/util-base64": "^2.0.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz", - "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -7888,14 +7859,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz", - "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", "tslib": "^2.5.0" }, "engines": { @@ -7903,23 +7874,23 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz", - "integrity": "sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.12.tgz", - "integrity": "sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -7927,11 +7898,11 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.12.tgz", - "integrity": "sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -7939,12 +7910,12 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.12.tgz", - "integrity": "sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -7952,12 +7923,12 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.12.tgz", - "integrity": "sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -7965,36 +7936,36 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz", - "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==", - "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.12.tgz", - "integrity": "sha512-riLnV16f27yyePX8UF0deRHAeccUK8SrOxyTykSTrnVkgS3DsjNapZtTbd8OGNKEbI60Ncdb5GwN3rHZudXvog==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", "dependencies": { "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz", - "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -8002,12 +7973,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.12.tgz", - "integrity": "sha512-x/DrSynPKrW0k00q7aZ/vy531a3mRw79mOajHp+cIF0TrA1SqEMFoy/B8X0XtoAtlJWt/vvgeDNqt/KAeaAqMw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -8015,11 +7986,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz", - "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -8035,22 +8006,22 @@ } }, "node_modules/@smithy/md5-js": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.12.tgz", - "integrity": "sha512-OgDt+Xnrw+W5z3MSl5KZZzebqmXrYl9UdbCiBYnnjErmNywwSjV6QB/Oic3/7hnsPniSU81n7Rvlhz2kH4EREQ==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz", - "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8058,16 +8029,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz", - "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.12", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-middleware": "^2.0.5", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -8075,16 +8046,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz", - "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==", - "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-retry": "^2.0.5", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -8093,11 +8064,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz", - "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8105,11 +8076,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz", - "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8117,13 +8088,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz", - "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8131,14 +8102,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz", - "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8146,11 +8117,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz", - "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8158,11 +8129,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz", - "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8170,11 +8141,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz", - "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -8183,11 +8154,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz", - "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8195,22 +8166,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz", - "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", "dependencies": { - "@smithy/types": "^2.4.0" + "@smithy/types": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz", - "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8218,17 +8189,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.12.tgz", - "integrity": "sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", + "@smithy/eventstream-codec": "^2.0.13", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/util-middleware": "^2.0.6", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -8236,13 +8207,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz", - "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.6", - "@smithy/types": "^2.4.0", - "@smithy/util-stream": "^2.0.17", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", "tslib": "^2.5.0" }, "engines": { @@ -8250,9 +8221,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz", - "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", "dependencies": { "tslib": "^2.5.0" }, @@ -8261,19 +8232,19 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz", - "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", "dependencies": { - "@smithy/querystring-parser": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -8325,13 +8296,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz", - "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -8340,16 +8311,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz", - "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==", - "dependencies": { - "@smithy/config-resolver": "^2.0.16", - "@smithy/credential-provider-imds": "^2.0.18", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8357,12 +8328,12 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz", - "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", + "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8381,11 +8352,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz", - "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8393,12 +8364,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz", - "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", "dependencies": { - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8406,17 +8377,17 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz", - "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", "dependencies": { - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -8555,9 +8526,9 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -8567,12 +8538,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.12.tgz", - "integrity": "sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -8586,21 +8557,21 @@ "dev": true }, "node_modules/@types/aws-lambda": { - "version": "8.10.125", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.125.tgz", - "integrity": "sha512-Vqw/WMlV4O1fJT6capim01v7VLDZkcX1n6Yhb52E7IfnMqYbNfwHfyDV8rRN42NLBtdDvfaqcCqs2K0fr5ljZw==", + "version": "8.10.126", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.126.tgz", + "integrity": "sha512-5eh4ffLdGYgGYI1Xr6W5L4IVse4RR7L2ns5OVUXA52nW5GFapIcGMcCzHAIMMOdpcQs3aGVxbvFlJNZH6IpgEQ==", "dev": true }, "node_modules/@types/debounce-promise": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@types/debounce-promise/-/debounce-promise-3.1.8.tgz", - "integrity": "sha512-xtglA5PhbH1XpWrzeiE+dUwuzZlhtICqq+IoXMIepMa39qM2YHhmsqCMG5ZTDX8i4G6833PZDgSbm0ALiZcngg==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@types/debounce-promise/-/debounce-promise-3.1.9.tgz", + "integrity": "sha512-awNxydYSU+E2vL7EiOAMtiSOfL5gUM5X4YSE2A92qpxDJQ/rXz6oMPYBFDcDywlUmvIDI6zsqgq17cGm5CITQw==", "dev": true }, "node_modules/@types/fs-extra": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.3.tgz", - "integrity": "sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, "dependencies": { "@types/jsonfile": "*", @@ -8608,24 +8579,24 @@ } }, "node_modules/@types/is-ci": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.3.tgz", - "integrity": "sha512-FdHbjLiN2e8fk9QYQyVYZrK8svUDJpxSaSWLUga8EZS1RGAvvrqM9zbVARBtQuYPeLgnJxM2xloOswPwj1o2cQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.4.tgz", + "integrity": "sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==", "dev": true, "dependencies": { "ci-info": "^3.1.0" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/json5": { @@ -8635,51 +8606,51 @@ "dev": true }, "node_modules/@types/jsonfile": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.3.tgz", - "integrity": "sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/lodash": { - "version": "4.14.200", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", - "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==" + "version": "4.14.201", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", + "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==" }, "node_modules/@types/minimist": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.4.tgz", - "integrity": "sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==", + "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/mute-stream": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.2.tgz", - "integrity": "sha512-FpiGjk6+IOrN0lZEfUUjdra1csU1VxwYFj4S0Zj+TJpu5x5mZW30RkEZojTadrNZHNmpCHgoE62IQZAH0OeuIA==", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "18.18.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.8.tgz", - "integrity": "sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==", + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz", - "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", + "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/parse-gitignore": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/parse-gitignore/-/parse-gitignore-1.0.1.tgz", - "integrity": "sha512-1GWhOQmViONHm+QhIusko1M6oH5xwgKkbmZwRUtAPM3RayEI3vKMCd3FDxiUrfAk+WK9nK6ohwVN6eURwQy2JA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-gitignore/-/parse-gitignore-1.0.2.tgz", + "integrity": "sha512-AQwj+lNTWI7y1kkMe8qLByiToXoXs/du70qGFIHJZaJUVrF5jB8QzvWmLyR1VWYqRagpY8ABrqAjs7uHsJnVBQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -8692,9 +8663,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, "node_modules/@types/sinon": { @@ -8707,9 +8678,15 @@ } }, "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.4.tgz", - "integrity": "sha512-GDV68H0mBSN449sa5HEj51E0wfpVQb8xNSMzxf/PrypMFcLTMwJMOM/cgXiv71Mq5drkOQmUGvL1okOZcu6RrQ==", + "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/uuid": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", "dev": true }, "node_modules/@types/wrap-ansi": { @@ -8718,18 +8695,18 @@ "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" }, "node_modules/@types/yargs": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", - "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", - "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -9770,9 +9747,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.104.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.104.0.tgz", - "integrity": "sha512-JuCafR5D1lnMKA88JUYhvRYeguozAWneC/n6kR1FUG+kXtXxpEqOxP91118dfJZYRw7FMIkHW8ewddvLwaCy5g==", + "version": "2.108.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.108.0.tgz", + "integrity": "sha512-qpBAtEGudaO7EVuGfur+lIpoh+JeWVgnvQ7z8MBtr7LEzolQf/9Cebovx/+KCUI3VnK/jsL/+3ixYwraaT/y2A==", "peer": true, "bin": { "cdk": "bin/cdk" @@ -10124,6 +10101,20 @@ "node": ">= 6" } }, + "node_modules/aws-cdk/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/aws-lambda": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", @@ -10139,10 +10130,16 @@ "lambda": "bin/lambda" } }, + "node_modules/aws-lambda/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, "node_modules/aws-sdk": { - "version": "2.1488.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1488.0.tgz", - "integrity": "sha512-rRsOrIyqb/11T9VT65WSkTGC4yjI9z9IWKrwaZBhsqYJmqD2tj02CT9e1J6VNHqQbd+/rbKTddSKOWLjyjLXBQ==", + "version": "2.1495.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1495.0.tgz", + "integrity": "sha512-JbefhY9G3WooJJjTtSUegyuNiYhY0vFd0q1KtpY8W+z1U6aKovkIyLJsR2de6u8KXZQkcwT+7N46BYT1SbZ5sQ==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -10171,6 +10168,38 @@ "tslib": "^2.1.0" } }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/aws-sdk/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", @@ -10538,14 +10567,27 @@ } }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/buffer-equal-constant-time": { @@ -10784,9 +10826,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001559", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", - "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", + "version": "1.0.30001562", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", + "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", "funding": [ { "type": "opencollective", @@ -11108,10 +11150,13 @@ } }, "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "engines": { + "node": ">=16" + } }, "node_modules/comment-parser": { "version": "1.3.1", @@ -11547,11 +11592,14 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { @@ -11742,9 +11790,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.576", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz", - "integrity": "sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==" + "version": "1.4.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", + "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -11973,15 +12021,15 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -12927,12 +12975,12 @@ "dev": true }, "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { - "node": ">=0.4.x" + "node": ">=0.8.x" } }, "node_modules/execa": { @@ -13091,9 +13139,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -13349,9 +13397,9 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { "flatted": "^3.2.9", @@ -13359,7 +13407,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flat-cache/node_modules/glob": { @@ -13496,15 +13544,14 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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" ], - "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -14061,10 +14108,24 @@ } }, "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/ignore": { "version": "5.2.4", @@ -14352,14 +14413,14 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14451,20 +14512,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", @@ -14727,11 +14774,24 @@ "node": ">=8" } }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -14745,9 +14805,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -15182,15 +15242,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, "node_modules/listr2": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", @@ -16146,16 +16197,17 @@ } }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", "is-wsl": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16398,9 +16450,12 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -16998,59 +17053,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/readable-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/readable-stream/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/readable-stream/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/real-require": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", @@ -17510,11 +17512,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -18778,19 +18775,6 @@ "fsevents": "~2.3.3" } }, - "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/tty-table": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", @@ -19219,9 +19203,9 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "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" @@ -19677,12 +19661,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", @@ -20260,8 +20238,7 @@ }, "packages/cli/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==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -20274,8 +20251,7 @@ }, "packages/cli/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -20287,8 +20263,7 @@ }, "packages/cli/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -20298,41 +20273,74 @@ }, "packages/cli/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" + }, + "packages/cli/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } }, "packages/cli/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, - "packages/cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "packages/cli/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "packages/cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", "engines": { "node": ">=8" } }, - "packages/cli/node_modules/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==", + "packages/cli/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dependencies": { - "ansi-styles": "^4.0.0", + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/cli/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, @@ -20345,8 +20353,7 @@ }, "packages/cli/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -20362,8 +20369,7 @@ }, "packages/cli/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==", + "license": "ISC", "engines": { "node": ">=12" } @@ -20392,6 +20398,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/cli-core": "^0.2.0", + "@aws-amplify/platform-core": "0.2.0", "execa": "^7.2.0", "yargs": "^17.7.2" }, @@ -20404,8 +20411,7 @@ }, "packages/create-amplify/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==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -20418,8 +20424,7 @@ }, "packages/create-amplify/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -20431,8 +20436,7 @@ }, "packages/create-amplify/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -20442,26 +20446,22 @@ }, "packages/create-amplify/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "packages/create-amplify/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, "packages/create-amplify/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "packages/create-amplify/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -20473,8 +20473,7 @@ }, "packages/create-amplify/node_modules/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==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20489,8 +20488,7 @@ }, "packages/create-amplify/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -20506,8 +20504,7 @@ }, "packages/create-amplify/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==", + "license": "ISC", "engines": { "node": ">=12" } @@ -20577,9 +20574,8 @@ }, "packages/integration-tests/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -20600,9 +20596,8 @@ }, "packages/integration-tests/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -20612,18 +20607,16 @@ }, "packages/integration-tests/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "packages/integration-tests/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": ">=14" }, @@ -20656,7 +20649,409 @@ "version": "0.2.0", "license": "Apache-2.0", "dependencies": { - "@aws-amplify/plugin-types": "^0.4.0" + "@aws-amplify/plugin-types": "^0.4.0", + "@aws-sdk/client-sts": "3.445.0", + "is-ci": "^3.0.1", + "uuid": "9.0.1", + "zod": "^3.21.4" + }, + "devDependencies": { + "@types/uuid": "9.0.7" + } + }, + "packages/platform-core/node_modules/@aws-sdk/client-sso": { + "version": "3.445.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.438.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.437.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-endpoints": "^1.0.2", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/client-sts": { + "version": "3.445.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.445.0", + "@aws-sdk/credential-provider-node": "3.445.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-sdk-sts": "3.433.0", + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.438.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.437.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-endpoints": "^1.0.2", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", + "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.445.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.445.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.445.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-ini": "3.445.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.445.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", + "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.445.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.445.0", + "@aws-sdk/token-providers": "3.438.0", + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", + "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", + "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-logger": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", + "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", + "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", + "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-signing": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", + "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.4.0", + "@smithy/util-middleware": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.438.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz", + "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.438.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/token-providers": { + "version": "3.438.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz", + "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.438.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.438.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.437.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-endpoints": "^1.0.2", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/types": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", + "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", + "dependencies": { + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/util-endpoints": { + "version": "3.438.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz", + "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/util-endpoints": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", + "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "packages/platform-core/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.437.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz", + "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "packages/platform-core/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "packages/plugin-types": { @@ -20696,34 +21091,6 @@ "aws-cdk": "^2.103.0" } }, - "packages/sandbox/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/sandbox/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/storage-construct": { "name": "@aws-amplify/storage-construct-alpha", "version": "0.2.2", diff --git a/packages/backend-deployer/API.md b/packages/backend-deployer/API.md index 2166facecd..992e3a75f6 100644 --- a/packages/backend-deployer/API.md +++ b/packages/backend-deployer/API.md @@ -9,8 +9,8 @@ import { DeploymentType } from '@aws-amplify/plugin-types'; // @public export type BackendDeployer = { - deploy: (backendId?: BackendIdentifier, deployProps?: DeployProps) => Promise; - destroy: (backendId?: BackendIdentifier, destroyProps?: DestroyProps) => Promise; + deploy: (backendId?: BackendIdentifier, deployProps?: DeployProps) => Promise; + destroy: (backendId?: BackendIdentifier, destroyProps?: DestroyProps) => Promise; }; // @public @@ -18,6 +18,12 @@ export class BackendDeployerFactory { static getInstance: () => BackendDeployer; } +// @public (undocumented) +export type DeploymentTimes = { + synthesisTime?: number; + totalTime?: number; +}; + // @public (undocumented) export type DeployProps = { deploymentType?: DeploymentType; @@ -25,11 +31,21 @@ export type DeployProps = { validateAppSources?: boolean; }; +// @public (undocumented) +export type DeployResult = { + deploymentTimes: DeploymentTimes; +}; + // @public (undocumented) export type DestroyProps = { deploymentType?: DeploymentType; }; +// @public (undocumented) +export type DestroyResult = { + deploymentTimes: DeploymentTimes; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-deployer/src/cdk_deployer.ts b/packages/backend-deployer/src/cdk_deployer.ts index 96da55a3ae..6fd8cd208b 100644 --- a/packages/backend-deployer/src/cdk_deployer.ts +++ b/packages/backend-deployer/src/cdk_deployer.ts @@ -1,9 +1,12 @@ import { execa } from 'execa'; import stream from 'stream'; +import readline from 'readline'; import { BackendDeployer, DeployProps, + DeployResult, DestroyProps, + DestroyResult, } from './cdk_deployer_singleton_factory.js'; import { CdkErrorMapper } from './cdk_error_mapper.js'; import { BackendIdentifier, DeploymentType } from '@aws-amplify/plugin-types'; @@ -47,7 +50,7 @@ export class CDKDeployer implements BackendDeployer { } } - await this.invokeCdk( + return this.invokeCdk( InvokableCommand.DEPLOY, backendId, deployProps?.deploymentType, @@ -62,7 +65,7 @@ export class CDKDeployer implements BackendDeployer { backendId?: BackendIdentifier, destroyProps?: DestroyProps ) => { - await this.invokeCdk( + return this.invokeCdk( InvokableCommand.DESTROY, backendId, destroyProps?.deploymentType, @@ -104,7 +107,7 @@ export class CDKDeployer implements BackendDeployer { backendId?: BackendIdentifier, deploymentType?: DeploymentType, additionalArguments?: string[] - ) => { + ): Promise => { // Basic args const cdkCommandArgs = [ 'cdk', @@ -145,7 +148,7 @@ export class CDKDeployer implements BackendDeployer { } try { - await this.executeChildProcess('npx', cdkCommandArgs); + return await this.executeChildProcess('npx', cdkCommandArgs); } catch (err) { throw this.cdkErrorMapper.getHumanReadableError(err as Error); } @@ -161,23 +164,52 @@ export class CDKDeployer implements BackendDeployer { // actionable errors being hidden among the stdout. Moreover execa errors are // useless when calling CLIs unless you made execa calling error. let aggregatedStderr = ''; - const aggregatorStream = new stream.Writable(); - aggregatorStream._write = function (chunk, encoding, done) { + const aggregatorStderrStream = new stream.Writable(); + aggregatorStderrStream._write = function (chunk, encoding, done) { aggregatedStderr += chunk; done(); }; const childProcess = execa(command, cdkCommandArgs, { stdin: 'inherit', - stdout: 'inherit', + stdout: 'pipe', stderr: 'pipe', }); - childProcess.stderr?.pipe(aggregatorStream); + childProcess.stderr?.pipe(aggregatorStderrStream); + childProcess.stdout?.pipe(process.stdout); + + const cdkOutput = { deploymentTimes: {} }; + if (childProcess.stdout) { + await this.populateCDKOutputFromStdout(cdkOutput, childProcess.stdout); + } try { await childProcess; + return cdkOutput; } catch (error) { // swallow execa error which is not really helpful, rather throw stderr throw new Error(aggregatedStderr); } }; + + private populateCDKOutputFromStdout = async ( + output: DeployResult | DestroyResult, + stdout: stream.Readable + ) => { + const regexTotalTime = /✨ {2}Total time: (\d*\.*\d*)s.*/; + const regexSynthTime = /✨ {2}Synthesis time: (\d*\.*\d*)s/; + const reader = readline.createInterface(stdout); + for await (const line of reader) { + if (line.includes('✨')) { + // Good chance that it contains timing information + const totalTime = line.match(regexTotalTime); + if (totalTime && totalTime.length > 1 && !isNaN(+totalTime[1])) { + output.deploymentTimes.totalTime = +totalTime[1]; + } + const synthTime = line.match(regexSynthTime); + if (synthTime && synthTime.length > 1 && !isNaN(+synthTime[1])) { + output.deploymentTimes.synthesisTime = +synthTime[1]; + } + } + } + }; } diff --git a/packages/backend-deployer/src/cdk_deployer_singleton_factory.ts b/packages/backend-deployer/src/cdk_deployer_singleton_factory.ts index 9031cbf91d..3f09c76684 100644 --- a/packages/backend-deployer/src/cdk_deployer_singleton_factory.ts +++ b/packages/backend-deployer/src/cdk_deployer_singleton_factory.ts @@ -9,10 +9,23 @@ export type DeployProps = { validateAppSources?: boolean; }; +export type DeployResult = { + deploymentTimes: DeploymentTimes; +}; + export type DestroyProps = { deploymentType?: DeploymentType; }; +export type DestroyResult = { + deploymentTimes: DeploymentTimes; +}; + +export type DeploymentTimes = { + synthesisTime?: number; + totalTime?: number; +}; + /** * Invokes an invokable command */ @@ -20,11 +33,11 @@ export type BackendDeployer = { deploy: ( backendId?: BackendIdentifier, deployProps?: DeployProps - ) => Promise; + ) => Promise; destroy: ( backendId?: BackendIdentifier, destroyProps?: DestroyProps - ) => Promise; + ) => Promise; }; /** diff --git a/packages/backend-deployer/src/cdk_error_mapper.test.ts b/packages/backend-deployer/src/cdk_error_mapper.test.ts index 55d340ba83..feacb5cf07 100644 --- a/packages/backend-deployer/src/cdk_error_mapper.test.ts +++ b/packages/backend-deployer/src/cdk_error_mapper.test.ts @@ -5,61 +5,76 @@ import { CdkErrorMapper } from './cdk_error_mapper.js'; const testErrorMappings = [ { errorMessage: 'UnknownError', - expectedString: 'UnknownError', + expectedTopLevelErrorMessage: 'UnknownError', + expectedDownstreamErrorMessage: undefined, }, { errorMessage: 'ExpiredToken', - expectedString: + expectedTopLevelErrorMessage: '[ExpiredToken]: The security token included in the request is invalid.', + expectedDownstreamErrorMessage: 'ExpiredToken', }, { errorMessage: 'Access Denied', - expectedString: + expectedTopLevelErrorMessage: '[AccessDenied]: The deployment role does not have sufficient permissions to perform this deployment.', + expectedDownstreamErrorMessage: 'Access Denied', }, { errorMessage: 'Has the environment been bootstrapped', - expectedString: + expectedTopLevelErrorMessage: '[BootstrapFailure]: This AWS account and region has not been bootstrapped. Run `cdk bootstrap aws://{YOUR_ACCOUNT_ID}/{YOUR_REGION}` locally to resolve this.', + expectedDownstreamErrorMessage: 'Has the environment been bootstrapped', }, { errorMessage: 'amplify/backend.ts', - expectedString: + expectedTopLevelErrorMessage: '[SynthError]: Unable to build Amplify backend. Check your backend definition in the `amplify` folder.', + expectedDownstreamErrorMessage: 'amplify/backend.ts', }, { - errorMessage: 'ROLLBACK_COMPLETE', - expectedString: - '[CloudFormationFailure]: The CloudFormation deployment has failed. Find more information in the CloudFormation AWS Console for this stack.', - }, - { - errorMessage: 'ROLLBACK_FAILED', - expectedString: + errorMessage: '❌ Deployment failed: something bad happened\n', + expectedTopLevelErrorMessage: '[CloudFormationFailure]: The CloudFormation deployment has failed. Find more information in the CloudFormation AWS Console for this stack.', + expectedDownstreamErrorMessage: 'something bad happened', }, { errorMessage: 'CFN error happened: Updates are not allowed for property: some property', - expectedString: + expectedTopLevelErrorMessage: '[UpdateNotSupported]: The changes that you are trying to apply are not supported.', + expectedDownstreamErrorMessage: + 'CFN error happened: Updates are not allowed for property: some property', }, { errorMessage: 'CFN error happened: Invalid AttributeDataType input, consider using the provided AttributeDataType enum', - expectedString: + expectedTopLevelErrorMessage: '[UpdateNotSupported]: User pool attributes cannot be changed after a user pool has been created.', + expectedDownstreamErrorMessage: + 'CFN error happened: Invalid AttributeDataType input, consider using the provided AttributeDataType enum', }, ]; void describe('invokeCDKCommand', { concurrency: 1 }, () => { const cdkErrorMapper = new CdkErrorMapper(); - testErrorMappings.forEach(({ errorMessage, expectedString }) => { - void it(`handles ${errorMessage} error`, () => { - const humanReadableError = cdkErrorMapper.getHumanReadableError( - new Error(errorMessage) - ); - assert.equal(humanReadableError.message, expectedString); - assert.equal((humanReadableError.cause as Error).message, errorMessage); - }); - }); + testErrorMappings.forEach( + ({ + errorMessage, + expectedTopLevelErrorMessage, + expectedDownstreamErrorMessage, + }) => { + void it(`handles ${errorMessage} error`, () => { + const humanReadableError = cdkErrorMapper.getHumanReadableError( + new Error(errorMessage) + ); + assert.equal(humanReadableError.message, expectedTopLevelErrorMessage); + expectedDownstreamErrorMessage && + assert.equal( + (humanReadableError.cause as Error).message, + expectedDownstreamErrorMessage + ); + }); + } + ); }); diff --git a/packages/backend-deployer/src/cdk_error_mapper.ts b/packages/backend-deployer/src/cdk_error_mapper.ts index 8069c9db9d..c75189f47e 100644 --- a/packages/backend-deployer/src/cdk_error_mapper.ts +++ b/packages/backend-deployer/src/cdk_error_mapper.ts @@ -23,10 +23,15 @@ export class CdkErrorMapper { }, { // the backend entry point file is referenced in the stack indicating a problem in customer code - errorRegex: /amplify\/backend.ts/, + errorRegex: /amplify\/backend/, humanReadableError: '[SynthError]: Unable to build Amplify backend. Check your backend definition in the `amplify` folder.', }, + { + errorRegex: /SyntaxError:(.*)\n/, + humanReadableError: + '[SyntaxError]: Unable to build Amplify backend. Check your backend definition in the `amplify` folder.', + }, { errorRegex: /Updates are not allowed for property/, humanReadableError: @@ -43,7 +48,7 @@ export class CdkErrorMapper { }, { // Note that the order matters, this should be the last as it captures generic CFN error - errorRegex: /ROLLBACK_(COMPLETE|FAILED)/, + errorRegex: /❌ Deployment failed: (.*)\n/, humanReadableError: '[CloudFormationFailure]: The CloudFormation deployment has failed. Find more information in the CloudFormation AWS Console for this stack.', }, @@ -54,8 +59,14 @@ export class CdkErrorMapper { knownError.errorRegex.test(error.message) ); - return new Error(matchingError?.humanReadableError || error.message, { - cause: error, - }); + if (matchingError) { + const underlyingMessage = error.message.match(matchingError.errorRegex); + error.message = + underlyingMessage && underlyingMessage.length == 2 + ? underlyingMessage[1] + : error.message; + return new Error(matchingError.humanReadableError, { cause: error }); + } + return error; }; } diff --git a/packages/backend-output-storage/API.md b/packages/backend-output-storage/API.md index 0700c291fc..76d298a4c9 100644 --- a/packages/backend-output-storage/API.md +++ b/packages/backend-output-storage/API.md @@ -8,8 +8,8 @@ import { BackendOutputEntry } from '@aws-amplify/plugin-types'; import { BackendOutputStorageStrategy } from '@aws-amplify/plugin-types'; -import * as _fs from 'fs'; import * as _os from 'os'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; import { Stack } from 'aws-cdk-lib'; // @public (undocumented) @@ -23,7 +23,7 @@ export type AttributionMetadata = { // @public export class AttributionMetadataStorage { - constructor(fs?: typeof _fs, os?: typeof _os); + constructor(os?: typeof _os, packageJsonReader?: PackageJsonReader); storeAttributionMetadata: (stack: Stack, stackType: string, libraryPackageJsonAbsolutePath: string, additionalMetadata?: Record) => void; } diff --git a/packages/backend-output-storage/src/store_attribution_metadata.test.ts b/packages/backend-output-storage/src/store_attribution_metadata.test.ts index e3b2ba2eda..813106e64a 100644 --- a/packages/backend-output-storage/src/store_attribution_metadata.test.ts +++ b/packages/backend-output-storage/src/store_attribution_metadata.test.ts @@ -1,70 +1,41 @@ import { describe, it, mock } from 'node:test'; import { App, Stack } from 'aws-cdk-lib'; +import * as os from 'os'; import { AttributionMetadata, AttributionMetadataStorage, } from './store_attribution_metadata.js'; + import assert from 'node:assert'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; void describe('storeAttributionMetadata', () => { - const existsSyncMock = mock.fn(() => true); - const readFileSyncMock = mock.fn(() => - JSON.stringify({ version: '12.13.14' }) - ); - const fsMock = { - existsSync: existsSyncMock, - readFileSync: readFileSyncMock, - }; + const packageJsonReaderMock = mock.fn(() => { + return { version: '12.13.14' }; + }); + const packageJsonReader = { + read: packageJsonReaderMock, + } as PackageJsonReader; void it('does nothing if stack description is already set', () => { const app = new App(); const stack = new Stack(app); const originalDescription = 'description is already set'; stack.templateOptions.description = originalDescription; - new AttributionMetadataStorage().storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); assert.equal(stack.templateOptions.description, originalDescription); }); - void it('throws if provided package json file cannot be found', () => { - const app = new App(); - const stack = new Stack(app); - existsSyncMock.mock.mockImplementationOnce(() => false); - assert.throws( - () => - new AttributionMetadataStorage( - fsMock as never - ).storeAttributionMetadata(stack, 'test', 'some/path'), - { message: 'Could not find some/path to load library version from' } - ); - }); - - void it('throws if provided package json file does not contain a version field', () => { - const app = new App(); - const stack = new Stack(app); - readFileSyncMock.mock.mockImplementationOnce(() => - JSON.stringify({ invalid: 'value' }) - ); - assert.throws( - () => - new AttributionMetadataStorage( - fsMock as never - ).storeAttributionMetadata(stack, 'test', 'some/path'), - { message: 'Could not parse library version from some/path' } - ); - }); - void it('sets CDK deployment type if no CDK context value specified', () => { const app = new App(); const stack = new Stack(app); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); const metadata: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -75,11 +46,10 @@ void describe('storeAttributionMetadata', () => { const app = new App(); const stack = new Stack(app); stack.node.setContext('amplify-backend-type', 'branch'); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); const metadata: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -90,11 +60,10 @@ void describe('storeAttributionMetadata', () => { const app = new App(); const stack = new Stack(app); stack.node.setContext('amplify-backend-type', 'sandbox'); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); const metadata: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -105,11 +74,10 @@ void describe('storeAttributionMetadata', () => { const app = new App(); const stack = new Stack(app); stack.node.setContext('amplify-backend-type', 'sandbox'); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); const metadata: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -119,12 +87,12 @@ void describe('storeAttributionMetadata', () => { void it('sets additional metadata in attribution payload', () => { const app = new App(); const stack = new Stack(app); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path', - { some: 'otherData' } - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path', { + some: 'otherData', + }); const attribution: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -134,11 +102,10 @@ void describe('storeAttributionMetadata', () => { void it('sets empty additional metadata object if none specified', () => { const app = new App(); const stack = new Stack(app); - new AttributionMetadataStorage(fsMock as never).storeAttributionMetadata( - stack, - 'test', - 'some/path' - ); + new AttributionMetadataStorage( + os, + packageJsonReader + ).storeAttributionMetadata(stack, 'test', 'some/path'); const attribution: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' ); @@ -160,8 +127,8 @@ void describe('storeAttributionMetadata', () => { const app = new App(); const stack = new Stack(app); new AttributionMetadataStorage( - fsMock as never, - osMock as never + osMock as never, + packageJsonReader ).storeAttributionMetadata(stack, 'test', 'some/path'); const metadata: AttributionMetadata = JSON.parse( stack.templateOptions.description || '' diff --git a/packages/backend-output-storage/src/store_attribution_metadata.ts b/packages/backend-output-storage/src/store_attribution_metadata.ts index d92f5dd286..f5bb12490a 100644 --- a/packages/backend-output-storage/src/store_attribution_metadata.ts +++ b/packages/backend-output-storage/src/store_attribution_metadata.ts @@ -1,7 +1,6 @@ import { Stack } from 'aws-cdk-lib'; import * as _os from 'os'; -import { CDKContextKey } from '@aws-amplify/platform-core'; -import * as _fs from 'fs'; +import { CDKContextKey, PackageJsonReader } from '@aws-amplify/platform-core'; import { DeploymentType } from '@aws-amplify/plugin-types'; /** @@ -12,8 +11,8 @@ export class AttributionMetadataStorage { * Constructor with props for injecting test mocks */ constructor( - private readonly fs: typeof _fs = _fs, - private readonly os: typeof _os = _os + private readonly os: typeof _os = _os, + private readonly packageJsonReader = new PackageJsonReader() ) {} /** @@ -51,30 +50,12 @@ export class AttributionMetadataStorage { ): AttributionMetadata => ({ createdOn: this.getPlatform(), createdBy: this.getDeploymentEngineType(stack), - createdWith: this.getLibraryVersion(libraryPackageJsonAbsolutePath), + createdWith: + this.packageJsonReader.read(libraryPackageJsonAbsolutePath).version ?? '', // This shouldn't happen, regardless we shouldn't throw for attribution stackType: stackType, metadata: additionalMetadata, }); - private getLibraryVersion = (absolutePackageJsonPath: string): string => { - if (!this.fs.existsSync(absolutePackageJsonPath)) { - throw new Error( - `Could not find ${absolutePackageJsonPath} to load library version from` - ); - } - const packageJsonContents = JSON.parse( - // we have to use sync fs methods here because this is part of cdk synth - this.fs.readFileSync(absolutePackageJsonPath, 'utf-8') - ); - const libraryVersion = packageJsonContents.version; - if (typeof libraryVersion !== 'string') { - throw new Error( - `Could not parse library version from ${absolutePackageJsonPath}` - ); - } - return libraryVersion; - }; - private getDeploymentEngineType = (stack: Stack): DeploymentEngineType => { const deploymentType: DeploymentType | undefined = stack.node.tryGetContext( CDKContextKey.DEPLOYMENT_TYPE diff --git a/packages/cli/src/backend-identifier/local_namespace_resolver.test.ts b/packages/cli/src/backend-identifier/local_namespace_resolver.test.ts index f53eebc25d..445120f5fb 100644 --- a/packages/cli/src/backend-identifier/local_namespace_resolver.test.ts +++ b/packages/cli/src/backend-identifier/local_namespace_resolver.test.ts @@ -4,10 +4,10 @@ import assert from 'node:assert'; void describe('LocalAppNameResolver', () => { void it('returns package.json#name', async () => { - const packageJsonLoaderMock = { - loadCwdPackageJson: async () => ({ name: 'testName' }), + const packageJsonReaderMock = { + read: () => ({ name: 'testName' }), }; - const resolver = new LocalNamespaceResolver(packageJsonLoaderMock as never); + const resolver = new LocalNamespaceResolver(packageJsonReaderMock as never); const result = await resolver.resolve(); assert.equal(result, 'testName'); }); diff --git a/packages/cli/src/backend-identifier/local_namespace_resolver.ts b/packages/cli/src/backend-identifier/local_namespace_resolver.ts index 3ac87c4f26..cf45c7ec92 100644 --- a/packages/cli/src/backend-identifier/local_namespace_resolver.ts +++ b/packages/cli/src/backend-identifier/local_namespace_resolver.ts @@ -1,4 +1,4 @@ -import { CwdPackageJsonLoader } from '../cwd_package_json_loader.js'; +import { CwdPackageJsonReader } from '@aws-amplify/platform-core'; export type NamespaceResolver = { resolve: () => Promise; @@ -9,15 +9,17 @@ export type NamespaceResolver = { */ export class LocalNamespaceResolver implements NamespaceResolver { /** - * packageJsonLoader is assigned to an instance member for testing. + * packageJsonReader is assigned to an instance member for testing. * resolve is bound to this so that it can be passed as a function reference */ - constructor(private readonly packageJsonLoader: CwdPackageJsonLoader) {} + constructor(private readonly packageJsonReader: CwdPackageJsonReader) {} /** * Returns the value of package.json#name from the current working directory */ resolve = async () => { - return (await this.packageJsonLoader.loadCwdPackageJson()).name; + const name = this.packageJsonReader.read().name; + if (name) return name; + throw new Error('Cannot load name from the package.json'); }; } diff --git a/packages/cli/src/commands/generate/generate_command_factory.ts b/packages/cli/src/commands/generate/generate_command_factory.ts index 8d9a7d219b..d9fef411b3 100644 --- a/packages/cli/src/commands/generate/generate_command_factory.ts +++ b/packages/cli/src/commands/generate/generate_command_factory.ts @@ -3,7 +3,7 @@ import { GenerateCommand } from './generate_command.js'; import { GenerateConfigCommand } from './config/generate_config_command.js'; import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; import { GenerateFormsCommand } from './forms/generate_forms_command.js'; -import { CwdPackageJsonLoader } from '../../cwd_package_json_loader.js'; +import { CwdPackageJsonReader } from '@aws-amplify/platform-core'; import { GenerateGraphqlClientCodeCommand } from './graphql-client-code/generate_graphql_client_code_command.js'; import { LocalNamespaceResolver } from '../../backend-identifier/local_namespace_resolver.js'; import { BackendIdentifierResolver } from '../../backend-identifier/backend_identifier_resolver.js'; @@ -22,7 +22,7 @@ export const createGenerateCommand = (): CommandModule => { credentialProvider ); const localAppNameResolver = new LocalNamespaceResolver( - new CwdPackageJsonLoader() + new CwdPackageJsonReader() ); const backendIdentifierResolver = new BackendIdentifierResolver( diff --git a/packages/cli/src/commands/sandbox/sandbox-secret/sandbox_secret_command_factory.ts b/packages/cli/src/commands/sandbox/sandbox-secret/sandbox_secret_command_factory.ts index 2f30b928cd..fda5ca89e1 100644 --- a/packages/cli/src/commands/sandbox/sandbox-secret/sandbox_secret_command_factory.ts +++ b/packages/cli/src/commands/sandbox/sandbox-secret/sandbox_secret_command_factory.ts @@ -2,7 +2,7 @@ import { CommandModule } from 'yargs'; import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; import { SandboxBackendIdResolver } from '../sandbox_id_resolver.js'; -import { CwdPackageJsonLoader } from '../../../cwd_package_json_loader.js'; +import { CwdPackageJsonReader } from '@aws-amplify/platform-core'; import { SandboxSecretCommand } from './sandbox_secret_command.js'; import { getSecretClient } from '@aws-amplify/backend-secret'; import { SandboxSecretSetCommand } from './sandbox_secret_set_command.js'; @@ -15,7 +15,7 @@ import { SandboxSecretListCommand } from './sandbox_secret_list_command.js'; */ export const createSandboxSecretCommand = (): CommandModule => { const sandboxIdResolver = new SandboxBackendIdResolver( - new LocalNamespaceResolver(new CwdPackageJsonLoader()) + new LocalNamespaceResolver(new CwdPackageJsonReader()) ); const secretClient = getSecretClient(); diff --git a/packages/cli/src/commands/sandbox/sandbox_command.test.ts b/packages/cli/src/commands/sandbox/sandbox_command.test.ts index 63d8b0dfc7..e24bb996a1 100644 --- a/packages/cli/src/commands/sandbox/sandbox_command.test.ts +++ b/packages/cli/src/commands/sandbox/sandbox_command.test.ts @@ -64,6 +64,7 @@ void describe('sandbox command', () => { () => ({ successfulDeployment: [clientConfigGenerationMock], successfulDeletion: [clientConfigDeletionMock], + failedDeployment: [], }) ); const parser = yargs().command(sandboxCommand as unknown as CommandModule); diff --git a/packages/cli/src/commands/sandbox/sandbox_command.ts b/packages/cli/src/commands/sandbox/sandbox_command.ts index d2fc5183ec..86d50c5fe5 100644 --- a/packages/cli/src/commands/sandbox/sandbox_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox_command.ts @@ -24,11 +24,12 @@ type SandboxCommandOptionsCamelCase = { profile: string | undefined; }; -export type EventHandler = () => void; +export type EventHandler = (...args: unknown[]) => void; export type SandboxEventHandlers = { successfulDeployment: EventHandler[]; successfulDeletion: EventHandler[]; + failedDeployment: EventHandler[]; }; export type SandboxEventHandlerParams = { diff --git a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts index 42cce1bae5..2a95afbf4b 100644 --- a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts +++ b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts @@ -3,13 +3,18 @@ import { SandboxCommand, SandboxCommandOptions } from './sandbox_command.js'; import { SandboxSingletonFactory } from '@aws-amplify/sandbox'; import { SandboxDeleteCommand } from './sandbox-delete/sandbox_delete_command.js'; import { SandboxBackendIdResolver } from './sandbox_id_resolver.js'; -import { CwdPackageJsonLoader } from '../../cwd_package_json_loader.js'; import { ClientConfigGeneratorAdapter } from '../../client-config/client_config_generator_adapter.js'; import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; import { LocalNamespaceResolver } from '../../backend-identifier/local_namespace_resolver.js'; import { createSandboxSecretCommand } from './sandbox-secret/sandbox_secret_command_factory.js'; +import { + CwdPackageJsonReader, + PackageJsonReader, + UsageDataEmitterFactory, +} from '@aws-amplify/platform-core'; import { SandboxEventHandlerFactory } from './sandbox_event_handler_factory.js'; import { CommandMiddleware } from '../../command_middleware.js'; +import { fileURLToPath } from 'url'; /** * Creates wired sandbox command. @@ -20,7 +25,7 @@ export const createSandboxCommand = (): CommandModule< > => { const credentialProvider = fromNodeProviderChain(); const sandboxBackendIdPartsResolver = new SandboxBackendIdResolver( - new LocalNamespaceResolver(new CwdPackageJsonLoader()) + new LocalNamespaceResolver(new CwdPackageJsonReader()) ); /** @@ -47,7 +52,12 @@ export const createSandboxCommand = (): CommandModule< ); const eventHandlerFactory = new SandboxEventHandlerFactory( - sandboxBackendIdentifierResolver + sandboxBackendIdentifierResolver, + new UsageDataEmitterFactory().getInstance( + new PackageJsonReader().read( + fileURLToPath(new URL('../../../package.json', import.meta.url)) + ).version ?? '' + ) ); const commandMiddleWare = new CommandMiddleware(); diff --git a/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.test.ts b/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.test.ts index c06642363a..8894972d28 100644 --- a/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.test.ts +++ b/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.test.ts @@ -1,4 +1,5 @@ import { ClientConfigFormat } from '@aws-amplify/client-config'; +import { UsageDataEmitterFactory } from '@aws-amplify/platform-core'; import assert from 'node:assert'; import { it, mock } from 'node:test'; import { ClientConfigGeneratorAdapter } from '../../client-config/client_config_generator_adapter.js'; @@ -22,11 +23,14 @@ void it('calls the client config adapter on the successfulDeployment event', asy ClientConfigFormat.MJS ); - const eventFactory = new SandboxEventHandlerFactory(async () => ({ - namespace: 'test', - name: 'name', - type: 'sandbox', - })); + const eventFactory = new SandboxEventHandlerFactory( + async () => ({ + namespace: 'test', + name: 'name', + type: 'sandbox', + }), + new UsageDataEmitterFactory().getInstance('test-version') + ); await Promise.all( eventFactory @@ -64,11 +68,14 @@ void it('calls deleteClientConfigFile on client config adapter on the successful const fspMock = mock.method(fsp, 'rm', () => Promise.resolve()); - const eventFactory = new SandboxEventHandlerFactory(async () => ({ - namespace: 'test', - name: 'name', - type: 'sandbox', - })); + const eventFactory = new SandboxEventHandlerFactory( + async () => ({ + namespace: 'test', + name: 'name', + type: 'sandbox', + }), + new UsageDataEmitterFactory().getInstance('test-version') + ); await Promise.all( eventFactory diff --git a/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.ts b/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.ts index 145b8e54fb..8647fada05 100644 --- a/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.ts +++ b/packages/cli/src/commands/sandbox/sandbox_event_handler_factory.ts @@ -1,5 +1,7 @@ import { SandboxEventHandlerCreator } from './sandbox_command.js'; import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import { UsageDataEmitter } from '@aws-amplify/platform-core'; +import { DeployResult } from '@aws-amplify/backend-deployer'; /** * Coordinates creation of sandbox event handlers @@ -11,21 +13,32 @@ export class SandboxEventHandlerFactory { constructor( private readonly getBackendIdentifier: ( sandboxName?: string - ) => Promise + ) => Promise, + private readonly usageDataEmitter: UsageDataEmitter ) {} + getSandboxEventHandlers: SandboxEventHandlerCreator = ({ sandboxName, clientConfigLifecycleHandler, }) => { return { successfulDeployment: [ - async () => { + async (...args: unknown[]) => { const backendIdentifier = await this.getBackendIdentifier( sandboxName ); await clientConfigLifecycleHandler.generateClientConfigFile( backendIdentifier ); + if (args && args[0]) { + const deployResult = args[0] as DeployResult; + if (deployResult && deployResult.deploymentTimes) { + await this.usageDataEmitter.emitSuccess( + deployResult.deploymentTimes, + { command: 'Sandbox' } + ); + } + } }, ], successfulDeletion: [ @@ -33,6 +46,19 @@ export class SandboxEventHandlerFactory { await clientConfigLifecycleHandler.deleteClientConfigFile(); }, ], + failedDeployment: [ + async (...args: unknown[]) => { + if (args.length == 0 || !args[0]) { + return; + } + const deployError = args[0] as Error; + if (deployError && deployError.message) { + await this.usageDataEmitter.emitFailure(deployError, { + command: 'Sandbox', + }); + } + }, + ], }; }; } diff --git a/packages/cli/src/cwd_package_json_loader.test.ts b/packages/cli/src/cwd_package_json_loader.test.ts deleted file mode 100644 index 3160fdf09f..0000000000 --- a/packages/cli/src/cwd_package_json_loader.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, it, mock } from 'node:test'; -import { CwdPackageJsonLoader } from './cwd_package_json_loader.js'; -import assert from 'node:assert'; - -void describe('CwdPackageJsonLoader', () => { - void describe('loadCwdPackageJson', () => { - void it('throws error if package.json does not exist', async () => { - const loader = new CwdPackageJsonLoader( - { - existsSync: mock.fn(() => false), - } as never, - { readFile: mock.fn(() => ({})) } as never - ); - await assert.rejects(() => loader.loadCwdPackageJson()); - }); - void it('throws error if contents are not valid json', async () => { - const loader = new CwdPackageJsonLoader( - { - existsSync: mock.fn(() => true), - } as never, - { readFile: mock.fn(() => Promise.resolve('not valid json')) } as never - ); - await assert.rejects(() => loader.loadCwdPackageJson()); - }); - void it('throws error if contents do not pass validation', async () => { - const loader = new CwdPackageJsonLoader( - { - existsSync: mock.fn(() => true), - } as never, - { - readFile: mock.fn(() => - Promise.resolve({ invalidField: 'something' }) - ), - } as never - ); - await assert.rejects(() => loader.loadCwdPackageJson()); - }); - void it('returns validated object', async () => { - const validValue = { name: 'test-name' }; - const loader = new CwdPackageJsonLoader( - { - existsSync: mock.fn(() => true), - } as never, - { - readFile: mock.fn(() => Promise.resolve(JSON.stringify(validValue))), - } as never - ); - const result = await loader.loadCwdPackageJson(); - assert.deepStrictEqual(result, validValue); - }); - }); -}); diff --git a/packages/cli/src/cwd_package_json_loader.ts b/packages/cli/src/cwd_package_json_loader.ts deleted file mode 100644 index acc192d0b5..0000000000 --- a/packages/cli/src/cwd_package_json_loader.ts +++ /dev/null @@ -1,47 +0,0 @@ -import * as _fs from 'fs'; -import * as _fsp from 'fs/promises'; -import * as path from 'path'; -import { z } from 'zod'; - -/** - * Loads the contents of package.json from process.cwd(). - * - * Throws if no package.json is present - */ -export class CwdPackageJsonLoader { - /** - * Pass in fs references so that they can be mocked in tests - */ - constructor(private readonly fs = _fs, private readonly fsp = _fsp) {} - - /** - * Returns the contents of the package.json file in process.cwd() - * - * If no package.json file exists, or the content does not pass validation, an error is thrown - */ - loadCwdPackageJson = async (): Promise => { - const tryPath = path.resolve(process.cwd(), 'package.json'); - if (!this.fs.existsSync(tryPath)) { - throw new Error(`Could not find a package.json file at ${tryPath}`); - } - const fileContent = await this.fsp.readFile(tryPath, 'utf-8'); - let jsonParsedValue: Record; - try { - jsonParsedValue = JSON.parse(fileContent); - } catch (err) { - throw new Error(`Could not JSON.parse the contents of ${tryPath}`); - } - return packageJsonSchema.parse(jsonParsedValue); - }; -} - -/** - * Type for package.json content. - * - * Add additional validation if there are other fields we need to read - */ -const packageJsonSchema = z.object({ - name: z.string(), -}); - -type PackageJson = z.infer; diff --git a/packages/create-amplify/package.json b/packages/create-amplify/package.json index 5e71be3cb1..1f555372ec 100644 --- a/packages/create-amplify/package.json +++ b/packages/create-amplify/package.json @@ -18,6 +18,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/cli-core": "^0.2.0", + "@aws-amplify/platform-core": "0.2.0", "execa": "^7.2.0", "yargs": "^17.7.2" } diff --git a/packages/create-amplify/src/create_amplify.ts b/packages/create-amplify/src/create_amplify.ts index fc10b66e08..ce77922c3e 100644 --- a/packages/create-amplify/src/create_amplify.ts +++ b/packages/create-amplify/src/create_amplify.ts @@ -14,7 +14,7 @@ import { InitialProjectFileGenerator } from './initial_project_file_generator.js import { NpmProjectInitializer } from './npm_project_initializer.js'; import { TsConfigInitializer } from './tsconfig_initializer.js'; import { getProjectRoot } from './get_project_root.js'; -import { PackageJsonReader } from './package_json_reader.js'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; import { GitIgnoreInitializer } from './gitignore_initializer.js'; const projectRoot = await getProjectRoot(); @@ -24,7 +24,7 @@ const amplifyProjectCreator = new AmplifyProjectCreator( new ProjectRootValidator(projectRoot), new InitialProjectFileGenerator(projectRoot), new NpmProjectInitializer(projectRoot), - new TsConfigInitializer(projectRoot, new PackageJsonReader(projectRoot)), + new TsConfigInitializer(projectRoot, new PackageJsonReader()), new GitIgnoreInitializer(projectRoot), projectRoot ); diff --git a/packages/create-amplify/src/package_json_reader.test.ts b/packages/create-amplify/src/package_json_reader.test.ts deleted file mode 100644 index 582b20fcea..0000000000 --- a/packages/create-amplify/src/package_json_reader.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, it, mock } from 'node:test'; -import { PackageJsonReader } from './package_json_reader.js'; -import assert from 'assert'; - -void describe('Package JSON reader', () => { - void it('Can read package json', async () => { - const readFileMock = mock.fn<(arg0: string) => Promise>(() => - Promise.resolve( - Buffer.from( - ` - { - "name": "test_name", - "version": "test_version", - "type": "module" - } - `, - 'utf-8' - ) - ) - ); - const testPath = 'test_path'; - const packageJsonReader = new PackageJsonReader( - testPath, - readFileMock as never - ); - const packageJson = await packageJsonReader.readPackageJson(); - assert.strictEqual(packageJson.name, 'test_name'); - assert.strictEqual(packageJson.version, 'test_version'); - assert.strictEqual(packageJson.type, 'module'); - assert.strictEqual(1, readFileMock.mock.callCount()); - assert.ok(readFileMock.mock.calls[0].arguments[0].endsWith('package.json')); - }); -}); diff --git a/packages/create-amplify/src/package_json_reader.ts b/packages/create-amplify/src/package_json_reader.ts deleted file mode 100644 index 80f80f029f..0000000000 --- a/packages/create-amplify/src/package_json_reader.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { readFile as _readFile } from 'fs/promises'; -import path from 'path'; - -export type PackageJson = { - name?: string; - version?: string; - type?: 'module' | 'commonjs'; -}; - -/** - * Reads a content of package json. - */ -export class PackageJsonReader { - /** - * Creates a package.json reader. - */ - constructor( - private readonly packageRootPath: string, - private readonly readFile = _readFile - ) {} - - readPackageJson = async (): Promise => { - const packageJsonContent = await this.readFile( - path.resolve(this.packageRootPath, 'package.json'), - 'utf-8' - ); - return JSON.parse(packageJsonContent) as PackageJson; - }; -} diff --git a/packages/create-amplify/src/tsconfig_initializer.test.ts b/packages/create-amplify/src/tsconfig_initializer.test.ts index 6fc93a5bd4..8acb5a45ef 100644 --- a/packages/create-amplify/src/tsconfig_initializer.test.ts +++ b/packages/create-amplify/src/tsconfig_initializer.test.ts @@ -1,19 +1,22 @@ import { beforeEach, describe, it, mock } from 'node:test'; import { TsConfigInitializer } from './tsconfig_initializer.js'; import assert from 'assert'; -import { PackageJson, PackageJsonReader } from './package_json_reader.js'; +import { PackageJson, PackageJsonReader } from '@aws-amplify/platform-core'; void describe('TsConfigInitializer', () => { let packageJsonReader: PackageJsonReader; beforeEach(() => { - packageJsonReader = new PackageJsonReader('/testProjectRoot'); - mock.method(packageJsonReader, 'readPackageJson', () => - Promise.resolve({ - name: 'test_name', - version: 'test_version', - type: 'module', - } as PackageJson) + packageJsonReader = new PackageJsonReader(); + mock.method( + packageJsonReader, + 'read', + () => + ({ + name: 'test_name', + version: 'test_version', + type: 'module', + } as PackageJson) ); }); @@ -36,12 +39,15 @@ void describe('TsConfigInitializer', () => { () => false, { times: 1 } ); - mock.method(packageJsonReader, 'readPackageJson', () => - Promise.resolve({ - name: 'test_name', - version: 'test_version', - type: 'commonjs', - } as PackageJson) + mock.method( + packageJsonReader, + 'read', + () => + ({ + name: 'test_name', + version: 'test_version', + type: 'commonjs', + } as PackageJson) ); const execaMock = mock.fn(); diff --git a/packages/create-amplify/src/tsconfig_initializer.ts b/packages/create-amplify/src/tsconfig_initializer.ts index 5a5e12b638..f16887eb66 100644 --- a/packages/create-amplify/src/tsconfig_initializer.ts +++ b/packages/create-amplify/src/tsconfig_initializer.ts @@ -1,7 +1,7 @@ import { existsSync as _existsSync } from 'fs'; import * as path from 'path'; import { execa as _execa } from 'execa'; -import { PackageJsonReader } from './package_json_reader.js'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; import { logger } from './logger.js'; import { executeWithDebugLogger } from './execute_with_logger.js'; @@ -31,7 +31,9 @@ export class TsConfigInitializer { 'No tsconfig.json file found in the current directory. Running `npx tsc --init`...' ); - const packageJson = await this.packageJsonReader.readPackageJson(); + const packageJson = await this.packageJsonReader.read( + path.resolve(this.projectRoot, 'package.json') + ); const tscArgs = ['tsc', '--init', '--resolveJsonModule', 'true']; if (packageJson.type === 'module') { tscArgs.push( diff --git a/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index edc58d9d4b..1aaaea6354 100644 --- a/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -204,7 +204,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { @@ -421,7 +421,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/1730e1e66f151a5d15fc5696f6de4b5e4d7649a12dc06b6ff7f3b735946b165b.json" + "/b35fb8c270dbcaacc1a8f605e2aab106543108c23c9aef9da61ac4e33853eb55.json" ] ] } diff --git a/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json b/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json index d344c98ddb..f6665e114d 100644 --- a/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json +++ b/packages/create-amplify/templates/basic-auth-data/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json @@ -47,7 +47,7 @@ "ApiId" ] }, - "Expires": 1702675657 + "Expires": 1702685685 } }, "amplifyDataGraphQLAPINONEDS684BF699": { diff --git a/packages/create-amplify/tsconfig.json b/packages/create-amplify/tsconfig.json index bb66ef5344..7729e76511 100644 --- a/packages/create-amplify/tsconfig.json +++ b/packages/create-amplify/tsconfig.json @@ -2,5 +2,5 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "src", "outDir": "lib" }, "exclude": ["templates", "lib"], - "references": [{ "path": "../cli-core" }] + "references": [{ "path": "../cli-core" }, { "path": "../platform-core" }] } diff --git a/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 74bb4b0916..e94434223c 100644 --- a/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -142,7 +142,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { @@ -306,7 +306,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/44cc9d129e953fc61a40ee91f3028a2c7ed8acc94faa7dfd8065ae29f7cd1925.json" + "/3e57bc7939e9716fffdc91fa792cc1499341023c8339dde3aad28ce4d0e59963.json" ] ] } diff --git a/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json b/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json index 857691049b..e8ed098efd 100644 --- a/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json +++ b/packages/integration-tests/test-projects/data-iterative-deploy/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json @@ -31,7 +31,7 @@ "ApiId" ] }, - "Expires": 1700688447 + "Expires": 1700698473 } }, "amplifyDataGraphQLAPINONEDS684BF699": { diff --git a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-cjs/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-cjs/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 1e9d175753..7ca8ee2b22 100644 --- a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-cjs/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-cjs/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -242,7 +242,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { diff --git a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-js/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-js/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 1e9d175753..7ca8ee2b22 100644 --- a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-js/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-js/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -242,7 +242,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { diff --git a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-ts/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-ts/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 5a00fa01bb..afe7b0b17b 100644 --- a/packages/integration-tests/test-projects/data-storage-auth-with-triggers-ts/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/data-storage-auth-with-triggers-ts/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -242,7 +242,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { diff --git a/packages/integration-tests/test-projects/minimalist-project-with-typescript-idioms/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/minimalist-project-with-typescript-idioms/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 96e1eac82f..11a83a9537 100644 --- a/packages/integration-tests/test-projects/minimalist-project-with-typescript-idioms/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/minimalist-project-with-typescript-idioms/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -102,7 +102,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { diff --git a/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 0053e8bfc9..099ff3518a 100644 --- a/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -146,7 +146,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { @@ -318,7 +318,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/7d798d30e51cd1ea1950686bb965e0fb3839b11d9c5e2b659bdc17fb852fcc1a.json" + "/320100a8f2629a69415798db5a5cb2e03e5a8d219f35a1c9aa0c96677cc3f63e.json" ] ] } diff --git a/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json b/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json index d33af45af3..442a2623f9 100644 --- a/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json +++ b/packages/integration-tests/test-projects/standalone-data-auth-modes/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json @@ -51,7 +51,7 @@ "ApiId" ] }, - "Expires": 1702675654 + "Expires": 1702685682 } }, "amplifyDataGraphQLAPINONEDS684BF699": { diff --git a/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json b/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json index 446d4462e9..75dc11733e 100644 --- a/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json +++ b/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplify-testAppId-testBranchName-branch-7d6f6c854a.template.json @@ -142,7 +142,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c5f154e6312b93b44d21e0e9e0f5ba13f4b731c9e38bcb30c6f368f1195c88e2.zip" + "S3Key": "ef558b566d58035318b9153367697fecb478e9359fd27e8ac5bc11cf87eb2ea6.zip" }, "Environment": { "Variables": { @@ -306,7 +306,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/6c94930056400c88525870d33e7d10bfd8cad0fff07d5c93d5894566371e9231.json" + "/3d015425e077a2af44d158a67c113b30bc1ee0d9cd94ca7d4b758f2e69a2844d.json" ] ] } diff --git a/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json b/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json index 92c49f992e..8ad1d13989 100644 --- a/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json +++ b/packages/integration-tests/test-projects/standalone-data-sandbox-mode/expected-cdk-out/amplifytestAppIdtestBranchNamebranch7d6f6c854adataE67321C2.nested.template.json @@ -31,7 +31,7 @@ "ApiId" ] }, - "Expires": 1700688456 + "Expires": 1700698484 } }, "amplifyDataGraphQLAPINONEDS684BF699": { diff --git a/packages/platform-core/API.md b/packages/platform-core/API.md index 994c513537..82fa9da619 100644 --- a/packages/platform-core/API.md +++ b/packages/platform-core/API.md @@ -5,6 +5,7 @@ ```ts import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import z from 'zod'; // @public export class BackendIdentifierConversions { @@ -29,6 +30,11 @@ export enum CDKContextKey { DEPLOYMENT_TYPE = "amplify-backend-type" } +// @public +export class CwdPackageJsonReader { + read(): PackageJson; +} + // @public export class FilePathExtractor { constructor(stackTraceLine: string); @@ -36,6 +42,41 @@ export class FilePathExtractor { extract: () => string | undefined; } +// @public (undocumented) +export type PackageJson = z.infer; + +// @public +export class PackageJsonReader { + // (undocumented) + read: (absolutePackageJsonPath: string) => PackageJson; +} + +// @public +export const packageJsonSchema: z.ZodObject<{ + name: z.ZodOptional; + version: z.ZodOptional; + type: z.ZodOptional, z.ZodLiteral<"commonjs">]>>; +}, "strip", z.ZodTypeAny, { + name?: string | undefined; + version?: string | undefined; + type?: "module" | "commonjs" | undefined; +}, { + name?: string | undefined; + version?: string | undefined; + type?: "module" | "commonjs" | undefined; +}>; + +// @public (undocumented) +export type UsageDataEmitter = { + emitSuccess: (metrics?: Record, dimensions?: Record) => Promise; + emitFailure: (error: Error, dimensions?: Record) => Promise; +}; + +// @public +export class UsageDataEmitterFactory { + getInstance: (libraryVersion: string) => UsageDataEmitter; +} + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/platform-core/package.json b/packages/platform-core/package.json index 2642fb0b74..aee808643d 100644 --- a/packages/platform-core/package.json +++ b/packages/platform-core/package.json @@ -18,7 +18,14 @@ "update:api": "api-extractor run --local" }, "license": "Apache-2.0", + "devDependencies": { + "@types/uuid": "9.0.7" + }, "dependencies": { - "@aws-amplify/plugin-types": "^0.4.0" + "@aws-amplify/plugin-types": "^0.4.0", + "@aws-sdk/client-sts": "3.445.0", + "is-ci": "^3.0.1", + "uuid": "9.0.1", + "zod": "^3.21.4" } } diff --git a/packages/platform-core/src/cwd_package_json_reader.ts b/packages/platform-core/src/cwd_package_json_reader.ts new file mode 100644 index 0000000000..80578f86b5 --- /dev/null +++ b/packages/platform-core/src/cwd_package_json_reader.ts @@ -0,0 +1,20 @@ +import * as path from 'path'; +import { PackageJson, PackageJsonReader } from '.'; + +/** + * Loads the contents of package.json from process.cwd(). + * + * Throws if no package.json is present + */ +export class CwdPackageJsonReader { + /** + * Returns the contents of the package.json file in process.cwd() + * + * If no package.json file exists, or the content does not pass validation, an error is thrown + */ + read(): PackageJson { + return new PackageJsonReader().read( + path.resolve(process.cwd(), 'package.json') + ); + } +} diff --git a/packages/platform-core/src/index.ts b/packages/platform-core/src/index.ts index eed112a420..e4fe7f15d7 100644 --- a/packages/platform-core/src/index.ts +++ b/packages/platform-core/src/index.ts @@ -1,4 +1,7 @@ export * from './backend_identifier_conversions.js'; export * from './backend_entry_point_locator.js'; export * from './extract_file_path_from_stack_trace_line.js'; +export * from './package_json_reader.js'; +export * from './cwd_package_json_reader.js'; +export * from './usage-data/usage_data_emitter_factory.js'; export { CDKContextKey } from './cdk_context_key.js'; diff --git a/packages/platform-core/src/package_json_reader.test.ts b/packages/platform-core/src/package_json_reader.test.ts new file mode 100644 index 0000000000..4df5d62a40 --- /dev/null +++ b/packages/platform-core/src/package_json_reader.test.ts @@ -0,0 +1,34 @@ +import { describe, it, mock } from 'node:test'; +import { PackageJsonReader } from './package_json_reader.js'; +import fs from 'fs'; +import assert from 'assert'; + +void describe('Package JSON reader', () => { + const fsExistsSyncMock = mock.method(fs, 'existsSync', () => true); + const fsReadFileSync = mock.method(fs, 'readFileSync', () => + JSON.stringify({ name: 'test_name', version: '12.13.14', type: 'module' }) + ); + const testPath = '/test_path'; + const packageJsonReader = new PackageJsonReader(); + void it('can read package json', async () => { + const packageJson = packageJsonReader.read(testPath); + assert.strictEqual(packageJson.name, 'test_name'); + assert.strictEqual(packageJson.version, '12.13.14'); + assert.strictEqual(packageJson.type, 'module'); + assert.strictEqual(1, fsReadFileSync.mock.callCount()); + }); + + void it('throws when package json is not present', async () => { + fsExistsSyncMock.mock.mockImplementationOnce(() => false); + assert.throws(() => packageJsonReader.read(testPath), { + message: 'Could not find a package.json file at /test_path', + }); + }); + + void it('throws when package json is not parse-able', async () => { + fsReadFileSync.mock.mockImplementationOnce(() => 'not json content'); + assert.throws(() => packageJsonReader.read(testPath), { + message: 'Could not JSON.parse the contents of /test_path', + }); + }); +}); diff --git a/packages/platform-core/src/package_json_reader.ts b/packages/platform-core/src/package_json_reader.ts new file mode 100644 index 0000000000..7fc349ba2f --- /dev/null +++ b/packages/platform-core/src/package_json_reader.ts @@ -0,0 +1,40 @@ +import fs from 'fs'; +import z from 'zod'; + +/** + * return the package json + */ +export class PackageJsonReader { + read = (absolutePackageJsonPath: string): PackageJson => { + if (!fs.existsSync(absolutePackageJsonPath)) { + throw new Error( + `Could not find a package.json file at ${absolutePackageJsonPath}` + ); + } + let jsonParsedValue: Record; + try { + jsonParsedValue = JSON.parse( + // we have to use sync fs methods here because this is also used during cdk synth + fs.readFileSync(absolutePackageJsonPath, 'utf-8') + ); + } catch (err) { + throw new Error( + `Could not JSON.parse the contents of ${absolutePackageJsonPath}` + ); + } + return packageJsonSchema.parse(jsonParsedValue); + }; +} + +/** + * Type for package.json content. + * + * Add additional validation if there are other fields we need to read + */ +export const packageJsonSchema = z.object({ + name: z.string().optional(), + version: z.string().optional(), + type: z.union([z.literal('module'), z.literal('commonjs')]).optional(), +}); + +export type PackageJson = z.infer; diff --git a/packages/platform-core/src/usage-data/account_id_fetcher.ts b/packages/platform-core/src/usage-data/account_id_fetcher.ts new file mode 100644 index 0000000000..102dcdf605 --- /dev/null +++ b/packages/platform-core/src/usage-data/account_id_fetcher.ts @@ -0,0 +1,22 @@ +import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts'; + +/** + * Retrieves the account ID of the user + */ +export class AccountIdFetcher { + /** + * constructor for AccountIdFetcher + */ + constructor(private readonly stsClient = new STSClient()) {} + fetch = async () => { + const stsResponse = await this.stsClient.send( + new GetCallerIdentityCommand({}) + ); + if (stsResponse && stsResponse.Account) { + return stsResponse.Account; + } + throw new Error( + 'Cannot retrieve the account Id from GetCallerIdentityCommand' + ); + }; +} diff --git a/packages/platform-core/src/usage-data/constants.ts b/packages/platform-core/src/usage-data/constants.ts new file mode 100644 index 0000000000..bb386e9ea4 --- /dev/null +++ b/packages/platform-core/src/usage-data/constants.ts @@ -0,0 +1,9 @@ +/** + * current API version + */ +export const latestApiVersion = 'v1.0'; + +/** + * returns the latest available payload version + */ +export const latestPayloadVersion = '1.1.0'; diff --git a/packages/platform-core/src/usage-data/get_installation_id.test.ts b/packages/platform-core/src/usage-data/get_installation_id.test.ts new file mode 100644 index 0000000000..2d55117166 --- /dev/null +++ b/packages/platform-core/src/usage-data/get_installation_id.test.ts @@ -0,0 +1,30 @@ +import { describe, it, mock } from 'node:test'; +import { getInstallationUuid } from './get_installation_id.js'; +import { v4, validate } from 'uuid'; +import fs from 'fs'; +import assert from 'node:assert'; + +void describe('LibraryVersionFetcher', () => { + mock.method(fs, 'existsSync', () => true); + mock.method(fs, 'readFile', () => + Promise.resolve(JSON.stringify({ name: 'testAppName' })) + ); + + void it('returns a valid UUID', () => { + const installationUuid = getInstallationUuid(); + assert.ok( + validate(installationUuid), + `${installationUuid} is not a valid UUID string` + ); + }); + + void it('returns a consistent UUID for repeated calls', () => { + const installationUuid = getInstallationUuid(); + assert.deepStrictEqual(installationUuid, getInstallationUuid()); + }); + + void it('returns a different UUID for a different namespace', () => { + const installationUuid = getInstallationUuid(); + assert.notDeepStrictEqual(installationUuid, getInstallationUuid(v4())); + }); +}); diff --git a/packages/platform-core/src/usage-data/get_installation_id.ts b/packages/platform-core/src/usage-data/get_installation_id.ts new file mode 100644 index 0000000000..3b8b2343cc --- /dev/null +++ b/packages/platform-core/src/usage-data/get_installation_id.ts @@ -0,0 +1,16 @@ +import { userInfo } from 'os'; +import { v5 as uuidV5 } from 'uuid'; + +// eslint-disable-next-line spellcheck/spell-checker +const AMPLIFY_CLI_UUID_NAMESPACE = 'e7368840-2eb6-4042-99b4-9d6c2a9370e6'; // A random v4 UUID +/** + * Generates a consistent installation Uuid from the library installation path + userName + */ +export const getInstallationUuid = ( + namespace: string = AMPLIFY_CLI_UUID_NAMESPACE +) => { + const userName = userInfo().username; + const modulePath = __dirname; + + return uuidV5(modulePath + userName, namespace); +}; diff --git a/packages/platform-core/src/usage-data/get_usage_data_url.test.ts b/packages/platform-core/src/usage-data/get_usage_data_url.test.ts new file mode 100644 index 0000000000..9c55985dcc --- /dev/null +++ b/packages/platform-core/src/usage-data/get_usage_data_url.test.ts @@ -0,0 +1,18 @@ +import { afterEach, describe, test } from 'node:test'; +import assert from 'node:assert'; +import { getUrl } from './get_usage_data_url'; + +void describe('getUrl', () => { + afterEach(() => { + delete process.env.AMPLIFY_BACKEND_USAGE_TRACKING_ENDPOINT; + }); + void test('that prod URL is returned when the env for beta URL is not set', () => { + assert(getUrl(), 'https://api.cli.amplify.aws/v1.0/metrics'); + }); + + void test('that BETA URL is returned when the env for beta URL is set', () => { + process.env.AMPLIFY_BACKEND_USAGE_TRACKING_ENDPOINT = + 'https://aws.amazon.com/amplify/'; + assert(getUrl(), 'https://aws.amazon.com/amplify/'); + }); +}); diff --git a/packages/platform-core/src/usage-data/get_usage_data_url.ts b/packages/platform-core/src/usage-data/get_usage_data_url.ts new file mode 100644 index 0000000000..a738082215 --- /dev/null +++ b/packages/platform-core/src/usage-data/get_usage_data_url.ts @@ -0,0 +1,23 @@ +import url, { UrlWithStringQuery } from 'url'; +import { latestApiVersion } from './constants.js'; + +let cachedUrl: UrlWithStringQuery; + +const prodUrl = `https://api.cli.amplify.aws/${latestApiVersion}/metrics`; + +/** + * Usage data tracking service URL + */ +export const getUrl = (): UrlWithStringQuery => { + if (!cachedUrl) { + cachedUrl = getParsedUrl(); + } + + return cachedUrl; +}; + +const getParsedUrl = (): UrlWithStringQuery => { + return url.parse( + process.env.AMPLIFY_BACKEND_USAGE_TRACKING_ENDPOINT || prodUrl + ); +}; diff --git a/packages/platform-core/src/usage-data/serializable_error.test.ts b/packages/platform-core/src/usage-data/serializable_error.test.ts new file mode 100644 index 0000000000..e0d22f0498 --- /dev/null +++ b/packages/platform-core/src/usage-data/serializable_error.test.ts @@ -0,0 +1,74 @@ +import { describe, test } from 'node:test'; +import assert from 'node:assert'; +import os from 'os'; +import { SerializableError } from './serializable_error'; + +void describe('serializable error', () => { + class ErrorWithDetailsAndCode extends Error { + constructor( + public readonly message: string, + public readonly details?: string, + public readonly code?: string + ) { + super(message); + } + } + + void test('that regular stack trace does not contain user homedir', () => { + const error = new Error('test error'); + const serializableError = new SerializableError(error); + assert.ok(serializableError.trace); + serializableError.trace?.forEach((trace) => { + assert.ok( + trace.file.includes(os.homedir()) == false, + `${os.homedir()} is included in the ${trace.file}` + ); + }); + }); + + void test('that if code is available it is used as the error name', () => { + const error = new ErrorWithDetailsAndCode( + 'some error message', + undefined, + 'ErrorCode' + ); + const serializableError = new SerializableError(error); + assert.deepStrictEqual(serializableError.name, 'ErrorCode'); + }); + + void test('that error name is used if code is not available', () => { + const error = new Error('some error message'); + const serializableError = new SerializableError(error); + assert.deepStrictEqual(serializableError.name, 'Error'); + }); + + void test('that no change in error details that does not have AWS ARNs', () => { + const error = new ErrorWithDetailsAndCode( + 'some error message', + 'some error details that do not have ARNs' + ); + const serializableError = new SerializableError(error); + assert.deepStrictEqual( + serializableError.details, + 'some error details that do not have ARNs' + ); + }); + + void test('that ARNs are escaped when error details has two AWS ARNs', () => { + const error = new ErrorWithDetailsAndCode( + 'some error message', + 'some error details with arn: arn:aws-cn:service:::resource/name and arn: arn:aws-iso:service:region::res and something else' + ); + const serializableError = new SerializableError(error); + assert.deepStrictEqual( + serializableError.details, + 'some error details with arn: and arn: and something else' + ); + }); + + void test('that error message is sanitized by removing invalid characters', () => { + const error = new ErrorWithDetailsAndCode('some" er❌ror ""m"es❌sage❌'); + const serializableError = new SerializableError(error); + assert.deepStrictEqual(serializableError.message, 'some error message'); + }); +}); diff --git a/packages/platform-core/src/usage-data/serializable_error.ts b/packages/platform-core/src/usage-data/serializable_error.ts new file mode 100644 index 0000000000..c28e6f5223 --- /dev/null +++ b/packages/platform-core/src/usage-data/serializable_error.ts @@ -0,0 +1,78 @@ +import path from 'path'; + +/** + * Wrapper around Error for serialization for usage metrics + */ +export class SerializableError { + stackTraceRegex = + /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i; + arnRegex = + /arn:[a-z0-9][-.a-z0-9]{0,62}:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}/g; + + name: string; + message: string; + details?: string; + trace?: Trace[]; + + /** + * constructor for SerializableError + */ + constructor(error: Error) { + this.name = + 'code' in error ? this.sanitize(error.code as string) : error.name; + this.message = this.sanitize(error.message); + this.details = + 'details' in error ? this.sanitize(error.details as string) : undefined; + this.trace = this.extractStackTrace(error); + } + + private extractStackTrace = (error: Error): Trace[] => { + const result: Trace[] = []; + if (error.stack) { + const stack = error.stack.split('\n'); + stack.forEach((line) => { + const match = this.stackTraceRegex.exec(line); + if (match) { + const [, methodName, file, lineNumber, columnNumber] = match; + result.push({ + methodName, + file, + lineNumber, + columnNumber, + }); + } + }); + const processedPaths = this.processPaths( + result.map((trace) => trace.file) + ); + result.forEach((trace, index) => { + trace.file = processedPaths[index]; + }); + } + return result; + }; + + private processPaths = (paths: string[]): string[] => { + return paths.map((tracePath) => { + if (path.isAbsolute(tracePath)) { + return path.relative(process.cwd(), tracePath); + } + return tracePath; + }); + }; + + private removeARN = (str?: string): string => { + return str?.replace(this.arnRegex, '') ?? ''; + }; + + private sanitize = (str: string) => { + return this.removeARN(str)?.replaceAll(/["❌]/g, ''); + }; +} + +type Trace = { + methodName: string; + file: string; + lineNumber: string; + columnNumber: string; +}; diff --git a/packages/platform-core/src/usage-data/usage_data.ts b/packages/platform-core/src/usage-data/usage_data.ts new file mode 100644 index 0000000000..31190a5ffa --- /dev/null +++ b/packages/platform-core/src/usage-data/usage_data.ts @@ -0,0 +1,19 @@ +import { SerializableError } from './serializable_error'; + +export type UsageData = { + sessionUuid: string; + installationUuid: string; + amplifyCliVersion: string; + timestamp: string; + error?: SerializableError | undefined; + downstreamException?: SerializableError | undefined; + payloadVersion: string; + osPlatform: string; + osRelease: string; + nodeVersion: string; + state: 'FAILED' | 'SUCCEEDED'; + isCi: boolean; + accountId: string; + input: { command: string; plugin: string }; + codePathDurations: { platformStartup?: number; totalDuration?: number }; +}; diff --git a/packages/platform-core/src/usage-data/usage_data_emitter.test.ts b/packages/platform-core/src/usage-data/usage_data_emitter.test.ts new file mode 100644 index 0000000000..81ca85a9d4 --- /dev/null +++ b/packages/platform-core/src/usage-data/usage_data_emitter.test.ts @@ -0,0 +1,151 @@ +import { afterEach, describe, mock, test } from 'node:test'; +import assert from 'node:assert'; +import { DefaultUsageDataEmitter } from './usage_data_emitter'; +import { v4, validate } from 'uuid'; +import url from 'url'; +import https from 'https'; +import http from 'http'; +import fs from 'fs'; +import os from 'os'; +import { AccountIdFetcher } from './account_id_fetcher'; +import { UsageData } from './usage_data'; +import isCI from 'is-ci'; + +void describe('UsageDataEmitter', () => { + let usageDataEmitter: DefaultUsageDataEmitter; + + const testLibraryVersion = '1.2.3'; + const testURL = url.parse('https://aws.amazon.com/amplify/'); + const onReqEndMock = mock.fn(); + const onReqWriteMock = mock.fn(); + const reqMock = { + setTimeout: mock.fn(), + on: mock.fn(), + write: onReqWriteMock, + end: onReqEndMock, + } as unknown as http.ClientRequest; + + // For getInstallationUuid which retrieves it from CwdPackageJsonReader + mock.method(fs, 'existsSync', () => true); + mock.method(fs, 'readFile', () => + Promise.resolve(JSON.stringify({ name: 'testAppName' })) + ); + + // For AccountIdFetcher + const accountIdFetcherMock = { + fetch: async () => '123456789012', + } as AccountIdFetcher; + + mock.method(https, 'request', () => reqMock); + + afterEach(() => { + onReqEndMock.mock.resetCalls(); + onReqEndMock.mock.restore(); + onReqWriteMock.mock.resetCalls(); + onReqWriteMock.mock.restore(); + }); + + void test('happy case, emitSuccess generates and send correct usage data', async () => { + await setupAndInvokeUsageEmitter({ + isSuccess: true, + metrics: { synthesisTime: 5.3, totalTime: 20.6 }, + }); + + const usageDataSent: UsageData = JSON.parse( + onReqWriteMock.mock.calls[0].arguments[0] + ); + + assert.deepStrictEqual(usageDataSent.accountId, '123456789012'); + assert.deepStrictEqual(usageDataSent.amplifyCliVersion, '1.2.3'); + assert.deepStrictEqual(usageDataSent.payloadVersion, '1.1.0'); + assert.deepStrictEqual(usageDataSent.state, 'SUCCEEDED'); + assert.deepStrictEqual(usageDataSent.input, { + command: 'testCommandName', + plugin: 'Gen2', + }); + // Numbers should be well rounded, Redshift doesn't like fractions + assert.deepStrictEqual(usageDataSent.codePathDurations, { + totalDuration: 21, + platformStartup: 5, + }); + assert.deepStrictEqual(usageDataSent.isCi, isCI); + assert.deepStrictEqual(usageDataSent.osPlatform, os.platform()); + assert.deepStrictEqual(usageDataSent.osRelease, os.release()); + assert.ok(validate(usageDataSent.sessionUuid)); + assert.ok(validate(usageDataSent.installationUuid)); + assert.ok(usageDataSent.error == undefined); + assert.ok(usageDataSent.downstreamException == undefined); + }); + + void test('happy case, emitFailure generates and send correct usage data', async () => { + const error = new Error('some error message'); + await setupAndInvokeUsageEmitter({ isSuccess: false, error }); + + const usageDataSent: UsageData = JSON.parse( + onReqWriteMock.mock.calls[0].arguments[0] + ); + + assert.deepStrictEqual(usageDataSent.accountId, '123456789012'); + assert.deepStrictEqual(usageDataSent.amplifyCliVersion, '1.2.3'); + assert.deepStrictEqual(usageDataSent.payloadVersion, '1.1.0'); + assert.deepStrictEqual(usageDataSent.state, 'FAILED'); + assert.deepStrictEqual(usageDataSent.input, { + command: 'testCommandName', + plugin: 'Gen2', + }); + assert.deepStrictEqual(usageDataSent.codePathDurations, {}); + assert.deepStrictEqual(usageDataSent.isCi, isCI); + assert.deepStrictEqual(usageDataSent.osPlatform, os.platform()); + assert.deepStrictEqual(usageDataSent.osRelease, os.release()); + assert.ok(validate(usageDataSent.sessionUuid)); + assert.ok(validate(usageDataSent.installationUuid)); + assert.strictEqual(usageDataSent.error?.message, 'some error message'); + assert.ok(usageDataSent.downstreamException == undefined); + }); + + /** + * Lots of acrobatics done here to be able to mock nodejs https library (which doesn't support promises) + * and node:test library which doesn't have the best mocking mechanism. + * + * 1. Create a mock for https and override the 4 methods called in the class under test + * 2. Add a hook in the `req.end()` event handler implementation so we know when the listener is available to grab + * 3. Grab the event listener attached in the `req.end()` event handler + * 4. Call the listener which signifies that the request is completed and the Promise in the code would resolve + * 5. Now get hold of all the event handlers for assertions. + */ + const setupAndInvokeUsageEmitter = async (testData: { + isSuccess: boolean; + error?: Error; + metrics?: Record; + }) => { + const reqEndHandlerAttached = new Promise((resolve) => { + onReqEndMock.mock.mockImplementationOnce(() => { + resolve(); + }); + }); + + usageDataEmitter = new DefaultUsageDataEmitter( + testLibraryVersion, + v4(), + testURL, + accountIdFetcherMock + ); + + let usageDataEmitterPromise; + if (testData.isSuccess) { + usageDataEmitterPromise = usageDataEmitter.emitSuccess(testData.metrics, { + command: 'testCommandName', + }); + } else if (testData.error) { + usageDataEmitterPromise = usageDataEmitter.emitFailure(testData.error, { + command: 'testCommandName', + }); + } + + await reqEndHandlerAttached; + const onReqEndCallBackFn = onReqEndMock.mock.calls[0].arguments[0]; + // Signify that it is the end of the request + onReqEndCallBackFn(); + await usageDataEmitterPromise; + }; +}); diff --git a/packages/platform-core/src/usage-data/usage_data_emitter.ts b/packages/platform-core/src/usage-data/usage_data_emitter.ts new file mode 100644 index 0000000000..9d1b60443a --- /dev/null +++ b/packages/platform-core/src/usage-data/usage_data_emitter.ts @@ -0,0 +1,132 @@ +import { v4 as uuid } from 'uuid'; +import { AccountIdFetcher } from './account_id_fetcher.js'; +import { UsageData } from './usage_data.js'; +import os from 'os'; +import https from 'https'; +import { getInstallationUuid } from './get_installation_id.js'; +import { latestPayloadVersion } from './constants.js'; +import { getUrl } from './get_usage_data_url.js'; +import isCI from 'is-ci'; +import { SerializableError } from './serializable_error.js'; +import { UsageDataEmitter } from './usage_data_emitter_factory.js'; + +/** + * Entry point for sending usage data metrics + */ +export class DefaultUsageDataEmitter implements UsageDataEmitter { + /** + * Constructor for UsageDataEmitter + */ + constructor( + private readonly libraryVersion: string, + private readonly sessionUuid = uuid(), + private readonly url = getUrl(), + private readonly accountIdFetcher = new AccountIdFetcher() + ) {} + + emitSuccess = async ( + metrics?: Record, + dimensions?: Record + ) => { + const data = await this.getUsageData({ + state: 'SUCCEEDED', + metrics, + dimensions, + }); + await this.send(data); + }; + + emitFailure = async (error: Error, dimensions?: Record) => { + const data = await this.getUsageData({ + state: 'FAILED', + error, + dimensions, + }); + await this.send(data); + }; + + private getUsageData = async (options: { + state: 'SUCCEEDED' | 'FAILED'; + metrics?: Record; + dimensions?: Record; + error?: Error; + }) => { + return { + accountId: await this.accountIdFetcher.fetch(), + sessionUuid: this.sessionUuid, + installationUuid: await getInstallationUuid(), + amplifyCliVersion: this.libraryVersion, + timestamp: new Date().toISOString(), + error: options.error ? new SerializableError(options.error) : undefined, + downstreamException: + options.error && + options.error.cause && + options.error.cause instanceof Error + ? new SerializableError(options.error.cause) + : undefined, + payloadVersion: latestPayloadVersion, + osPlatform: os.platform(), + osRelease: os.release(), + nodeVersion: process.versions.node, + state: options.state, + codePathDurations: this.translateMetricsToUsageData(options.metrics), + input: this.translateDimensionsToUsageData(options.dimensions), + isCi: isCI, + }; + }; + + private send = (data: UsageData) => { + return new Promise((resolve) => { + const payload: string = JSON.stringify(data); + const req = https.request({ + hostname: this.url.hostname, + port: this.url.port, + path: this.url.path, + method: 'POST', + headers: { + 'content-type': 'application/json', + 'content-length': payload.length, + }, + }); + req.on('error', () => { + /* noop */ + }); + req.setTimeout(2000, () => { + // 2 seconds + resolve(); + }); + + req.write(payload); + req.end(() => { + resolve(); + }); + }); + }; + + private translateMetricsToUsageData = (metrics?: Record) => { + if (!metrics) return {}; + let totalDuration, platformStartup; + for (const [name, data] of Object.entries(metrics)) { + if (name === 'totalTime') { + totalDuration = Math.round(data); + } else if (name === 'synthesisTime') { + platformStartup = Math.round(data); + } + } + return { totalDuration, platformStartup }; + }; + + private translateDimensionsToUsageData = ( + dimensions?: Record + ) => { + let command = ''; + if (dimensions) { + for (const [name, data] of Object.entries(dimensions)) { + if (name === 'command') { + command = data; + } + } + } + return { command, plugin: 'Gen2' }; + }; +} diff --git a/packages/platform-core/src/usage-data/usage_data_emitter_factory.ts b/packages/platform-core/src/usage-data/usage_data_emitter_factory.ts new file mode 100644 index 0000000000..577160b345 --- /dev/null +++ b/packages/platform-core/src/usage-data/usage_data_emitter_factory.ts @@ -0,0 +1,24 @@ +import { DefaultUsageDataEmitter } from './usage_data_emitter.js'; + +export type UsageDataEmitter = { + emitSuccess: ( + metrics?: Record, + dimensions?: Record + ) => Promise; + emitFailure: ( + error: Error, + dimensions?: Record + ) => Promise; +}; + +/** + * Creates UsageDataEmitter for a given library version + */ +export class UsageDataEmitterFactory { + /** + * Returns a ClientConfigGenerator for the given BackendIdentifier type + */ + getInstance = (libraryVersion: string): UsageDataEmitter => { + return new DefaultUsageDataEmitter(libraryVersion); + }; +} diff --git a/packages/sandbox/API.md b/packages/sandbox/API.md index 8049c7e785..cc58a15b94 100644 --- a/packages/sandbox/API.md +++ b/packages/sandbox/API.md @@ -26,7 +26,7 @@ export type SandboxDeleteOptions = { }; // @public (undocumented) -export type SandboxEvents = 'successfulDeployment' | 'successfulDeletion'; +export type SandboxEvents = 'successfulDeployment' | 'failedDeployment' | 'successfulDeletion'; // @public (undocumented) export type SandboxOptions = { diff --git a/packages/sandbox/package.json b/packages/sandbox/package.json index 5f54da88a9..87b9a61c38 100644 --- a/packages/sandbox/package.json +++ b/packages/sandbox/package.json @@ -28,10 +28,10 @@ "@aws-sdk/types": "^3.378.0", "@aws-sdk/client-cloudformation": "^3.421.0", "@parcel/watcher": "^2.3.0", - "glob": "^10.2.7", "debounce-promise": "^3.1.2", - "parse-gitignore": "^2.0.0", - "open": "^9.1.0" + "glob": "^10.2.7", + "open": "^9.1.0", + "parse-gitignore": "^2.0.0" }, "devDependencies": { "@types/debounce-promise": "^3.1.6", diff --git a/packages/sandbox/src/file_watching_sandbox.ts b/packages/sandbox/src/file_watching_sandbox.ts index 492a29db5b..72586b9144 100644 --- a/packages/sandbox/src/file_watching_sandbox.ts +++ b/packages/sandbox/src/file_watching_sandbox.ts @@ -62,7 +62,7 @@ export class FileWatchingSandbox extends EventEmitter implements Sandbox { * @inheritdoc */ override emit(eventName: SandboxEvents, ...args: unknown[]): boolean { - return super.emit(eventName, args); + return super.emit(eventName, ...args); } /** @@ -203,17 +203,18 @@ export class FileWatchingSandbox extends EventEmitter implements Sandbox { private deploy = async (options: SandboxOptions) => { try { - await this.executor.deploy( + const deployResult = await this.executor.deploy( await this.backendIdSandboxResolver(options.name), // It's important to pass this as callback so that debounce does // not reset tracker prematurely this.shouldValidateAppSources ); console.debug('[Sandbox] Running successfulDeployment event handlers'); - this.emit('successfulDeployment'); + this.emit('successfulDeployment', deployResult); } catch (error) { // Print the meaningful message console.log(this.getErrorMessage(error)); + this.emit('failedDeployment', error); // If the error is because of a non-allowed destructive change such as // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-aliasattributes diff --git a/packages/sandbox/src/sandbox.ts b/packages/sandbox/src/sandbox.ts index 1ace351655..f36b1b6090 100644 --- a/packages/sandbox/src/sandbox.ts +++ b/packages/sandbox/src/sandbox.ts @@ -23,7 +23,10 @@ export type Sandbox = { delete: (options: SandboxDeleteOptions) => Promise; } & EventEmitter; -export type SandboxEvents = 'successfulDeployment' | 'successfulDeletion'; +export type SandboxEvents = + | 'successfulDeployment' + | 'failedDeployment' + | 'successfulDeletion'; export type SandboxOptions = { dir?: string; diff --git a/packages/sandbox/src/sandbox_executor.ts b/packages/sandbox/src/sandbox_executor.ts index 24d84915c3..46eb0eb682 100644 --- a/packages/sandbox/src/sandbox_executor.ts +++ b/packages/sandbox/src/sandbox_executor.ts @@ -1,6 +1,10 @@ import debounce from 'debounce-promise'; -import { BackendDeployer } from '@aws-amplify/backend-deployer'; import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import { + BackendDeployer, + DeployResult, + DestroyResult, +} from '@aws-amplify/backend-deployer'; import { SecretClient } from '@aws-amplify/backend-secret'; /** @@ -42,15 +46,15 @@ export class AmplifySandboxExecutor { deploy = async ( backendId: BackendIdentifier, validateAppSourcesProvider: () => boolean - ): Promise => { + ): Promise => { console.debug('[Sandbox] Executing command `deploy`'); const secretLastUpdated = await this.getSecretLastUpdated(backendId); - await this.invoke(async () => { + return this.invoke(() => { // it's important to get information here so that information // doesn't get lost while debouncing const validateAppSources = validateAppSourcesProvider(); - await this.backendDeployer.deploy(backendId, { + return this.backendDeployer.deploy(backendId, { deploymentType: 'sandbox', secretLastUpdated, validateAppSources, @@ -61,13 +65,12 @@ export class AmplifySandboxExecutor { /** * Destroy sandbox. Do not swallow errors */ - destroy = (backendId?: BackendIdentifier): Promise => { + destroy = (backendId?: BackendIdentifier): Promise => { console.debug('[Sandbox] Executing command `destroy`'); - return this.invoke( - async () => - await this.backendDeployer.destroy(backendId, { - deploymentType: 'sandbox', - }) + return this.invoke(() => + this.backendDeployer.destroy(backendId, { + deploymentType: 'sandbox', + }) ); }; @@ -76,7 +79,9 @@ export class AmplifySandboxExecutor { * Debounce is needed in case multiple duplicate events are received. */ private invoke = debounce( - async (callback: () => Promise): Promise => await callback(), + async ( + callback: () => Promise + ): Promise => await callback(), 100 ); }