From d9cbfe95f8883fabd8c51bf23e31cc2d771ba117 Mon Sep 17 00:00:00 2001 From: "Release bot[bot]" Date: Tue, 25 Jul 2023 12:58:41 +0000 Subject: [PATCH 01/28] chore: update layer ARN on documentation --- docs/index.md | 68 +++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/index.md b/docs/index.md index 7ad6a89811..d5352071bd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,7 +26,7 @@ You can use Powertools for AWS Lambda (TypeScript) in both TypeScript and JavaSc You can install Powertools for AWS Lambda (TypeScript) using one of the following options: -* **Lambda Layer**: [**arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17**](#){: .copyMe}:clipboard: +* **Lambda Layer**: [**arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18**](#){: .copyMe}:clipboard: * **npm**: [`npm install @aws-lambda-powertools/tracer @aws-lambda-powertools/metrics @aws-lambda-powertools/logger`](#){: .copyMe}:clipboard: ### Lambda Layer @@ -41,31 +41,31 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L | Region | Layer ARN | | ---------------- | ------------------------------------------------------------------------------------------------------------ | - | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | - | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:17](#){: .copyMe}:clipboard: | + | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | ??? note "Click to expand and copy code snippets for popular frameworks" @@ -76,7 +76,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L Type: AWS::Serverless::Function Properties: Layers: - - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17 + - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools` from being bundled since the packages will be already present the Layer: @@ -107,7 +107,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L hello: handler: lambda_function.lambda_handler layers: - - arn:aws:lambda:${aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17 + - arn:aws:lambda:${aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools` from being bundled since the packages will be already present the Layer: @@ -139,7 +139,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L const powertoolsLayer = lambda.LayerVersion.fromLayerVersionArn( this, 'PowertoolsLayer', - `arn:aws:lambda:${cdk.Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17` + `arn:aws:lambda:${cdk.Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18` ); new lambda.Function(this, 'Function', { @@ -191,7 +191,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L role = ... handler = "index.handler" runtime = "nodejs16.x" - layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17"] + layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18"] source_code_hash = filebase64sha256("lambda_function_payload.zip") } ``` @@ -209,7 +209,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L const lambdaFunction = new aws.lambda.Function('function', { layers: [ - pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17` + pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18` ], code: new pulumi.asset.FileArchive('lambda_function_payload.zip'), tracingConfig: { @@ -233,7 +233,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L ? Do you want to configure advanced settings? Yes ... ? Do you want to enable Lambda layers for this function? Yes - ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18 ❯ amplify push -y # Updating an existing function and add the layer @@ -243,7 +243,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L - Name: ? Which setting do you want to update? Lambda layers configuration ? Do you want to enable Lambda layers for this function? Yes - ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18 ? Do you want to edit the local lambda function now? No ``` @@ -253,7 +253,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L Change {region} to your AWS region, e.g. `eu-west-1` ```bash title="AWS CLI" - aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:17 --region {region} + aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:18 --region {region} ``` The pre-signed URL to download this Lambda Layer will be within `Location` key. From 8ea167226ecea3b1e5d5e317c2f7ce6481deee52 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 27 Jul 2023 12:43:18 +0200 Subject: [PATCH 02/28] chore(docs): update roadmap, labels, and issue templates (#1632) * chore(docs): update roadmap document * chore: update issue templates * chore(docs): add new labels to list --- .github/ISSUE_TEMPLATE/maintenance.yml | 4 ++++ .github/ISSUE_TEMPLATE/rfc.yml | 4 ++++ .github/semantic.yml | 3 ++- MAINTAINERS.md | 4 ++++ docs/roadmap.md | 21 +++++++++++---------- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/maintenance.yml b/.github/ISSUE_TEMPLATE/maintenance.yml index d1e343bdc3..374e4e2ba8 100644 --- a/.github/ISSUE_TEMPLATE/maintenance.yml +++ b/.github/ISSUE_TEMPLATE/maintenance.yml @@ -35,6 +35,10 @@ body: - Metrics - Parameters - Idempotency + - JMESPath + - Batch Processing + - Validation + - Parser - Other - type: textarea id: suggestion diff --git a/.github/ISSUE_TEMPLATE/rfc.yml b/.github/ISSUE_TEMPLATE/rfc.yml index 9162b8c00d..f04a90f2d7 100644 --- a/.github/ISSUE_TEMPLATE/rfc.yml +++ b/.github/ISSUE_TEMPLATE/rfc.yml @@ -22,6 +22,10 @@ body: - Metrics - Parameters - Idempotency + - JMESPath + - Batch Processing + - Validation + - Parser - Other validations: required: true diff --git a/.github/semantic.yml b/.github/semantic.yml index e07898ce24..cd9709530c 100644 --- a/.github/semantic.yml +++ b/.github/semantic.yml @@ -21,7 +21,8 @@ scopes: - idempotency - commons - parser - - validator + - jmespath + - validation - batch - layers - ci diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 08f493336c..7e684dad07 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -69,6 +69,10 @@ These are the most common labels used by maintainers to triage issues, pull requ | area/idempotency | Items related to the Idempotency Utility | PR automation | | area/parameters | Items related to the Parameters Utility | PR automation | | area/commons | Items related to the Commons Utility | PR automation | +| area/jmespath | Items related to the JMESPath Utility | PR automation | +| area/validation | Items related to the Validation Utility | PR automation | +| area/batch | Items related to the Batch Processing Utility | PR automation | +| area/parser | Items related to the Parser Utility | PR automation | | area/automation | Items related to automation like GitHub workflows or CI/CD | PR automation | | area/layers | Items related to the Lambda Layers pipeline | PR automation | | size/XS | PRs between 0-9 LOC | PR automation | diff --git a/docs/roadmap.md b/docs/roadmap.md index 6d8788622e..3e7ac97cf7 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -14,13 +14,13 @@ Themes are key activities maintainers are focusing on, besides bug reports. Thes We want to close the gap between this version of Powertools for AWS Lambda and the [Python version](https://github.com/aws-powertools/powertools-lambda-python). This means that in the fullness of time, we want to have the same or equivalent features in both versions. -In the first half of 2023 we have released the [Parameters utility](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/10), and are working on Idempotency. We are currently running a private beta for Idempotency, and plan on releasing the [public beta around July 2023](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/7) at the latest. +In the first half of 2023 we have released the [Parameters utility](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/10), then in July we have released public betas for [Idempotency](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/7) and [Batch Processing](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/13). We are eager to hear your feedback on these new features, so please try them out and let us know what you think! -For the second half of 2023, we are considering implementing one or more of the following utilities (in no particular order): -- Batch Processing (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1082)) -- Validation (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/508)) -- Parser (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1334)) -- Event Handler (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/413)) +For the remaining of 2023, we are considering implementing one or more of the following utilities (in no particular order): + +* Validation (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/508)) +* Parser (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1334)) +* Event Handler (Status: [RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/413)) If any of these utilities are important to you, please let us know by upvoting the issue, leaving a comment under the RFCs, or by joining the discussion in our [Discord community](https://discord.gg/B8zZKbbyET){target="_blank"}. @@ -29,9 +29,10 @@ If any of these utilities are important to you, please let us know by upvoting t Over the past year, we have gathered a number of feature requests and improvements that we want to implement but that are not backwards compatible with the current API surface. We are planning to release a new major version of the library by the end of 2023, which will include some of these changes. The following are some of the changes we are considering: -- **ES Modules support ([#521](https://github.com/aws-powertools/powertools-lambda-typescript/issues/521))** - Thanks to the work of the community we have been able to validate the feasibility of dual support for CommonJS and ES Modules. We are currently working on a plan to implement this. -- **TypeScript 5.x support ([#1375](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1375))** - This new version of TypeScript brings breaking changes to the experimental decorators API, which we use in our core utilities. We need to investigate the impact of this change and how to best support it. -- **Support for 3rd party observability providers ([#1500](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1500))** - Many of our customers would like to use Powertools for AWS to send logs, traces, and metrics to providers other than Amazon CloudWatch. At the moment we are investigating the feasibility of this for the Logger utility, while the Python version of Powertools for AWS Lambda is considering this also for Tracer and Metrics. + +* **ES Modules support ([#521](https://github.com/aws-powertools/powertools-lambda-typescript/issues/521))** - Thanks to the work of the community we have been able to validate the feasibility of dual support for CommonJS and ES Modules. We are currently working on a plan to implement this. +* **TypeScript 5.x support ([#1375](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1375))** - This new version of TypeScript brings breaking changes to the experimental decorators API, which we use in our core utilities. We need to investigate the impact of this change and how to best support it. +* **Support for 3rd party observability providers ([#1500](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1500))** - Many of our customers would like to use Powertools for AWS to send logs, traces, and metrics to providers other than Amazon CloudWatch. At the moment we are investigating the feasibility of this for the Logger utility, while the Python version of Powertools for AWS Lambda is considering this also for Tracer and Metrics. We have not yet decided on the final list of features that will be included in this release, if you have any suggestions please let us know by commenting on [this discussion](https://github.com/aws-powertools/powertools-lambda-typescript/discussions/1269) or upvoting existing suggestions. @@ -39,7 +40,7 @@ We have not yet decided on the final list of features that will be included in t We continue to work on increasing operational excellence to remove as much undifferentiated heavylifting for maintainers, so that we can focus on delivering features that help you. -This means improving our automation workflows, and project management, and test coverage. +This means improving our automation workflows, project management, and test coverage. ## Roadmap status definition From 4318d6f45da8c855573953f9f6344700770593f2 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 28 Jul 2023 17:20:09 +0200 Subject: [PATCH 03/28] improv(tests): adopt aws cdk cli lib (#1633) * tests(ci): add testing package * chore: add comments on types * chore: improve code smells * chore: improve code smells * feat(testing): created base testing * chore: removed aws-cdk-lib & aws-cdk * tests: moved tracer to new testing lib * tests: move logger to new testing * tests: move metrics to new testing * restored string * tests: move idempotency to new testing * tests: move parameters to new testing * chore: added testing pkg to ci * tests: move layers to new testing * chore: remove ref suffix --- .../actions/cached-node-modules/action.yml | 3 +- layers/package.json | 6 + layers/tests/e2e/layerPublisher.test.ts | 64 +- lerna.json | 1 + package-lock.json | 1964 ++++++++--------- package.json | 17 +- packages/commons/tests/utils/cdk-cli.ts | 61 - packages/commons/tests/utils/e2eUtils.ts | 14 +- packages/idempotency/package.json | 1 + .../tests/e2e/makeHandlerIdempotent.test.ts | 25 +- .../tests/e2e/makeIdempotent.test.ts | 23 +- packages/logger/package.json | 1 + .../tests/e2e/basicFeatures.middy.test.ts | 23 +- .../tests/e2e/childLogger.manual.test.ts | 24 +- .../e2e/logEventEnvVarSetting.middy.test.ts | 23 +- .../tests/e2e/sampleRate.decorator.test.ts | 24 +- packages/metrics/package.json | 1 + .../e2e/basicFeatures.decorators.test.ts | 21 +- .../tests/e2e/basicFeatures.manual.test.ts | 21 +- .../tests/e2e/appConfigProvider.class.test.ts | 34 +- .../tests/e2e/dynamoDBProvider.class.test.ts | 52 +- .../tests/e2e/secretsProvider.class.test.ts | 44 +- .../tests/e2e/ssmProvider.class.test.ts | 32 +- packages/testing/jest.config.js | 28 + packages/testing/package.json | 50 + packages/testing/src/TestStack.ts | 83 + packages/testing/src/constants.ts | 17 + packages/testing/src/index.ts | 2 + .../helpers/populateEnvironmentVariables.ts | 16 + packages/testing/tsconfig.es.json | 31 + packages/testing/tsconfig.json | 32 + packages/tracer/package.json | 1 + .../tests/e2e/allFeatures.decorator.test.ts | 31 +- .../tests/e2e/allFeatures.manual.test.ts | 23 +- .../tests/e2e/allFeatures.middy.test.ts | 28 +- .../tests/e2e/asyncHandler.decorator.test.ts | 24 +- 36 files changed, 1387 insertions(+), 1458 deletions(-) delete mode 100644 packages/commons/tests/utils/cdk-cli.ts create mode 100644 packages/testing/jest.config.js create mode 100644 packages/testing/package.json create mode 100644 packages/testing/src/TestStack.ts create mode 100644 packages/testing/src/constants.ts create mode 100644 packages/testing/src/index.ts create mode 100644 packages/testing/tests/helpers/populateEnvironmentVariables.ts create mode 100644 packages/testing/tsconfig.es.json create mode 100644 packages/testing/tsconfig.json diff --git a/.github/actions/cached-node-modules/action.yml b/.github/actions/cached-node-modules/action.yml index 1ae3e738d2..c3df647248 100644 --- a/.github/actions/cached-node-modules/action.yml +++ b/.github/actions/cached-node-modules/action.yml @@ -41,5 +41,6 @@ runs: npm run build -w packages/metrics & \ npm run build -w packages/parameters & \ npm run build -w packages/idempotency & \ - npm run build -w packages/batch + npm run build -w packages/batch & \ + npm run build -w packages/testing shell: bash \ No newline at end of file diff --git a/layers/package.json b/layers/package.json index 0e8f54baaf..ce626f56f8 100644 --- a/layers/package.json +++ b/layers/package.json @@ -34,6 +34,12 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../packages/testing", "source-map-support": "^0.5.21" + }, + "dependencies": { + "aws-cdk": "^2.88.0", + "aws-cdk-lib": "^2.88.0", + "esbuild": "^0.18.17" } } diff --git a/layers/tests/e2e/layerPublisher.test.ts b/layers/tests/e2e/layerPublisher.test.ts index 3da035472f..7b4bab6988 100644 --- a/layers/tests/e2e/layerPublisher.test.ts +++ b/layers/tests/e2e/layerPublisher.test.ts @@ -3,13 +3,13 @@ * * @group e2e/layers/all */ -import { App, Stack } from 'aws-cdk-lib'; -import { Tracing } from 'aws-cdk-lib/aws-lambda'; +import { App } from 'aws-cdk-lib'; +import { LayerVersion, Tracing } from 'aws-cdk-lib/aws-lambda'; import { LayerPublisherStack } from '../../src/layer-publisher-stack'; import { - deployStack, - destroyStack, -} from '../../../packages/commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { generateUniqueName, invokeFunction, @@ -30,7 +30,7 @@ import { v4 } from 'uuid'; import path from 'path'; import packageJson from '../../package.json'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key: ${runtime}`); @@ -66,30 +66,33 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => const lambdaFunctionCodeFile = 'layerPublisher.class.test.functionCode.ts'; const invocationCount = 1; - - const integTestApp = new App(); - let stackLayer: LayerPublisherStack; - let stackFunction: Stack; - const powerToolsPackageVersion = packageJson.version; + const layerName = generateUniqueName( + RESOURCE_NAME_PREFIX, + uuid, + runtime, + 'layer' + ); - beforeAll(async () => { - const layerName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'layer' - ); + const testStack = new TestStack(stackNameFunction); + const layerApp = new App(); + const layerStack = new LayerPublisherStack(layerApp, stackNameLayers, { + layerName, + powertoolsPackageVersion: powerToolsPackageVersion, + ssmParameterLayerArn: ssmParameterLayerName, + }); + const testLayerStack = new TestStack(stackNameLayers, layerApp, layerStack); - stackLayer = new LayerPublisherStack(integTestApp, stackNameLayers, { - layerName: layerName, - powertoolsPackageVersion: powerToolsPackageVersion, - ssmParameterLayerArn: ssmParameterLayerName, - }); + beforeAll(async () => { + const outputs = await testLayerStack.deploy(); - stackFunction = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackNameFunction, + const layerVersion = LayerVersion.fromLayerVersionArn( + testStack.stack, + 'LayerVersionArnReference', + outputs['LatestLayerArn'] + ); + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), tracing: Tracing.ACTIVE, @@ -107,11 +110,10 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => '@aws-lambda-powertools/tracer', ], }, - layers: [stackLayer.lambdaLayerVersion], + layers: [layerVersion], }); - await deployStack(integTestApp, stackLayer); - await deployStack(integTestApp, stackFunction); + await testStack.deploy(); invocationLogs = await invokeFunction( functionName, @@ -167,8 +169,8 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stackFunction); - await destroyStack(integTestApp, stackLayer); + await testLayerStack.destroy(); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/lerna.json b/lerna.json index f77aa27b3a..863cd19258 100644 --- a/lerna.json +++ b/lerna.json @@ -7,6 +7,7 @@ "packages/parameters", "packages/idempotency", "packages/batch", + "packages/testing", "examples/cdk", "examples/sam", "layers" diff --git a/package-lock.json b/package-lock.json index 60cd7cfbea..9e61c13363 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,28 +15,21 @@ "packages/tracer", "packages/parameters", "packages/idempotency", + "packages/batch", + "packages/testing", "docs/snippets", "layers", "examples/cdk", - "examples/sam", - "packages/batch" + "examples/sam" ], "devDependencies": { - "@aws-cdk/cloudformation-diff": "^2.73.0", - "@aws-cdk/cx-api": "^2.73.0", "@middy/core": "^3.6.2", "@types/aws-lambda": "^8.10.109", "@types/jest": "^29.2.4", "@types/node": "^18.16.18", - "@types/uuid": "^9.0.0", + "@types/uuid": "^9.0.2", "@typescript-eslint/eslint-plugin": "^5.46.1", "@typescript-eslint/parser": "^5.46.1", - "archiver": "^5.3.1", - "aws-cdk": "^2.73.0", - "aws-cdk-lib": "^2.73.0", - "cdk-assets": "^2.72.1", - "constructs": "^10.1.190", - "esbuild": "^0.16.7", "eslint": "^8.29.0", "eslint-config-prettier": "^8.8.0", "eslint-import-resolver-node": "^0.3.6", @@ -49,8 +42,6 @@ "lerna": "^6.6.2", "lint-staged": "^13.1.2", "prettier": "^2.8.8", - "promptly": "^3.2.0", - "proxy-agent": "^5.0.0", "rimraf": "^5.0.1", "ts-jest": "^29.0.3", "ts-node": "^10.9.1", @@ -428,207 +419,454 @@ "layers": { "version": "1.12.1", "license": "MIT-0", + "dependencies": { + "aws-cdk": "^2.88.0", + "aws-cdk-lib": "^2.88.0", + "esbuild": "^0.18.17" + }, "bin": { "layer": "bin/layers.js" }, "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../packages/testing", "source-map-support": "^0.5.21" } }, - "layers/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "layers/node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "layers/node_modules/@esbuild/android-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.196", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.196.tgz", - "integrity": "sha512-F8hU1rEzYS7z5Dt2s+ttd0/jMvPuUE9BcXexgq+dIOLuZsRpDwNnkMBtjNaJXJS48ZGJ2X4b8VlklseepdtoSA==" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.1", - "license": "Apache-2.0" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v5": { - "version": "2.0.165", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.165.tgz", - "integrity": "sha512-bsyLQD/vqXQcc9RDmlM1XqiFNO/yewgVFXmkMcQkndJbmE/jgYkzewwYGrBlfL725hGLQipXq19+jwWwdsXQqg==" - }, - "node_modules/@aws-cdk/cfnspec": { - "version": "2.73.0-alpha.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "fs-extra": "^9.1.0", - "md5": "^2.3.0" + "layers/node_modules/@esbuild/android-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "2.73.0", - "bundleDependencies": [ - "jsonschema", - "semver" + "layers/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" ], - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jsonschema": "^1.4.1", - "semver": "^7.3.8" - }, "engines": { - "node": ">= 14.15.0" + "node": ">=12" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { - "version": "1.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", + "layers/node_modules/@esbuild/darwin-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "layers/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { - "version": "7.3.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "layers/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@aws-cdk/cloudformation-diff": { - "version": "2.73.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/cfnspec": "2.73.0-alpha.0", - "chalk": "^4", - "diff": "^5.1.0", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.3", - "table": "^6.8.1" - }, + "layers/node_modules/@esbuild/linux-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 14.15.0" + "node": ">=12" } }, - "node_modules/@aws-cdk/cx-api": { - "version": "2.73.0", - "bundleDependencies": [ - "semver" + "layers/node_modules/@esbuild/linux-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" ], - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/cloud-assembly-schema": "2.73.0", - "semver": "^7.3.8" - }, "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@aws-cdk/cloud-assembly-schema": "2.73.0" + "node": ">=12" } }, - "node_modules/@aws-cdk/cx-api/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "layers/node_modules/@esbuild/linux-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@aws-cdk/cx-api/node_modules/semver": { - "version": "7.3.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "layers/node_modules/@esbuild/linux-loong64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@aws-cdk/cx-api/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" + "layers/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "layers/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "layers/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" + "layers/node_modules/@esbuild/linux-s390x": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", + "layers/node_modules/@esbuild/linux-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/sunos-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/win32-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/win32-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/@esbuild/win32-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "layers/node_modules/esbuild": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" + } + }, + "layers/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.200", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.200.tgz", + "integrity": "sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg==" + }, + "node_modules/@aws-cdk/asset-kubectl-v20": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", + "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v5": { + "version": "2.0.165", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.165.tgz", + "integrity": "sha512-bsyLQD/vqXQcc9RDmlM1XqiFNO/yewgVFXmkMcQkndJbmE/jgYkzewwYGrBlfL725hGLQipXq19+jwWwdsXQqg==" + }, + "node_modules/@aws-cdk/cli-lib-alpha": { + "version": "2.88.0-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.88.0-alpha.0.tgz", + "integrity": "sha512-UKYAwGcNxSlPLZHlLyf/JEziTt830xl5A2OFJ5R3D2vgpT3YuQb5lTz07Wzi8qacHjaSbHV5gAf5r73rBtYXeA==", + "engines": { + "node": ">= 14.15.0" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, @@ -719,6 +957,10 @@ "resolved": "packages/parameters", "link": true }, + "node_modules/@aws-lambda-powertools/testing-utils": { + "resolved": "packages/testing", + "link": true + }, "node_modules/@aws-lambda-powertools/tracer": { "resolved": "packages/tracer", "link": true @@ -5503,14 +5745,6 @@ "node": ">=14.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "dev": true, @@ -5763,9 +5997,10 @@ "license": "MIT" }, "node_modules/@types/uuid": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "dev": true }, "node_modules/@types/yargs": { "version": "17.0.17", @@ -6102,21 +6337,6 @@ "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.11.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "dev": true, @@ -6195,70 +6415,6 @@ "dev": true, "license": "ISC" }, - "node_modules/archiver": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -6348,17 +6504,6 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types": { - "version": "0.13.4", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "dev": true, @@ -6411,9 +6556,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.73.0", - "dev": true, - "license": "Apache-2.0", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.88.0.tgz", + "integrity": "sha512-7Tj0uusA2nsEOsqkd4kB5vmzciz7l/eGBN5a+Ce4/CCcoe4ZCvT85L+T6tK0aohUTLZTAlTPBceH34RN5iMYpA==", "bin": { "cdk": "bin/cdk" }, @@ -6425,9 +6570,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.80.0.tgz", - "integrity": "sha512-PoqD3Yms5I0ajuTi071nTW/hpkH3XsdyZzn5gYsPv0qD7mqP3h6Qr+6RiGx+yQ1KcVFyxWdX15uK+DsC0KwvcQ==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.88.0.tgz", + "integrity": "sha512-bmhokh30HVeqlotWaoEmK7mKB9SJbJwpbsiVgmYe3JcMu8DposHQqaIPI7LnC+dg015tZaxUsExxOYBEw+vntQ==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -6441,9 +6586,9 @@ "yaml" ], "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.177", - "@aws-cdk/asset-kubectl-v20": "^2.1.1", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.148", + "@aws-cdk/asset-awscli-v1": "^2.2.200", + "@aws-cdk/asset-kubectl-v20": "^2.1.2", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.165", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.1.1", @@ -6451,7 +6596,7 @@ "jsonschema": "^1.4.1", "minimatch": "^3.1.2", "punycode": "^2.3.0", - "semver": "^7.5.1", + "semver": "^7.5.4", "table": "^6.8.1", "yaml": "1.10.2" }, @@ -6667,7 +6812,7 @@ } }, "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.5.1", + "version": "7.5.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -6768,7 +6913,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -7142,14 +7286,6 @@ "isarray": "^1.0.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "license": "MIT" @@ -7171,14 +7307,6 @@ "node": ">=10" } }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacache": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", @@ -7329,195 +7457,19 @@ ], "license": "CC-BY-4.0" }, - "node_modules/cdk-assets": { - "version": "2.72.1", + "node_modules/cdk-sample": { + "resolved": "examples/cdk", + "link": true + }, + "node_modules/centra": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/centra/-/centra-2.6.0.tgz", + "integrity": "sha512-dgh+YleemrT8u85QL11Z6tYhegAs3MMxsaWAq/oXeAmYJ7VxL3SI9TZtnfaEvNDMAPolj25FXIb3S+HCI4wQaQ==" + }, + "node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/cloud-assembly-schema": "2.72.1", - "@aws-cdk/cx-api": "2.72.1", - "archiver": "^5.3.1", - "aws-sdk": "^2.1329.0", - "glob": "^7.2.3", - "mime": "^2.6.0", - "yargs": "^16.2.0" - }, - "bin": { - "cdk-assets": "bin/cdk-assets", - "docker-credential-cdk-assets": "bin/docker-credential-cdk-assets" - }, - "engines": { - "node": ">= 14.15.0" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "2.72.1", - "bundleDependencies": [ - "jsonschema", - "semver" - ], - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jsonschema": "^1.4.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { - "version": "1.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { - "version": "7.3.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cx-api": { - "version": "2.72.1", - "bundleDependencies": [ - "semver" - ], - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/cloud-assembly-schema": "2.72.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@aws-cdk/cloud-assembly-schema": "2.72.1" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cx-api/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cx-api/node_modules/semver": { - "version": "7.3.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-assets/node_modules/@aws-cdk/cx-api/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/cdk-assets/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cdk-assets/node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/cdk-assets/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-assets/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/cdk-sample": { - "resolved": "examples/cdk", - "link": true - }, - "node_modules/centra": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/centra/-/centra-2.6.0.tgz", - "integrity": "sha512-dgh+YleemrT8u85QL11Z6tYhegAs3MMxsaWAq/oXeAmYJ7VxL3SI9TZtnfaEvNDMAPolj25FXIb3S+HCI4wQaQ==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7542,14 +7494,6 @@ "dev": true, "license": "MIT" }, - "node_modules/charenc": { - "version": "0.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, "node_modules/chownr": { "version": "2.0.0", "dev": true, @@ -7888,20 +7832,6 @@ "node": ">=8" } }, - "node_modules/compress-commons": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/concat-map": { "version": "0.0.1", "dev": true, @@ -8143,29 +8073,6 @@ "node": ">=10" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/create-require": { "version": "1.1.1", "dev": true, @@ -8184,14 +8091,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -8222,14 +8121,6 @@ "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -8341,20 +8232,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/degenerator": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -9095,120 +8972,53 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "1.14.3", + "node_modules/eslint": { + "version": "8.30.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "@eslint/eslintrc": "^1.4.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "optionator": "^0.8.1" + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^1.4.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9775,14 +9585,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/file-url": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", @@ -9989,38 +9791,6 @@ "dev": true, "license": "ISC" }, - "node_modules/ftp": { - "version": "0.3.10", - "dev": true, - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" - }, "node_modules/function-bind": { "version": "1.1.1", "dev": true, @@ -10264,51 +10034,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/get-uri": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", @@ -10630,34 +10355,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "dev": true, @@ -10931,11 +10628,6 @@ "node": ">= 0.4" } }, - "node_modules/ip": { - "version": "1.1.8", - "dev": true, - "license": "MIT" - }, "node_modules/is-arguments": { "version": "1.1.1", "dev": true, @@ -10982,11 +10674,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, "node_modules/is-callable": { "version": "1.2.7", "dev": true, @@ -12065,11 +11752,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "dev": true, @@ -12179,44 +11861,6 @@ "resolved": "layers", "link": true }, - "node_modules/lazystream": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/lerna": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", @@ -12900,21 +12544,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.get": { "version": "4.4.2", "dev": true, @@ -12926,11 +12555,6 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "dev": true, @@ -12940,16 +12564,6 @@ "version": "4.6.2", "license": "MIT" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "4.1.0", "dev": true, @@ -13306,16 +12920,6 @@ "node": ">= 12" } }, - "node_modules/md5": { - "version": "2.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -13885,14 +13489,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/netmask": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/nise": { "version": "5.1.4", "dev": true, @@ -15030,42 +14626,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pac-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pac-resolver": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^3.0.2", - "ip": "^1.1.5", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pacote": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", - "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "node_modules/pacote": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "dependencies": { "@npmcli/git": "^4.0.0", @@ -15676,14 +15240,6 @@ "node": ">=10" } }, - "node_modules/promptly": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "read": "^1.0.4" - } - }, "node_modules/prompts": { "version": "2.4.2", "dev": true, @@ -15717,37 +15273,6 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, - "node_modules/proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/proxy-agent/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "dev": true, @@ -15805,20 +15330,6 @@ "node": ">=8" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/react-is": { "version": "18.2.0", "dev": true, @@ -16146,33 +15657,6 @@ "node": ">= 6" } }, - "node_modules/readdir-glob": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -16221,14 +15705,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.22.1", "dev": true, @@ -16495,11 +15971,6 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -16760,19 +16231,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/socks/node_modules/ip": { "version": "2.0.0", "dev": true, @@ -16909,14 +16367,6 @@ "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -17121,21 +16571,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/table": { - "version": "6.8.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/tapable": { "version": "2.2.1", "dev": true, @@ -17347,14 +16782,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -17826,14 +17253,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -17910,8 +17329,9 @@ }, "node_modules/uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -17966,22 +17386,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/vm2": { - "version": "3.9.18", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.18.tgz", - "integrity": "sha512-iM7PchOElv6Uv6Q+0Hq7dcgDtWWT6SizYqVcvol+1WQc+E9HlgTCnPozbQNSP3yDV9oXHQOEQu530w2q/BCVZg==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, "node_modules/vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", @@ -18257,11 +17661,6 @@ "node": ">=4.0" } }, - "node_modules/xregexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -18345,19 +17744,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zip-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, "packages/batch": { "name": "@aws-lambda-powertools/batch", "version": "1.12.1", @@ -18387,6 +17773,7 @@ "jmespath": "^0.16.0" }, "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", "@types/jmespath": "^0.15.0", "aws-sdk-client-mock": "^2.2.0", @@ -18605,6 +17992,7 @@ "lodash.merge": "^4.6.2" }, "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@types/lodash.merge": "^4.6.7" } }, @@ -18616,6 +18004,7 @@ "@aws-lambda-powertools/commons": "^1.12.1" }, "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-cloudwatch": "^3.360.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" @@ -18842,6 +18231,382 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "packages/testing": { + "name": "@aws-lambda-powertools/testing-utils", + "version": "1.12.1", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", + "aws-cdk-lib": "^2.88.0", + "esbuild": "^0.18.17" + } + }, + "packages/testing/node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/android-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/android-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/darwin-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-loong64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-s390x": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/linux-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/sunos-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/win32-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/win32-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/@esbuild/win32-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/testing/node_modules/esbuild": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" + } + }, "packages/tracer": { "name": "@aws-lambda-powertools/tracer", "version": "1.12.1", @@ -18851,6 +18616,7 @@ "aws-xray-sdk-core": "^3.4.1" }, "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", "@aws-sdk/client-sts": "^3.360.0", "@aws-sdk/client-xray": "^3.360.0", diff --git a/package.json b/package.json index 73bd6845da..b9186a7128 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,12 @@ "packages/tracer", "packages/parameters", "packages/idempotency", + "packages/batch", + "packages/testing", "docs/snippets", "layers", "examples/cdk", - "examples/sam", - "packages/batch" + "examples/sam" ], "scripts": { "init-environment": "husky install", @@ -45,21 +46,13 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@aws-cdk/cloudformation-diff": "^2.73.0", - "@aws-cdk/cx-api": "^2.73.0", "@middy/core": "^3.6.2", "@types/aws-lambda": "^8.10.109", "@types/jest": "^29.2.4", "@types/node": "^18.16.18", - "@types/uuid": "^9.0.0", + "@types/uuid": "^9.0.2", "@typescript-eslint/eslint-plugin": "^5.46.1", "@typescript-eslint/parser": "^5.46.1", - "archiver": "^5.3.1", - "aws-cdk": "^2.73.0", - "aws-cdk-lib": "^2.73.0", - "cdk-assets": "^2.72.1", - "constructs": "^10.1.190", - "esbuild": "^0.16.7", "eslint": "^8.29.0", "eslint-config-prettier": "^8.8.0", "eslint-import-resolver-node": "^0.3.6", @@ -72,8 +65,6 @@ "lerna": "^6.6.2", "lint-staged": "^13.1.2", "prettier": "^2.8.8", - "promptly": "^3.2.0", - "proxy-agent": "^5.0.0", "rimraf": "^5.0.1", "ts-jest": "^29.0.3", "ts-node": "^10.9.1", diff --git a/packages/commons/tests/utils/cdk-cli.ts b/packages/commons/tests/utils/cdk-cli.ts deleted file mode 100644 index 65c78fa14c..0000000000 --- a/packages/commons/tests/utils/cdk-cli.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { App, Stack } from 'aws-cdk-lib'; -import * as cxapi from '@aws-cdk/cx-api'; -import { CloudFormationDeployments } from 'aws-cdk/lib/api/cloudformation-deployments'; -import { SdkProvider } from 'aws-cdk/lib/api/aws-auth'; -import { DeployStackResult } from 'aws-cdk/lib/api/deploy-stack'; - -export const deployStack = async ( - app: App, - stack: Stack, - quiet?: boolean -): Promise => { - const stackArtifact = getStackArtifact(app, stack); - - const cloudFormation = await createCloudFormationDeployments(); - - return cloudFormation.deployStack({ - stack: stackArtifact, - quiet: quiet ? quiet : true, - }); -}; - -export const destroyStack = async ( - app: App, - stack: Stack, - quiet?: boolean -): Promise => { - const stackArtifact = getStackArtifact(app, stack); - - const cloudFormation = await createCloudFormationDeployments(); - - await cloudFormation.destroyStack({ - stack: stackArtifact, - quiet: quiet ? quiet : true, - }); -}; - -const getStackArtifact = ( - app: App, - stack: Stack -): cxapi.CloudFormationStackArtifact => { - const synthesized = app.synth(); - - // Reload the synthesized artifact for stack using the cxapi from dependencies - const assembly = new cxapi.CloudAssembly(synthesized.directory); - - return cxapi.CloudFormationStackArtifact.fromManifest( - assembly, - stack.artifactId, - synthesized.getStackArtifact(stack.artifactId).manifest - ) as cxapi.CloudFormationStackArtifact; -}; - -const createCloudFormationDeployments = - async (): Promise => { - const sdkProvider = await SdkProvider.withAwsCliCompatibleDefaults({ - profile: process.env.AWS_PROFILE, - }); - const cloudFormation = new CloudFormationDeployments({ sdkProvider }); - - return cloudFormation; - }; diff --git a/packages/commons/tests/utils/e2eUtils.ts b/packages/commons/tests/utils/e2eUtils.ts index d8f32ad607..2bf5fdbdc1 100644 --- a/packages/commons/tests/utils/e2eUtils.ts +++ b/packages/commons/tests/utils/e2eUtils.ts @@ -2,7 +2,7 @@ * E2E utils is used by e2e tests. They are helper function that calls either CDK or SDK * to interact with services. */ -import { App, CfnOutput, Duration, Stack } from 'aws-cdk-lib'; +import { CfnOutput, Duration, Stack } from 'aws-cdk-lib'; import { NodejsFunction, NodejsFunctionProps, @@ -25,8 +25,7 @@ export const TEST_RUNTIMES: Record = { }; export type StackWithLambdaFunctionOptions = { - app: App; - stackName: string; + stack: Stack; functionName: string; functionEntry: string; tracing?: Tracing; @@ -48,9 +47,8 @@ export const isValidRuntimeKey = ( export const createStackWithLambdaFunction = ( params: StackWithLambdaFunctionOptions -): Stack => { - const stack = new Stack(params.app, params.stackName); - const testFunction = new NodejsFunction(stack, `testFunction`, { +): void => { + const testFunction = new NodejsFunction(params.stack, `testFunction`, { functionName: params.functionName, entry: params.functionEntry, tracing: params.tracing, @@ -63,12 +61,10 @@ export const createStackWithLambdaFunction = ( }); if (params.logGroupOutputKey) { - new CfnOutput(stack, params.logGroupOutputKey, { + new CfnOutput(params.stack, params.logGroupOutputKey, { value: testFunction.logGroup.logGroupName, }); } - - return stack; }; export const generateUniqueName = ( diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 3c177ef177..5ed19121b3 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -94,6 +94,7 @@ "nodejs" ], "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", "@types/jmespath": "^0.15.0", "aws-sdk-client-mock": "^2.2.0", diff --git a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts index f5bef822db..5d4ccd82c7 100644 --- a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts +++ b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts @@ -16,17 +16,16 @@ import { TEST_CASE_TIMEOUT, } from './constants'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { v4 } from 'uuid'; -import { App, Stack } from 'aws-cdk-lib'; import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { createHash } from 'node:crypto'; import { ScanCommand } from '@aws-sdk/lib-dynamodb'; import { createIdempotencyResources } from '../helpers/idempotencyUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -41,10 +40,8 @@ const stackName = generateUniqueName( ); const makeHandlerIdempotentFile = 'makeHandlerIdempotent.test.FunctionCode.ts'; -const app = new App(); - const ddb = new DynamoDBClient({}); -const stack = new Stack(app, stackName); +const testStack = new TestStack(stackName); const testDefault = 'default-sequential'; const functionNameDefault = generateUniqueName( @@ -60,7 +57,7 @@ const ddbTableNameDefault = generateUniqueName( `${testDefault}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameDefault, makeHandlerIdempotentFile, @@ -82,7 +79,7 @@ const ddbTableNameDefaultParallel = generateUniqueName( `${testDefaultParallel}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameDefaultParallel, makeHandlerIdempotentFile, @@ -104,7 +101,7 @@ const ddbTableNameTimeout = generateUniqueName( `${testTimeout}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameTimeout, makeHandlerIdempotentFile, @@ -128,7 +125,7 @@ const ddbTableNameExpired = generateUniqueName( `${testExpired}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameExpired, makeHandlerIdempotentFile, @@ -140,7 +137,7 @@ createIdempotencyResources( describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, () => { beforeAll(async () => { - await deployStack(app, stack); + await testStack.deploy(); }, SETUP_TIMEOUT); test( @@ -385,6 +382,6 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, ); afterAll(async () => { - await destroyStack(app, stack); + await testStack.destroy(); }, TEARDOWN_TIMEOUT); }); diff --git a/packages/idempotency/tests/e2e/makeIdempotent.test.ts b/packages/idempotency/tests/e2e/makeIdempotent.test.ts index 1906a8a16d..3feaefb3f1 100644 --- a/packages/idempotency/tests/e2e/makeIdempotent.test.ts +++ b/packages/idempotency/tests/e2e/makeIdempotent.test.ts @@ -15,18 +15,17 @@ import { TEST_CASE_TIMEOUT, } from './constants'; import { v4 } from 'uuid'; -import { App, Stack } from 'aws-cdk-lib'; import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { createHash } from 'node:crypto'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { ScanCommand } from '@aws-sdk/lib-dynamodb'; import { createIdempotencyResources } from '../helpers/idempotencyUtils'; import { InvocationLogs } from '@aws-lambda-powertools/commons/tests/utils/InvocationLogs'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -40,10 +39,8 @@ const stackName = generateUniqueName( ); const makeFunctionIdempotentFile = 'makeIdempotent.test.FunctionCode.ts'; -const app = new App(); - const ddb = new DynamoDBClient({ region: 'eu-west-1' }); -const stack = new Stack(app, stackName); +const testStack = new TestStack(stackName); const testDefault = 'default'; const functionNameDefault = generateUniqueName( @@ -59,7 +56,7 @@ const ddbTableNameDefault = generateUniqueName( `${testDefault}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameDefault, makeFunctionIdempotentFile, @@ -81,7 +78,7 @@ const ddbTableNameCustomConfig = generateUniqueName( `${testCustomConfig}-fn` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameCustomConfig, makeFunctionIdempotentFile, @@ -104,7 +101,7 @@ const ddbTableNameLambdaHandler = generateUniqueName( `${testLambdaHandler}-table` ); createIdempotencyResources( - stack, + testStack.stack, runtime, ddbTableNameLambdaHandler, makeFunctionIdempotentFile, @@ -114,7 +111,7 @@ createIdempotencyResources( describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { beforeAll(async () => { - await deployStack(app, stack); + await testStack.deploy(); }, SETUP_TIMEOUT); it( @@ -330,7 +327,7 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(app, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/logger/package.json b/packages/logger/package.json index 013530368b..321648326c 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -32,6 +32,7 @@ "main": "./lib/index.js", "types": "./lib/index.d.ts", "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@types/lodash.merge": "^4.6.7" }, "files": [ diff --git a/packages/logger/tests/e2e/basicFeatures.middy.test.ts b/packages/logger/tests/e2e/basicFeatures.middy.test.ts index 7f16412182..971050b5db 100644 --- a/packages/logger/tests/e2e/basicFeatures.middy.test.ts +++ b/packages/logger/tests/e2e/basicFeatures.middy.test.ts @@ -4,7 +4,6 @@ * @group e2e/logger/basicFeatures */ import path from 'path'; -import { App, Stack } from 'aws-cdk-lib'; import { APIGatewayAuthorizerResult } from 'aws-lambda'; import { v4 } from 'uuid'; import { @@ -15,9 +14,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, @@ -27,7 +26,7 @@ import { XRAY_TRACE_ID_REGEX, } from './constants'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -64,18 +63,16 @@ const ERROR_MSG = 'error'; const ARBITRARY_OBJECT_KEY = 'arbitraryObjectKey'; const ARBITRARY_OBJECT_DATA = 'arbitraryObjectData'; -const integTestApp = new App(); +const testStack = new TestStack(stackName); let logGroupName: string; // We do not know it until deployment -let stack: Stack; describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime}`, () => { let invocationLogs: InvocationLogs[]; beforeAll(async () => { // Create and deploy a stack with AWS CDK - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -99,8 +96,8 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} runtime: runtime, }); - const result = await deployStack(integTestApp, stack); - logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP]; + const result = await testStack.deploy(); + logGroupName = result[STACK_OUTPUT_LOG_GROUP]; // Invoke the function three time (one for cold start, then two for warm start) invocationLogs = await invokeFunction( @@ -378,7 +375,7 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/logger/tests/e2e/childLogger.manual.test.ts b/packages/logger/tests/e2e/childLogger.manual.test.ts index 642d2292df..b3ec427f77 100644 --- a/packages/logger/tests/e2e/childLogger.manual.test.ts +++ b/packages/logger/tests/e2e/childLogger.manual.test.ts @@ -4,7 +4,6 @@ * @group e2e/logger/childLogger */ import path from 'path'; -import { App, Stack } from 'aws-cdk-lib'; import { v4 } from 'uuid'; import { createStackWithLambdaFunction, @@ -14,9 +13,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { RESOURCE_NAME_PREFIX, STACK_OUTPUT_LOG_GROUP, @@ -25,7 +24,7 @@ import { TEARDOWN_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -57,18 +56,16 @@ const PARENT_LOG_MSG = 'parent-only-log-msg'; const CHILD_LOG_MSG = 'child-only-log-msg'; const CHILD_LOG_LEVEL = LEVEL.ERROR; -const integTestApp = new App(); +const testStack = new TestStack(stackName); let logGroupName: string; // We do not know it until deployment -let stack: Stack; describe(`logger E2E tests child logger functionalities (manual) for runtime: ${runtime}`, () => { let invocationLogs: InvocationLogs[]; beforeAll(async () => { // Create and deploy a stack with AWS CDK - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -86,8 +83,9 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, runtime: runtime, }); - const result = await deployStack(integTestApp, stack); - logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP]; + + const result = await testStack.deploy(); + logGroupName = result[STACK_OUTPUT_LOG_GROUP]; // Invoke the function three time (one for cold start, then two for warm start) invocationLogs = await invokeFunction(functionName, invocationCount); @@ -184,7 +182,7 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts index 0894c9c18e..9b4e10a727 100644 --- a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts +++ b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts @@ -4,7 +4,6 @@ * @group e2e/logger/logEventEnvVarSetting */ import path from 'path'; -import { App, Stack } from 'aws-cdk-lib'; import { v4 } from 'uuid'; import { createStackWithLambdaFunction, @@ -14,9 +13,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { RESOURCE_NAME_PREFIX, STACK_OUTPUT_LOG_GROUP, @@ -25,7 +24,7 @@ import { TEARDOWN_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -49,18 +48,16 @@ const lambdaFunctionCodeFile = const invocationCount = 3; -const integTestApp = new App(); +const testStack = new TestStack(stackName); let logGroupName: string; // We do not know it until deployment -let stack: Stack; describe(`logger E2E tests log event via env var setting (middy) for runtime: ${runtime}`, () => { let invocationLogs: InvocationLogs[]; beforeAll(async () => { // Create and deploy a stack with AWS CDK - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -75,8 +72,8 @@ describe(`logger E2E tests log event via env var setting (middy) for runtime: ${ runtime: runtime, }); - const result = await deployStack(integTestApp, stack); - logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP]; + const result = await testStack.deploy(); + logGroupName = result[STACK_OUTPUT_LOG_GROUP]; // Invoke the function three time (one for cold start, then two for warm start) invocationLogs = await invokeFunction( @@ -117,7 +114,7 @@ describe(`logger E2E tests log event via env var setting (middy) for runtime: ${ afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/logger/tests/e2e/sampleRate.decorator.test.ts b/packages/logger/tests/e2e/sampleRate.decorator.test.ts index 354e4c461d..53f6401aee 100644 --- a/packages/logger/tests/e2e/sampleRate.decorator.test.ts +++ b/packages/logger/tests/e2e/sampleRate.decorator.test.ts @@ -4,7 +4,6 @@ * @group e2e/logger/sampleRate */ import path from 'path'; -import { App, Stack } from 'aws-cdk-lib'; import { v4 } from 'uuid'; import { createStackWithLambdaFunction, @@ -14,9 +13,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { RESOURCE_NAME_PREFIX, STACK_OUTPUT_LOG_GROUP, @@ -25,7 +24,7 @@ import { TEARDOWN_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -55,8 +54,7 @@ const LOG_MSG = `Log message ${uuid}`; const SAMPLE_RATE = '0.5'; const LOG_LEVEL = LEVEL.ERROR; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); let logGroupName: string; // We do not know the exact name until deployment describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: nodejs18x`, () => { @@ -64,9 +62,8 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no beforeAll(async () => { // Create and deploy a stack with AWS CDK - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -81,8 +78,9 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, runtime: runtime, }); - const result = await deployStack(integTestApp, stack); - logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP]; + + const result = await testStack.deploy(); + logGroupName = result[STACK_OUTPUT_LOG_GROUP]; invocationLogs = await invokeFunction(functionName, invocationCount); @@ -150,7 +148,7 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 2a9d94c8da..6c75003d8b 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -32,6 +32,7 @@ "main": "./lib/index.js", "types": "./lib/index.d.ts", "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-cloudwatch": "^3.360.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" diff --git a/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts b/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts index 297e81ecc4..e2dbd76c3d 100644 --- a/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts +++ b/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts @@ -5,7 +5,6 @@ */ import path from 'path'; import { Tracing } from 'aws-cdk-lib/aws-lambda'; -import { App, Stack } from 'aws-cdk-lib'; import { CloudWatchClient, GetMetricStatisticsCommand, @@ -18,9 +17,9 @@ import { invokeFunction, } from '../../../commons/tests/utils/e2eUtils'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { MetricUnits } from '../../src'; import { ONE_MINUTE, @@ -31,7 +30,7 @@ import { } from './constants'; import { getMetrics } from '../helpers/metricsUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -70,15 +69,13 @@ const expectedSingleMetricName = 'MySingleMetric'; const expectedSingleMetricUnit = MetricUnits.Percent; const expectedSingleMetricValue = '2'; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { beforeAll(async () => { // GIVEN a stack - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), tracing: Tracing.ACTIVE, @@ -104,7 +101,7 @@ describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { runtime: runtime, }); - await deployStack(integTestApp, stack); + await testStack.deploy(); // and invoked await invokeFunction(functionName, invocationCount, 'SEQUENTIAL'); @@ -233,7 +230,7 @@ describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { }); afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/metrics/tests/e2e/basicFeatures.manual.test.ts b/packages/metrics/tests/e2e/basicFeatures.manual.test.ts index 585c2e9abf..4bde10e7f3 100644 --- a/packages/metrics/tests/e2e/basicFeatures.manual.test.ts +++ b/packages/metrics/tests/e2e/basicFeatures.manual.test.ts @@ -6,7 +6,6 @@ import path from 'path'; import { Tracing } from 'aws-cdk-lib/aws-lambda'; -import { App, Stack } from 'aws-cdk-lib'; import { CloudWatchClient, GetMetricStatisticsCommand, @@ -19,9 +18,9 @@ import { invokeFunction, } from '../../../commons/tests/utils/e2eUtils'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { MetricUnits } from '../../src'; import { ONE_MINUTE, @@ -32,7 +31,7 @@ import { } from './constants'; import { getMetrics } from '../helpers/metricsUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -71,15 +70,13 @@ const expectedSingleMetricName = 'MySingleMetric'; const expectedSingleMetricUnit = MetricUnits.Percent; const expectedSingleMetricValue = '2'; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { beforeAll(async () => { // GIVEN a stack - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), tracing: Tracing.ACTIVE, @@ -104,7 +101,7 @@ describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { }, runtime: runtime, }); - await deployStack(integTestApp, stack); + await testStack.deploy(); // and invoked await invokeFunction(functionName, invocationCount, 'SEQUENTIAL'); @@ -228,7 +225,7 @@ describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/parameters/tests/e2e/appConfigProvider.class.test.ts b/packages/parameters/tests/e2e/appConfigProvider.class.test.ts index 2e75f8cc6b..ec662d8bb4 100644 --- a/packages/parameters/tests/e2e/appConfigProvider.class.test.ts +++ b/packages/parameters/tests/e2e/appConfigProvider.class.test.ts @@ -4,7 +4,7 @@ * @group e2e/parameters/appconfig/class */ import path from 'path'; -import { App, Stack, Aspects } from 'aws-cdk-lib'; +import { Aspects } from 'aws-cdk-lib'; import { toBase64 } from '@aws-sdk/util-base64-node'; import { v4 } from 'uuid'; import { @@ -15,9 +15,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; import { RESOURCE_NAME_PREFIX, @@ -30,7 +30,7 @@ import { createAppConfigConfigurationProfile, } from '../helpers/parametersUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -119,8 +119,7 @@ const featureFlagValue = { }, }; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of AppConfig parameters. @@ -180,9 +179,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = beforeAll(async () => { // Create a stack with a Lambda function - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -202,7 +200,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = // Create the base resources for an AppConfig application. const { application, environment, deploymentStrategy } = createBaseAppConfigResources({ - stack, + stack: testStack.stack, applicationName, environmentName, deploymentStrategyName, @@ -210,7 +208,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = // Create configuration profiles for tests. const freeFormJson = createAppConfigConfigurationProfile({ - stack, + stack: testStack.stack, application, environment, deploymentStrategy, @@ -223,7 +221,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = }); const freeFormYaml = createAppConfigConfigurationProfile({ - stack, + stack: testStack.stack, application, environment, deploymentStrategy, @@ -237,7 +235,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = freeFormYaml.node.addDependency(freeFormJson); const freeFormBase64PlainText = createAppConfigConfigurationProfile({ - stack, + stack: testStack.stack, application, environment, deploymentStrategy, @@ -251,7 +249,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = freeFormBase64PlainText.node.addDependency(freeFormYaml); const featureFlag = createAppConfigConfigurationProfile({ - stack, + stack: testStack.stack, application, environment, deploymentStrategy, @@ -265,7 +263,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = featureFlag.node.addDependency(freeFormBase64PlainText); // Grant access to the Lambda function to the AppConfig resources. - Aspects.of(stack).add( + Aspects.of(testStack.stack).add( new ResourceAccessGranter([ freeFormJson, freeFormYaml, @@ -275,7 +273,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = ); // Deploy the stack - await deployStack(integTestApp, stack); + await testStack.deploy(); // and invoke the Lambda function invocationLogs = await invokeFunction( @@ -388,7 +386,7 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts index a63f225db1..c47a006e30 100644 --- a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts +++ b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts @@ -5,7 +5,7 @@ */ import path from 'path'; import { AttributeType } from 'aws-cdk-lib/aws-dynamodb'; -import { App, Stack, Aspects } from 'aws-cdk-lib'; +import { Aspects } from 'aws-cdk-lib'; import { v4 } from 'uuid'; import { generateUniqueName, @@ -15,9 +15,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; import { RESOURCE_NAME_PREFIX, @@ -30,7 +30,7 @@ import { putDynamoDBItem, } from '../helpers/parametersUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -82,8 +82,7 @@ const keyAttr = 'key'; const sortAttr = 'sort'; const valueAttr = 'val'; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of DynamoDB tables. @@ -166,9 +165,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = beforeAll(async () => { // Create a stack with a Lambda function - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -188,7 +186,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Create the DynamoDB tables const ddbTableGet = createDynamoDBTable({ - stack, + stack: testStack.stack, id: 'Table-get', tableName: tableGet, partitionKey: { @@ -197,7 +195,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); const ddbTableGetMultiple = createDynamoDBTable({ - stack, + stack: testStack.stack, id: 'Table-getMultiple', tableName: tableGetMultiple, partitionKey: { @@ -210,7 +208,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); const ddbTableGetCustomKeys = createDynamoDBTable({ - stack, + stack: testStack.stack, id: 'Table-getCustomKeys', tableName: tableGetCustomkeys, partitionKey: { @@ -219,7 +217,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); const ddbTabelGetMultipleCustomKeys = createDynamoDBTable({ - stack, + stack: testStack.stack, id: 'Table-getMultipleCustomKeys', tableName: tableGetMultipleCustomkeys, partitionKey: { @@ -233,7 +231,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }); // Give the Lambda access to the DynamoDB tables - Aspects.of(stack).add( + Aspects.of(testStack.stack).add( new ResourceAccessGranter([ ddbTableGet, ddbTableGetMultiple, @@ -245,7 +243,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Seed tables with test data // Test 1 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test1', table: ddbTableGet, item: { @@ -256,7 +254,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 2 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test2-a', table: ddbTableGetMultiple, item: { @@ -266,7 +264,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test2-b', table: ddbTableGetMultiple, item: { @@ -278,7 +276,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 3 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test3', table: ddbTableGetCustomKeys, item: { @@ -289,7 +287,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 4 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test4-a', table: ddbTabelGetMultipleCustomKeys, item: { @@ -299,7 +297,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test4-b', table: ddbTabelGetMultipleCustomKeys, item: { @@ -311,7 +309,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 5 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test5', table: ddbTableGet, item: { @@ -322,7 +320,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 6 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test6', table: ddbTableGet, item: { @@ -333,7 +331,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 7 putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test7-a', table: ddbTableGetMultiple, item: { @@ -343,7 +341,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = }, }); putDynamoDBItem({ - stack, + stack: testStack.stack, id: 'my-param-test7-b', table: ddbTableGetMultiple, item: { @@ -356,7 +354,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 8 & 9 use the same items as Test 1 // Deploy the stack - await deployStack(integTestApp, stack); + await testStack.deploy(); // and invoke the Lambda function invocationLogs = await invokeFunction( @@ -488,7 +486,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/parameters/tests/e2e/secretsProvider.class.test.ts b/packages/parameters/tests/e2e/secretsProvider.class.test.ts index d656b4a3c3..d43dd768e5 100644 --- a/packages/parameters/tests/e2e/secretsProvider.class.test.ts +++ b/packages/parameters/tests/e2e/secretsProvider.class.test.ts @@ -18,16 +18,16 @@ import { import { v4 } from 'uuid'; import { Tracing } from 'aws-cdk-lib/aws-lambda'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; -import { App, Aspects, SecretValue, Stack } from 'aws-cdk-lib'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; +import { Aspects, SecretValue } from 'aws-cdk-lib'; import path from 'path'; import { Secret } from 'aws-cdk-lib/aws-secretsmanager'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key: ${runtime}`); @@ -68,8 +68,7 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => const invocationCount = 1; - const integTestApp = new App(); - let stack: Stack; + const testStack = new TestStack(stackName); beforeAll(async () => { // use unique names for each test to keep a clean state @@ -106,9 +105,8 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => // creates the test fuction that uses Powertools for AWS Lambda (TypeScript) secret provider we want to test // pass env vars with secret names we want to fetch - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName: stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName: functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), tracing: Tracing.ACTIVE, @@ -123,30 +121,34 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => runtime: runtime, }); - const secretString = new Secret(stack, 'testSecretPlain', { + const secretString = new Secret(testStack.stack, 'testSecretPlain', { secretName: secretNamePlain, secretStringValue: SecretValue.unsafePlainText('foo'), }); - const secretObject = new Secret(stack, 'testSecretObject', { + const secretObject = new Secret(testStack.stack, 'testSecretObject', { secretName: secretNameObject, secretObjectValue: { foo: SecretValue.unsafePlainText('bar'), }, }); - const secretBinary = new Secret(stack, 'testSecretBinary', { + const secretBinary = new Secret(testStack.stack, 'testSecretBinary', { secretName: secretNameBinary, secretStringValue: SecretValue.unsafePlainText('Zm9v'), // 'foo' encoded in base64 }); - const secretStringCached = new Secret(stack, 'testSecretStringCached', { - secretName: secretNamePlainCached, - secretStringValue: SecretValue.unsafePlainText('foo'), - }); + const secretStringCached = new Secret( + testStack.stack, + 'testSecretStringCached', + { + secretName: secretNamePlainCached, + secretStringValue: SecretValue.unsafePlainText('foo'), + } + ); const secretStringForceFetch = new Secret( - stack, + testStack.stack, 'testSecretStringForceFetch', { secretName: secretNamePlainForceFetch, @@ -155,7 +157,7 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => ); // add secrets here to grant lambda permisisons to access secrets - Aspects.of(stack).add( + Aspects.of(testStack.stack).add( new ResourceAccessGranter([ secretString, secretObject, @@ -165,7 +167,7 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => ]) ); - await deployStack(integTestApp, stack); + await testStack.deploy(); invocationLogs = await invokeFunction( functionName, @@ -242,7 +244,7 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/parameters/tests/e2e/ssmProvider.class.test.ts b/packages/parameters/tests/e2e/ssmProvider.class.test.ts index e71f123703..a685a988f5 100644 --- a/packages/parameters/tests/e2e/ssmProvider.class.test.ts +++ b/packages/parameters/tests/e2e/ssmProvider.class.test.ts @@ -4,7 +4,7 @@ * @group e2e/parameters/ssm/class */ import path from 'path'; -import { App, Stack, Aspects } from 'aws-cdk-lib'; +import { Aspects } from 'aws-cdk-lib'; import { StringParameter } from 'aws-cdk-lib/aws-ssm'; import { v4 } from 'uuid'; import { @@ -15,9 +15,9 @@ import { } from '../../../commons/tests/utils/e2eUtils'; import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; import { RESOURCE_NAME_PREFIX, @@ -27,7 +27,7 @@ import { } from './constants'; import { createSSMSecureString } from '../helpers/parametersUtils'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -82,8 +82,7 @@ const paramBValue = 'bar'; const paramEncryptedAValue = 'foo-encrypted'; const paramEncryptedBValue = 'bar-encrypted'; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of SSM parameters. @@ -139,9 +138,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { beforeAll(async () => { // Create a stack with a Lambda function - stack = createStackWithLambdaFunction({ - app: integTestApp, - stackName, + createStackWithLambdaFunction({ + stack: testStack.stack, functionName, functionEntry: path.join(__dirname, lambdaFunctionCodeFile), environment: { @@ -157,31 +155,31 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { }); // Create SSM parameters - const parameterGetA = new StringParameter(stack, 'Param-a', { + const parameterGetA = new StringParameter(testStack.stack, 'Param-a', { parameterName: paramA, stringValue: paramAValue, }); - const parameterGetB = new StringParameter(stack, 'Param-b', { + const parameterGetB = new StringParameter(testStack.stack, 'Param-b', { parameterName: paramB, stringValue: paramBValue, }); const parameterEncryptedA = createSSMSecureString({ - stack, + stack: testStack.stack, id: 'Param-encrypted-a', name: paramEncryptedA, value: paramEncryptedAValue, }); const parameterEncryptedB = createSSMSecureString({ - stack, + stack: testStack.stack, id: 'Param-encrypted-b', name: paramEncryptedB, value: paramEncryptedBValue, }); // Give the Lambda function access to the SSM parameters - Aspects.of(stack).add( + Aspects.of(testStack.stack).add( new ResourceAccessGranter([ parameterGetA, parameterGetB, @@ -191,7 +189,7 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { ); // Deploy the stack - await deployStack(integTestApp, stack); + await testStack.deploy(); // and invoke the Lambda function invocationLogs = await invokeFunction( @@ -377,7 +375,7 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); }); diff --git a/packages/testing/jest.config.js b/packages/testing/jest.config.js new file mode 100644 index 0000000000..6d6c2fecf2 --- /dev/null +++ b/packages/testing/jest.config.js @@ -0,0 +1,28 @@ +module.exports = { + displayName: { + name: 'Powertools for AWS Lambda (TypeScript) utility: TESTING', + color: 'blue', + }, + runner: 'groups', + preset: 'ts-jest', + transform: { + '^.+\\.ts?$': 'ts-jest', + }, + moduleFileExtensions: ['js', 'ts'], + collectCoverageFrom: ['**/src/**/*.ts', '!**/node_modules/**'], + testMatch: ['**/?(*.)+(spec|test).ts'], + roots: ['/src', '/tests'], + testPathIgnorePatterns: ['/node_modules/'], + testEnvironment: 'node', + coveragePathIgnorePatterns: ['/node_modules/', '/types/'], + coverageThreshold: { + global: { + statements: 100, + branches: 100, + functions: 100, + lines: 100, + }, + }, + coverageReporters: ['json-summary', 'text', 'lcov'], + setupFiles: ['/tests/helpers/populateEnvironmentVariables.ts'], +}; diff --git a/packages/testing/package.json b/packages/testing/package.json new file mode 100644 index 0000000000..375374f9ef --- /dev/null +++ b/packages/testing/package.json @@ -0,0 +1,50 @@ +{ + "name": "@aws-lambda-powertools/testing-utils", + "version": "1.12.1", + "description": "A package containing utilities to test your serverless workloads", + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com" + }, + "private": true, + "scripts": { + "test": "npm run test:unit", + "test:unit": "jest --group=unit --detectOpenHandles --coverage --verbose", + "test:e2e": "echo 'Not implemented'", + "watch": "jest --watch", + "build": "tsc", + "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", + "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", + "prebuild": "rimraf ./lib", + "prepack": "node ../../.github/scripts/release_patch_package_json.js ." + }, + "lint-staged": { + "*.{js,ts}": "npm run lint-fix" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aws-powertools/powertools-lambda-typescript.git" + }, + "files": [ + "lib" + ], + "main": "./lib/index.js", + "types": "./lib/index.d.ts", + "keywords": [ + "aws", + "lambda", + "powertools", + "testing", + "serverless" + ], + "license": "MIT-0", + "bugs": { + "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" + }, + "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", + "dependencies": { + "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", + "aws-cdk-lib": "^2.88.0", + "esbuild": "^0.18.17" + } +} diff --git a/packages/testing/src/TestStack.ts b/packages/testing/src/TestStack.ts new file mode 100644 index 0000000000..8c84e86fb8 --- /dev/null +++ b/packages/testing/src/TestStack.ts @@ -0,0 +1,83 @@ +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { readFile } from 'node:fs/promises'; +import { App, Stack } from 'aws-cdk-lib'; +import { AwsCdkCli, RequireApproval } from '@aws-cdk/cli-lib-alpha'; +import type { ICloudAssemblyDirectoryProducer } from '@aws-cdk/cli-lib-alpha'; + +/** + * Test stack that can be deployed to the selected environment. + */ +class TestStack implements ICloudAssemblyDirectoryProducer { + /** + * Reference to the AWS CDK App object. + * @default new App() + */ + public app: App; + /** + * Reference to the AWS CDK Stack object. + * @default new Stack(this.app, stackName) + */ + public stack: Stack; + /** + * @internal + * Reference to the AWS CDK CLI object. + */ + #cli: AwsCdkCli; + + public constructor(stackName: string, app?: App, stack?: Stack) { + this.app = app ?? new App(); + this.stack = stack ?? new Stack(this.app, stackName); + this.#cli = AwsCdkCli.fromCloudAssemblyDirectoryProducer(this); + } + + /** + * Deploy the test stack to the selected environment. + * + * It returns the outputs of the deployed stack. + */ + public async deploy(): Promise> { + const outputFilePath = join( + tmpdir(), + 'powertools-e2e-testing', + `${this.stack.stackName}.outputs.json` + ); + await this.#cli.deploy({ + stacks: [this.stack.stackName], + requireApproval: RequireApproval.NEVER, + outputsFile: outputFilePath, + }); + + return JSON.parse(await readFile(outputFilePath, 'utf-8'))[ + this.stack.stackName + ]; + } + + /** + * Destroy the test stack. + */ + public async destroy(): Promise { + await this.#cli.destroy({ + stacks: [this.stack.stackName], + requireApproval: false, + }); + } + + /** + * Produce the Cloud Assembly directory. + */ + public async produce(_context: Record): Promise { + return this.app.synth().directory; + } + + /** + * Synthesize the test stack. + */ + public async synth(): Promise { + await this.#cli.synth({ + stacks: [this.stack.stackName], + }); + } +} + +export { TestStack }; diff --git a/packages/testing/src/constants.ts b/packages/testing/src/constants.ts new file mode 100644 index 0000000000..85d66e625a --- /dev/null +++ b/packages/testing/src/constants.ts @@ -0,0 +1,17 @@ +import { Runtime } from 'aws-cdk-lib/aws-lambda'; + +/** + * The default AWS Lambda runtime to use when none is provided. + */ +const defaultRuntime = 'nodejs18x'; + +/** + * The AWS Lambda runtimes that are supported by the project. + */ +const TEST_RUNTIMES = { + nodejs14x: Runtime.NODEJS_14_X, + nodejs16x: Runtime.NODEJS_16_X, + [defaultRuntime]: Runtime.NODEJS_18_X, +} as const; + +export { TEST_RUNTIMES, defaultRuntime }; diff --git a/packages/testing/src/index.ts b/packages/testing/src/index.ts new file mode 100644 index 0000000000..6ba0fd1d5a --- /dev/null +++ b/packages/testing/src/index.ts @@ -0,0 +1,2 @@ +export * from './TestStack'; +export * from './constants'; diff --git a/packages/testing/tests/helpers/populateEnvironmentVariables.ts b/packages/testing/tests/helpers/populateEnvironmentVariables.ts new file mode 100644 index 0000000000..4d4166743d --- /dev/null +++ b/packages/testing/tests/helpers/populateEnvironmentVariables.ts @@ -0,0 +1,16 @@ +// Reserved variables +process.env._X_AMZN_TRACE_ID = '1-abcdef12-3456abcdef123456abcdef12'; +process.env.AWS_LAMBDA_FUNCTION_NAME = 'my-lambda-function'; +process.env.AWS_EXECUTION_ENV = 'nodejs16.x'; +process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE = '128'; +if ( + process.env.AWS_REGION === undefined && + process.env.CDK_DEFAULT_REGION === undefined +) { + process.env.AWS_REGION = 'eu-west-1'; +} +process.env._HANDLER = 'index.handler'; + +// Powertools for AWS Lambda (TypeScript) variables +process.env.POWERTOOLS_SERVICE_NAME = 'hello-world'; +process.env.AWS_XRAY_LOGGING_LEVEL = 'silent'; diff --git a/packages/testing/tsconfig.es.json b/packages/testing/tsconfig.es.json new file mode 100644 index 0000000000..802f18e8f9 --- /dev/null +++ b/packages/testing/tsconfig.es.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "noImplicitAny": true, + "target": "ES2020", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "outDir": "lib", + "removeComments": false, + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "pretty": true, + "baseUrl": "src/", + "rootDirs": [ "src/" ] + }, + "include": [ "src/**/*", "tests/**/*" ], + "exclude": [ "./node_modules"], + "watchOptions": { + "watchFile": "useFsEvents", + "watchDirectory": "useFsEvents", + "fallbackPolling": "dynamicPriority" + }, + "lib": [ "es2020" ], + "types": [ + "jest", + "node" + ] +} \ No newline at end of file diff --git a/packages/testing/tsconfig.json b/packages/testing/tsconfig.json new file mode 100644 index 0000000000..8b93f8c299 --- /dev/null +++ b/packages/testing/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "noImplicitAny": true, + "target": "ES2020", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "outDir": "lib", + "removeComments": false, + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "pretty": true, + "baseUrl": "src/", + "rootDirs": [ "src/" ], + "esModuleInterop": true + }, + "include": [ "src/**/*" ], + "exclude": [ "./node_modules"], + "watchOptions": { + "watchFile": "useFsEvents", + "watchDirectory": "useFsEvents", + "fallbackPolling": "dynamicPriority" + }, + "lib": [ "es2020" ], + "types": [ + "jest", + "node" + ] +} \ No newline at end of file diff --git a/packages/tracer/package.json b/packages/tracer/package.json index a5a6f034ee..364eba31df 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -32,6 +32,7 @@ "main": "./lib/index.js", "types": "./lib/index.d.ts", "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", "@aws-sdk/client-sts": "^3.360.0", "@aws-sdk/client-xray": "^3.360.0", diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts index 43594d7791..a6f9c0911d 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts @@ -3,17 +3,16 @@ * * @group e2e/tracer/decorator */ - import path from 'path'; +import { + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { App, RemovalPolicy, Stack } from 'aws-cdk-lib'; +import { RemovalPolicy } from 'aws-cdk-lib'; import { XRayClient } from '@aws-sdk/client-xray'; import { STSClient } from '@aws-sdk/client-sts'; import { v4 } from 'uuid'; -import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; import { createTracerTestFunction, getFirstSubsegment, @@ -44,7 +43,7 @@ import { assertErrorAndFault, } from '../helpers/traceAssertions'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -120,17 +119,15 @@ const xrayClient = new XRayClient({}); const stsClient = new STSClient({}); const invocations = 3; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`Tracer E2E tests, all features with decorator instantiation for runtime: ${runtime}`, () => { beforeAll(async () => { // Prepare startTime = new Date(); const ddbTableName = stackName + '-table'; - stack = new Stack(integTestApp, stackName); - const ddbTable = new Table(stack, 'Table', { + const ddbTable = new Table(testStack.stack, 'Table', { tableName: ddbTableName, partitionKey: { name: 'id', @@ -142,7 +139,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim const entry = path.join(__dirname, lambdaFunctionCodeFile); const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithAllFlagsEnabled, entry, expectedServiceName: serviceNameWithAllFlagsEnabled, @@ -158,7 +155,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim const functionThatDoesNotCapturesErrorAndResponse = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithNoCaptureErrorOrResponse, entry, expectedServiceName: serviceNameWithNoCaptureErrorOrResponse, @@ -173,7 +170,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim ddbTable.grantWriteData(functionThatDoesNotCapturesErrorAndResponse); const functionWithTracerDisabled = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithTracerDisabled, entry, expectedServiceName: serviceNameWithTracerDisabled, @@ -188,7 +185,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim ddbTable.grantWriteData(functionWithTracerDisabled); const functionWithCaptureResponseFalse = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithCaptureResponseFalse, handler: 'handlerWithCaptureResponseFalse', entry, @@ -203,7 +200,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim }); ddbTable.grantWriteData(functionWithCaptureResponseFalse); - await deployStack(integTestApp, stack); + await testStack.deploy(); // Act await Promise.all([ @@ -216,7 +213,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); diff --git a/packages/tracer/tests/e2e/allFeatures.manual.test.ts b/packages/tracer/tests/e2e/allFeatures.manual.test.ts index dbbebc34ea..9d8cbb7bed 100644 --- a/packages/tracer/tests/e2e/allFeatures.manual.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.manual.test.ts @@ -3,17 +3,16 @@ * * @group e2e/tracer/manual */ - import path from 'path'; import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { App, RemovalPolicy, Stack } from 'aws-cdk-lib'; +import { RemovalPolicy } from 'aws-cdk-lib'; import { XRayClient } from '@aws-sdk/client-xray'; import { STSClient } from '@aws-sdk/client-sts'; import { v4 } from 'uuid'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { createTracerTestFunction, getFirstSubsegment, @@ -45,7 +44,7 @@ import { assertErrorAndFault, } from '../helpers/traceAssertions'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -72,15 +71,13 @@ const stsClient = new STSClient({}); const invocations = 3; let sortedTraces: ParsedTrace[]; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`Tracer E2E tests, all features with manual instantiation for runtime: ${runtime}`, () => { beforeAll(async () => { // Prepare const startTime = new Date(); const ddbTableName = stackName + '-table'; - stack = new Stack(integTestApp, stackName); const entry = path.join(__dirname, lambdaFunctionCodeFile); const environmentParams = { @@ -90,7 +87,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: POWERTOOLS_TRACE_ENABLED: 'true', }; const testFunction = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName, entry, expectedServiceName, @@ -98,7 +95,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: runtime, }); - const ddbTable = new Table(stack, 'Table', { + const ddbTable = new Table(testStack.stack, 'Table', { tableName: ddbTableName, partitionKey: { name: 'id', @@ -110,7 +107,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: ddbTable.grantWriteData(testFunction); - await deployStack(integTestApp, stack); + await testStack.deploy(); // Act await invokeAllTestCases(functionName); @@ -128,7 +125,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.ts index 69b612b604..7066a549db 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.ts @@ -6,14 +6,14 @@ import path from 'path'; import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { App, RemovalPolicy, Stack } from 'aws-cdk-lib'; +import { RemovalPolicy } from 'aws-cdk-lib'; import { XRayClient } from '@aws-sdk/client-xray'; import { STSClient } from '@aws-sdk/client-sts'; import { v4 } from 'uuid'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { createTracerTestFunction, getFirstSubsegment, @@ -44,7 +44,7 @@ import { assertErrorAndFault, } from '../helpers/traceAssertions'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -120,17 +120,15 @@ const xrayClient = new XRayClient({}); const stsClient = new STSClient({}); const invocations = 3; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`Tracer E2E tests, all features with middy instantiation for runtime: ${runtime}`, () => { beforeAll(async () => { // Prepare startTime = new Date(); const ddbTableName = stackName + '-table'; - stack = new Stack(integTestApp, stackName); - const ddbTable = new Table(stack, 'Table', { + const ddbTable = new Table(testStack.stack, 'Table', { tableName: ddbTableName, partitionKey: { name: 'id', @@ -142,7 +140,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const entry = path.join(__dirname, lambdaFunctionCodeFile); const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithAllFlagsEnabled, entry, expectedServiceName: serviceNameWithAllFlagsEnabled, @@ -158,7 +156,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const functionThatDoesNotCapturesErrorAndResponse = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithNoCaptureErrorOrResponse, entry, expectedServiceName: serviceNameWithNoCaptureErrorOrResponse, @@ -173,7 +171,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ ddbTable.grantWriteData(functionThatDoesNotCapturesErrorAndResponse); const functionWithTracerDisabled = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithTracerDisabled, entry, expectedServiceName: serviceNameWithTracerDisabled, @@ -189,7 +187,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const functionThatDoesNotCaptureResponseViaMiddlewareOption = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithNoCaptureResponseViaMiddlewareOption, entry, handler: 'handlerWithNoCaptureResponseViaMiddlewareOption', @@ -207,7 +205,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ functionThatDoesNotCaptureResponseViaMiddlewareOption ); - await deployStack(integTestApp, stack); + await testStack.deploy(); // Act await Promise.all([ @@ -220,7 +218,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); diff --git a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts index 13693dfbdd..8d460ee0f1 100644 --- a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts +++ b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts @@ -6,14 +6,14 @@ import path from 'path'; import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { App, RemovalPolicy, Stack } from 'aws-cdk-lib'; +import { RemovalPolicy } from 'aws-cdk-lib'; import { XRayClient } from '@aws-sdk/client-xray'; import { STSClient } from '@aws-sdk/client-sts'; import { v4 } from 'uuid'; import { - deployStack, - destroyStack, -} from '../../../commons/tests/utils/cdk-cli'; + TestStack, + defaultRuntime, +} from '@aws-lambda-powertools/testing-utils'; import { createTracerTestFunction, getFirstSubsegment, @@ -45,7 +45,7 @@ import { assertErrorAndFault, } from '../helpers/traceAssertions'; -const runtime: string = process.env.RUNTIME || 'nodejs18x'; +const runtime: string = process.env.RUNTIME || defaultRuntime; if (!isValidRuntimeKey(runtime)) { throw new Error(`Invalid runtime key value: ${runtime}`); @@ -89,17 +89,15 @@ const xrayClient = new XRayClient({}); const stsClient = new STSClient({}); const invocations = 3; -const integTestApp = new App(); -let stack: Stack; +const testStack = new TestStack(stackName); describe(`Tracer E2E tests, asynchronous handler with decorator instantiation for runtime: ${runtime}`, () => { beforeAll(async () => { // Prepare startTime = new Date(); const ddbTableName = stackName + '-table'; - stack = new Stack(integTestApp, stackName); - const ddbTable = new Table(stack, 'Table', { + const ddbTable = new Table(testStack.stack, 'Table', { tableName: ddbTableName, partitionKey: { name: 'id', @@ -111,7 +109,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo const entry = path.join(__dirname, lambdaFunctionCodeFile); const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithAllFlagsEnabled, entry, expectedServiceName: serviceNameWithAllFlagsEnabled, @@ -126,7 +124,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo ddbTable.grantWriteData(functionWithAllFlagsEnabled); const functionWithCustomSubsegmentNameInMethod = createTracerTestFunction({ - stack, + stack: testStack.stack, functionName: functionNameWithCustomSubsegmentNameInMethod, handler: 'handlerWithCustomSubsegmentNameInMethod', entry, @@ -142,7 +140,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo }); ddbTable.grantWriteData(functionWithCustomSubsegmentNameInMethod); - await deployStack(integTestApp, stack); + await testStack.deploy(); // Act await Promise.all([ @@ -153,7 +151,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { - await destroyStack(integTestApp, stack); + await testStack.destroy(); } }, TEARDOWN_TIMEOUT); From 6fa09b2638bf247fd595db51ac3d1aa1252d3379 Mon Sep 17 00:00:00 2001 From: Erika Yao <71943596+erikayao93@users.noreply.github.com> Date: Sat, 29 Jul 2023 07:09:21 -0500 Subject: [PATCH 04/28] fix(batch): Update processor to pass only context to handler (#1637) * Update process to pass only context to handler * Update packages/batch/tests/helpers/handlers.ts --------- Co-authored-by: Andrea Amorosi --- packages/batch/src/AsyncBatchProcessor.ts | 2 +- packages/batch/src/BatchProcessor.ts | 2 +- packages/batch/tests/helpers/handlers.ts | 13 +++---------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/batch/src/AsyncBatchProcessor.ts b/packages/batch/src/AsyncBatchProcessor.ts index 781c7f1c79..f4e02a327e 100644 --- a/packages/batch/src/AsyncBatchProcessor.ts +++ b/packages/batch/src/AsyncBatchProcessor.ts @@ -10,7 +10,7 @@ class AsyncBatchProcessor extends BasePartialBatchProcessor { ): Promise { try { const data = this.toBatchType(record, this.eventType); - const result = await this.handler(data, this.options); + const result = await this.handler(data, this.options?.context); return this.successHandler(record, result); } catch (error) { diff --git a/packages/batch/src/BatchProcessor.ts b/packages/batch/src/BatchProcessor.ts index 3d2a75a8da..fdab0c6f44 100644 --- a/packages/batch/src/BatchProcessor.ts +++ b/packages/batch/src/BatchProcessor.ts @@ -19,7 +19,7 @@ class BatchProcessor extends BasePartialBatchProcessor { public processRecord(record: BaseRecord): SuccessResponse | FailureResponse { try { const data = this.toBatchType(record, this.eventType); - const result = this.handler(data, this.options); + const result = this.handler(data, this.options?.context); return this.successHandler(record, result); } catch (error) { diff --git a/packages/batch/tests/helpers/handlers.ts b/packages/batch/tests/helpers/handlers.ts index 3a6d17b76a..0256129f9b 100644 --- a/packages/batch/tests/helpers/handlers.ts +++ b/packages/batch/tests/helpers/handlers.ts @@ -3,7 +3,7 @@ import type { KinesisStreamRecord, SQSRecord, } from 'aws-lambda'; -import type { BatchProcessingOptions } from '../../src/types'; +import type { Context } from 'aws-lambda'; const sqsRecordHandler = (record: SQSRecord): string => { const body = record.body; @@ -63,12 +63,7 @@ const asyncDynamodbRecordHandler = async ( return body; }; -const handlerWithContext = ( - record: SQSRecord, - options: BatchProcessingOptions -): string => { - const context = options.context; - +const handlerWithContext = (record: SQSRecord, context: Context): string => { try { if (context.getRemainingTimeInMillis() == 0) { throw Error('No time remaining.'); @@ -82,10 +77,8 @@ const handlerWithContext = ( const asyncHandlerWithContext = async ( record: SQSRecord, - options: BatchProcessingOptions + context: Context ): Promise => { - const context = options.context; - try { if (context.getRemainingTimeInMillis() == 0) { throw Error('No time remaining.'); From ca40c46a2a2efa12e4cc74046990adf8b3e91d10 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Sat, 29 Jul 2023 14:31:29 +0200 Subject: [PATCH 05/28] chore(ci): fix post release workflow (#1638) --- .github/workflows/post-release.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml index 7d08af4771..8bcceb4573 100644 --- a/.github/workflows/post-release.yml +++ b/.github/workflows/post-release.yml @@ -24,6 +24,15 @@ jobs: RELEASE_VERSION: ${{ inputs.versionNumber }} steps: - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - name: Get release version + run: | + # The code below does the following: + # 1. If the workflow was triggered manually, it will use the version number provided by the user + # 2. If the workflow was triggered by a release, it will use the version number of the release + if [ -z "$RELEASE_VERSION" ]; then + export RELEASE_VERSION=$(git describe --tags --abbrev=0) + fi + echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV - name: Update issues related to release uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: From 24b0ca1a70e2c7a7c63019fabfa79c638f664ba2 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 31 Jul 2023 20:21:26 +0200 Subject: [PATCH 06/28] docs(batch): added flow charts (#1640) --- .../snippets/batch/accessProcessedMessages.ts | 7 +- docs/snippets/batch/customPartialProcessor.ts | 8 +- .../batch/gettingStartedDynamoDBStreams.ts | 2 +- .../batch/gettingStartedErrorHandling.ts | 43 ++++ docs/snippets/batch/gettingStartedKinesis.ts | 2 +- docs/snippets/batch/gettingStartedSQS.ts | 8 +- docs/snippets/batch/gettingStartedSQSFifo.ts | 2 +- docs/utilities/batch.md | 236 +++++++++++++++++- 8 files changed, 281 insertions(+), 27 deletions(-) create mode 100644 docs/snippets/batch/gettingStartedErrorHandling.ts diff --git a/docs/snippets/batch/accessProcessedMessages.ts b/docs/snippets/batch/accessProcessedMessages.ts index 6dbd338c7b..fe5d727ea0 100644 --- a/docs/snippets/batch/accessProcessedMessages.ts +++ b/docs/snippets/batch/accessProcessedMessages.ts @@ -22,16 +22,17 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise => { - const batch = event.Records; + const batch = event.Records; // (1)! - processor.register(batch, recordHandler, { context }); + processor.register(batch, recordHandler, { context }); // (2)! const processedMessages = processor.process(); for (const message of processedMessages) { const status: 'success' | 'fail' = message[0]; + const error = message[1]; const record = message[2]; - logger.info('Processed record', { status, record }); + logger.info('Processed record', { status, record, error }); } return processor.response(); diff --git a/docs/snippets/batch/customPartialProcessor.ts b/docs/snippets/batch/customPartialProcessor.ts index d44b99a602..9a45c92f01 100644 --- a/docs/snippets/batch/customPartialProcessor.ts +++ b/docs/snippets/batch/customPartialProcessor.ts @@ -11,7 +11,7 @@ import { import type { SuccessResponse, FailureResponse, - EventSourceType, + BaseRecord, } from '@aws-lambda-powertools/batch'; import type { SQSEvent, Context, SQSBatchResponse } from 'aws-lambda'; @@ -27,7 +27,7 @@ class MyPartialProcessor extends BasePartialProcessor { } public async asyncProcessRecord( - _record: EventSourceType + _record: BaseRecord ): Promise { throw new Error('Not implemented'); } @@ -69,9 +69,7 @@ class MyPartialProcessor extends BasePartialProcessor { * Here we are keeping the status of each run, `this.handler` is * the function that is passed when calling `processor.register()`. */ - public processRecord( - record: EventSourceType - ): SuccessResponse | FailureResponse { + public processRecord(record: BaseRecord): SuccessResponse | FailureResponse { try { const result = this.handler(record); diff --git a/docs/snippets/batch/gettingStartedDynamoDBStreams.ts b/docs/snippets/batch/gettingStartedDynamoDBStreams.ts index 4d1842bcec..3304d31b95 100644 --- a/docs/snippets/batch/gettingStartedDynamoDBStreams.ts +++ b/docs/snippets/batch/gettingStartedDynamoDBStreams.ts @@ -11,7 +11,7 @@ import type { DynamoDBBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.DynamoDBStreams); +const processor = new BatchProcessor(EventType.DynamoDBStreams); // (1)! const logger = new Logger(); const recordHandler = (record: DynamoDBRecord): void => { diff --git a/docs/snippets/batch/gettingStartedErrorHandling.ts b/docs/snippets/batch/gettingStartedErrorHandling.ts new file mode 100644 index 0000000000..08efa51732 --- /dev/null +++ b/docs/snippets/batch/gettingStartedErrorHandling.ts @@ -0,0 +1,43 @@ +import { + BatchProcessor, + EventType, + processPartialResponse, +} from '@aws-lambda-powertools/batch'; +import { Logger } from '@aws-lambda-powertools/logger'; +import type { + SQSEvent, + SQSRecord, + Context, + SQSBatchResponse, +} from 'aws-lambda'; + +const processor = new BatchProcessor(EventType.SQS); +const logger = new Logger(); + +class InvalidPayload extends Error { + public constructor(message: string) { + super(message); + this.name = 'InvalidPayload'; + } +} + +const recordHandler = (record: SQSRecord): void => { + const payload = record.body; + if (payload) { + const item = JSON.parse(payload); + logger.info('Processed item', { item }); + } else { + // prettier-ignore + throw new InvalidPayload('Payload does not contain minumum required fields'); // (1)! + } +}; + +export const handler = async ( + event: SQSEvent, + context: Context +): Promise => { + // prettier-ignore + return processPartialResponse(event, recordHandler, processor, { // (2)! + context, + }); +}; diff --git a/docs/snippets/batch/gettingStartedKinesis.ts b/docs/snippets/batch/gettingStartedKinesis.ts index eb1c8a8810..2def6b2e55 100644 --- a/docs/snippets/batch/gettingStartedKinesis.ts +++ b/docs/snippets/batch/gettingStartedKinesis.ts @@ -11,7 +11,7 @@ import type { KinesisStreamBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.KinesisDataStreams); +const processor = new BatchProcessor(EventType.KinesisDataStreams); // (1)! const logger = new Logger(); const recordHandler = (record: KinesisStreamRecord): void => { diff --git a/docs/snippets/batch/gettingStartedSQS.ts b/docs/snippets/batch/gettingStartedSQS.ts index 3ee6a3fa56..9878b865e9 100644 --- a/docs/snippets/batch/gettingStartedSQS.ts +++ b/docs/snippets/batch/gettingStartedSQS.ts @@ -11,10 +11,11 @@ import type { SQSBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.SQS); +const processor = new BatchProcessor(EventType.SQS); // (1)! const logger = new Logger(); -const recordHandler = (record: SQSRecord): void => { +// prettier-ignore +const recordHandler = (record: SQSRecord): void => { // (2)! const payload = record.body; if (payload) { const item = JSON.parse(payload); @@ -26,7 +27,8 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise => { - return processPartialResponse(event, recordHandler, processor, { + // prettier-ignore + return processPartialResponse(event, recordHandler, processor, { // (3)! context, }); }; diff --git a/docs/snippets/batch/gettingStartedSQSFifo.ts b/docs/snippets/batch/gettingStartedSQSFifo.ts index 34ff76e705..5c63c1e0d7 100644 --- a/docs/snippets/batch/gettingStartedSQSFifo.ts +++ b/docs/snippets/batch/gettingStartedSQSFifo.ts @@ -10,7 +10,7 @@ import type { SQSBatchResponse, } from 'aws-lambda'; -const processor = new SqsFifoPartialProcessor(); +const processor = new SqsFifoPartialProcessor(); // (1)! const logger = new Logger(); const recordHandler = (record: SQSRecord): void => { diff --git a/docs/utilities/batch.md b/docs/utilities/batch.md index 6c8c96d004..6b02a2f538 100644 --- a/docs/utilities/batch.md +++ b/docs/utilities/batch.md @@ -3,14 +3,35 @@ title: Batch Processing description: Utility --- - - ???+ warning - **This page refers to an unreleased utility that has yet to be published on the npm registry. Any version of the package built from source, as well as all future versions tagged with the `-alpha` suffix should be treated as experimental. Follow the [Beta release](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/13) milestone for updates on the progress of this utility.** + **This utility is currently released as beta developer preview** and is intended strictly for feedback and testing purposes **and not for production workloads**. The version and all future versions tagged with the `-beta` suffix should be treated as not stable. Up until before the [General Availability release](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/14) we might introduce significant breaking changes and improvements in response to customers feedback. The batch processing utility handles partial failures when processing batches from Amazon SQS, Amazon Kinesis Data Streams, and Amazon DynamoDB Streams. +```mermaid +stateDiagram-v2 + direction LR + BatchSource: Amazon SQS

Amazon Kinesis Data Streams

Amazon DynamoDB Streams

+ LambdaInit: Lambda invocation + BatchProcessor: Batch Processor + RecordHandler: Record Handler function + YourLogic: Your logic to process each batch item + LambdaResponse: Lambda response + + BatchSource --> LambdaInit + + LambdaInit --> BatchProcessor + BatchProcessor --> RecordHandler + + state BatchProcessor { + [*] --> RecordHandler: Your function + RecordHandler --> YourLogic + } + + RecordHandler --> BatchProcessor: Collect results + BatchProcessor --> LambdaResponse: Report items that failed processing +``` + ## Key features * Reports batch item failures to reduce number of retries for a record upon errors @@ -23,10 +44,19 @@ When using SQS, Kinesis Data Streams, or DynamoDB Streams as a Lambda event sour If your function fails to process any message from the batch, the entire batch returns to your queue or stream. This same batch is then retried until either condition happens first: **a)** your Lambda function returns a successful response, **b)** record reaches maximum retry attempts, or **c)** when records expire. -With this utility, batch records are processed individually – only messages that failed to be processed return to the queue or stream for a further retry. This works when two mechanisms are in place: +```mermaid +journey + section Conditions + Successful response: 5: Success + Maximum retries: 3: Failure + Records expired: 1: Failure +``` + +This behavior changes when you enable Report Batch Item Failures feature in your Lambda function event source configuration: -1. `ReportBatchItemFailures` is set in your SQS, Kinesis, or DynamoDB event source properties -2. [A specific response](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting){target="_blank"} is returned so Lambda knows which records should not be deleted during partial responses + +* [**SQS queues**](#sqs-standard). Only messages reported as failure will return to the queue for a retry, while successful ones will be deleted. +* [**Kinesis data streams**](#kinesis-and-dynamodb-streams) and [**DynamoDB streams**](#kinesis-and-dynamodb-streams). Single reported failure will use its sequence number as the stream checkpoint. Multiple reported failures will use the lowest sequence number as checkpoint. @@ -37,14 +67,16 @@ With this utility, batch records are processed individually – only messages th ## Getting started -Regardless whether you're using SQS, Kinesis Data Streams or DynamoDB Streams, you must configure your Lambda function event source to use `ReportBatchItemFailures`. +For this feature to work, you need to **(1)** configure your Lambda function event source to use `ReportBatchItemFailures`, and **(2)** return [a specific response](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting){target="_blank" rel="nofollow"} to report which records failed to be processed. -You do not need any additional IAM permissions to use this utility, except for what each event source requires. +You use your preferred deployment framework to set the correct configuration while this utility handles the correct response to be returned. ### Required resources The remaining sections of the documentation will rely on these samples. For completeness, this demonstrates IAM permissions and Dead Letter Queue where batch records will be sent after 2 retries were attempted. +!!! note "You do not need any additional IAM permissions to use this utility, except for what each event source requires." + === "SQS" ```yaml title="template.yaml" hl_lines="30-31" @@ -77,9 +109,17 @@ Processing batches from SQS works in three stages: === "index.ts" ```typescript hl_lines="1-5 14 17 29-31" - --8<-- "docs/snippets/batch/gettingStartedSQS.ts::32" + --8<-- + docs/snippets/batch/gettingStartedSQS.ts::16 + docs/snippets/batch/gettingStartedSQS.ts:18:29 + docs/snippets/batch/gettingStartedSQS.ts:31:34 + --8<-- ``` + 1. **Step 1**. Creates a partial failure batch processor for SQS queues. See [partial failure mechanics for details](#partial-failure-mechanics) + 2. **Step 2**. Defines a function to receive one record at a time from the batch + 3. **Step 3**. Kicks off processing + === "Sample response" The second record failed to be processed, therefore the processor added its message ID in the response. @@ -103,6 +143,8 @@ This helps preserve the ordering of messages in your queue. --8<-- "docs/snippets/batch/gettingStartedSQSFifo.ts" ``` +1. **Step 1**. Creates a partial failure batch processor for SQS FIFO queues. See [partial failure mechanics for details](#partial-failure-mechanics) + ### Processing messages from Kinesis Processing batches from Kinesis works in three stages: @@ -120,6 +162,8 @@ Processing batches from Kinesis works in three stages: --8<-- "docs/snippets/batch/gettingStartedKinesis.ts" ``` + 1. **Step 1**. Creates a partial failure batch processor for Kinesis Data Streams. See [partial failure mechanics for details](#partial-failure-mechanics) + === "Sample response" The second record failed to be processed, therefore the processor added its sequence number in the response. @@ -151,6 +195,8 @@ Processing batches from DynamoDB Streams works in three stages: --8<-- "docs/snippets/batch/gettingStartedDynamoDBStreams.ts" ``` + 1. **Step 1**. Creates a partial failure batch processor for DynamoDB Streams. See [partial failure mechanics for details](#partial-failure-mechanics) + === "Sample response" The second record failed to be processed, therefore the processor added its sequence number in the response. @@ -165,6 +211,30 @@ Processing batches from DynamoDB Streams works in three stages: --8<-- "docs/snippets/batch/samples/sampleDynamoDBStreamsEvent.json" ``` +### Error handling + +By default, we catch any exception raised by your record handler function. This allows us to **(1)** continue processing the batch, **(2)** collect each batch item that failed processing, and **(3)** return the appropriate response correctly without failing your Lambda function execution. + +=== "Sample error handling with custom exception" + + ```typescript hl_lines="30" + --8<-- + docs/snippets/batch/gettingStartedErrorHandling.ts::29 + docs/snippets/batch/gettingStartedErrorHandling.ts:31:38 + docs/snippets/batch/gettingStartedErrorHandling.ts:40:43 + --8<-- + ``` + + 1. Any exception works here. See [extending BatchProcessor section, if you want to override this behavior.](#extending-batchprocessor) + + 2. Exceptions raised in `record_handler` will propagate to `process_partial_response`.

We catch them and include each failed batch item identifier in the response dictionary (see `Sample response` tab). + +=== "Sample response" + + ```json + --8<-- "docs/snippets/batch/samples/sampleSQSResponse.json" + ``` + ### Partial failure mechanics All records in the batch will be passed to this handler for processing, even if exceptions are thrown - Here's the behaviour after completing the batch: @@ -173,6 +243,119 @@ All records in the batch will be passed to this handler for processing, even if * **Partial success with some exceptions**. We will return a list of all item IDs/sequence numbers that failed processing * **All records failed to be processed**. We will raise `BatchProcessingError` exception with a list of all exceptions raised when processing +The following sequence diagrams explain how each Batch processor behaves under different scenarios. + +#### SQS Standard + +> Read more about [Batch Failure Reporting feature in AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting){target="_blank"}. + +Sequence diagram to explain how [`BatchProcessor` works](#processing-messages-from-sqs) with SQS Standard queues. + +
+```mermaid +sequenceDiagram + autonumber + participant SQS queue + participant Lambda service + participant Lambda function + Lambda service->>SQS queue: Poll + Lambda service->>Lambda function: Invoke (batch event) + Lambda function->>Lambda service: Report some failed messages + activate SQS queue + Lambda service->>SQS queue: Delete successful messages + SQS queue-->>SQS queue: Failed messages return + Note over SQS queue,Lambda service: Process repeat + deactivate SQS queue +``` +SQS mechanism with Batch Item Failures +
+ +#### SQS FIFO + +> Read more about [Batch Failure Reporting feature in AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting){target="_blank"}. + +Sequence diagram to explain how [`SqsFifoPartialProcessor` works](#fifo-queues) with SQS FIFO queues. + +
+```mermaid +sequenceDiagram + autonumber + participant SQS queue + participant Lambda service + participant Lambda function + Lambda service->>SQS queue: Poll + Lambda service->>Lambda function: Invoke (batch event) + activate Lambda function + Lambda function-->Lambda function: Process 2 out of 10 batch items + Lambda function--xLambda function: Fail on 3rd batch item + Lambda function->>Lambda service: Report 3rd batch item and unprocessed messages as failure + deactivate Lambda function + activate SQS queue + Lambda service->>SQS queue: Delete successful messages (1-2) + SQS queue-->>SQS queue: Failed messages return (3-10) + deactivate SQS queue +``` +SQS FIFO mechanism with Batch Item Failures +
+ +#### Kinesis and DynamoDB Streams + +> Read more about [Batch Failure Reporting feature](https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-batchfailurereporting){target="_blank"}. + +Sequence diagram to explain how `BatchProcessor` works with both [Kinesis Data Streams](#processing-messages-from-kinesis) and [DynamoDB Streams](#processing-messages-from-dynamodb). + +For brevity, we will use `Streams` to refer to either services. For theory on stream checkpoints, see this [blog post](https://aws.amazon.com/blogs/compute/optimizing-batch-processing-with-custom-checkpoints-in-aws-lambda/){target="_blank"} + +
+```mermaid +sequenceDiagram + autonumber + participant Streams + participant Lambda service + participant Lambda function + Lambda service->>Streams: Poll latest records + Lambda service->>Lambda function: Invoke (batch event) + activate Lambda function + Lambda function-->Lambda function: Process 2 out of 10 batch items + Lambda function--xLambda function: Fail on 3rd batch item + Lambda function-->Lambda function: Continue processing batch items (4-10) + Lambda function->>Lambda service: Report batch item as failure (3) + deactivate Lambda function + activate Streams + Lambda service->>Streams: Checkpoints to sequence number from 3rd batch item + Lambda service->>Streams: Poll records starting from updated checkpoint + deactivate Streams +``` +Kinesis and DynamoDB streams mechanism with single batch item failure +
+ +The behavior changes slightly when there are multiple item failures. Stream checkpoint is updated to the lowest sequence number reported. + +!!! important "Note that the batch item sequence number could be different from batch item number in the illustration." + +
+```mermaid +sequenceDiagram + autonumber + participant Streams + participant Lambda service + participant Lambda function + Lambda service->>Streams: Poll latest records + Lambda service->>Lambda function: Invoke (batch event) + activate Lambda function + Lambda function-->Lambda function: Process 2 out of 10 batch items + Lambda function--xLambda function: Fail on 3-5 batch items + Lambda function-->Lambda function: Continue processing batch items (6-10) + Lambda function->>Lambda service: Report batch items as failure (3-5) + deactivate Lambda function + activate Streams + Lambda service->>Streams: Checkpoints to lowest sequence number + Lambda service->>Streams: Poll records starting from updated checkpoint + deactivate Streams +``` +Kinesis and DynamoDB streams mechanism with multiple batch item failures +
+ ### Processing messages asynchronously You can use `AsyncBatchProcessor` class and `asyncProcessPartialResponse` function to process messages concurrently. @@ -197,10 +380,13 @@ Use the `BatchProcessor` directly in your function to access a list of all retur * **When successful**. We will include a tuple with `success`, the result of `recordHandler`, and the batch record * **When failed**. We will include a tuple with `fail`, exception as a string, and the batch record -```typescript hl_lines="27-28 30-32 37" title="Accessing processed messages" +```typescript hl_lines="25 27-28 30-33 38" title="Accessing processed messages" --8<-- "docs/snippets/batch/accessProcessedMessages.ts" ``` +1. The processor requires the records array. This is typically handled by `processPartialResponse`. +2. You need to register the `batch`, the `recordHandler` function, and optionally the `context` to access the Lambda context. + ### Accessing Lambda Context Within your `recordHandler` function, you might need access to the Lambda context to determine how much time you have left before your function times out. @@ -223,7 +409,7 @@ For these scenarios, you can subclass `BatchProcessor` and quickly override `suc ???+ example Let's suppose you'd like to add a metric named `BatchRecordFailures` for each batch record that failed processing -```typescript hl_lines="5-6 17-33 35 50-52" title="Extending failure handling mechanism in BatchProcessor" +```typescript hl_lines="5-6 17 21 25 31 35 50-52" title="Extending failure handling mechanism in BatchProcessor" --8<-- "docs/snippets/batch/extendingFailure.ts" ``` @@ -231,6 +417,30 @@ For these scenarios, you can subclass `BatchProcessor` and quickly override `suc You can create your own partial batch processor from scratch by inheriting the `BasePartialProcessor` class, and implementing the `prepare()`, `clean()`, `processRecord()` and `asyncProcessRecord()` abstract methods. +
+```mermaid +classDiagram + direction LR + class BasePartialProcessor { + <> + +prepare() + +clean() + +processRecord(record: BaseRecord) + +asyncProcessRecord(record: BaseRecord) + } + + class YourCustomProcessor { + +prepare() + +clean() + +processRecord(record: BaseRecord) + +asyncProcessRecord(record: BaseRecord) + } + + BasePartialProcessor <|-- YourCustomProcessor : extends +``` +Visual representation to bring your own processor +
+ * **`processRecord()`** – handles all processing logic for each individual message of a batch, including calling the `recordHandler` (`this.handler`) * **`prepare()`** – called once as part of the processor initialization * **`clean()`** – teardown logic called once after `processRecord` completes @@ -238,7 +448,7 @@ You can create your own partial batch processor from scratch by inheriting the ` You can then use this class as a context manager, or pass it to `processPartialResponse` to process the records in your Lambda handler function. -```typescript hl_lines="7 11-13 19 28 39 60 71 82 92-94" title="Creating a custom batch processor" +```typescript hl_lines="8 12-14 20 29 40 61 72 83 93-95" title="Creating a custom batch processor" --8<-- "docs/snippets/batch/customPartialProcessor.ts" ``` From 5248809e5e4b7ac880e2f3dda9bfeceabf1f5e23 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Wed, 2 Aug 2023 23:31:25 +0200 Subject: [PATCH 07/28] chore(logger): extracted logger creation into protected method (#1646) --- packages/logger/src/Logger.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/logger/src/Logger.ts b/packages/logger/src/Logger.ts index 1396c16f91..e9432121cf 100644 --- a/packages/logger/src/Logger.ts +++ b/packages/logger/src/Logger.ts @@ -237,7 +237,7 @@ class Logger extends Utility implements ClassThatLogs { logFormatter: this.getLogFormatter(), }; const parentsPowertoolsLogData = this.getPowertoolLogData(); - const childLogger = new Logger( + const childLogger = this.createLogger( merge(parentsOptions, parentsPowertoolsLogData, options) ); @@ -554,6 +554,16 @@ class Logger extends Utility implements ClassThatLogs { this.processLogItem(16, input, extraInput); } + /** + * Creates a new Logger instance. + * + * @param {ConstructorOptions} [options] + * @returns {Logger} + */ + protected createLogger(options?: ConstructorOptions): Logger { + return new Logger(options); + } + /** * Decides whether the current log item should be printed or not. * From 3ad0f5cffad7eb03fc2ac6deb78a29a1fad1a7fa Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 3 Aug 2023 16:10:57 +0200 Subject: [PATCH 08/28] improv(idempotency): consolidate internal implementation (#1642) * improv(idempotency): consolidate internal implementation * chore(idempotency): removed unused code --- .../idempotency/src/IdempotencyHandler.ts | 283 +++++++++++++----- .../src/middleware/makeHandlerIdempotent.ts | 160 +++------- .../tests/unit/IdempotencyHandler.test.ts | 252 +++------------- 3 files changed, 304 insertions(+), 391 deletions(-) diff --git a/packages/idempotency/src/IdempotencyHandler.ts b/packages/idempotency/src/IdempotencyHandler.ts index 06387ed0c8..c8bd4c387f 100644 --- a/packages/idempotency/src/IdempotencyHandler.ts +++ b/packages/idempotency/src/IdempotencyHandler.ts @@ -1,4 +1,7 @@ -import type { JSONValue } from '@aws-lambda-powertools/commons'; +import type { + JSONValue, + MiddyLikeRequest, +} from '@aws-lambda-powertools/commons'; import type { AnyFunction, IdempotencyHandlerOptions } from './types'; import { IdempotencyRecordStatus } from './types'; import { @@ -34,7 +37,7 @@ export class IdempotencyHandler { * * This is the argument that is used for the idempotency. */ - readonly #functionPayloadToBeHashed: JSONValue; + #functionPayloadToBeHashed: JSONValue; /** * Reference to the function to be made idempotent. */ @@ -68,9 +71,17 @@ export class IdempotencyHandler { }); } + /** + * Takes an idempotency key and returns the idempotency record from the persistence layer. + * + * If the idempotency record is not COMPLETE, then it will throw an error based on the status of the record. + * + * @param idempotencyRecord The idempotency record stored in the persistence layer + * @returns The result of the function if the idempotency record is in a terminal state + */ public static determineResultFromIdempotencyRecord( idempotencyRecord: IdempotencyRecord - ): Promise | unknown { + ): JSONValue { if (idempotencyRecord.getStatus() === IdempotencyRecordStatus.EXPIRED) { throw new IdempotencyInconsistentStateError( 'Item has expired during processing and may not longer be valid.' @@ -96,50 +107,55 @@ export class IdempotencyHandler { return idempotencyRecord.getResponse(); } + /** + * Execute the handler and return the result. + * + * If the handler fails, the idempotency record will be deleted. + * If it succeeds, the idempotency record will be updated with the result. + * + * @returns The result of the function execution + */ public async getFunctionResult(): Promise> { let result; try { result = await this.#functionToMakeIdempotent(...this.#functionArguments); - } catch (e) { - try { - await this.#persistenceStore.deleteRecord( - this.#functionPayloadToBeHashed - ); - } catch (e) { - throw new IdempotencyPersistenceLayerError( - 'Failed to delete record from idempotency store', - e as Error - ); - } - throw e; - } - try { - await this.#persistenceStore.saveSuccess( - this.#functionPayloadToBeHashed, - result - ); - } catch (e) { - throw new IdempotencyPersistenceLayerError( - 'Failed to update success record to idempotency store', - e as Error - ); + } catch (error) { + await this.#deleteInProgressRecord(); + throw error; } + await this.#saveSuccessfullResult(result); return result; } /** - * Main entry point for the handler + * Entry point to handle the idempotency logic. + * + * Before the handler is executed, we need to check if there is already an + * execution in progress for the given idempotency key. If there is, we + * need to determine its status and return the appropriate response or + * throw an error. + * + * If there is no execution in progress, we need to save a record to the + * idempotency store to indicate that an execution is in progress. * * In some rare cases, when the persistent state changes in small time * window, we might get an `IdempotencyInconsistentStateError`. In such * cases we can safely retry the handling a few times. */ public async handle(): Promise> { + // early return if we should skip idempotency completely + if (this.shouldSkipIdempotency()) { + return await this.#functionToMakeIdempotent(...this.#functionArguments); + } + let e; for (let retryNo = 0; retryNo <= MAX_RETRIES; retryNo++) { try { - return await this.processIdempotency(); + const result = await this.#saveInProgressOrReturnExistingResult(); + if (result) return result as ReturnType; + + return await this.getFunctionResult(); } catch (error) { if ( error instanceof IdempotencyInconsistentStateError && @@ -156,60 +172,183 @@ export class IdempotencyHandler { throw e; } - public async processIdempotency(): Promise> { - // early return if we should skip idempotency completely + /** + * Handle the idempotency operations needed after the handler has returned. + * + * When the handler returns successfully, we need to update the record in the + * idempotency store to indicate that the execution has completed and + * store its result. + * + * To avoid duplication of code, we expose this method so that it can be + * called from the `after` phase of the Middy middleware. + * + * @param response The response returned by the handler. + */ + public async handleMiddyAfter(response: unknown): Promise { + await this.#saveSuccessfullResult(response as ReturnType); + } + + /** + * Handle the idempotency operations needed after the handler has returned. + * + * Before the handler is executed, we need to check if there is already an + * execution in progress for the given idempotency key. If there is, we + * need to determine its status and return the appropriate response or + * throw an error. + * + * If there is no execution in progress, we need to save a record to the + * idempotency store to indicate that an execution is in progress. + * + * In some rare cases, when the persistent state changes in small time + * window, we might get an `IdempotencyInconsistentStateError`. In such + * cases we can safely retry the handling a few times. + * + * @param request The request object passed to the handler. + * @param callback Callback function to cleanup pending middlewares when returning early. + */ + public async handleMiddyBefore( + request: MiddyLikeRequest, + callback: (request: MiddyLikeRequest) => Promise + ): Promise | void> { + for (let retryNo = 0; retryNo <= MAX_RETRIES; retryNo++) { + try { + const result = await this.#saveInProgressOrReturnExistingResult(); + if (result) { + await callback(request); + + return result as ReturnType; + } + break; + } catch (error) { + if ( + error instanceof IdempotencyInconsistentStateError && + retryNo < MAX_RETRIES + ) { + // Retry + continue; + } + // Retries exhausted or other error + throw error; + } + } + } + + /** + * Handle the idempotency operations needed when an error is thrown in the handler. + * + * When an error is thrown in the handler, we need to delete the record from the + * idempotency store. + * + * To avoid duplication of code, we expose this method so that it can be + * called from the `onError` phase of the Middy middleware. + */ + public async handleMiddyOnError(): Promise { + await this.#deleteInProgressRecord(); + } + + /** + * Setter for the payload to be hashed to generate the idempotency key. + * + * This is useful if you want to use a different payload than the one + * used to instantiate the `IdempotencyHandler`, for example when using + * it within a Middy middleware. + * + * @param functionPayloadToBeHashed The payload to be hashed to generate the idempotency key + */ + public setFunctionPayloadToBeHashed( + functionPayloadToBeHashed: JSONValue + ): void { + this.#functionPayloadToBeHashed = functionPayloadToBeHashed; + } + + /** + * Avoid idempotency if the eventKeyJmesPath is not present in the payload and throwOnNoIdempotencyKey is false + */ + public shouldSkipIdempotency(): boolean { + if (!this.#idempotencyConfig.isEnabled()) return true; + if ( - IdempotencyHandler.shouldSkipIdempotency( - this.#idempotencyConfig.eventKeyJmesPath, - this.#idempotencyConfig.throwOnNoIdempotencyKey, - this.#functionPayloadToBeHashed - ) + this.#idempotencyConfig.eventKeyJmesPath !== '' && + !this.#idempotencyConfig.throwOnNoIdempotencyKey ) { - return await this.#functionToMakeIdempotent(...this.#functionArguments); + const selection = search( + this.#functionPayloadToBeHashed, + this.#idempotencyConfig.eventKeyJmesPath + ); + + return selection === undefined || selection === null; + } else { + return false; } + } + /** + * Delete an in progress record from the idempotency store. + * + * This is called when the handler throws an error. + */ + #deleteInProgressRecord = async (): Promise => { try { - await this.#persistenceStore.saveInProgress( - this.#functionPayloadToBeHashed, - this.#idempotencyConfig.lambdaContext?.getRemainingTimeInMillis() + await this.#persistenceStore.deleteRecord( + this.#functionPayloadToBeHashed ); } catch (e) { - if (e instanceof IdempotencyItemAlreadyExistsError) { - const idempotencyRecord: IdempotencyRecord = - await this.#persistenceStore.getRecord( - this.#functionPayloadToBeHashed - ); + throw new IdempotencyPersistenceLayerError( + 'Failed to delete record from idempotency store', + e as Error + ); + } + }; - return IdempotencyHandler.determineResultFromIdempotencyRecord( - idempotencyRecord - ) as ReturnType; - } else { - throw new IdempotencyPersistenceLayerError( - 'Failed to save in progress record to idempotency store', - e as Error + /** + * Save an in progress record to the idempotency store or return an existing result. + * + * If the record already exists, return the result from the record. + */ + #saveInProgressOrReturnExistingResult = + async (): Promise => { + try { + await this.#persistenceStore.saveInProgress( + this.#functionPayloadToBeHashed, + this.#idempotencyConfig.lambdaContext?.getRemainingTimeInMillis() ); - } - } + } catch (e) { + if (e instanceof IdempotencyItemAlreadyExistsError) { + const idempotencyRecord: IdempotencyRecord = + await this.#persistenceStore.getRecord( + this.#functionPayloadToBeHashed + ); - return this.getFunctionResult(); - } + return IdempotencyHandler.determineResultFromIdempotencyRecord( + idempotencyRecord + ); + } else { + throw new IdempotencyPersistenceLayerError( + 'Failed to save in progress record to idempotency store', + e as Error + ); + } + } + }; /** - * avoid idempotency if the eventKeyJmesPath is not present in the payload and throwOnNoIdempotencyKey is false - * static so {@link makeHandlerIdempotent} middleware can use it - * TOOD: refactor so middy uses IdempotencyHandler internally wihtout reimplementing the logic - * @param eventKeyJmesPath - * @param throwOnNoIdempotencyKey - * @param fullFunctionPayload - * @private - */ - public static shouldSkipIdempotency( - eventKeyJmesPath: string, - throwOnNoIdempotencyKey: boolean, - fullFunctionPayload: JSONValue - ): boolean { - return (eventKeyJmesPath && - !throwOnNoIdempotencyKey && - !search(fullFunctionPayload, eventKeyJmesPath)) as boolean; - } + * Save a successful result to the idempotency store. + * + * This is called when the handler returns successfully. + * + * @param result The result returned by the handler. + */ + #saveSuccessfullResult = async (result: ReturnType): Promise => { + try { + await this.#persistenceStore.saveSuccess( + this.#functionPayloadToBeHashed, + result + ); + } catch (e) { + throw new IdempotencyPersistenceLayerError( + 'Failed to update success record to idempotency store', + e as Error + ); + } + }; } diff --git a/packages/idempotency/src/middleware/makeHandlerIdempotent.ts b/packages/idempotency/src/middleware/makeHandlerIdempotent.ts index c9e750e53c..25c4525f58 100644 --- a/packages/idempotency/src/middleware/makeHandlerIdempotent.ts +++ b/packages/idempotency/src/middleware/makeHandlerIdempotent.ts @@ -4,16 +4,8 @@ import { cleanupMiddlewares, IDEMPOTENCY_KEY, } from '@aws-lambda-powertools/commons/lib/middleware'; -import { - IdempotencyInconsistentStateError, - IdempotencyItemAlreadyExistsError, - IdempotencyPersistenceLayerError, -} from '../errors'; -import { IdempotencyRecord } from '../persistence'; -import { MAX_RETRIES } from '../constants'; -import type { IdempotencyLambdaHandlerOptions } from '../types'; -import type { BasePersistenceLayerInterface } from '../persistence'; -import { +import type { AnyFunction, IdempotencyLambdaHandlerOptions } from '../types'; +import type { MiddlewareLikeObj, MiddyLikeRequest, JSONValue, @@ -21,34 +13,34 @@ import { /** * @internal - * Utility function to get the persistence store from the request internal storage + * Utility function to get the idempotency handler from the request internal storage * * @param request The Middy request object - * @returns The persistence store from the request internal + * @returns The idempotency handler from the request internal */ -const getPersistenceStoreFromRequestInternal = ( +const getIdempotencyHandlerFromRequestInternal = ( request: MiddyLikeRequest -): BasePersistenceLayerInterface => { - const persistenceStore = request.internal[ - `${IDEMPOTENCY_KEY}.idempotencyPersistenceStore` - ] as BasePersistenceLayerInterface; +): IdempotencyHandler => { + const idempotencyHandler = request.internal[ + `${IDEMPOTENCY_KEY}.idempotencyHandler` + ] as IdempotencyHandler; - return persistenceStore; + return idempotencyHandler; }; /** * @internal - * Utility function to set the persistence store in the request internal storage + * Utility function to set the idempotency handler in the request internal storage * * @param request The Middy request object - * @param persistenceStore The persistence store to set in the request internal + * @param idempotencyHandler The idempotency handler to set in the request internal */ -const setPersistenceStoreInRequestInternal = ( +const setIdempotencyHandlerInRequestInternal = ( request: MiddyLikeRequest, - persistenceStore: BasePersistenceLayerInterface + idempotencyHandler: IdempotencyHandler ): void => { - request.internal[`${IDEMPOTENCY_KEY}.idempotencyPersistenceStore`] = - persistenceStore; + request.internal[`${IDEMPOTENCY_KEY}.idempotencyHandler`] = + idempotencyHandler; }; /** @@ -103,25 +95,16 @@ const makeHandlerIdempotent = ( /** * Function called before the handler is executed. * - * Before the handler is executed, we need to check if there is already an - * execution in progress for the given idempotency key. If there is, we - * need to determine its status and return the appropriate response or - * throw an error. - * - * If there is no execution in progress, we need to save a record to the - * idempotency store to indicate that an execution is in progress. + * Before the handler is executed, we insantiate the {@link IdempotencyHandler} and + * set it in the request internal storage. We then configure the persistence store + * and set the payload to be hashed and Lambda context in the idempotency config. * - * In some rare cases, when the persistent state changes in small time - * window, we might get an `IdempotencyInconsistentStateError`. In such - * cases we can safely retry the handling a few times. + * If idempotency is enabled and the idempotency key is present in the payload, + * we then run the idempotency operations. These are handled in {@link IdempotencyHandler.handleMiddyBefore}. * * @param request - The Middy request object - * @param retryNo - The number of times the handler has been retried */ - const before = async ( - request: MiddyLikeRequest, - retryNo = 0 - ): Promise => { + const before = async (request: MiddyLikeRequest): Promise => { const idempotencyConfig = options.config ? options.config : new IdempotencyConfig({}); @@ -130,66 +113,28 @@ const makeHandlerIdempotent = ( config: idempotencyConfig, }); - if ( - !idempotencyConfig.isEnabled() || - IdempotencyHandler.shouldSkipIdempotency( - idempotencyConfig.eventKeyJmesPath, - idempotencyConfig.throwOnNoIdempotencyKey, - request.event as JSONValue - ) - ) { + const idempotencyHandler = new IdempotencyHandler({ + functionToMakeIdempotent: /* istanbul ignore next */ () => ({}), + functionArguments: [], + idempotencyConfig, + persistenceStore, + functionPayloadToBeHashed: undefined, + }); + setIdempotencyHandlerInRequestInternal(request, idempotencyHandler); + + // set the payload to be hashed + idempotencyHandler.setFunctionPayloadToBeHashed(request.event as JSONValue); + // check if we should skip idempotency checks + if (idempotencyHandler.shouldSkipIdempotency()) { // set the flag to skip checks in after and onError setIdempotencySkipFlag(request); return; } - /** - * Store the persistence store in the request internal so that it can be - * used in after and onError - */ - setPersistenceStoreInRequestInternal(request, persistenceStore); + idempotencyConfig.registerLambdaContext(request.context); - try { - await persistenceStore.saveInProgress( - request.event as JSONValue, - request.context.getRemainingTimeInMillis() - ); - } catch (error) { - if (error instanceof IdempotencyItemAlreadyExistsError) { - const idempotencyRecord: IdempotencyRecord = - await persistenceStore.getRecord(request.event as JSONValue); - - try { - const response = - await IdempotencyHandler.determineResultFromIdempotencyRecord( - idempotencyRecord - ); - if (response) { - // Cleanup other middlewares - cleanupMiddlewares(request); - - return response; - } - } catch (error) { - if ( - error instanceof IdempotencyInconsistentStateError && - retryNo < MAX_RETRIES - ) { - // Retry - return await before(request, retryNo + 1); - } else { - // Retries exhausted or other error - throw error; - } - } - } else { - throw new IdempotencyPersistenceLayerError( - 'Failed to save in progress record to idempotency store', - error as Error - ); - } - } + return idempotencyHandler.handleMiddyBefore(request, cleanupMiddlewares); }; /** @@ -197,7 +142,7 @@ const makeHandlerIdempotent = ( * * When the handler returns successfully, we need to update the record in the * idempotency store to indicate that the execution has completed and - * store its result. + * store its result. This is handled in {@link IdempotencyHandler.handleMiddyAfter}. * * @param request - The Middy request object */ @@ -205,25 +150,16 @@ const makeHandlerIdempotent = ( if (shouldSkipIdempotency(request)) { return; } - const persistenceStore = getPersistenceStoreFromRequestInternal(request); - try { - await persistenceStore.saveSuccess( - request.event as JSONValue, - request.response as JSONValue - ); - } catch (e) { - throw new IdempotencyPersistenceLayerError( - 'Failed to update success record to idempotency store', - e as Error - ); - } + const idempotencyHandler = + getIdempotencyHandlerFromRequestInternal(request); + await idempotencyHandler.handleMiddyAfter(request.response); }; /** * Function called when an error occurs in the handler. * * When an error is thrown in the handler, we need to delete the record from the - * idempotency store. + * idempotency store. This is handled in {@link IdempotencyHandler.handleMiddyOnError}. * * @param request - The Middy request object */ @@ -231,15 +167,9 @@ const makeHandlerIdempotent = ( if (shouldSkipIdempotency(request)) { return; } - const persistenceStore = getPersistenceStoreFromRequestInternal(request); - try { - await persistenceStore.deleteRecord(request.event as JSONValue); - } catch (error) { - throw new IdempotencyPersistenceLayerError( - 'Failed to delete record from idempotency store', - error as Error - ); - } + const idempotencyHandler = + getIdempotencyHandlerFromRequestInternal(request); + await idempotencyHandler.handleMiddyOnError(); }; return { diff --git a/packages/idempotency/tests/unit/IdempotencyHandler.test.ts b/packages/idempotency/tests/unit/IdempotencyHandler.test.ts index 977623e14b..d9196169c4 100644 --- a/packages/idempotency/tests/unit/IdempotencyHandler.test.ts +++ b/packages/idempotency/tests/unit/IdempotencyHandler.test.ts @@ -15,12 +15,12 @@ import { IdempotencyHandler } from '../../src/IdempotencyHandler'; import { IdempotencyConfig } from '../../src/'; import { MAX_RETRIES } from '../../src/constants'; import { PersistenceLayerTestClass } from '../helpers/idempotencyUtils'; -import { Context } from 'aws-lambda'; const mockFunctionToMakeIdempotent = jest.fn(); const mockFunctionPayloadToBeHashed = {}; +const persistenceStore = new PersistenceLayerTestClass(); const mockIdempotencyOptions = { - persistenceStore: new PersistenceLayerTestClass(), + persistenceStore, dataKeywordArgument: 'testKeywordArgument', config: new IdempotencyConfig({}), }; @@ -51,6 +51,7 @@ describe('Class IdempotencyHandler', () => { describe('Method: determineResultFromIdempotencyRecord', () => { test('when record is in progress and within expiry window, it rejects with IdempotencyAlreadyInProgressError', async () => { + // Prepare const stubRecord = new IdempotencyRecord({ idempotencyKey: 'idempotencyKey', expiryTimestamp: Date.now() + 1000, // should be in the future @@ -60,19 +61,16 @@ describe('Class IdempotencyHandler', () => { status: IdempotencyRecordStatus.INPROGRESS, }); + // Act & Assess expect(stubRecord.isExpired()).toBe(false); expect(stubRecord.getStatus()).toBe(IdempotencyRecordStatus.INPROGRESS); - - try { - await IdempotencyHandler.determineResultFromIdempotencyRecord( - stubRecord - ); - } catch (e) { - expect(e).toBeInstanceOf(IdempotencyAlreadyInProgressError); - } + expect(() => + IdempotencyHandler.determineResultFromIdempotencyRecord(stubRecord) + ).toThrow(IdempotencyAlreadyInProgressError); }); test('when record is in progress and outside expiry window, it rejects with IdempotencyInconsistentStateError', async () => { + // Prepare const stubRecord = new IdempotencyRecord({ idempotencyKey: 'idempotencyKey', expiryTimestamp: Date.now() + 1000, // should be in the future @@ -82,19 +80,16 @@ describe('Class IdempotencyHandler', () => { status: IdempotencyRecordStatus.INPROGRESS, }); + // Act & Assess expect(stubRecord.isExpired()).toBe(false); expect(stubRecord.getStatus()).toBe(IdempotencyRecordStatus.INPROGRESS); - - try { - await IdempotencyHandler.determineResultFromIdempotencyRecord( - stubRecord - ); - } catch (e) { - expect(e).toBeInstanceOf(IdempotencyInconsistentStateError); - } + expect(() => + IdempotencyHandler.determineResultFromIdempotencyRecord(stubRecord) + ).toThrow(IdempotencyInconsistentStateError); }); test('when record is expired, it rejects with IdempotencyInconsistentStateError', async () => { + // Prepare const stubRecord = new IdempotencyRecord({ idempotencyKey: 'idempotencyKey', expiryTimestamp: new Date().getUTCMilliseconds() - 1000, // should be in the past @@ -104,204 +99,56 @@ describe('Class IdempotencyHandler', () => { status: IdempotencyRecordStatus.EXPIRED, }); + // Act & Assess expect(stubRecord.isExpired()).toBe(true); expect(stubRecord.getStatus()).toBe(IdempotencyRecordStatus.EXPIRED); - - try { - await IdempotencyHandler.determineResultFromIdempotencyRecord( - stubRecord - ); - } catch (e) { - expect(e).toBeInstanceOf(IdempotencyInconsistentStateError); - } + expect(() => + IdempotencyHandler.determineResultFromIdempotencyRecord(stubRecord) + ).toThrow(IdempotencyInconsistentStateError); }); }); describe('Method: handle', () => { - afterAll(() => jest.restoreAllMocks()); // restore processIdempotency for other tests - test('when IdempotencyAlreadyInProgressError is thrown, it retries once', async () => { - const mockProcessIdempotency = jest - .spyOn(IdempotencyHandler.prototype, 'processIdempotency') - .mockRejectedValue( - new IdempotencyAlreadyInProgressError( - 'There is already an execution in progress' - ) - ); - await expect(idempotentHandler.handle()).rejects.toThrow( - IdempotencyAlreadyInProgressError - ); - expect(mockProcessIdempotency).toHaveBeenCalledTimes(1); + // Prepare + const saveInProgressSpy = jest + .spyOn(persistenceStore, 'saveInProgress') + .mockRejectedValueOnce(new IdempotencyItemAlreadyExistsError()); + + // Act & Assess + await expect(idempotentHandler.handle()).rejects.toThrow(); + expect(saveInProgressSpy).toHaveBeenCalledTimes(1); }); test('when IdempotencyInconsistentStateError is thrown, it retries until max retries are exhausted', async () => { + // Prepare const mockProcessIdempotency = jest - .spyOn(IdempotencyHandler.prototype, 'processIdempotency') - .mockRejectedValue(new IdempotencyInconsistentStateError()); + .spyOn(persistenceStore, 'saveInProgress') + .mockRejectedValue(new IdempotencyItemAlreadyExistsError()); + jest.spyOn(persistenceStore, 'getRecord').mockResolvedValue( + new IdempotencyRecord({ + status: IdempotencyRecordStatus.EXPIRED, + idempotencyKey: 'idempotencyKey', + }) + ); + + // Act & Assess await expect(idempotentHandler.handle()).rejects.toThrow( IdempotencyInconsistentStateError ); expect(mockProcessIdempotency).toHaveBeenCalledTimes(MAX_RETRIES + 1); }); - - test('when non IdempotencyAlreadyInProgressError is thrown, it rejects', async () => { - const mockProcessIdempotency = jest - .spyOn(IdempotencyHandler.prototype, 'processIdempotency') - .mockRejectedValue(new Error('Some other error')); - - await expect(idempotentHandler.handle()).rejects.toThrow(Error); - expect(mockProcessIdempotency).toHaveBeenCalledTimes(1); - }); - }); - - describe('Method: processIdempotency', () => { - test('when persistenceStore saves successfuly, it resolves', async () => { - const mockSaveInProgress = jest - .spyOn(mockIdempotencyOptions.persistenceStore, 'saveInProgress') - .mockResolvedValue(); - - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.resolve('result') - ); - - await expect(idempotentHandler.processIdempotency()).resolves.toBe( - 'result' - ); - expect(mockSaveInProgress).toHaveBeenCalledTimes(1); - }); - - test('when persistences store throws any error, it wraps the error to IdempotencyPersistencesLayerError', async () => { - const innerError = new Error('Some error'); - const mockSaveInProgress = jest - .spyOn(mockIdempotencyOptions.persistenceStore, 'saveInProgress') - .mockRejectedValue(innerError); - const mockDetermineResultFromIdempotencyRecord = jest - .spyOn(IdempotencyHandler, 'determineResultFromIdempotencyRecord') - .mockImplementation(() => 'result'); - await expect(idempotentHandler.processIdempotency()).rejects.toThrow( - new IdempotencyPersistenceLayerError( - 'Failed to save in progress record to idempotency store', - innerError - ) - ); - - expect(mockSaveInProgress).toHaveBeenCalledTimes(1); - expect(mockDetermineResultFromIdempotencyRecord).toHaveBeenCalledTimes(0); - }); - - test('when idempotency item already exists, it returns the existing record', async () => { - const mockSaveInProgress = jest - .spyOn(mockIdempotencyOptions.persistenceStore, 'saveInProgress') - .mockRejectedValue( - new IdempotencyItemAlreadyExistsError( - 'There is already an execution in progress' - ) - ); - - const stubRecord = new IdempotencyRecord({ - idempotencyKey: 'idempotencyKey', - expiryTimestamp: 0, - inProgressExpiryTimestamp: 0, - responseData: { responseData: 'responseData' }, - payloadHash: 'payloadHash', - status: IdempotencyRecordStatus.INPROGRESS, - }); - const mockGetRecord = jest - .spyOn(mockIdempotencyOptions.persistenceStore, 'getRecord') - .mockImplementation(() => Promise.resolve(stubRecord)); - const mockDetermineResultFromIdempotencyRecord = jest - .spyOn(IdempotencyHandler, 'determineResultFromIdempotencyRecord') - .mockImplementation(() => 'result'); - - await expect(idempotentHandler.processIdempotency()).resolves.toBe( - 'result' - ); - expect(mockSaveInProgress).toHaveBeenCalledTimes(1); - expect(mockGetRecord).toHaveBeenCalledTimes(1); - expect(mockDetermineResultFromIdempotencyRecord).toHaveBeenCalledTimes(1); - }); - - test('when throwOnNoIdempotencyKey is false and the key is missing, we skip idempotency', async () => { - const idempotentHandlerSkips = new IdempotencyHandler({ - functionToMakeIdempotent: mockFunctionToMakeIdempotent, - functionPayloadToBeHashed: mockFunctionPayloadToBeHashed, - persistenceStore: mockIdempotencyOptions.persistenceStore, - functionArguments: [], - idempotencyConfig: new IdempotencyConfig({ - throwOnNoIdempotencyKey: false, - eventKeyJmesPath: 'idempotencyKey', - }), - }); - - const mockSaveInProgress = jest.spyOn( - mockIdempotencyOptions.persistenceStore, - 'saveInProgress' - ); - - const mockSaveSuccessfulResult = jest.spyOn( - mockIdempotencyOptions.persistenceStore, - 'saveSuccess' - ); - const mockGetRecord = jest.spyOn( - mockIdempotencyOptions.persistenceStore, - 'getRecord' - ); - - mockFunctionToMakeIdempotent.mockImplementation(() => { - return 'result'; - }); - - await expect(idempotentHandlerSkips.processIdempotency()).resolves.toBe( - 'result' - ); - expect(mockSaveInProgress).toHaveBeenCalledTimes(0); - expect(mockGetRecord).toHaveBeenCalledTimes(0); - expect(mockSaveSuccessfulResult).toHaveBeenCalledTimes(0); - }); - - test('when lambdaContext is registered, we pass it to saveInProgress', async () => { - const mockSaveInProgress = jest.spyOn( - mockIdempotencyOptions.persistenceStore, - 'saveInProgress' - ); - - const mockLambaContext: Context = { - getRemainingTimeInMillis(): number { - return 1000; // we expect this number to be passed to saveInProgress - }, - } as Context; - const idempotencyHandlerWithContext = new IdempotencyHandler({ - functionToMakeIdempotent: mockFunctionToMakeIdempotent, - functionPayloadToBeHashed: mockFunctionPayloadToBeHashed, - persistenceStore: mockIdempotencyOptions.persistenceStore, - functionArguments: [], - idempotencyConfig: new IdempotencyConfig({ - lambdaContext: mockLambaContext, - }), - }); - - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.resolve('result') - ); - - await expect(idempotencyHandlerWithContext.processIdempotency()).resolves; - - expect(mockSaveInProgress).toBeCalledWith( - mockFunctionPayloadToBeHashed, - mockLambaContext.getRemainingTimeInMillis() - ); - }); }); describe('Method: getFunctionResult', () => { test('when function returns a result, it saves the successful result and returns it', async () => { + // Prepare + mockFunctionToMakeIdempotent.mockResolvedValue('result'); const mockSaveSuccessfulResult = jest .spyOn(mockIdempotencyOptions.persistenceStore, 'saveSuccess') .mockResolvedValue(); - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.resolve('result') - ); + // Act & Assess await expect(idempotentHandler.getFunctionResult()).resolves.toBe( 'result' ); @@ -309,14 +156,13 @@ describe('Class IdempotencyHandler', () => { }); test('when function throws an error, it deletes the in progress record and throws the error', async () => { - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.reject(new Error('Some error')) - ); - + // Prepare + mockFunctionToMakeIdempotent.mockRejectedValue(new Error('Some error')); const mockDeleteInProgress = jest .spyOn(mockIdempotencyOptions.persistenceStore, 'deleteRecord') .mockResolvedValue(); + // Act & Assess await expect(idempotentHandler.getFunctionResult()).rejects.toThrow( Error ); @@ -324,14 +170,13 @@ describe('Class IdempotencyHandler', () => { }); test('when deleteRecord throws an error, it wraps the error to IdempotencyPersistenceLayerError', async () => { - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.reject(new Error('Some error')) - ); - + // Prepare + mockFunctionToMakeIdempotent.mockRejectedValue(new Error('Some error')); const mockDeleteInProgress = jest .spyOn(mockIdempotencyOptions.persistenceStore, 'deleteRecord') .mockRejectedValue(new Error('Some error')); + // Act & Assess await expect(idempotentHandler.getFunctionResult()).rejects.toThrow( new IdempotencyPersistenceLayerError( 'Failed to delete record from idempotency store', @@ -342,14 +187,13 @@ describe('Class IdempotencyHandler', () => { }); test('when saveSuccessfulResult throws an error, it wraps the error to IdempotencyPersistenceLayerError', async () => { - mockFunctionToMakeIdempotent.mockImplementation(() => - Promise.resolve('result') - ); - + // Prepare + mockFunctionToMakeIdempotent.mockResolvedValue('result'); const mockSaveSuccessfulResult = jest .spyOn(mockIdempotencyOptions.persistenceStore, 'saveSuccess') .mockRejectedValue(new Error('Some error')); + // Act & Assess await expect(idempotentHandler.getFunctionResult()).rejects.toThrow( IdempotencyPersistenceLayerError ); From bf00d5b6e8e9efd03c69017561463a764c4bdb22 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 8 Aug 2023 19:03:50 +0200 Subject: [PATCH 09/28] improv(batch): improve errors (#1648) * improv(batch): improve errors * tests: updated tests with assertions --- packages/batch/src/AsyncBatchProcessor.ts | 5 +- .../batch/src/BasePartialBatchProcessor.ts | 13 +-- packages/batch/src/BasePartialProcessor.ts | 6 +- packages/batch/src/BatchProcessor.ts | 3 +- packages/batch/src/SqsFifoPartialProcessor.ts | 6 +- .../batch/src/asyncProcessPartialResponse.ts | 11 +-- packages/batch/src/errors.ts | 82 +++++++++++-------- packages/batch/src/processPartialResponse.ts | 11 +-- .../tests/unit/AsyncBatchProcessor.test.ts | 14 ++-- .../batch/tests/unit/BatchProcessor.test.ts | 14 ++-- .../unit/SqsFifoPartialProcessor.test.ts | 7 +- .../unit/asyncProcessPartialResponse.test.ts | 9 +- .../tests/unit/processPartialResponse.test.ts | 9 +- 13 files changed, 92 insertions(+), 98 deletions(-) diff --git a/packages/batch/src/AsyncBatchProcessor.ts b/packages/batch/src/AsyncBatchProcessor.ts index f4e02a327e..10c404a323 100644 --- a/packages/batch/src/AsyncBatchProcessor.ts +++ b/packages/batch/src/AsyncBatchProcessor.ts @@ -1,4 +1,5 @@ import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; +import { BatchProcessingError } from './errors'; import type { BaseRecord, FailureResponse, SuccessResponse } from './types'; /** @@ -24,7 +25,9 @@ class AsyncBatchProcessor extends BasePartialBatchProcessor { * @returns response of success or failure */ public processRecord(_record: BaseRecord): SuccessResponse | FailureResponse { - throw new Error('Not implemented. Use asyncProcess() instead.'); + throw new BatchProcessingError( + 'Not implemented. Use asyncProcess() instead.' + ); } } diff --git a/packages/batch/src/BasePartialBatchProcessor.ts b/packages/batch/src/BasePartialBatchProcessor.ts index d4cfd7e9ce..3cf4b30309 100644 --- a/packages/batch/src/BasePartialBatchProcessor.ts +++ b/packages/batch/src/BasePartialBatchProcessor.ts @@ -5,7 +5,7 @@ import type { } from 'aws-lambda'; import { BasePartialProcessor } from './BasePartialProcessor'; import { DATA_CLASS_MAPPING, DEFAULT_RESPONSE, EventType } from './constants'; -import { BatchProcessingError } from './errors'; +import { FullBatchFailureError } from './errors'; import type { EventSourceDataClassTypes, PartialItemFailureResponse, @@ -46,12 +46,7 @@ abstract class BasePartialBatchProcessor extends BasePartialProcessor { } if (this.entireBatchFailed()) { - throw new BatchProcessingError( - 'All records failed processing. ' + - this.exceptions.length + - ' individual errors logged separately below.', - this.exceptions - ); + throw new FullBatchFailureError(this.errors); } const messages: PartialItemFailures[] = this.getMessagesToReport(); @@ -110,7 +105,7 @@ abstract class BasePartialBatchProcessor extends BasePartialProcessor { * @returns true if all records resulted in exception results */ public entireBatchFailed(): boolean { - return this.exceptions.length == this.records.length; + return this.errors.length == this.records.length; } /** @@ -135,7 +130,7 @@ abstract class BasePartialBatchProcessor extends BasePartialProcessor { public prepare(): void { this.successMessages.length = 0; this.failureMessages.length = 0; - this.exceptions.length = 0; + this.errors.length = 0; this.batchResponse = DEFAULT_RESPONSE; } diff --git a/packages/batch/src/BasePartialProcessor.ts b/packages/batch/src/BasePartialProcessor.ts index ecd62c29b0..a51400d4a5 100644 --- a/packages/batch/src/BasePartialProcessor.ts +++ b/packages/batch/src/BasePartialProcessor.ts @@ -11,7 +11,7 @@ import type { * Abstract class for batch processors. */ abstract class BasePartialProcessor { - public exceptions: Error[]; + public errors: Error[]; public failureMessages: EventSourceDataClassTypes[]; @@ -29,7 +29,7 @@ abstract class BasePartialProcessor { public constructor() { this.successMessages = []; this.failureMessages = []; - this.exceptions = []; + this.errors = []; this.records = []; this.handler = new Function(); } @@ -84,7 +84,7 @@ abstract class BasePartialProcessor { exception: Error ): FailureResponse { const entry: FailureResponse = ['fail', exception.message, record]; - this.exceptions.push(exception); + this.errors.push(exception); this.failureMessages.push(record); return entry; diff --git a/packages/batch/src/BatchProcessor.ts b/packages/batch/src/BatchProcessor.ts index fdab0c6f44..730b3e94ef 100644 --- a/packages/batch/src/BatchProcessor.ts +++ b/packages/batch/src/BatchProcessor.ts @@ -1,4 +1,5 @@ import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; +import { BatchProcessingError } from './errors'; import type { BaseRecord, FailureResponse, SuccessResponse } from './types'; /** @@ -8,7 +9,7 @@ class BatchProcessor extends BasePartialBatchProcessor { public async asyncProcessRecord( _record: BaseRecord ): Promise { - throw new Error('Not implemented. Use process() instead.'); + throw new BatchProcessingError('Not implemented. Use process() instead.'); } /** diff --git a/packages/batch/src/SqsFifoPartialProcessor.ts b/packages/batch/src/SqsFifoPartialProcessor.ts index 0c10993273..ebdd4d73e8 100644 --- a/packages/batch/src/SqsFifoPartialProcessor.ts +++ b/packages/batch/src/SqsFifoPartialProcessor.ts @@ -1,5 +1,6 @@ import { BatchProcessor } from './BatchProcessor'; import { EventType } from './constants'; +import { SqsFifoShortCircuitError } from './errors'; import type { FailureResponse, SuccessResponse } from './types'; /** @@ -52,10 +53,7 @@ class SqsFifoPartialProcessor extends BatchProcessor { for (const record of remainingRecords) { const data = this.toBatchType(record, this.eventType); processedRecords.push( - this.failureHandler( - data, - new Error('A previous record failed processing') - ) + this.failureHandler(data, new SqsFifoShortCircuitError()) ); } diff --git a/packages/batch/src/asyncProcessPartialResponse.ts b/packages/batch/src/asyncProcessPartialResponse.ts index eee584ed1f..5a33b5b534 100644 --- a/packages/batch/src/asyncProcessPartialResponse.ts +++ b/packages/batch/src/asyncProcessPartialResponse.ts @@ -1,5 +1,5 @@ import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; -import { EventType } from './constants'; +import { UnexpectedBatchTypeError } from './errors'; import type { BaseRecord, BatchProcessingOptions, @@ -19,13 +19,8 @@ const asyncProcessPartialResponse = async ( processor: BasePartialBatchProcessor, options?: BatchProcessingOptions ): Promise => { - if (!event.Records) { - const eventTypes: string = Object.values(EventType).toString(); - throw new Error( - 'Failed to convert event to record batch for processing.\nPlease ensure batch event is a valid ' + - eventTypes + - ' event.' - ); + if (!event.Records || !Array.isArray(event.Records)) { + throw new UnexpectedBatchTypeError(); } processor.register(event.Records, recordHandler, options); diff --git a/packages/batch/src/errors.ts b/packages/batch/src/errors.ts index ed5bd4fc9e..8d2b0327b0 100644 --- a/packages/batch/src/errors.ts +++ b/packages/batch/src/errors.ts @@ -1,49 +1,59 @@ +import { EventType } from './constants'; + /** - * Base error type for batch processing - * All errors thrown by major failures extend this base class + * Base error thrown by the Batch Processing utility */ -class BaseBatchProcessingError extends Error { - public childErrors: Error[]; - - public msg: string; - - public constructor(msg: string, childErrors: Error[]) { - super(msg); - this.msg = msg; - this.childErrors = childErrors; +class BatchProcessingError extends Error { + public constructor(message: string) { + super(message); + this.name = 'BatchProcessingError'; } +} - /** - * Generates a list of errors that were generated by the major failure - * @returns Formatted string listing all the errors that occurred - * - * @example - * When all batch records fail to be processed, this will generate a string like: - * All records failed processing. 3 individual errors logged separately below. - * ,Failed to process record. - * ,Failed to process record. - * ,Failed to process record. - */ - public formatErrors(parentErrorString: string): string { - const errorList: string[] = [parentErrorString + '\n']; - - for (const error of this.childErrors) { - errorList.push(error.message + '\n'); - } +/** + * Error thrown by the Batch Processing utility when all batch records failed to be processed + */ +class FullBatchFailureError extends BatchProcessingError { + public recordErrors: Error[]; - return '\n' + errorList; + public constructor(childErrors: Error[]) { + super('All records failed processing. See individual errors below.'); + this.recordErrors = childErrors; + this.name = 'FullBatchFailureError'; } } /** - * When all batch records failed to be processed + * Error thrown by the Batch Processing utility when a SQS FIFO queue is short-circuited. + * This happens when a record fails processing and the remaining records are not processed + * to avoid out-of-order delivery. */ -class BatchProcessingError extends BaseBatchProcessingError { - public constructor(msg: string, childErrors: Error[]) { - super(msg, childErrors); - const parentErrorString: string = this.message; - this.message = this.formatErrors(parentErrorString); +class SqsFifoShortCircuitError extends BatchProcessingError { + public constructor() { + super( + 'A previous record failed processing. The remaining records were not processed to avoid out-of-order delivery.' + ); + this.name = 'SqsFifoShortCircuitError'; } } -export { BaseBatchProcessingError, BatchProcessingError }; +/** + * Error thrown by the Batch Processing utility when a partial processor receives an unexpected + * batch type. + */ +class UnexpectedBatchTypeError extends BatchProcessingError { + public constructor() { + super( + `Unexpected batch type. Possible values are: ${Object.values( + EventType + ).join(', ')}` + ); + this.name = 'UnexpectedBatchTypeError'; + } +} +export { + BatchProcessingError, + FullBatchFailureError, + SqsFifoShortCircuitError, + UnexpectedBatchTypeError, +}; diff --git a/packages/batch/src/processPartialResponse.ts b/packages/batch/src/processPartialResponse.ts index d09e7be6b9..2385f28666 100644 --- a/packages/batch/src/processPartialResponse.ts +++ b/packages/batch/src/processPartialResponse.ts @@ -1,5 +1,5 @@ import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; -import { EventType } from './constants'; +import { UnexpectedBatchTypeError } from './errors'; import type { BaseRecord, BatchProcessingOptions, @@ -19,13 +19,8 @@ const processPartialResponse = ( processor: BasePartialBatchProcessor, options?: BatchProcessingOptions ): PartialItemFailureResponse => { - if (!event.Records) { - const eventTypes: string = Object.values(EventType).toString(); - throw new Error( - 'Failed to convert event to record batch for processing.\nPlease ensure batch event is a valid ' + - eventTypes + - ' event.' - ); + if (!event.Records || !Array.isArray(event.Records)) { + throw new UnexpectedBatchTypeError(); } processor.register(event.Records, recordHandler, options); diff --git a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts b/packages/batch/tests/unit/AsyncBatchProcessor.test.ts index 9079a1c464..0bccdd6d07 100644 --- a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts +++ b/packages/batch/tests/unit/AsyncBatchProcessor.test.ts @@ -7,7 +7,7 @@ import type { Context } from 'aws-lambda'; import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; import { AsyncBatchProcessor } from '../../src/AsyncBatchProcessor'; import { EventType } from '../../src/constants'; -import { BatchProcessingError } from '../../src/errors'; +import { BatchProcessingError, FullBatchFailureError } from '../../src/errors'; import type { BatchProcessingOptions } from '../../src/types'; import { dynamodbRecordFactory, @@ -95,7 +95,7 @@ describe('Class: AsyncBatchProcessor', () => { // Assess await expect(processor.asyncProcess()).rejects.toThrowError( - BatchProcessingError + FullBatchFailureError ); }); }); @@ -160,7 +160,7 @@ describe('Class: AsyncBatchProcessor', () => { // Assess await expect(processor.asyncProcess()).rejects.toThrowError( - BatchProcessingError + FullBatchFailureError ); }); }); @@ -225,7 +225,7 @@ describe('Class: AsyncBatchProcessor', () => { // Assess await expect(processor.asyncProcess()).rejects.toThrowError( - BatchProcessingError + FullBatchFailureError ); }); }); @@ -279,7 +279,7 @@ describe('Class: AsyncBatchProcessor', () => { // Act processor.register(records, asyncHandlerWithContext, badOptions); await expect(() => processor.asyncProcess()).rejects.toThrowError( - BatchProcessingError + FullBatchFailureError ); }); }); @@ -289,8 +289,6 @@ describe('Class: AsyncBatchProcessor', () => { const processor = new AsyncBatchProcessor(EventType.SQS); // Act & Assess - expect(() => processor.process()).toThrowError( - 'Not implemented. Use asyncProcess() instead.' - ); + expect(() => processor.process()).toThrowError(BatchProcessingError); }); }); diff --git a/packages/batch/tests/unit/BatchProcessor.test.ts b/packages/batch/tests/unit/BatchProcessor.test.ts index 5be28271d2..97f50b7d11 100644 --- a/packages/batch/tests/unit/BatchProcessor.test.ts +++ b/packages/batch/tests/unit/BatchProcessor.test.ts @@ -7,7 +7,7 @@ import type { Context } from 'aws-lambda'; import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; import { BatchProcessor } from '../../src/BatchProcessor'; import { EventType } from '../../src/constants'; -import { BatchProcessingError } from '../../src/errors'; +import { BatchProcessingError, FullBatchFailureError } from '../../src/errors'; import type { BatchProcessingOptions } from '../../src/types'; import { dynamodbRecordFactory, @@ -92,7 +92,7 @@ describe('Class: BatchProcessor', () => { // Act & Assess processor.register(records, sqsRecordHandler); - expect(() => processor.process()).toThrowError(BatchProcessingError); + expect(() => processor.process()).toThrowError(FullBatchFailureError); }); }); @@ -154,7 +154,7 @@ describe('Class: BatchProcessor', () => { processor.register(records, kinesisRecordHandler); // Assess - expect(() => processor.process()).toThrowError(BatchProcessingError); + expect(() => processor.process()).toThrowError(FullBatchFailureError); }); }); @@ -217,7 +217,7 @@ describe('Class: BatchProcessor', () => { processor.register(records, dynamodbRecordHandler); // Assess - expect(() => processor.process()).toThrowError(BatchProcessingError); + expect(() => processor.process()).toThrowError(FullBatchFailureError); }); }); @@ -269,7 +269,7 @@ describe('Class: BatchProcessor', () => { // Act processor.register(records, handlerWithContext, badOptions); - expect(() => processor.process()).toThrowError(BatchProcessingError); + expect(() => processor.process()).toThrowError(FullBatchFailureError); }); }); @@ -278,8 +278,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.SQS); // Act & Assess - await expect(() => processor.asyncProcess()).rejects.toThrow( - 'Not implemented. Use process() instead.' + await expect(() => processor.asyncProcess()).rejects.toThrowError( + BatchProcessingError ); }); }); diff --git a/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts b/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts index 564886b1d8..127c87a0a2 100644 --- a/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts +++ b/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts @@ -3,7 +3,11 @@ * * @group unit/batch/class/sqsfifobatchprocessor */ -import { SqsFifoPartialProcessor, processPartialResponse } from '../../src'; +import { + SqsFifoPartialProcessor, + processPartialResponse, + SqsFifoShortCircuitError, +} from '../../src'; import { sqsRecordFactory } from '../helpers/factories'; import { sqsRecordHandler } from '../helpers/handlers'; @@ -54,6 +58,7 @@ describe('Class: SqsFifoBatchProcessor', () => { expect(result['batchItemFailures'][1]['itemIdentifier']).toBe( thirdRecord.messageId ); + expect(processor.errors[1]).toBeInstanceOf(SqsFifoShortCircuitError); }); }); }); diff --git a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts b/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts index fde15ccf42..aef38f33ec 100644 --- a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts +++ b/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts @@ -173,7 +173,6 @@ describe('Function: processPartialResponse()', () => { // Prepare const processor = new AsyncBatchProcessor(EventType.SQS); const event = dummyEvent; - const eventTypes: string = Object.values(EventType).toString(); const handler = async ( event: SQSEvent, @@ -190,11 +189,9 @@ describe('Function: processPartialResponse()', () => { await expect(() => handler(event as unknown as SQSEvent, context) ).rejects.toThrowError( - new Error( - 'Failed to convert event to record batch for processing.\nPlease ensure batch event is a valid ' + - eventTypes + - ' event.' - ) + `Unexpected batch type. Possible values are: ${Object.keys( + EventType + ).join(', ')}` ); }); diff --git a/packages/batch/tests/unit/processPartialResponse.test.ts b/packages/batch/tests/unit/processPartialResponse.test.ts index 3de2edcce3..f33caa6f06 100644 --- a/packages/batch/tests/unit/processPartialResponse.test.ts +++ b/packages/batch/tests/unit/processPartialResponse.test.ts @@ -157,7 +157,6 @@ describe('Function: processPartialResponse()', () => { // Prepare const processor = new BatchProcessor(EventType.SQS); const event = dummyEvent; - const eventTypes: string = Object.values(EventType).toString(); const handler = ( event: SQSEvent, @@ -168,11 +167,9 @@ describe('Function: processPartialResponse()', () => { // Act & Assess expect(() => handler(event as unknown as SQSEvent, context)).toThrowError( - new Error( - 'Failed to convert event to record batch for processing.\nPlease ensure batch event is a valid ' + - eventTypes + - ' event.' - ) + `Unexpected batch type. Possible values are: ${Object.keys( + EventType + ).join(', ')}` ); }); From 93ead453de254e5bfef586a3741afe5ff797d37f Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 14 Aug 2023 23:56:11 +0200 Subject: [PATCH 10/28] chore(ci): add project config to issue templates (#1652) --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + .github/ISSUE_TEMPLATE/documentation_improvements.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.yml | 1 + .github/ISSUE_TEMPLATE/maintenance.yml | 1 + .github/ISSUE_TEMPLATE/rfc.yml | 1 + .github/ISSUE_TEMPLATE/share_your_work.yml | 1 + .github/ISSUE_TEMPLATE/support_powertools.yml | 1 + 7 files changed, 7 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2e835370a4..c9fbf5216c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,6 +2,7 @@ name: Bug report description: Report a reproducible bug to help us improve title: "Bug: TITLE" labels: ["type/bug", "triage"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/documentation_improvements.yml b/.github/ISSUE_TEMPLATE/documentation_improvements.yml index 93b47d75fc..656a9f2e5a 100644 --- a/.github/ISSUE_TEMPLATE/documentation_improvements.yml +++ b/.github/ISSUE_TEMPLATE/documentation_improvements.yml @@ -2,6 +2,7 @@ name: Documentation improvements description: Suggest a documentation update to improve everyone's experience title: "Docs: TITLE" labels: ["area/documentation", "triage"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 4aca7d76ee..fa337d4605 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -2,6 +2,7 @@ name: Feature request description: Suggest an idea for Lambda Powertools title: "Feature request: TITLE" labels: ["type/feature-request", "triage"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/maintenance.yml b/.github/ISSUE_TEMPLATE/maintenance.yml index 374e4e2ba8..c5a326066a 100644 --- a/.github/ISSUE_TEMPLATE/maintenance.yml +++ b/.github/ISSUE_TEMPLATE/maintenance.yml @@ -2,6 +2,7 @@ name: Maintenance description: Suggest an activity to help address tech debt, governance, and anything internal title: "Maintenance: TITLE" labels: ["type/internal", "triage"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/rfc.yml b/.github/ISSUE_TEMPLATE/rfc.yml index f04a90f2d7..dd048e102a 100644 --- a/.github/ISSUE_TEMPLATE/rfc.yml +++ b/.github/ISSUE_TEMPLATE/rfc.yml @@ -2,6 +2,7 @@ name: Request for Comments (RFC) description: Feature design and detailed proposals title: "RFC: TITLE" labels: ["type/RFC", "triage"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/share_your_work.yml b/.github/ISSUE_TEMPLATE/share_your_work.yml index 8477619b6b..fed195bacf 100644 --- a/.github/ISSUE_TEMPLATE/share_your_work.yml +++ b/.github/ISSUE_TEMPLATE/share_your_work.yml @@ -2,6 +2,7 @@ name: I Made This (showcase your work) description: Share what you did with Powertools for AWS Lambda (TypeScript) 💞💞. Blog post, workshops, presentation, sample apps, etc. title: "[I Made This]: " labels: ["community-content"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/support_powertools.yml b/.github/ISSUE_TEMPLATE/support_powertools.yml index d1f7bdf8a9..3749885dfd 100644 --- a/.github/ISSUE_TEMPLATE/support_powertools.yml +++ b/.github/ISSUE_TEMPLATE/support_powertools.yml @@ -2,6 +2,7 @@ name: Support Powertools for AWS Lambda (TypeScript) (become a reference) description: Add your organization's name or logo to the Powertools for AWS Lambda (TypeScript) documentation title: "[Support Powertools for AWS Lambda (TypeScript)]: <your organization name>" labels: ["customer-reference"] +projects: ["aws-powertools/7"] body: - type: markdown attributes: From 83f388a5409cf57c367859e593639b38744761c6 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Wed, 16 Aug 2023 18:22:14 +0200 Subject: [PATCH 11/28] chore(docs): added tecRacer GmbH & Co. KG to supporter (#1653) --- README.md | 2 ++ docs/index.md | 1 + packages/batch/README.md | 1 + packages/commons/README.md | 1 + packages/idempotency/README.md | 1 + packages/logger/README.md | 1 + packages/metrics/README.md | 1 + packages/parameters/README.md | 1 + packages/tracer/README.md | 1 + 9 files changed, 10 insertions(+) diff --git a/README.md b/README.md index 9b7168ae19..0363e5c104 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,8 @@ The following companies, among others, use Powertools: * [Bailey Nelson](https://www.baileynelson.com.au) * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) +* [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/docs/index.md b/docs/index.md index d5352071bd..b0c16e76da 100644 --- a/docs/index.md +++ b/docs/index.md @@ -326,6 +326,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr){target="_blank"} * [Sennder](https://sennder.com/){target="_blank"} * [Certible](https://www.certible.com/){target="_blank"} +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/){target="_blank"} ### Sharing your work diff --git a/packages/batch/README.md b/packages/batch/README.md index caf8bae3ea..4883d430f2 100644 --- a/packages/batch/README.md +++ b/packages/batch/README.md @@ -245,6 +245,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/commons/README.md b/packages/commons/README.md index 6d62247577..cfef383eb4 100644 --- a/packages/commons/README.md +++ b/packages/commons/README.md @@ -99,6 +99,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/idempotency/README.md b/packages/idempotency/README.md index 534d532cb9..a81abea428 100644 --- a/packages/idempotency/README.md +++ b/packages/idempotency/README.md @@ -243,6 +243,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/logger/README.md b/packages/logger/README.md index ff8b873201..d895f34c94 100644 --- a/packages/logger/README.md +++ b/packages/logger/README.md @@ -98,6 +98,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/metrics/README.md b/packages/metrics/README.md index 3df94a668a..0be235cdad 100644 --- a/packages/metrics/README.md +++ b/packages/metrics/README.md @@ -97,6 +97,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/parameters/README.md b/packages/parameters/README.md index b4c041c26e..080bd9751e 100644 --- a/packages/parameters/README.md +++ b/packages/parameters/README.md @@ -229,6 +229,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work diff --git a/packages/tracer/README.md b/packages/tracer/README.md index 3df94a668a..0be235cdad 100644 --- a/packages/tracer/README.md +++ b/packages/tracer/README.md @@ -97,6 +97,7 @@ The following companies, among others, use Powertools: * [Perfect Post](https://www.perfectpost.fr) * [Sennder](https://sennder.com/) * [Certible](https://www.certible.com/) +* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) ### Sharing your work From 9668a0f75b2012f47f722023d48dff33507f3653 Mon Sep 17 00:00:00 2001 From: Alexander Schueren <amelnyk@amazon.com> Date: Thu, 17 Aug 2023 15:39:55 +0200 Subject: [PATCH 12/28] chore(ci): add il-central-1 to layer deployment pipeline (#1656) * add TelAviv region to layer deployment * add TelAviv region to docs --- .github/workflows/reusable_deploy_layer_stack.yml | 3 ++- docs/index.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable_deploy_layer_stack.yml b/.github/workflows/reusable_deploy_layer_stack.yml index 27521fc887..6c970a4205 100644 --- a/.github/workflows/reusable_deploy_layer_stack.yml +++ b/.github/workflows/reusable_deploy_layer_stack.yml @@ -57,6 +57,7 @@ jobs: "eu-north-1", "sa-east-1", "me-south-1", + "il-central-1", ] steps: - name: checkout @@ -103,4 +104,4 @@ jobs: if: ${{ inputs.stage == 'PROD' }} uses: ./.github/workflows/reusable_update_layer_arn_docs.yml with: - latest_published_version: ${{ inputs.latest_published_version }} \ No newline at end of file + latest_published_version: ${{ inputs.latest_published_version }} diff --git a/docs/index.md b/docs/index.md index b0c16e76da..e3f7350ef3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -66,6 +66,7 @@ You can include Powertools for AWS Lambda (TypeScript) Lambda Layer using [AWS L | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | + | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScript:18](#){: .copyMe}:clipboard: | ??? note "Click to expand and copy code snippets for popular frameworks" From 92f3686a2f64f4f4eb6e3b0b3bc9c4733ab48b57 Mon Sep 17 00:00:00 2001 From: Alexander Schueren <amelnyk@amazon.com> Date: Thu, 17 Aug 2023 17:08:46 +0200 Subject: [PATCH 13/28] docs(idempotency: improve docs & snippets (#1655) --- .../idempotency/makeIdempotentJmes.ts | 2 +- docs/utilities/idempotency.md | 76 +++++++++++-------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/docs/snippets/idempotency/makeIdempotentJmes.ts b/docs/snippets/idempotency/makeIdempotentJmes.ts index b460f6df05..32675c1687 100644 --- a/docs/snippets/idempotency/makeIdempotentJmes.ts +++ b/docs/snippets/idempotency/makeIdempotentJmes.ts @@ -24,7 +24,7 @@ const createSubscriptionPayment = async ( // Extract the idempotency key from the request headers const config = new IdempotencyConfig({ - eventKeyJmesPath: 'headers."X-Idempotency-Key"', + eventKeyJmesPath: 'body', }); export const handler = makeIdempotent( diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 70cec2c1c1..5b2cc4fb13 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -52,12 +52,22 @@ classDiagram ## Getting started -### IAM Permissions +### Installation +Install the library in your project +```shell +npm i @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb +``` + +While we support Amazon DynamoDB as a persistance layer out of the box, you need to bring your own AWS SDK for JavaScript v3 DynamoDB client. -Your Lambda function IAM Role must have `dynamodb:GetItem`, `dynamodb:PutItem`, `dynamodb:UpdateItem` and `dynamodb:DeleteItem` IAM permissions before using this feature. ???+ note - If you're using one of our examples: [AWS Serverless Application Model (SAM)](#required-resources) or [Terraform](#required-resources) the required permissions are already included. + This utility supports **[AWS SDK for JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/){target="_blank"} only**. If you are using the `nodejs18.x` runtime, the AWS SDK for JavaScript v3 is already installed and you can install only the utility. + + +### IAM Permissions + +Your Lambda function IAM Role must have `dynamodb:GetItem`, `dynamodb:PutItem`, `dynamodb:UpdateItem` and `dynamodb:DeleteItem` IAM permissions before using this feature. If you're using one of our examples: [AWS Serverless Application Model (SAM)](#required-resources) or [Terraform](#required-resources) the required permissions are already included. ### Required resources @@ -69,10 +79,10 @@ As of now, Amazon DynamoDB is the only supported persistent storage layer, so yo If you're not [changing the default configuration for the DynamoDB persistence layer](#dynamodbpersistencelayer), this is the expected default configuration: -| Configuration | Value | Notes | -| ------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Partition key | `id` | -| TTL attribute name | `expiration` | This can only be configured after your table is created if you're using AWS Console | +| Configuration | Default value | Notes | +| ------------------ |:--------------|-----------------------------------------------------------------------------------------| +| Partition key | `id` | The id of each idempotency record which a combination of `functionName#hashOfPayload`. | +| TTL attribute name | `expiration` | This can only be configured after your table is created if you're using AWS Console. | ???+ tip "Tip: You can share a single state table for all functions" You can reuse the same DynamoDB table to store idempotency state. We add the Lambda function name in addition to the idempotency key as a hash key. @@ -212,18 +222,13 @@ If you're not [changing the default configuration for the DynamoDB persistence l You can quickly start by initializing the `DynamoDBPersistenceLayer` class and using it with the `makeIdempotent` function wrapper on your Lambda handler. -???+ note - In this example, the entire Lambda handler is treated as a single idempotent operation. If your Lambda handler can cause multiple side effects, or you're only interested in making a specific logic idempotent, use the `makeIdempotent` high-order function only on the function that needs to be idempotent. - -!!! tip "See [Choosing a payload subset for idempotency](#choosing-a-payload-subset-for-idempotency) for more elaborate use cases." - === "index.ts" ```typescript hl_lines="2-3 21 35-38" --8<-- "docs/snippets/idempotency/makeIdempotentBase.ts" ``` -=== "Types" +=== "types.ts" ```typescript --8<-- "docs/snippets/idempotency/types.ts::13" @@ -231,7 +236,12 @@ You can quickly start by initializing the `DynamoDBPersistenceLayer` class and u After processing this request successfully, a second request containing the exact same payload above will now return the same response, ensuring our customer isn't charged twice. -!!! question "New to idempotency concept? Please review our [Terminology](#terminology) section if you haven't yet." + +???+ note + In this example, the entire Lambda handler is treated as a single idempotent operation. If your Lambda handler can cause multiple side effects, or you're only interested in making a specific logic idempotent, use the `makeIdempotent` high-order function only on the function that needs to be idempotent. + + See [Choosing a payload subset for idempotency](#choosing-a-payload-subset-for-idempotency) for more elaborate use cases. + You can also use the `makeIdempotent` function wrapper on any function that returns a response to make it idempotent. This is useful when you want to make a specific logic idempotent, for example when your Lambda handler performs multiple side effects and you only want to make a specific one idempotent. @@ -240,21 +250,21 @@ You can also use the `makeIdempotent` function wrapper on any function that retu When using `makeIdempotent` on arbitrary functions, you can tell us which argument in your function signature has the data we should use via **`dataIndexArgument`**. If you don't specify this argument, we'll use the first argument in the function signature. -???+ note - The function in the example below has two arguments, note that while wrapping it with the `makeIdempotent` high-order function, we specify the `dataIndexArgument` as `1` to tell the decorator that the second argument is the one that contains the data we should use to make the function idempotent. Remember that arguments are zero-indexed, so the first argument is `0`, the second is `1`, and so on. - === "index.ts" ```typescript hl_lines="22 34-38" --8<-- "docs/snippets/idempotency/makeIdempotentAnyFunction.ts" ``` -=== "Types" +=== "types.ts" ```typescript --8<-- "docs/snippets/idempotency/types.ts::13" ``` +The function this example has two arguments, note that while wrapping it with the `makeIdempotent` high-order function, we specify the `dataIndexArgument` as `1` to tell the decorator that the second argument is the one that contains the data we should use to make the function idempotent. Remember that arguments are zero-indexed, so the first argument is `0`, the second is `1`, and so on. + + ### MakeHandlerIdempotent Middy middleware !!! tip "A note about Middy" @@ -269,7 +279,7 @@ If you are using [Middy](https://middy.js.org){target="_blank"} as your middlewa --8<-- "docs/snippets/idempotency/makeHandlerIdempotent.ts" ``` -=== "Types" +=== "types.ts" ```typescript --8<-- "docs/snippets/idempotency/types.ts::13" @@ -277,12 +287,9 @@ If you are using [Middy](https://middy.js.org){target="_blank"} as your middlewa ### Choosing a payload subset for idempotency -???+ tip "Tip: Dealing with always changing payloads" - When dealing with a more elaborate payload, where parts of the payload always change, you should use the **`eventKeyJmesPath`** parameter. - -Use [`IdempotencyConfig`](#customizing-the-default-behavior) to instruct the idempotent decorator to only use a portion of your payload to verify whether a request is idempotent, and therefore it should not be retried. +Use [`IdempotencyConfig`](#customizing-the-default-behavior) to instruct the idempotent decorator to only use a portion of your payload to verify whether a request is idempotent, and therefore it should not be retried. When dealing with a more elaborate payload, where parts of the payload always change, you should use the **`eventKeyJmesPath`** parameter. -> **Payment scenario** +**Payment scenario** In this example, we have a Lambda handler that creates a payment for a user subscribing to a product. We want to ensure that we don't accidentally charge our customer by subscribing them more than once. @@ -290,7 +297,7 @@ Imagine the function executes successfully, but the client never receives the re **What we want here** is to instruct Idempotency to use the `user` and `productId` fields from our incoming payload as our idempotency key. If we were to treat the entire request as our idempotency key, a simple HTTP header or timestamp change would cause our customer to be charged twice. -???+ tip "Deserializing JSON strings in payloads for increased accuracy." +???+ warning "Deserializing JSON strings in payloads for increased accuracy." The payload extracted by the `eventKeyJmesPath` is treated as a string by default. This means there could be differences in whitespace even when the JSON payload itself is identical. === "index.ts" @@ -334,7 +341,7 @@ Imagine the function executes successfully, but the client never receives the re } ``` -=== "Types" +=== "types.ts" ```typescript --8<-- "docs/snippets/idempotency/types.ts::13" @@ -342,10 +349,10 @@ Imagine the function executes successfully, but the client never receives the re ### Lambda timeouts -???+ note - This is automatically done when you wrap your Lambda handler with the [makeIdempotent](#makeIdempotent-function-wrapper) function wrapper, or use the [`makeHandlerIdempotent`](#makeHandlerIdempotent-middy-middleware) Middy middleware. -To prevent against extended failed retries when a [Lambda function times out](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-verify-invocation-timeouts/), Powertools for AWS calculates and includes the remaining invocation available time as part of the idempotency record. + +To prevent against extended failed retries when a [Lambda function times out](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-verify-invocation-timeouts/), Powertools for AWS Lambda calculates and includes the remaining invocation available time as part of the idempotency record. +This is automatically done when you wrap your Lambda handler with the [makeIdempotent](#makeIdempotent-function-wrapper) function wrapper, or use the [`makeHandlerIdempotent`](#makeHandlerIdempotent-middy-middleware) Middy middleware. ???+ example If a second invocation happens **after** this timestamp, and the record is marked as `INPROGRESS`, we will execute the invocation again as if it was in the `EXPIRED` state (e.g, `expire_seconds` field elapsed). @@ -353,7 +360,7 @@ To prevent against extended failed retries when a [Lambda function times out](ht This means that if an invocation expired during execution, it will be quickly executed again on the next retry. ???+ important - If you are only using the [makeIdempotent function wrapper](#makeIdempotent-function-wrapper) to guard isolated parts of your code, you must use `registerLambdaContext` available in the [idempotency config object](#customizing-the-default-behavior) to benefit from this protection. + If you are only using the [makeIdempotent function wrapper](#makeIdempotent-function-wrapper) to guard isolated parts of your code outside of your handler, you must use `registerLambdaContext` available in the [idempotency config object](#customizing-the-default-behavior) to benefit from this protection. Here is an example on how you register the Lambda context in your handler: @@ -371,6 +378,7 @@ This means that new invocations will execute your code again despite having the <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -410,6 +418,7 @@ The following sequence diagrams explain how the Idempotency feature behaves unde <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -444,6 +453,7 @@ sequenceDiagram <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -474,6 +484,7 @@ sequenceDiagram <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -509,6 +520,7 @@ sequenceDiagram <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -537,6 +549,7 @@ sequenceDiagram <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -570,6 +583,7 @@ sequenceDiagram <center> ```mermaid sequenceDiagram + autonumber participant Client participant Lambda participant Persistence Layer @@ -794,4 +808,4 @@ The example function above would cause data to be stored in DynamoDB like this: ## Extra resources If you're interested in a deep dive on how Amazon uses idempotency when building our APIs, check out -[this article](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/){target="_blank"}. \ No newline at end of file +[this article](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/){target="_blank"}. From 4e6f662b244a941a911c1ed5973bef11d7610093 Mon Sep 17 00:00:00 2001 From: Simon Thulbourn <sthulb@users.noreply.github.com> Date: Thu, 17 Aug 2023 17:29:25 +0200 Subject: [PATCH 14/28] fix(docs): update versions.json jq query --- .github/workflows/reusable-publish-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-publish-docs.yml b/.github/workflows/reusable-publish-docs.yml index d70d25d526..499221aa99 100644 --- a/.github/workflows/reusable-publish-docs.yml +++ b/.github/workflows/reusable-publish-docs.yml @@ -130,7 +130,7 @@ jobs: s3://${{ secrets.AWS_DOCS_BUCKET }}/lambda-typescript/versions.json \ versions_old.json jq 'del(.[].aliases[] | select(. == "${{ env.ALIAS }}"))' < versions_old.json > versions_proc.json - jq '. as $o | [{"title": "${{ env.VERSION }}", "version": "${{ env.VERSION }}", "aliases": ["${{env.ALIAS}}"] }] as $n | $n | if .[0].title | test("[a-z]+") or any($o[].title == "${{ env.VERSION }}";.) then $o else $n + $o end' < versions_proc.json > versions.json + jq '. as $o | [{"title": "${{ env.VERSION }}", "version": "${{ env.VERSION }}", "aliases": ["${{ env.ALIAS }}"] }] as $n | $n | if .[0].title | test("[a-z]+") or any($o[].title == $n[0].title;.) then [($o | .[] | select(.title == $n[0].title).aliases += $n[0].aliases | . )] else $n + $o end' < versions_proc.json > versions.json aws s3 cp \ versions.json \ s3://${{ secrets.AWS_DOCS_BUCKET }}/lambda-typescript/versions.json From 2231f421c271e45a4a2fd7b67b0776d05c432afc Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Tue, 29 Aug 2023 19:50:12 +0200 Subject: [PATCH 15/28] chore(ci): bump `aws-actions/configure-aws-credentials` action (#1663) * deps(ci): bump aws credentials action * deps(ci): bump aws credentials action --- .github/workflows/dispatch_analytics.yml | 3 ++- .github/workflows/reusable-publish-docs.yml | 3 ++- .github/workflows/reusable_deploy_layer_stack.yml | 3 ++- .github/workflows/run-e2e-tests.yml | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dispatch_analytics.yml b/.github/workflows/dispatch_analytics.yml index b091a1ab40..56bc9fca49 100644 --- a/.github/workflows/dispatch_analytics.yml +++ b/.github/workflows/dispatch_analytics.yml @@ -30,10 +30,11 @@ jobs: environment: analytics steps: - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 + uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 with: aws-region: eu-central-1 role-to-assume: ${{ secrets.AWS_ANALYTICS_ROLE_ARN }} + mask-aws-account-id: true - name: Invoke Lambda function run: | diff --git a/.github/workflows/reusable-publish-docs.yml b/.github/workflows/reusable-publish-docs.yml index 499221aa99..78ea680699 100644 --- a/.github/workflows/reusable-publish-docs.yml +++ b/.github/workflows/reusable-publish-docs.yml @@ -86,10 +86,11 @@ jobs: rm -rf api npm run docs-generateApiDoc - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 + uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} + mask-aws-account-id: true - name: Copy API Docs run: | cp -r api site/ diff --git a/.github/workflows/reusable_deploy_layer_stack.yml b/.github/workflows/reusable_deploy_layer_stack.yml index 6c970a4205..88da081792 100644 --- a/.github/workflows/reusable_deploy_layer_stack.yml +++ b/.github/workflows/reusable_deploy_layer_stack.yml @@ -63,10 +63,11 @@ jobs: - name: checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: aws credentials - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 + uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 with: aws-region: ${{ matrix.region }} role-to-assume: ${{ secrets.target-account-role }} + mask-aws-account-id: true - name: Setup Node.js uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 with: diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index fb4186c420..d1e6e934c4 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -50,10 +50,11 @@ jobs: with: nodeVersion: ${{ matrix.version }} - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 + uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 with: role-to-assume: ${{ secrets.AWS_ROLE_ARN_TO_ASSUME }} aws-region: eu-west-1 + mask-aws-account-id: true - name: Run integration tests on utils run: | RUNTIME=nodejs${{ matrix.version }}x npm run test:e2e -w packages/${{ matrix.package }} @@ -96,10 +97,11 @@ jobs: - name: Setup dependencies uses: ./.github/actions/cached-node-modules - name: "Configure AWS credentials" - uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0 + uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 with: role-to-assume: ${{ secrets.AWS_ROLE_ARN_TO_ASSUME }} aws-region: eu-west-1 + mask-aws-account-id: true - name: Create layer files run: | export VERSION=latest From 50b6ace8e7967248abcb7af0a33c8870450479ba Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Fri, 1 Sep 2023 18:38:38 +0200 Subject: [PATCH 16/28] chore(ci): pin npm 9.x in workflows (#1666) --- .github/actions/cached-node-modules/action.yml | 3 +-- .../workflows/reusable-run-linting-check-and-unit-tests.yml | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/actions/cached-node-modules/action.yml b/.github/actions/cached-node-modules/action.yml index c3df647248..d86c8d7b10 100644 --- a/.github/actions/cached-node-modules/action.yml +++ b/.github/actions/cached-node-modules/action.yml @@ -12,9 +12,8 @@ runs: using: "composite" steps: - name: Install npm - if: ${{ inputs.nodeVersion != '18' }} - shell: bash run: npm i -g npm@next-9 + shell: bash - name: Cache node modules id: cache-node-modules uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 diff --git a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml index 6c350943b1..407d2e25b3 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -20,8 +20,6 @@ jobs: with: node-version: ${{ matrix.version }} cache: "npm" - - name: Setup npm - run: npm i -g npm@latest - name: Setup dependencies uses: ./.github/actions/cached-node-modules with: From e442c3d9ee0592de816266be130a9972bf83e001 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Fri, 1 Sep 2023 20:39:10 +0200 Subject: [PATCH 17/28] chore(ci): move e2e utils into testing (#1661) * chore: move e2e utils into testing * chore: move test to correct folder * chore: reduced duplication * chore: add sonarcloud properties temp * chore: add sonarcloud properties temp * chore: remove sonarcloud properties * improv: refactor tests to remove duplication * improv: refactor tests to remove duplication * improv: refactor tests to remove duplication * fix: typo * fix: typo * chore: fix parameters test * fix: layer arn retrieval * chore: make ssm parameter name unique * docs: explain layers tests * chore: make layer id unique * chore: added removal policy * chore: make parameter name unique --- layers/src/canary-stack.ts | 4 +- layers/src/layer-publisher-stack.ts | 11 +- .../layerPublisher.class.test.functionCode.ts | 1 + layers/tests/e2e/layerPublisher.test.ts | 162 +++---- package-lock.json | 12 +- package.json | 3 +- packages/commons/tests/utils/e2eUtils.ts | 134 ------ ...makeHandlerIdempotent.test.FunctionCode.ts | 8 +- .../tests/e2e/makeHandlerIdempotent.test.ts | 290 +++++------ .../tests/e2e/makeIdempotent.test.ts | 222 ++++----- .../tests/helpers/idempotencyUtils.ts | 45 -- .../idempotency/tests/helpers/resources.ts | 54 +++ .../basicFeatures.middy.test.FunctionCode.ts | 2 +- .../tests/e2e/basicFeatures.middy.test.ts | 205 ++++---- .../tests/e2e/childLogger.manual.test.ts | 133 +++-- packages/logger/tests/e2e/constants.ts | 45 +- .../e2e/logEventEnvVarSetting.middy.test.ts | 108 ++--- .../tests/e2e/sampleRate.decorator.test.ts | 117 ++--- packages/logger/tests/helpers/resources.ts | 40 ++ .../e2e/basicFeatures.decorators.test.ts | 149 +++--- .../tests/e2e/basicFeatures.manual.test.ts | 143 +++--- packages/metrics/tests/e2e/constants.ts | 36 +- packages/metrics/tests/helpers/resources.ts | 38 ++ .../tests/e2e/appConfigProvider.class.test.ts | 324 +++++-------- .../tests/e2e/dynamoDBProvider.class.test.ts | 454 +++++++----------- .../tests/e2e/secretsProvider.class.test.ts | 229 ++++----- .../tests/e2e/ssmProvider.class.test.ts | 257 +++++----- .../tests/helpers/cdkAspectGrantAccess.ts | 99 ---- .../tests/helpers/parametersUtils.ts | 222 --------- .../parameters/tests/helpers/resources.ts | 373 ++++++++++++++ .../src/TestInvocationLogs.ts} | 38 +- packages/testing/src/TestStack.ts | 66 ++- packages/testing/src/helpers.ts | 84 ++++ packages/testing/src/index.ts | 4 + packages/testing/src/invokeTestFunction.ts | 94 ++++ .../src/resources/TestDynamodbTable.ts | 39 ++ .../src/resources/TestNodejsFunction.ts | 41 ++ packages/testing/src/resources/index.ts | 2 + packages/testing/src/resources/types.ts | 31 ++ .../tests/unit/TestInvocationLogs.test.ts} | 34 +- .../tests/e2e/allFeatures.decorator.test.ts | 368 +++++++------- .../tests/e2e/allFeatures.manual.test.ts | 178 ++++--- .../tests/e2e/allFeatures.middy.test.ts | 382 +++++++-------- .../tests/e2e/asyncHandler.decorator.test.ts | 257 +++++----- packages/tracer/tests/e2e/constants.ts | 41 +- .../helpers/populateEnvironmentVariables.ts | 1 + packages/tracer/tests/helpers/resources.ts | 36 ++ .../tracer/tests/helpers/traceUtils.types.ts | 20 +- packages/tracer/tests/helpers/tracesUtils.ts | 100 +--- 49 files changed, 2799 insertions(+), 2937 deletions(-) delete mode 100644 packages/commons/tests/utils/e2eUtils.ts create mode 100644 packages/idempotency/tests/helpers/resources.ts create mode 100644 packages/logger/tests/helpers/resources.ts create mode 100644 packages/metrics/tests/helpers/resources.ts delete mode 100644 packages/parameters/tests/helpers/cdkAspectGrantAccess.ts delete mode 100644 packages/parameters/tests/helpers/parametersUtils.ts create mode 100644 packages/parameters/tests/helpers/resources.ts rename packages/{commons/tests/utils/InvocationLogs.ts => testing/src/TestInvocationLogs.ts} (85%) create mode 100644 packages/testing/src/helpers.ts create mode 100644 packages/testing/src/invokeTestFunction.ts create mode 100644 packages/testing/src/resources/TestDynamodbTable.ts create mode 100644 packages/testing/src/resources/TestNodejsFunction.ts create mode 100644 packages/testing/src/resources/index.ts create mode 100644 packages/testing/src/resources/types.ts rename packages/{commons/tests/unit/InvocationLogs.test.ts => testing/tests/unit/TestInvocationLogs.test.ts} (89%) create mode 100644 packages/tracer/tests/helpers/resources.ts diff --git a/layers/src/canary-stack.ts b/layers/src/canary-stack.ts index 17f0af14f3..476f83246f 100644 --- a/layers/src/canary-stack.ts +++ b/layers/src/canary-stack.ts @@ -2,7 +2,7 @@ import { CustomResource, Duration, Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { LayerVersion, Runtime } from 'aws-cdk-lib/aws-lambda'; import { RetentionDays } from 'aws-cdk-lib/aws-logs'; -import { v4 } from 'uuid'; +import { randomUUID } from 'node:crypto'; import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { Provider } from 'aws-cdk-lib/custom-resources'; import { StringParameter } from 'aws-cdk-lib/aws-ssm'; @@ -20,7 +20,7 @@ export class CanaryStack extends Stack { super(scope, id, props); const { layerName, powertoolsPackageVersion } = props; - const suffix = v4().substring(0, 5); + const suffix = randomUUID().substring(0, 5); const layerArn = StringParameter.fromStringParameterAttributes( this, diff --git a/layers/src/layer-publisher-stack.ts b/layers/src/layer-publisher-stack.ts index d8c738010f..6be087a7b0 100644 --- a/layers/src/layer-publisher-stack.ts +++ b/layers/src/layer-publisher-stack.ts @@ -7,11 +7,13 @@ import { CfnLayerVersionPermission, } from 'aws-cdk-lib/aws-lambda'; import { StringParameter } from 'aws-cdk-lib/aws-ssm'; +import { resolve } from 'node:path'; export interface LayerPublisherStackProps extends StackProps { readonly layerName?: string; readonly powertoolsPackageVersion?: string; readonly ssmParameterLayerArn: string; + readonly removeLayerVersion?: boolean; } export class LayerPublisherStack extends Stack { @@ -23,7 +25,7 @@ export class LayerPublisherStack extends Stack { ) { super(scope, id, props); - const { layerName, powertoolsPackageVersion } = props; + const { layerName, powertoolsPackageVersion, removeLayerVersion } = props; console.log( `publishing layer ${layerName} version : ${powertoolsPackageVersion}` @@ -40,7 +42,11 @@ export class LayerPublisherStack extends Stack { license: 'MIT-0', // This is needed because the following regions do not support the compatibleArchitectures property #1400 // ...(![ 'eu-south-2', 'eu-central-2', 'ap-southeast-4' ].includes(Stack.of(this).region) ? { compatibleArchitectures: [Architecture.X86_64] } : {}), - code: Code.fromAsset('../tmp'), + code: Code.fromAsset(resolve(__dirname, '..', '..', 'tmp')), + removalPolicy: + removeLayerVersion === true + ? RemovalPolicy.DESTROY + : RemovalPolicy.RETAIN, }); const layerPermission = new CfnLayerVersionPermission( @@ -60,6 +66,7 @@ export class LayerPublisherStack extends Stack { parameterName: props.ssmParameterLayerArn, stringValue: this.lambdaLayerVersion.layerVersionArn, }); + new CfnOutput(this, 'LatestLayerArn', { value: this.lambdaLayerVersion.layerVersionArn, exportName: props?.layerName ?? `LambdaPowerToolsForTypeScriptLayerARN`, diff --git a/layers/tests/e2e/layerPublisher.class.test.functionCode.ts b/layers/tests/e2e/layerPublisher.class.test.functionCode.ts index a2cdcd8d42..59fd1834c3 100644 --- a/layers/tests/e2e/layerPublisher.class.test.functionCode.ts +++ b/layers/tests/e2e/layerPublisher.class.test.functionCode.ts @@ -35,6 +35,7 @@ export const handler = (): void => { // Check that the tracer is working const segment = tracer.getSegment(); + if (!segment) throw new Error('Segment not found'); const handlerSegment = segment.addNewSubsegment('### index.handler'); tracer.setSegment(handlerSegment); tracer.annotateColdStart(); diff --git a/layers/tests/e2e/layerPublisher.test.ts b/layers/tests/e2e/layerPublisher.test.ts index 7b4bab6988..a1a00c39ba 100644 --- a/layers/tests/e2e/layerPublisher.test.ts +++ b/layers/tests/e2e/layerPublisher.test.ts @@ -4,129 +4,119 @@ * @group e2e/layers/all */ import { App } from 'aws-cdk-lib'; -import { LayerVersion, Tracing } from 'aws-cdk-lib/aws-lambda'; +import { LayerVersion } from 'aws-cdk-lib/aws-lambda'; import { LayerPublisherStack } from '../../src/layer-publisher-stack'; import { + TestNodejsFunction, TestStack, - defaultRuntime, + TestInvocationLogs, + invokeFunctionOnce, + generateTestUniqueName, } from '@aws-lambda-powertools/testing-utils'; -import { - generateUniqueName, - invokeFunction, - isValidRuntimeKey, - createStackWithLambdaFunction, -} from '../../../packages/commons/tests/utils/e2eUtils'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - LEVEL, - InvocationLogs, -} from '../../../packages/commons/tests/utils/InvocationLogs'; -import { v4 } from 'uuid'; -import path from 'path'; +import { join } from 'node:path'; import packageJson from '../../package.json'; -const runtime: string = process.env.RUNTIME || defaultRuntime; +/** + * This test has two stacks: + * 1. LayerPublisherStack - publishes a layer version using the LayerPublisher construct and containing the Powertools utilities from the repo + * 2. TestStack - uses the layer published in the first stack and contains a lambda function that uses the Powertools utilities from the layer + * + * The lambda function is invoked once and the logs are collected. The goal of the test is to verify that the layer creation and usage works as expected. + */ +describe(`Layers E2E tests, publisher stack`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'functionStack', + }, + }); -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key: ${runtime}`); -} + let invocationLogs: TestInvocationLogs; -describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => { - const uuid = v4(); - let invocationLogs: InvocationLogs[]; - const stackNameLayers = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'layerStack' - ); - const stackNameFunction = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'functionStack' - ); - const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'function' - ); - const ssmParameterLayerName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'parameter' + const ssmParameterLayerName = generateTestUniqueName({ + testPrefix: `${RESOURCE_NAME_PREFIX}`, + testName: 'parameter', + }); + + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'layerPublisher.class.test.functionCode.ts' ); - const lambdaFunctionCodeFile = 'layerPublisher.class.test.functionCode.ts'; - const invocationCount = 1; const powerToolsPackageVersion = packageJson.version; - const layerName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'layer' - ); - const testStack = new TestStack(stackNameFunction); const layerApp = new App(); - const layerStack = new LayerPublisherStack(layerApp, stackNameLayers, { - layerName, + const layerId = generateTestUniqueName({ + testPrefix: RESOURCE_NAME_PREFIX, + testName: 'layerStack', + }); + const layerStack = new LayerPublisherStack(layerApp, layerId, { + layerName: layerId, powertoolsPackageVersion: powerToolsPackageVersion, ssmParameterLayerArn: ssmParameterLayerName, + removeLayerVersion: true, + }); + const testLayerStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'layerStack', + }, + app: layerApp, + stack: layerStack, }); - const testLayerStack = new TestStack(stackNameLayers, layerApp, layerStack); beforeAll(async () => { - const outputs = await testLayerStack.deploy(); + await testLayerStack.deploy(); const layerVersion = LayerVersion.fromLayerVersionArn( testStack.stack, 'LayerVersionArnReference', - outputs['LatestLayerArn'] + testLayerStack.findAndGetStackOutputValue('LatestLayerArn') ); - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - tracing: Tracing.ACTIVE, - environment: { - UUID: uuid, - POWERTOOLS_PACKAGE_VERSION: powerToolsPackageVersion, - POWERTOOLS_SERVICE_NAME: 'LayerPublisherStack', - }, - runtime: runtime, - bundling: { - externalModules: [ - '@aws-lambda-powertools/commons', - '@aws-lambda-powertools/logger', - '@aws-lambda-powertools/metrics', - '@aws-lambda-powertools/tracer', - ], + new TestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + POWERTOOLS_PACKAGE_VERSION: powerToolsPackageVersion, + POWERTOOLS_SERVICE_NAME: 'LayerPublisherStack', + }, + bundling: { + externalModules: [ + '@aws-lambda-powertools/commons', + '@aws-lambda-powertools/logger', + '@aws-lambda-powertools/metrics', + '@aws-lambda-powertools/tracer', + ], + }, + layers: [layerVersion], }, - layers: [layerVersion], - }); + { + nameSuffix: 'testFn', + } + ); await testStack.deploy(); - invocationLogs = await invokeFunction( + const functionName = testStack.findAndGetStackOutputValue('testFn'); + + invocationLogs = await invokeFunctionOnce({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + }); }, SETUP_TIMEOUT); describe('LayerPublisherStack usage', () => { it( 'should have no errors in the logs, which indicates the pacakges version matches the expected one', () => { - const logs = invocationLogs[0].getFunctionLogs(LEVEL.ERROR); + const logs = invocationLogs.getFunctionLogs('ERROR'); expect(logs.length).toBe(0); }, @@ -136,7 +126,7 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => it( 'should have one warning related to missing Metrics namespace', () => { - const logs = invocationLogs[0].getFunctionLogs(LEVEL.WARN); + const logs = invocationLogs.getFunctionLogs('WARN'); expect(logs.length).toBe(1); expect(logs[0]).toContain('Namespace should be defined, default used'); @@ -147,7 +137,7 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => it( 'should have one info log related to coldstart metric', () => { - const logs = invocationLogs[0].getFunctionLogs(LEVEL.INFO); + const logs = invocationLogs.getFunctionLogs('INFO'); expect(logs.length).toBe(1); expect(logs[0]).toContain('ColdStart'); @@ -158,7 +148,7 @@ describe(`layers E2E tests (LayerPublisherStack) for runtime: ${runtime}`, () => it( 'should have one debug log that says Hello World!', () => { - const logs = invocationLogs[0].getFunctionLogs(LEVEL.DEBUG); + const logs = invocationLogs.getFunctionLogs('DEBUG'); expect(logs.length).toBe(1); expect(logs[0]).toContain('Hello World!'); diff --git a/package-lock.json b/package-lock.json index 9e61c13363..5db333ef67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,8 +47,7 @@ "ts-node": "^10.9.1", "typedoc": "^0.24.7", "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "^4.9.4", - "uuid": "^9.0.0" + "typescript": "^4.9.4" }, "engines": { "node": ">=14" @@ -17327,15 +17326,6 @@ "dev": true, "license": "MIT" }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", diff --git a/package.json b/package.json index b9186a7128..c8867af64c 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,7 @@ "ts-node": "^10.9.1", "typedoc": "^0.24.7", "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "^4.9.4", - "uuid": "^9.0.0" + "typescript": "^4.9.4" }, "engines": { "node": ">=14" diff --git a/packages/commons/tests/utils/e2eUtils.ts b/packages/commons/tests/utils/e2eUtils.ts deleted file mode 100644 index 2bf5fdbdc1..0000000000 --- a/packages/commons/tests/utils/e2eUtils.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * E2E utils is used by e2e tests. They are helper function that calls either CDK or SDK - * to interact with services. - */ -import { CfnOutput, Duration, Stack } from 'aws-cdk-lib'; -import { - NodejsFunction, - NodejsFunctionProps, -} from 'aws-cdk-lib/aws-lambda-nodejs'; -import { Runtime, Tracing } from 'aws-cdk-lib/aws-lambda'; -import { RetentionDays } from 'aws-cdk-lib/aws-logs'; -import { InvokeCommand, LambdaClient } from '@aws-sdk/client-lambda'; -import { fromUtf8 } from '@aws-sdk/util-utf8-node'; - -import { InvocationLogs } from './InvocationLogs'; - -const lambdaClient = new LambdaClient({}); - -const testRuntimeKeys = ['nodejs14x', 'nodejs16x', 'nodejs18x']; -export type TestRuntimesKey = (typeof testRuntimeKeys)[number]; -export const TEST_RUNTIMES: Record<TestRuntimesKey, Runtime> = { - nodejs14x: Runtime.NODEJS_14_X, - nodejs16x: Runtime.NODEJS_16_X, - nodejs18x: Runtime.NODEJS_18_X, -}; - -export type StackWithLambdaFunctionOptions = { - stack: Stack; - functionName: string; - functionEntry: string; - tracing?: Tracing; - environment: { [key: string]: string }; - logGroupOutputKey?: string; - runtime: string; - bundling?: NodejsFunctionProps['bundling']; - layers?: NodejsFunctionProps['layers']; - timeout?: Duration; -}; - -type FunctionPayload = { - [key: string]: string | boolean | number | Array<Record<string, unknown>>; -}; - -export const isValidRuntimeKey = ( - runtime: string -): runtime is TestRuntimesKey => testRuntimeKeys.includes(runtime); - -export const createStackWithLambdaFunction = ( - params: StackWithLambdaFunctionOptions -): void => { - const testFunction = new NodejsFunction(params.stack, `testFunction`, { - functionName: params.functionName, - entry: params.functionEntry, - tracing: params.tracing, - environment: params.environment, - runtime: TEST_RUNTIMES[params.runtime as TestRuntimesKey], - bundling: params.bundling, - layers: params.layers, - logRetention: RetentionDays.ONE_DAY, - timeout: params.timeout, - }); - - if (params.logGroupOutputKey) { - new CfnOutput(params.stack, params.logGroupOutputKey, { - value: testFunction.logGroup.logGroupName, - }); - } -}; - -export const generateUniqueName = ( - name_prefix: string, - uuid: string, - runtime: string, - testName: string -): string => - `${name_prefix}-${runtime}-${uuid.substring(0, 5)}-${testName}`.substring( - 0, - 64 - ); - -export const invokeFunction = async ( - functionName: string, - times = 1, - invocationMode: 'PARALLEL' | 'SEQUENTIAL' = 'PARALLEL', - payload: FunctionPayload = {}, - includeIndex = true -): Promise<InvocationLogs[]> => { - const invocationLogs: InvocationLogs[] = []; - - const promiseFactory = (index?: number): Promise<void> => { - // in some cases we need to send a payload without the index, i.e. idempotency tests - const payloadToSend = includeIndex - ? { invocation: index, ...payload } - : { ...payload }; - const invokePromise = lambdaClient - .send( - new InvokeCommand({ - FunctionName: functionName, - InvocationType: 'RequestResponse', - LogType: 'Tail', // Wait until execution completes and return all logs - Payload: fromUtf8(JSON.stringify(payloadToSend)), - }) - ) - .then((response) => { - if (response?.LogResult) { - invocationLogs.push(new InvocationLogs(response?.LogResult)); - } else { - throw new Error( - 'No LogResult field returned in the response of Lambda invocation. This should not happen.' - ); - } - }); - - return invokePromise; - }; - - const promiseFactories = Array.from({ length: times }, () => promiseFactory); - - const invocation = - invocationMode == 'PARALLEL' - ? Promise.all(promiseFactories.map((factory, index) => factory(index))) - : chainPromises(promiseFactories); - await invocation; - - return invocationLogs; -}; - -const chainPromises = async ( - promiseFactories: ((index?: number) => Promise<void>)[] -): Promise<void> => { - for (let index = 0; index < promiseFactories.length; index++) { - await promiseFactories[index](index); - } -}; diff --git a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.FunctionCode.ts b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.FunctionCode.ts index 510dcd399e..499eda7cca 100644 --- a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.FunctionCode.ts +++ b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.FunctionCode.ts @@ -56,16 +56,16 @@ export const handlerParallel = middy( * Test handler with timeout and JMESPath expression to extract the * idempotency key. * - * We put a 0.5s delay in the handler to ensure that it will timeout - * (timeout is set to 1s). By the time the second call is made, the - * second call is made, the first idempotency record has expired. + * We put a 2s delay in the handler to ensure that it will timeout + * (timeout is set to 2s). By the time the second call is made, the + * first idempotency record has expired. */ export const handlerTimeout = middy( async (event: { foo: string; invocation: number }, context: Context) => { logger.addContext(context); if (event.invocation === 0) { - await new Promise((resolve) => setTimeout(resolve, 2000)); + await new Promise((resolve) => setTimeout(resolve, 4000)); } logger.info('Processed event', { diff --git a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts index 5d4ccd82c7..1af54e589d 100644 --- a/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts +++ b/packages/idempotency/tests/e2e/makeHandlerIdempotent.test.ts @@ -4,140 +4,116 @@ * @group e2e/idempotency/makeHandlerIdempotent */ import { - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; + TestInvocationLogs, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { ScanCommand } from '@aws-sdk/lib-dynamodb'; +import { Duration } from 'aws-cdk-lib'; +import { createHash } from 'node:crypto'; +import { join } from 'node:path'; +import { IdempotencyTestNodejsFunctionAndDynamoTable } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - TestStack, - defaultRuntime, -} from '@aws-lambda-powertools/testing-utils'; -import { v4 } from 'uuid'; -import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; -import { createHash } from 'node:crypto'; -import { ScanCommand } from '@aws-sdk/lib-dynamodb'; -import { createIdempotencyResources } from '../helpers/idempotencyUtils'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} +const ddb = new DynamoDBClient({}); -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'makeFnIdempotent' -); -const makeHandlerIdempotentFile = 'makeHandlerIdempotent.test.FunctionCode.ts'; +describe(`Idempotency E2E tests, middy middleware usage`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'makeHandlerIdempotent', + }, + }); -const ddb = new DynamoDBClient({}); -const testStack = new TestStack(stackName); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'makeHandlerIdempotent.test.FunctionCode.ts' + ); -const testDefault = 'default-sequential'; -const functionNameDefault = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefault}-fn` -); -const ddbTableNameDefault = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefault}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameDefault, - makeHandlerIdempotentFile, - functionNameDefault, - 'handler' -); + let functionNameDefault: string; + let tableNameDefault: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + }, + }, + { + nameSuffix: 'default', + } + ); -const testDefaultParallel = 'default-parallel'; -const functionNameDefaultParallel = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefaultParallel}-fn` -); -const ddbTableNameDefaultParallel = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefaultParallel}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameDefaultParallel, - makeHandlerIdempotentFile, - functionNameDefaultParallel, - 'handlerParallel' -); + let functionNameDefaultParallel: string; + let tableNameDefaultParallel: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerParallel', + }, + }, + { + nameSuffix: 'defaultParallel', + } + ); -const testTimeout = 'timeout'; -const functionNameTimeout = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testTimeout}-fn` -); -const ddbTableNameTimeout = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testTimeout}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameTimeout, - makeHandlerIdempotentFile, - functionNameTimeout, - 'handlerTimeout', - undefined, - 2 -); + let functionNameTimeout: string; + let tableNameTimeout: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerTimeout', + timeout: Duration.seconds(2), + }, + }, + { + nameSuffix: 'timeout', + } + ); -const testExpired = 'expired'; -const functionNameExpired = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testExpired}-fn` -); -const ddbTableNameExpired = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testExpired}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameExpired, - makeHandlerIdempotentFile, - functionNameExpired, - 'handlerExpired', - undefined, - 2 -); + let functionNameExpired: string; + let tableNameExpired: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerExpired', + timeout: Duration.seconds(2), + }, + }, + { + nameSuffix: 'expired', + } + ); -describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, () => { beforeAll(async () => { + // Deploy the stack await testStack.deploy(); + + // Get the actual function names from the stack outputs + functionNameDefault = testStack.findAndGetStackOutputValue('defaultFn'); + tableNameDefault = testStack.findAndGetStackOutputValue('defaultTable'); + functionNameDefaultParallel = + testStack.findAndGetStackOutputValue('defaultParallelFn'); + tableNameDefaultParallel = testStack.findAndGetStackOutputValue( + 'defaultParallelTable' + ); + functionNameTimeout = testStack.findAndGetStackOutputValue('timeoutFn'); + tableNameTimeout = testStack.findAndGetStackOutputValue('timeoutTable'); + functionNameExpired = testStack.findAndGetStackOutputValue('expiredFn'); + tableNameExpired = testStack.findAndGetStackOutputValue('expiredTable'); }, SETUP_TIMEOUT); test( @@ -152,19 +128,18 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, .digest('base64'); // Act - const logs = await invokeFunction( - functionNameDefault, - 2, - 'SEQUENTIAL', + const logs = await invokeFunction({ + functionName: functionNameDefault, + times: 2, + invocationMode: 'SEQUENTIAL', payload, - false - ); + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameDefault, + TableName: tableNameDefault, }) ); expect(idempotencyRecords.Items?.length).toEqual(1); @@ -178,7 +153,7 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, expect(functionLogs[0]).toHaveLength(1); // We test the content of the log as well as the presence of fields from the context, this // ensures that the all the arguments are passed to the handler when made idempotent - expect(InvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( expect.objectContaining({ message: 'foo', details: 'bar', @@ -203,19 +178,18 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, .digest('base64'); // Act - const logs = await invokeFunction( - functionNameDefaultParallel, - 2, - 'PARALLEL', + const logs = await invokeFunction({ + functionName: functionNameDefaultParallel, + times: 2, + invocationMode: 'PARALLEL', payload, - false - ); + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameDefaultParallel, + TableName: tableNameDefaultParallel, }) ); expect(idempotencyRecords.Items?.length).toEqual(1); @@ -262,19 +236,21 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, .digest('base64'); // Act - const logs = await invokeFunction( - functionNameTimeout, - 2, - 'SEQUENTIAL', - payload, - true - ); + const logs = await invokeFunction({ + functionName: functionNameTimeout, + times: 2, + invocationMode: 'SEQUENTIAL', + payload: Array.from({ length: 2 }, (_, index) => ({ + ...payload, + invocation: index, + })), + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameTimeout, + TableName: tableNameTimeout, }) ); expect(idempotencyRecords.Items?.length).toEqual(1); @@ -293,7 +269,7 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, // During the second invocation the handler should be called and complete, so the logs should // contain 1 log expect(functionLogs[1]).toHaveLength(1); - expect(InvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( expect.objectContaining({ message: 'Processed event', details: 'bar', @@ -318,26 +294,24 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, // Act const logs = [ ( - await invokeFunction( - functionNameExpired, - 1, - 'SEQUENTIAL', - { ...payload, invocation: 0 }, - false - ) + await invokeFunction({ + functionName: functionNameExpired, + times: 1, + invocationMode: 'SEQUENTIAL', + payload: { ...payload, invocation: 0 }, + }) )[0], ]; // Wait for the idempotency record to expire await new Promise((resolve) => setTimeout(resolve, 2000)); logs.push( ( - await invokeFunction( - functionNameExpired, - 1, - 'SEQUENTIAL', - { ...payload, invocation: 1 }, - false - ) + await invokeFunction({ + functionName: functionNameExpired, + times: 1, + invocationMode: 'SEQUENTIAL', + payload: { ...payload, invocation: 1 }, + }) )[0] ); const functionLogs = logs.map((log) => log.getFunctionLogs()); @@ -345,7 +319,7 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameExpired, + TableName: tableNameExpired, }) ); expect(idempotencyRecords.Items?.length).toEqual(1); @@ -360,7 +334,7 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, // Both invocations should be successful and the logs should contain 1 log each expect(functionLogs[0]).toHaveLength(1); - expect(InvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( expect.objectContaining({ message: 'Processed event', details: 'bar', @@ -370,7 +344,7 @@ describe(`Idempotency E2E tests, middy middleware usage for runtime ${runtime}`, // During the second invocation the handler should be called and complete, so the logs should // contain 1 log expect(functionLogs[1]).toHaveLength(1); - expect(InvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[1][0])).toEqual( expect.objectContaining({ message: 'Processed event', details: 'bar', diff --git a/packages/idempotency/tests/e2e/makeIdempotent.test.ts b/packages/idempotency/tests/e2e/makeIdempotent.test.ts index 3feaefb3f1..ff7c890f59 100644 --- a/packages/idempotency/tests/e2e/makeIdempotent.test.ts +++ b/packages/idempotency/tests/e2e/makeIdempotent.test.ts @@ -4,114 +4,105 @@ * @group e2e/idempotency/makeIdempotent */ import { - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; + TestInvocationLogs, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { ScanCommand } from '@aws-sdk/lib-dynamodb'; +import { AttributeType } from 'aws-cdk-lib/aws-dynamodb'; +import { createHash } from 'node:crypto'; +import { join } from 'node:path'; +import { IdempotencyTestNodejsFunctionAndDynamoTable } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { v4 } from 'uuid'; -import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; -import { createHash } from 'node:crypto'; -import { - TestStack, - defaultRuntime, -} from '@aws-lambda-powertools/testing-utils'; -import { ScanCommand } from '@aws-sdk/lib-dynamodb'; -import { createIdempotencyResources } from '../helpers/idempotencyUtils'; -import { InvocationLogs } from '@aws-lambda-powertools/commons/tests/utils/InvocationLogs'; -const runtime: string = process.env.RUNTIME || defaultRuntime; +describe(`Idempotency E2E tests, wrapper function usage`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'makeFnIdempotent', + }, + }); -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'makeFnIdempotent' -); -const makeFunctionIdempotentFile = 'makeIdempotent.test.FunctionCode.ts'; + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'makeIdempotent.test.FunctionCode.ts' + ); -const ddb = new DynamoDBClient({ region: 'eu-west-1' }); -const testStack = new TestStack(stackName); + let functionNameDefault: string; + let tableNameDefault: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerDefault', + }, + }, + { + nameSuffix: 'default', + } + ); -const testDefault = 'default'; -const functionNameDefault = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefault}-fn` -); -const ddbTableNameDefault = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testDefault}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameDefault, - makeFunctionIdempotentFile, - functionNameDefault, - 'handlerDefault' -); + let functionNameCustomConfig: string; + let tableNameCustomConfig: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerCustomized', + }, + table: { + partitionKey: { + name: 'customId', + type: AttributeType.STRING, + }, + }, + }, + { + nameSuffix: 'customConfig', + } + ); -const testCustomConfig = 'customConfig'; -const functionNameCustomConfig = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testCustomConfig}-fn` -); -const ddbTableNameCustomConfig = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testCustomConfig}-fn` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameCustomConfig, - makeFunctionIdempotentFile, - functionNameCustomConfig, - 'handlerCustomized', - 'customId' -); + let functionNameLambdaHandler: string; + let tableNameLambdaHandler: string; + new IdempotencyTestNodejsFunctionAndDynamoTable( + testStack, + { + function: { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerLambda', + }, + }, + { + nameSuffix: 'handler', + } + ); -const testLambdaHandler = 'handler'; -const functionNameLambdaHandler = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testLambdaHandler}-fn` -); -const ddbTableNameLambdaHandler = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - `${testLambdaHandler}-table` -); -createIdempotencyResources( - testStack.stack, - runtime, - ddbTableNameLambdaHandler, - makeFunctionIdempotentFile, - functionNameLambdaHandler, - 'handlerLambda' -); + const ddb = new DynamoDBClient({}); -describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { beforeAll(async () => { + // Deploy the stack await testStack.deploy(); + + // Get the actual function names from the stack outputs + functionNameDefault = testStack.findAndGetStackOutputValue('defaultFn'); + tableNameDefault = testStack.findAndGetStackOutputValue('defaultTable'); + functionNameCustomConfig = + testStack.findAndGetStackOutputValue('customConfigFn'); + tableNameCustomConfig = + testStack.findAndGetStackOutputValue('customConfigTable'); + functionNameLambdaHandler = + testStack.findAndGetStackOutputValue('handlerFn'); + tableNameLambdaHandler = + testStack.findAndGetStackOutputValue('handlerTable'); }, SETUP_TIMEOUT); it( @@ -130,19 +121,18 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { ); // Act - const logs = await invokeFunction( - functionNameDefault, - 2, - 'SEQUENTIAL', + const logs = await invokeFunction({ + functionName: functionNameDefault, + times: 2, + invocationMode: 'SEQUENTIAL', payload, - false - ); + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameDefault, + TableName: tableNameDefault, }) ); // Since records 1 and 3 have the same payload, only 2 records should be created @@ -191,19 +181,18 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { ); // Act - const logs = await invokeFunction( - functionNameCustomConfig, - 2, - 'SEQUENTIAL', + const logs = await invokeFunction({ + functionName: functionNameCustomConfig, + times: 2, + invocationMode: 'SEQUENTIAL', payload, - false - ); + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameCustomConfig, + TableName: tableNameCustomConfig, }) ); /** @@ -246,21 +235,21 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { // During the first invocation, the processing function should have been called 3 times (once for each record) expect(functionLogs[0]).toHaveLength(3); - expect(InvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( expect.objectContaining({ baz: 0, // index of recursion in handler, assess that all function arguments are preserved record: payload.records[0], message: 'Got test event', }) ); - expect(InvocationLogs.parseFunctionLog(functionLogs[0][1])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[0][1])).toEqual( expect.objectContaining({ baz: 1, record: payload.records[1], message: 'Got test event', }) ); - expect(InvocationLogs.parseFunctionLog(functionLogs[0][2])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[0][2])).toEqual( expect.objectContaining({ baz: 2, record: payload.records[2], @@ -286,19 +275,18 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { .digest('base64'); // Act - const logs = await invokeFunction( - functionNameLambdaHandler, - 2, - 'SEQUENTIAL', + const logs = await invokeFunction({ + functionName: functionNameLambdaHandler, + times: 2, + invocationMode: 'SEQUENTIAL', payload, - true - ); + }); const functionLogs = logs.map((log) => log.getFunctionLogs()); // Assess const idempotencyRecords = await ddb.send( new ScanCommand({ - TableName: ddbTableNameLambdaHandler, + TableName: tableNameLambdaHandler, }) ); expect(idempotencyRecords.Items?.length).toEqual(1); @@ -312,7 +300,7 @@ describe(`Idempotency E2E tests, wrapper function usage for runtime`, () => { expect(functionLogs[0]).toHaveLength(1); // We test the content of the log as well as the presence of fields from the context, this // ensures that the all the arguments are passed to the handler when made idempotent - expect(InvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( + expect(TestInvocationLogs.parseFunctionLog(functionLogs[0][0])).toEqual( expect.objectContaining({ message: 'foo', details: 'bar', diff --git a/packages/idempotency/tests/helpers/idempotencyUtils.ts b/packages/idempotency/tests/helpers/idempotencyUtils.ts index aa3612d853..efda071436 100644 --- a/packages/idempotency/tests/helpers/idempotencyUtils.ts +++ b/packages/idempotency/tests/helpers/idempotencyUtils.ts @@ -1,49 +1,4 @@ -import { Duration, RemovalPolicy, Stack } from 'aws-cdk-lib'; -import { v4 } from 'uuid'; -import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; -import { TEST_RUNTIMES } from '../../../commons/tests/utils/e2eUtils'; import { BasePersistenceLayer } from '../../src/persistence'; -import path from 'path'; -import { RetentionDays } from 'aws-cdk-lib/aws-logs'; - -export const createIdempotencyResources = ( - stack: Stack, - runtime: string, - ddbTableName: string, - pathToFunction: string, - functionName: string, - handler: string, - ddbPkId?: string, - timeout?: number -): void => { - const uniqueTableId = ddbTableName + v4().substring(0, 5); - const ddbTable = new Table(stack, uniqueTableId, { - tableName: ddbTableName, - partitionKey: { - name: ddbPkId ? ddbPkId : 'id', - type: AttributeType.STRING, - }, - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - }); - - const uniqueFunctionId = functionName + v4().substring(0, 5); - const nodeJsFunction = new NodejsFunction(stack, uniqueFunctionId, { - runtime: TEST_RUNTIMES[runtime], - functionName: functionName, - entry: path.join(__dirname, `../e2e/${pathToFunction}`), - timeout: Duration.seconds(timeout || 30), - handler: handler, - environment: { - IDEMPOTENCY_TABLE_NAME: ddbTableName, - POWERTOOLS_LOGGER_LOG_EVENT: 'true', - }, - logRetention: RetentionDays.ONE_DAY, - }); - - ddbTable.grantReadWriteData(nodeJsFunction); -}; /** * Dummy class to test the abstract class BasePersistenceLayer. diff --git a/packages/idempotency/tests/helpers/resources.ts b/packages/idempotency/tests/helpers/resources.ts new file mode 100644 index 0000000000..75bc4276ed --- /dev/null +++ b/packages/idempotency/tests/helpers/resources.ts @@ -0,0 +1,54 @@ +import type { + ExtraTestProps, + TestDynamodbTableProps, + TestNodejsFunctionProps, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { + concatenateResourceName, + TestDynamodbTable, + TestNodejsFunction, +} from '@aws-lambda-powertools/testing-utils'; +import { Construct } from 'constructs'; +import { randomUUID } from 'node:crypto'; + +class IdempotencyTestNodejsFunctionAndDynamoTable extends Construct { + public constructor( + testStack: TestStack, + props: { + function: TestNodejsFunctionProps; + table?: TestDynamodbTableProps; + }, + extraProps: ExtraTestProps + ) { + super( + testStack.stack, + concatenateResourceName({ + testName: testStack.testName, + resourceName: randomUUID(), + }) + ); + + const table = new TestDynamodbTable(testStack, props.table || {}, { + nameSuffix: `${extraProps.nameSuffix}Table`, + }); + + const fn = new TestNodejsFunction( + testStack, + { + ...props.function, + environment: { + IDEMPOTENCY_TABLE_NAME: table.tableName, + POWERTOOLS_LOGGER_LOG_EVENT: 'true', + }, + }, + { + nameSuffix: `${extraProps.nameSuffix}Fn`, + } + ); + + table.grantReadWriteData(fn); + } +} + +export { IdempotencyTestNodejsFunctionAndDynamoTable }; diff --git a/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts b/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts index 6be9c265cb..9107bf5453 100644 --- a/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts +++ b/packages/logger/tests/e2e/basicFeatures.middy.test.FunctionCode.ts @@ -35,7 +35,7 @@ const testFunction = async (event: TestEvent, context: Context): TestOutput => { logger.removeKeys([REMOVABLE_KEY]); // This key should not appear in any log (except the event log) logger.appendKeys({ // This key-value pair should appear in every log (except the event log) - [RUNTIME_ADDED_KEY]: event.invocation, + [RUNTIME_ADDED_KEY]: 'bar', }); // Test feature 5: One-time additional log keys and values diff --git a/packages/logger/tests/e2e/basicFeatures.middy.test.ts b/packages/logger/tests/e2e/basicFeatures.middy.test.ts index 971050b5db..099053f538 100644 --- a/packages/logger/tests/e2e/basicFeatures.middy.test.ts +++ b/packages/logger/tests/e2e/basicFeatures.middy.test.ts @@ -3,20 +3,14 @@ * * @group e2e/logger/basicFeatures */ -import path from 'path'; -import { APIGatewayAuthorizerResult } from 'aws-lambda'; -import { v4 } from 'uuid'; import { - createStackWithLambdaFunction, - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; -import { + TestInvocationLogs, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; +import type { APIGatewayAuthorizerResult } from 'aws-lambda'; +import { join } from 'node:path'; +import { LoggerTestNodejsFunction } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, @@ -24,87 +18,54 @@ import { TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, XRAY_TRACE_ID_REGEX, + commonEnvironmentVars, } from './constants'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} +describe(`Logger E2E tests, basic functionalities middy usage`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AllFeatures-Decorator', + }, + }); -const LEVEL = InvocationLogs.LEVEL; + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'basicFeatures.middy.test.FunctionCode.ts' + ); -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'BasicFeatures-Middy' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'BasicFeatures-Middy' -); -const lambdaFunctionCodeFile = 'basicFeatures.middy.test.FunctionCode.ts'; - -const invocationCount = 3; - -// Text to be used by Logger in the Lambda function -const PERSISTENT_KEY = 'persistentKey'; -const RUNTIME_ADDED_KEY = 'invocation'; -const PERSISTENT_VALUE = uuid; -const REMOVABLE_KEY = 'removableKey'; -const REMOVABLE_VALUE = 'removedValue'; -const SINGLE_LOG_ITEM_KEY = 'singleKey'; -const SINGLE_LOG_ITEM_VALUE = 'singleValue'; -const ERROR_MSG = 'error'; -const ARBITRARY_OBJECT_KEY = 'arbitraryObjectKey'; -const ARBITRARY_OBJECT_DATA = 'arbitraryObjectData'; - -const testStack = new TestStack(stackName); -let logGroupName: string; // We do not know it until deployment - -describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; + const invocationCount = 3; + let invocationLogs: TestInvocationLogs[]; beforeAll(async () => { - // Create and deploy a stack with AWS CDK - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - LOG_LEVEL: 'INFO', - POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', - UUID: uuid, - - // Text to be used by Logger in the Lambda function - PERSISTENT_KEY, - PERSISTENT_VALUE, - RUNTIME_ADDED_KEY, - REMOVABLE_KEY, - REMOVABLE_VALUE, - SINGLE_LOG_ITEM_KEY, - SINGLE_LOG_ITEM_VALUE, - ERROR_MSG, - ARBITRARY_OBJECT_KEY, - ARBITRARY_OBJECT_DATA, + // Prepare + new LoggerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, }, - logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, - runtime: runtime, - }); + { + logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, + nameSuffix: 'BasicFeatures', + } + ); - const result = await testStack.deploy(); - logGroupName = result[STACK_OUTPUT_LOG_GROUP]; + await testStack.deploy(); + const logGroupName = testStack.findAndGetStackOutputValue( + STACK_OUTPUT_LOG_GROUP + ); + const functionName = testStack.findAndGetStackOutputValue('BasicFeatures'); // Invoke the function three time (one for cold start, then two for warm start) - invocationLogs = await invokeFunction( + invocationLogs = await invokeFunction({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + times: invocationCount, + invocationMode: 'SEQUENTIAL', + payload: { + foo: 'bar', + }, + }); console.log('logGroupName', logGroupName); }, SETUP_TIMEOUT); @@ -115,7 +76,7 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} async () => { for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation and filter by level - const debugLogs = invocationLogs[i].getFunctionLogs(LEVEL.DEBUG); + const debugLogs = invocationLogs[i].getFunctionLogs('DEBUG'); // Check that no log message below INFO level is logged expect(debugLogs.length).toBe(0); } @@ -133,7 +94,7 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} const logMessages = invocationLogs[i].getFunctionLogs(); // Check that the context is logged on every log for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); expect(log).toHaveProperty('function_arn'); expect(log).toHaveProperty('function_memory_size'); expect(log).toHaveProperty('function_name'); @@ -153,7 +114,7 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} const logMessages = invocationLogs[i].getFunctionLogs(); // Check that cold start is logged correctly on every log for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); if (i === 0) { expect(log.cold_start).toBe(true); } else { @@ -175,12 +136,12 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} const logMessages = invocationLogs[i].getFunctionLogs(); for (const [index, message] of logMessages.entries()) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); // Check that the event is logged on the first log if (index === 0) { expect(log).toHaveProperty('event'); expect(log.event).toStrictEqual( - expect.objectContaining({ invocation: i }) + expect.objectContaining({ foo: 'bar' }) ); // Check that the event is not logged again on the rest of the logs } else { @@ -197,15 +158,20 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should contain persistent value in every log', async () => { + const { + PERSISTENT_KEY: persistentKey, + PERSISTENT_VALUE: persistentValue, + } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); // Check that the persistent key is present in every log - expect(log).toHaveProperty(PERSISTENT_KEY); - expect(log[PERSISTENT_KEY]).toBe(PERSISTENT_VALUE); + expect(log).toHaveProperty(persistentKey); + expect(log[persistentKey]).toBe(persistentValue); } } }, @@ -215,20 +181,23 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should not contain persistent keys that were removed on runtime', async () => { + const { REMOVABLE_KEY: removableKey, REMOVABLE_VALUE: removableValue } = + commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); for (const [index, message] of logMessages.entries()) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); // Check that at the time of logging the event, which happens before the handler, // the key was still present if (index === 0) { - expect(log).toHaveProperty(REMOVABLE_KEY); - expect(log[REMOVABLE_KEY]).toBe(REMOVABLE_VALUE); + expect(log).toHaveProperty(removableKey); + expect(log[removableKey]).toBe(removableValue); // Check that all other logs that happen at runtime do not contain the key } else { - expect(log).not.toHaveProperty(REMOVABLE_KEY); + expect(log).not.toHaveProperty(removableValue); } } } @@ -239,21 +208,23 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should not leak any persistent keys added runtime since clearState is enabled', async () => { + const { RUNTIME_ADDED_KEY: runtimeAddedKey } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); for (const [index, message] of logMessages.entries()) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); // Check that at the time of logging the event, which happens before the handler, // the key is NOT present if (index === 0) { - expect(log).not.toHaveProperty(RUNTIME_ADDED_KEY); + expect(log).not.toHaveProperty(runtimeAddedKey); } else { // Check that all other logs that happen at runtime do contain the key - expect(log).toHaveProperty(RUNTIME_ADDED_KEY); - // Check that the value is the same for all logs (it should be the index of the invocation) - expect(log[RUNTIME_ADDED_KEY]).toEqual(i); + expect(log).toHaveProperty(runtimeAddedKey); + // Check that the value is the same for all logs + expect(log[runtimeAddedKey]).toEqual('bar'); } } } @@ -266,19 +237,24 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should log additional keys and value only once', async () => { + const { + SINGLE_LOG_ITEM_KEY: singleLogItemKey, + SINGLE_LOG_ITEM_VALUE: singleLogItemValue, + } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); // Check that the additional log is logged only once const logMessagesWithAdditionalLog = logMessages.filter((log) => - log.includes(SINGLE_LOG_ITEM_KEY) + log.includes(singleLogItemKey) ); expect(logMessagesWithAdditionalLog).toHaveLength(1); // Check that the additional log is logged correctly - const parsedLog = InvocationLogs.parseFunctionLog( + const parsedLog = TestInvocationLogs.parseFunctionLog( logMessagesWithAdditionalLog[0] ); - expect(parsedLog[SINGLE_LOG_ITEM_KEY]).toBe(SINGLE_LOG_ITEM_VALUE); + expect(parsedLog[singleLogItemKey]).toBe(singleLogItemValue); } }, TEST_CASE_TIMEOUT @@ -289,21 +265,23 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should log error only once', async () => { + const { ERROR_MSG: errorMsg } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation filtered by error level - const logMessages = invocationLogs[i].getFunctionLogs(LEVEL.ERROR); + const logMessages = invocationLogs[i].getFunctionLogs('ERROR'); // Check that the error is logged only once expect(logMessages).toHaveLength(1); // Check that the error is logged correctly - const errorLog = InvocationLogs.parseFunctionLog(logMessages[0]); + const errorLog = TestInvocationLogs.parseFunctionLog(logMessages[0]); expect(errorLog).toHaveProperty('error'); expect(errorLog.error).toStrictEqual( expect.objectContaining({ location: expect.any(String), name: 'Error', - message: ERROR_MSG, + message: errorMsg, stack: expect.anything(), }) ); @@ -317,22 +295,27 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} it( 'should log additional arbitrary object only once', async () => { + const { + ARBITRARY_OBJECT_KEY: objectKey, + ARBITRARY_OBJECT_DATA: objectData, + } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); // Get the log messages that contains the arbitrary object const filteredLogs = logMessages.filter((log) => - log.includes(ARBITRARY_OBJECT_DATA) + log.includes(objectData) ); // Check that the arbitrary object is logged only once expect(filteredLogs).toHaveLength(1); - const logObject = InvocationLogs.parseFunctionLog(filteredLogs[0]); + const logObject = TestInvocationLogs.parseFunctionLog( + filteredLogs[0] + ); // Check that the arbitrary object is logged correctly - expect(logObject).toHaveProperty(ARBITRARY_OBJECT_KEY); - const arbitrary = logObject[ - ARBITRARY_OBJECT_KEY - ] as APIGatewayAuthorizerResult; - expect(arbitrary.principalId).toBe(ARBITRARY_OBJECT_DATA); + expect(logObject).toHaveProperty(objectKey); + const arbitrary = logObject[objectKey] as APIGatewayAuthorizerResult; + expect(arbitrary.principalId).toBe(objectData); expect(arbitrary.policyDocument).toEqual( expect.objectContaining({ Version: 'Version 1', @@ -362,7 +345,7 @@ describe(`logger E2E tests basic functionalities (middy) for runtime: ${runtime} // Check that the X-Ray Trace ID is logged on every log const traceIds: string[] = []; for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); expect(log).toHaveProperty('xray_trace_id'); expect(log.xray_trace_id).toMatch(XRAY_TRACE_ID_REGEX); traceIds.push(log.xray_trace_id as string); diff --git a/packages/logger/tests/e2e/childLogger.manual.test.ts b/packages/logger/tests/e2e/childLogger.manual.test.ts index b3ec427f77..454eab8a81 100644 --- a/packages/logger/tests/e2e/childLogger.manual.test.ts +++ b/packages/logger/tests/e2e/childLogger.manual.test.ts @@ -3,92 +3,62 @@ * * @group e2e/logger/childLogger */ -import path from 'path'; -import { v4 } from 'uuid'; import { - createStackWithLambdaFunction, - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; -import { + TestInvocationLogs, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; +import { join } from 'node:path'; +import { LoggerTestNodejsFunction } from '../helpers/resources'; import { + commonEnvironmentVars, RESOURCE_NAME_PREFIX, - STACK_OUTPUT_LOG_GROUP, SETUP_TIMEOUT, - TEST_CASE_TIMEOUT, + STACK_OUTPUT_LOG_GROUP, TEARDOWN_TIMEOUT, + TEST_CASE_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const LEVEL = InvocationLogs.LEVEL; - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'ChildLogger-Manual' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'ChildLogger-Manual' -); -const lambdaFunctionCodeFile = 'childLogger.manual.test.FunctionCode.ts'; - -const invocationCount = 3; - -// Parameters to be used by Logger in the Lambda function -const PERSISTENT_KEY = 'persistentKey'; -const PERSISTENT_VALUE = 'persistentValue'; -const PARENT_LOG_MSG = 'parent-only-log-msg'; -const CHILD_LOG_MSG = 'child-only-log-msg'; -const CHILD_LOG_LEVEL = LEVEL.ERROR; +describe(`Logger E2E tests, child logger`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'ChildLogger-Manual', + }, + }); -const testStack = new TestStack(stackName); -let logGroupName: string; // We do not know it until deployment + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'childLogger.manual.test.FunctionCode.ts' + ); -describe(`logger E2E tests child logger functionalities (manual) for runtime: ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; + const invocationCount = 3; + let invocationLogs: TestInvocationLogs[]; + let logGroupName: string; beforeAll(async () => { - // Create and deploy a stack with AWS CDK - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - LOG_LEVEL: 'INFO', - POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', - UUID: uuid, - - // Text to be used by Logger in the Lambda function - PERSISTENT_KEY, - PERSISTENT_VALUE, - PARENT_LOG_MSG, - CHILD_LOG_MSG, - CHILD_LOG_LEVEL, + // Prepare + new LoggerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, }, - logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, - runtime: runtime, - }); + { + logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, + nameSuffix: 'ChildLogger', + } + ); - const result = await testStack.deploy(); - logGroupName = result[STACK_OUTPUT_LOG_GROUP]; + await testStack.deploy(); + logGroupName = testStack.findAndGetStackOutputValue(STACK_OUTPUT_LOG_GROUP); + const functionName = testStack.findAndGetStackOutputValue('ChildLogger'); - // Invoke the function three time (one for cold start, then two for warm start) - invocationLogs = await invokeFunction(functionName, invocationCount); + invocationLogs = await invokeFunction({ + functionName, + invocationMode: 'SEQUENTIAL', + times: invocationCount, + }); console.log('logGroupName', logGroupName); }, SETUP_TIMEOUT); @@ -97,15 +67,18 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ it( 'should not log at same level of parent because of its own logLevel', async () => { + const { PARENT_LOG_MSG: parentLogMsg, CHILD_LOG_MSG: childLogMsg } = + commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation and filter by level - const infoLogs = invocationLogs[i].getFunctionLogs(LEVEL.INFO); + const infoLogs = invocationLogs[i].getFunctionLogs('INFO'); const parentInfoLogs = infoLogs.filter((message) => - message.includes(PARENT_LOG_MSG) + message.includes(parentLogMsg) ); const childInfoLogs = infoLogs.filter((message) => - message.includes(CHILD_LOG_MSG) + message.includes(childLogMsg) ); expect(parentInfoLogs).toHaveLength(infoLogs.length); @@ -118,6 +91,7 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ it( 'should log only level passed to a child', async () => { + const { CHILD_LOG_MSG: childLogMsg } = commonEnvironmentVars; for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); @@ -125,8 +99,7 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ // Filter child logs by level const errorChildLogs = logMessages.filter( (message) => - message.includes(LEVEL.ERROR.toString()) && - message.includes(CHILD_LOG_MSG) + message.includes('ERROR') && message.includes(childLogMsg) ); // Check that the child logger only logged once (the other) @@ -140,18 +113,20 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ it( 'should NOT inject context into the child logger', async () => { + const { CHILD_LOG_MSG: childLogMsg } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); // Filter child logs by level const childLogMessages = logMessages.filter((message) => - message.includes(CHILD_LOG_MSG) + message.includes(childLogMsg) ); // Check that the context is not present in any of the child logs for (const message of childLogMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); expect(log).not.toHaveProperty('function_arn'); expect(log).not.toHaveProperty('function_memory_size'); expect(log).not.toHaveProperty('function_name'); @@ -165,14 +140,16 @@ describe(`logger E2E tests child logger functionalities (manual) for runtime: ${ it( 'both logger instances should have the same persistent key/value', async () => { + const { PERSISTENT_KEY: persistentKey } = commonEnvironmentVars; + for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); // Check that all logs have the persistent key/value for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); - expect(log).toHaveProperty(PERSISTENT_KEY); + const log = TestInvocationLogs.parseFunctionLog(message); + expect(log).toHaveProperty(persistentKey); } } }, diff --git a/packages/logger/tests/e2e/constants.ts b/packages/logger/tests/e2e/constants.ts index 1c482b8819..11ac263ae4 100644 --- a/packages/logger/tests/e2e/constants.ts +++ b/packages/logger/tests/e2e/constants.ts @@ -1,7 +1,38 @@ -export const RESOURCE_NAME_PREFIX = 'Logger-E2E'; -export const ONE_MINUTE = 60 * 1000; -export const TEST_CASE_TIMEOUT = ONE_MINUTE; -export const SETUP_TIMEOUT = 5 * ONE_MINUTE; -export const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; -export const STACK_OUTPUT_LOG_GROUP = 'LogGroupName'; -export const XRAY_TRACE_ID_REGEX = /^1-[0-9a-f]{8}-[0-9a-f]{24}$/; +import { randomUUID } from 'node:crypto'; + +const RESOURCE_NAME_PREFIX = 'Logger-E2E'; +const ONE_MINUTE = 60 * 1000; +const TEST_CASE_TIMEOUT = ONE_MINUTE; +const SETUP_TIMEOUT = 5 * ONE_MINUTE; +const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; +const STACK_OUTPUT_LOG_GROUP = 'LogGroupName'; +const XRAY_TRACE_ID_REGEX = /^1-[0-9a-f]{8}-[0-9a-f]{24}$/; + +const commonEnvironmentVars = { + PERSISTENT_KEY: 'persistentKey', + RUNTIME_ADDED_KEY: 'foo', + PERSISTENT_VALUE: randomUUID(), + REMOVABLE_KEY: 'removableKey', + REMOVABLE_VALUE: 'removedValue', + SINGLE_LOG_ITEM_KEY: 'singleKey', + SINGLE_LOG_ITEM_VALUE: 'singleValue', + ERROR_MSG: 'error', + ARBITRARY_OBJECT_KEY: 'arbitraryObjectKey', + ARBITRARY_OBJECT_DATA: 'arbitraryObjectData', + PARENT_LOG_MSG: 'parent-only-log-msg', + CHILD_LOG_MSG: 'child-only-log-msg', + CHILD_LOG_LEVEL: 'ERROR', + POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', + LOG_LEVEL: 'INFO', +}; + +export { + RESOURCE_NAME_PREFIX, + ONE_MINUTE, + TEST_CASE_TIMEOUT, + SETUP_TIMEOUT, + TEARDOWN_TIMEOUT, + STACK_OUTPUT_LOG_GROUP, + XRAY_TRACE_ID_REGEX, + commonEnvironmentVars, +}; diff --git a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts index 9b4e10a727..5b87f0675f 100644 --- a/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts +++ b/packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts @@ -3,84 +3,68 @@ * * @group e2e/logger/logEventEnvVarSetting */ -import path from 'path'; -import { v4 } from 'uuid'; import { - createStackWithLambdaFunction, - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; -import { + TestInvocationLogs, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; +import { join } from 'node:path'; +import { LoggerTestNodejsFunction } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, - STACK_OUTPUT_LOG_GROUP, SETUP_TIMEOUT, - TEST_CASE_TIMEOUT, + STACK_OUTPUT_LOG_GROUP, TEARDOWN_TIMEOUT, + TEST_CASE_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'LogEventEnvVarSetting-Middy' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'LogEventEnvVarSetting-Middy' -); -const lambdaFunctionCodeFile = - 'logEventEnvVarSetting.middy.test.FunctionCode.ts'; - -const invocationCount = 3; +describe(`Logger E2E tests, log event via env var setting with middy`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'LogEventFromEnv-Middy', + }, + }); -const testStack = new TestStack(stackName); -let logGroupName: string; // We do not know it until deployment + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'logEventEnvVarSetting.middy.test.FunctionCode.ts' + ); -describe(`logger E2E tests log event via env var setting (middy) for runtime: ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; + const invocationCount = 3; + let invocationLogs: TestInvocationLogs[]; + let logGroupName: string; beforeAll(async () => { - // Create and deploy a stack with AWS CDK - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - LOG_LEVEL: 'INFO', - POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', - UUID: uuid, - - // Enabling the logger to log events via env var - POWERTOOLS_LOGGER_LOG_EVENT: 'true', + // Prepare + new LoggerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + POWERTOOLS_LOGGER_LOG_EVENT: 'true', + }, }, - logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, - runtime: runtime, - }); + { + logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, + nameSuffix: 'LogEventFromEnv', + } + ); - const result = await testStack.deploy(); - logGroupName = result[STACK_OUTPUT_LOG_GROUP]; + await testStack.deploy(); + logGroupName = testStack.findAndGetStackOutputValue(STACK_OUTPUT_LOG_GROUP); + const functionName = + testStack.findAndGetStackOutputValue('LogEventFromEnv'); - // Invoke the function three time (one for cold start, then two for warm start) - invocationLogs = await invokeFunction( + invocationLogs = await invokeFunction({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + invocationMode: 'SEQUENTIAL', + times: invocationCount, + payload: { + foo: 'bar', + }, + }); console.log('logGroupName', logGroupName); }, SETUP_TIMEOUT); @@ -94,12 +78,12 @@ describe(`logger E2E tests log event via env var setting (middy) for runtime: ${ const logMessages = invocationLogs[i].getFunctionLogs(); for (const [index, message] of logMessages.entries()) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); // Check that the event is logged on the first log if (index === 0) { expect(log).toHaveProperty('event'); expect(log.event).toStrictEqual( - expect.objectContaining({ invocation: i }) + expect.objectContaining({ foo: 'bar' }) ); // Check that the event is not logged again on the rest of the logs } else { diff --git a/packages/logger/tests/e2e/sampleRate.decorator.test.ts b/packages/logger/tests/e2e/sampleRate.decorator.test.ts index 53f6401aee..67c803dd58 100644 --- a/packages/logger/tests/e2e/sampleRate.decorator.test.ts +++ b/packages/logger/tests/e2e/sampleRate.decorator.test.ts @@ -3,86 +3,66 @@ * * @group e2e/logger/sampleRate */ -import path from 'path'; -import { v4 } from 'uuid'; import { - createStackWithLambdaFunction, - generateUniqueName, invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; -import { + TestInvocationLogs, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; +import { randomUUID } from 'node:crypto'; +import { join } from 'node:path'; +import { LoggerTestNodejsFunction } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, - STACK_OUTPUT_LOG_GROUP, SETUP_TIMEOUT, - TEST_CASE_TIMEOUT, + STACK_OUTPUT_LOG_GROUP, TEARDOWN_TIMEOUT, + TEST_CASE_TIMEOUT, } from './constants'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const LEVEL = InvocationLogs.LEVEL; - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'SampleRate-Decorator' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'SampleRate-Decorator' -); -const lambdaFunctionCodeFile = 'sampleRate.decorator.test.FunctionCode.ts'; - -const invocationCount = 20; - -// Parameters to be used by Logger in the Lambda function -const LOG_MSG = `Log message ${uuid}`; -const SAMPLE_RATE = '0.5'; -const LOG_LEVEL = LEVEL.ERROR; +describe(`Logger E2E tests, sample rate and injectLambdaContext()`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'SampleRate-Decorator', + }, + }); -const testStack = new TestStack(stackName); -let logGroupName: string; // We do not know the exact name until deployment + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'sampleRate.decorator.test.FunctionCode.ts' + ); -describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: nodejs18x`, () => { - let invocationLogs: InvocationLogs[]; + const invocationCount = 20; + let invocationLogs: TestInvocationLogs[]; + let logGroupName: string; beforeAll(async () => { - // Create and deploy a stack with AWS CDK - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - LOG_LEVEL: LOG_LEVEL, - POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', - UUID: uuid, - - // Parameter(s) to be used by Logger in the Lambda function - LOG_MSG, - SAMPLE_RATE, + // Prepare + new LoggerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + LOG_LEVEL: 'ERROR', + SAMPLE_RATE: '0.5', + LOG_MSG: `Log message ${randomUUID()}`, + }, }, - logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, - runtime: runtime, - }); + { + logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, + nameSuffix: 'BasicFeatures', + } + ); - const result = await testStack.deploy(); - logGroupName = result[STACK_OUTPUT_LOG_GROUP]; + await testStack.deploy(); + logGroupName = testStack.findAndGetStackOutputValue(STACK_OUTPUT_LOG_GROUP); + const functionName = testStack.findAndGetStackOutputValue('BasicFeatures'); - invocationLogs = await invokeFunction(functionName, invocationCount); + invocationLogs = await invokeFunction({ + functionName, + times: invocationCount, + }); console.log('logGroupName', logGroupName); }, SETUP_TIMEOUT); @@ -99,10 +79,7 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no // Get log messages of the invocation const logMessages = invocationLogs[i].getFunctionLogs(); - if ( - logMessages.length === 1 && - logMessages[0].includes(LEVEL.ERROR) - ) { + if (logMessages.length === 1 && logMessages[0].includes('ERROR')) { countNotSampled++; } else if (logMessages.length === 4) { countSampled++; @@ -114,7 +91,7 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no } } - // Given that we set rate to 0.5. The chance that we get all invocations sampled + // Given that we set rate to 0.5. The chance that we get all invocationCount sampled // (or not sampled) is less than 0.5^20 expect(countSampled).toBeGreaterThan(0); expect(countNotSampled).toBeGreaterThan(0); @@ -129,11 +106,11 @@ describe(`logger E2E tests sample rate and injectLambdaContext() for runtime: no async () => { for (let i = 0; i < invocationCount; i++) { // Get log messages of the invocation - const logMessages = invocationLogs[i].getFunctionLogs(LEVEL.ERROR); + const logMessages = invocationLogs[i].getFunctionLogs('ERROR'); // Check that the context is logged on every log for (const message of logMessages) { - const log = InvocationLogs.parseFunctionLog(message); + const log = TestInvocationLogs.parseFunctionLog(message); expect(log).toHaveProperty('function_arn'); expect(log).toHaveProperty('function_memory_size'); expect(log).toHaveProperty('function_name'); diff --git a/packages/logger/tests/helpers/resources.ts b/packages/logger/tests/helpers/resources.ts new file mode 100644 index 0000000000..95e7a34074 --- /dev/null +++ b/packages/logger/tests/helpers/resources.ts @@ -0,0 +1,40 @@ +import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils'; +import type { TestStack } from '@aws-lambda-powertools/testing-utils'; +import { CfnOutput } from 'aws-cdk-lib'; +import type { + TestNodejsFunctionProps, + ExtraTestProps, +} from '@aws-lambda-powertools/testing-utils'; +import { commonEnvironmentVars } from '../e2e/constants'; + +interface LoggerExtraTestProps extends ExtraTestProps { + logGroupOutputKey?: string; +} + +class LoggerTestNodejsFunction extends TestNodejsFunction { + public constructor( + scope: TestStack, + props: TestNodejsFunctionProps, + extraProps: LoggerExtraTestProps + ) { + super( + scope, + { + ...props, + environment: { + ...commonEnvironmentVars, + ...props.environment, + }, + }, + extraProps + ); + + if (extraProps.logGroupOutputKey) { + new CfnOutput(this, extraProps.logGroupOutputKey, { + value: this.logGroup.logGroupName, + }); + } + } +} + +export { LoggerTestNodejsFunction }; diff --git a/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts b/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts index e2dbd76c3d..332636210e 100644 --- a/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts +++ b/packages/metrics/tests/e2e/basicFeatures.decorators.test.ts @@ -3,116 +3,86 @@ * * @group e2e/metrics/decorator */ -import path from 'path'; -import { Tracing } from 'aws-cdk-lib/aws-lambda'; import { - CloudWatchClient, - GetMetricStatisticsCommand, -} from '@aws-sdk/client-cloudwatch'; -import { v4 } from 'uuid'; -import { - generateUniqueName, - isValidRuntimeKey, - createStackWithLambdaFunction, invokeFunction, -} from '../../../commons/tests/utils/e2eUtils'; -import { TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; -import { MetricUnits } from '../../src'; import { + CloudWatchClient, + GetMetricStatisticsCommand, +} from '@aws-sdk/client-cloudwatch'; +import { join } from 'node:path'; +import { getMetrics } from '../helpers/metricsUtils'; +import { MetricsTestNodejsFunction } from '../helpers/resources'; +import { + commonEnvironmentVars, ONE_MINUTE, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { getMetrics } from '../helpers/metricsUtils'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} +describe(`Metrics E2E tests, basic features decorator usage`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'BasicFeatures-Decorators', + }, + }); -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'decorator' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'decorator' -); -const lambdaFunctionCodeFile = 'basicFeatures.decorator.test.functionCode.ts'; - -const cloudwatchClient = new CloudWatchClient({}); - -const invocationCount = 2; -const startTime = new Date(); - -// Parameters to be used by Metrics in the Lambda function -const expectedNamespace = uuid; // to easily find metrics back at assert phase -const expectedServiceName = 'e2eDecorator'; -const expectedMetricName = 'MyMetric'; -const expectedMetricUnit = MetricUnits.Count; -const expectedMetricValue = '1'; -const expectedDefaultDimensions = { MyDimension: 'MyValue' }; -const expectedExtraDimension = { MyExtraDimension: 'MyExtraValue' }; -const expectedSingleMetricDimension = { MySingleMetricDim: 'MySingleValue' }; -const expectedSingleMetricName = 'MySingleMetric'; -const expectedSingleMetricUnit = MetricUnits.Percent; -const expectedSingleMetricValue = '2'; - -const testStack = new TestStack(stackName); - -describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { - beforeAll(async () => { - // GIVEN a stack - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - tracing: Tracing.ACTIVE, + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'basicFeatures.decorator.test.functionCode.ts' + ); + const startTime = new Date(); + + const expectedServiceName = 'e2eBasicFeatures'; + let fnNameBasicFeatures: string; + new MetricsTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, environment: { - POWERTOOLS_SERVICE_NAME: 'metrics-e2e-testing', - UUID: uuid, - - // Parameter(s) to be used by Metrics in the Lambda function - EXPECTED_NAMESPACE: expectedNamespace, EXPECTED_SERVICE_NAME: expectedServiceName, - EXPECTED_METRIC_NAME: expectedMetricName, - EXPECTED_METRIC_UNIT: expectedMetricUnit, - EXPECTED_METRIC_VALUE: expectedMetricValue, - EXPECTED_DEFAULT_DIMENSIONS: JSON.stringify(expectedDefaultDimensions), - EXPECTED_EXTRA_DIMENSION: JSON.stringify(expectedExtraDimension), - EXPECTED_SINGLE_METRIC_DIMENSION: JSON.stringify( - expectedSingleMetricDimension - ), - EXPECTED_SINGLE_METRIC_NAME: expectedSingleMetricName, - EXPECTED_SINGLE_METRIC_UNIT: expectedSingleMetricUnit, - EXPECTED_SINGLE_METRIC_VALUE: expectedSingleMetricValue, }, - runtime: runtime, - }); + }, + { + nameSuffix: 'BasicFeatures', + } + ); + + const cloudwatchClient = new CloudWatchClient({}); + const invocations = 2; + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); - // and invoked - await invokeFunction(functionName, invocationCount, 'SEQUENTIAL'); + // Get the actual function names from the stack outputs + fnNameBasicFeatures = testStack.findAndGetStackOutputValue('BasicFeatures'); + + // Act + await invokeFunction({ + functionName: fnNameBasicFeatures, + times: invocations, + invocationMode: 'SEQUENTIAL', + }); }, SETUP_TIMEOUT); + describe('ColdStart metrics', () => { it( 'should capture ColdStart Metric', async () => { + const { + EXPECTED_NAMESPACE: expectedNamespace, + EXPECTED_DEFAULT_DIMENSIONS: expectedDefaultDimensions, + } = commonEnvironmentVars; + const expectedDimensions = [ { Name: 'service', Value: expectedServiceName }, - { Name: 'function_name', Value: functionName }, + { Name: 'function_name', Value: fnNameBasicFeatures }, { Name: Object.keys(expectedDefaultDimensions)[0], Value: expectedDefaultDimensions.MyDimension, @@ -168,6 +138,14 @@ describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { it( 'should produce a Metric with the default and extra one dimensions', async () => { + const { + EXPECTED_NAMESPACE: expectedNamespace, + EXPECTED_METRIC_NAME: expectedMetricName, + EXPECTED_METRIC_VALUE: expectedMetricValue, + EXPECTED_DEFAULT_DIMENSIONS: expectedDefaultDimensions, + EXPECTED_EXTRA_DIMENSION: expectedExtraDimension, + } = commonEnvironmentVars; + // Check metric dimensions const metrics = await getMetrics( cloudwatchClient, @@ -222,12 +200,13 @@ describe(`metrics E2E tests (decorator) for runtime: ${runtime}`, () => { ? metricStat.Datapoints[0] : {}; expect(singleDataPoint?.Sum).toBeGreaterThanOrEqual( - parseInt(expectedMetricValue) * invocationCount + parseInt(expectedMetricValue) * invocations ); }, TEST_CASE_TIMEOUT ); }); + afterAll(async () => { if (!process.env.DISABLE_TEARDOWN) { await testStack.destroy(); diff --git a/packages/metrics/tests/e2e/basicFeatures.manual.test.ts b/packages/metrics/tests/e2e/basicFeatures.manual.test.ts index 4bde10e7f3..b22861ab16 100644 --- a/packages/metrics/tests/e2e/basicFeatures.manual.test.ts +++ b/packages/metrics/tests/e2e/basicFeatures.manual.test.ts @@ -3,114 +3,79 @@ * * @group e2e/metrics/standardFunctions */ - -import path from 'path'; -import { Tracing } from 'aws-cdk-lib/aws-lambda'; import { - CloudWatchClient, - GetMetricStatisticsCommand, -} from '@aws-sdk/client-cloudwatch'; -import { v4 } from 'uuid'; -import { - generateUniqueName, - isValidRuntimeKey, - createStackWithLambdaFunction, invokeFunction, -} from '../../../commons/tests/utils/e2eUtils'; -import { TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; -import { MetricUnits } from '../../src'; import { + CloudWatchClient, + GetMetricStatisticsCommand, +} from '@aws-sdk/client-cloudwatch'; +import { join } from 'node:path'; +import { getMetrics } from '../helpers/metricsUtils'; +import { MetricsTestNodejsFunction } from '../helpers/resources'; +import { + commonEnvironmentVars, ONE_MINUTE, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { getMetrics } from '../helpers/metricsUtils'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} +describe(`Metrics E2E tests, manual usage`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'BasicFeatures-Manual', + }, + }); -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'manual' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'manual' -); -const lambdaFunctionCodeFile = 'basicFeatures.manual.test.functionCode.ts'; - -const cloudwatchClient = new CloudWatchClient({}); - -const invocationCount = 2; -const startTime = new Date(); - -// Parameters to be used by Metrics in the Lambda function -const expectedNamespace = uuid; // to easily find metrics back at assert phase -const expectedServiceName = 'e2eManual'; -const expectedMetricName = 'MyMetric'; -const expectedMetricUnit = MetricUnits.Count; -const expectedMetricValue = '1'; -const expectedDefaultDimensions = { MyDimension: 'MyValue' }; -const expectedExtraDimension = { MyExtraDimension: 'MyExtraValue' }; -const expectedSingleMetricDimension = { MySingleMetricDim: 'MySingleValue' }; -const expectedSingleMetricName = 'MySingleMetric'; -const expectedSingleMetricUnit = MetricUnits.Percent; -const expectedSingleMetricValue = '2'; - -const testStack = new TestStack(stackName); - -describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { - beforeAll(async () => { - // GIVEN a stack - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - tracing: Tracing.ACTIVE, + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'basicFeatures.manual.test.functionCode.ts' + ); + const startTime = new Date(); + + const expectedServiceName = 'e2eManual'; + new MetricsTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, environment: { - POWERTOOLS_SERVICE_NAME: 'metrics-e2e-testing', - UUID: uuid, - - // Parameter(s) to be used by Metrics in the Lambda function - EXPECTED_NAMESPACE: expectedNamespace, EXPECTED_SERVICE_NAME: expectedServiceName, - EXPECTED_METRIC_NAME: expectedMetricName, - EXPECTED_METRIC_UNIT: expectedMetricUnit, - EXPECTED_METRIC_VALUE: expectedMetricValue, - EXPECTED_DEFAULT_DIMENSIONS: JSON.stringify(expectedDefaultDimensions), - EXPECTED_EXTRA_DIMENSION: JSON.stringify(expectedExtraDimension), - EXPECTED_SINGLE_METRIC_DIMENSION: JSON.stringify( - expectedSingleMetricDimension - ), - EXPECTED_SINGLE_METRIC_NAME: expectedSingleMetricName, - EXPECTED_SINGLE_METRIC_UNIT: expectedSingleMetricUnit, - EXPECTED_SINGLE_METRIC_VALUE: expectedSingleMetricValue, }, - runtime: runtime, - }); + }, + { + nameSuffix: 'Manual', + } + ); + + const cloudwatchClient = new CloudWatchClient({}); + const invocations = 2; + + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); - // and invoked - await invokeFunction(functionName, invocationCount, 'SEQUENTIAL'); + // Get the actual function names from the stack outputs + const functionName = testStack.findAndGetStackOutputValue('Manual'); + + // Act + await invokeFunction({ + functionName, + times: invocations, + invocationMode: 'SEQUENTIAL', + }); }, SETUP_TIMEOUT); describe('ColdStart metrics', () => { it( 'should capture ColdStart Metric', async () => { + const { EXPECTED_NAMESPACE: expectedNamespace } = commonEnvironmentVars; + // Check coldstart metric dimensions const coldStartMetrics = await getMetrics( cloudwatchClient, @@ -162,6 +127,14 @@ describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { it( 'should produce a Metric with the default and extra one dimensions', async () => { + const { + EXPECTED_NAMESPACE: expectedNamespace, + EXPECTED_METRIC_NAME: expectedMetricName, + EXPECTED_METRIC_VALUE: expectedMetricValue, + EXPECTED_DEFAULT_DIMENSIONS: expectedDefaultDimensions, + EXPECTED_EXTRA_DIMENSION: expectedExtraDimension, + } = commonEnvironmentVars; + // Check metric dimensions const metrics = await getMetrics( cloudwatchClient, @@ -216,7 +189,7 @@ describe(`metrics E2E tests (manual) for runtime: ${runtime}`, () => { ? metricStat.Datapoints[0] : {}; expect(singleDataPoint.Sum).toBeGreaterThanOrEqual( - parseInt(expectedMetricValue) * invocationCount + parseInt(expectedMetricValue) * invocations ); }, TEST_CASE_TIMEOUT diff --git a/packages/metrics/tests/e2e/constants.ts b/packages/metrics/tests/e2e/constants.ts index 9eddc39ebe..987e234b62 100644 --- a/packages/metrics/tests/e2e/constants.ts +++ b/packages/metrics/tests/e2e/constants.ts @@ -1,5 +1,31 @@ -export const RESOURCE_NAME_PREFIX = 'Metrics-E2E'; -export const ONE_MINUTE = 60 * 1000; -export const TEST_CASE_TIMEOUT = 3 * ONE_MINUTE; -export const SETUP_TIMEOUT = 5 * ONE_MINUTE; -export const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; +import { randomUUID } from 'node:crypto'; +import { MetricUnits } from '../../src'; + +const RESOURCE_NAME_PREFIX = 'Metrics-E2E'; +const ONE_MINUTE = 60 * 1000; +const TEST_CASE_TIMEOUT = 3 * ONE_MINUTE; +const SETUP_TIMEOUT = 5 * ONE_MINUTE; +const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; + +const commonEnvironmentVars = { + EXPECTED_METRIC_NAME: 'MyMetric', + EXPECTED_METRIC_UNIT: MetricUnits.Count, + EXPECTED_METRIC_VALUE: '1', + EXPECTED_NAMESPACE: randomUUID(), + EXPECTED_DEFAULT_DIMENSIONS: { MyDimension: 'MyValue' }, + EXPECTED_EXTRA_DIMENSION: { MyExtraDimension: 'MyExtraValue' }, + EXPECTED_SINGLE_METRIC_DIMENSION: { MySingleMetricDim: 'MySingleValue' }, + EXPECTED_SINGLE_METRIC_NAME: 'MySingleMetric', + EXPECTED_SINGLE_METRIC_UNIT: MetricUnits.Percent, + EXPECTED_SINGLE_METRIC_VALUE: '2', + POWERTOOLS_SERVICE_NAME: 'metrics-e2e-testing', +}; + +export { + RESOURCE_NAME_PREFIX, + ONE_MINUTE, + TEST_CASE_TIMEOUT, + SETUP_TIMEOUT, + TEARDOWN_TIMEOUT, + commonEnvironmentVars, +}; diff --git a/packages/metrics/tests/helpers/resources.ts b/packages/metrics/tests/helpers/resources.ts new file mode 100644 index 0000000000..ebb111984b --- /dev/null +++ b/packages/metrics/tests/helpers/resources.ts @@ -0,0 +1,38 @@ +import type { + ExtraTestProps, + TestNodejsFunctionProps, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils'; +import { commonEnvironmentVars } from '../e2e/constants'; + +class MetricsTestNodejsFunction extends TestNodejsFunction { + public constructor( + scope: TestStack, + props: TestNodejsFunctionProps, + extraProps: ExtraTestProps + ) { + super( + scope, + { + ...props, + environment: { + ...commonEnvironmentVars, + EXPECTED_DEFAULT_DIMENSIONS: JSON.stringify( + commonEnvironmentVars.EXPECTED_DEFAULT_DIMENSIONS + ), + EXPECTED_EXTRA_DIMENSION: JSON.stringify( + commonEnvironmentVars.EXPECTED_EXTRA_DIMENSION + ), + EXPECTED_SINGLE_METRIC_DIMENSION: JSON.stringify( + commonEnvironmentVars.EXPECTED_SINGLE_METRIC_DIMENSION + ), + ...props.environment, + }, + }, + extraProps + ); + } +} + +export { MetricsTestNodejsFunction }; diff --git a/packages/parameters/tests/e2e/appConfigProvider.class.test.ts b/packages/parameters/tests/e2e/appConfigProvider.class.test.ts index ec662d8bb4..6d28b3ef04 100644 --- a/packages/parameters/tests/e2e/appConfigProvider.class.test.ts +++ b/packages/parameters/tests/e2e/appConfigProvider.class.test.ts @@ -3,123 +3,21 @@ * * @group e2e/parameters/appconfig/class */ -import path from 'path'; -import { Aspects } from 'aws-cdk-lib'; -import { toBase64 } from '@aws-sdk/util-base64-node'; -import { v4 } from 'uuid'; -import { - generateUniqueName, - isValidRuntimeKey, - createStackWithLambdaFunction, - invokeFunction, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { + invokeFunctionOnce, + TestInvocationLogs, + TestNodejsFunction, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; -import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; +import { toBase64 } from '@aws-sdk/util-base64-node'; +import { join } from 'node:path'; +import { TestAppConfigWithProfiles } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - createBaseAppConfigResources, - createAppConfigConfigurationProfile, -} from '../helpers/parametersUtils'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'appConfigProvider' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'appConfigProvider' -); -const lambdaFunctionCodeFile = 'appConfigProvider.class.test.functionCode.ts'; - -const invocationCount = 1; - -const applicationName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'app' -); -const environmentName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'env' -); -const deploymentStrategyName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'immediate' -); -const freeFormJsonName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'freeFormJson' -); -const freeFormYamlName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'freeFormYaml' -); -const freeFormBase64PlainTextName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'freeFormBase64PlainText' -); -const featureFlagName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'featureFlag' -); - -const freeFormJsonValue = { - foo: 'bar', -}; -const freeFormYamlValue = `foo: bar -`; -const freeFormPlainTextValue = 'foo'; -const freeFormBase64PlainTextValue = toBase64( - new TextEncoder().encode(freeFormPlainTextValue) -); -const featureFlagValue = { - version: '1', - flags: { - myFeatureFlag: { - name: 'myFeatureFlag', - }, - }, - values: { - myFeatureFlag: { - enabled: true, - }, - }, -}; - -const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of AppConfig parameters. @@ -173,121 +71,117 @@ const testStack = new TestStack(stackName); * is created after the previous one. This is necessary because we share the same AppConfig * application and environment for all tests. */ -describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; - const encoder = new TextEncoder(); +describe(`Parameters E2E tests, AppConfig provider`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AppConfig', + }, + }); - beforeAll(async () => { - // Create a stack with a Lambda function - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - UUID: uuid, + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'appConfigProvider.class.test.functionCode.ts' + ); - // Values(s) to be used by Parameters in the Lambda function - APPLICATION_NAME: applicationName, - ENVIRONMENT_NAME: environmentName, - FREEFORM_JSON_NAME: freeFormJsonName, - FREEFORM_YAML_NAME: freeFormYamlName, - FREEFORM_BASE64_ENCODED_PLAIN_TEXT_NAME: freeFormBase64PlainTextName, - FEATURE_FLAG_NAME: featureFlagName, + const freeFormJsonValue = { + foo: 'bar', + }; + const freeFormYamlValue = `foo: bar +`; + const freeFormPlainTextValue = 'foo'; + const freeFormBase64PlainTextValue = toBase64( + new TextEncoder().encode(freeFormPlainTextValue) + ); + const featureFlagValue = { + version: '1', + flags: { + myFeatureFlag: { + name: 'myFeatureFlag', }, - runtime, - }); - - // Create the base resources for an AppConfig application. - const { application, environment, deploymentStrategy } = - createBaseAppConfigResources({ - stack: testStack.stack, - applicationName, - environmentName, - deploymentStrategyName, - }); - - // Create configuration profiles for tests. - const freeFormJson = createAppConfigConfigurationProfile({ - stack: testStack.stack, - application, - environment, - deploymentStrategy, - name: freeFormJsonName, - type: 'AWS.Freeform', - content: { - content: JSON.stringify(freeFormJsonValue), - contentType: 'application/json', + }, + values: { + myFeatureFlag: { + enabled: true, }, - }); + }, + }; - const freeFormYaml = createAppConfigConfigurationProfile({ - stack: testStack.stack, - application, - environment, - deploymentStrategy, - name: freeFormYamlName, - type: 'AWS.Freeform', - content: { - content: freeFormYamlValue, - contentType: 'application/x-yaml', - }, - }); - freeFormYaml.node.addDependency(freeFormJson); + let invocationLogs: TestInvocationLogs; + const encoder = new TextEncoder(); - const freeFormBase64PlainText = createAppConfigConfigurationProfile({ - stack: testStack.stack, - application, - environment, - deploymentStrategy, - name: freeFormBase64PlainTextName, - type: 'AWS.Freeform', - content: { - content: freeFormBase64PlainTextValue, - contentType: 'text/plain', + beforeAll(async () => { + // Prepare + const testFunction = new TestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, }, - }); - freeFormBase64PlainText.node.addDependency(freeFormYaml); + { + nameSuffix: 'appConfigProvider', + } + ); - const featureFlag = createAppConfigConfigurationProfile({ - stack: testStack.stack, - application, - environment, - deploymentStrategy, - name: featureFlagName, - type: 'AWS.AppConfig.FeatureFlags', - content: { - content: JSON.stringify(featureFlagValue), - contentType: 'application/json', - }, + const appConfigResource = new TestAppConfigWithProfiles(testStack, { + profiles: [ + { + nameSuffix: 'freeFormJson', + type: 'AWS.Freeform', + content: { + content: JSON.stringify(freeFormJsonValue), + contentType: 'application/json', + }, + }, + { + nameSuffix: 'freeFormYaml', + type: 'AWS.Freeform', + content: { + content: freeFormYamlValue, + contentType: 'application/x-yaml', + }, + }, + { + nameSuffix: 'freeFormB64Plain', + type: 'AWS.Freeform', + content: { + content: freeFormBase64PlainTextValue, + contentType: 'text/plain', + }, + }, + { + nameSuffix: 'featureFlag', + type: 'AWS.AppConfig.FeatureFlags', + content: { + content: JSON.stringify(featureFlagValue), + contentType: 'application/json', + }, + }, + ], }); - featureFlag.node.addDependency(freeFormBase64PlainText); - - // Grant access to the Lambda function to the AppConfig resources. - Aspects.of(testStack.stack).add( - new ResourceAccessGranter([ - freeFormJson, - freeFormYaml, - freeFormBase64PlainText, - featureFlag, - ]) - ); + // Grant read permissions to the function + appConfigResource.grantReadData(testFunction); + // Add environment variables containing the resource names to the function + appConfigResource.addEnvVariablesToFunction(testFunction); // Deploy the stack await testStack.deploy(); + // Get the actual function names from the stack outputs + const functionName = + testStack.findAndGetStackOutputValue('appConfigProvider'); + // and invoke the Lambda function - invocationLogs = await invokeFunction( + invocationLogs = await invokeFunctionOnce({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + }); }, SETUP_TIMEOUT); describe('AppConfigProvider usage', () => { // Test 1 - get a single parameter as-is (no transformation - should return an Uint8Array) it('should retrieve single parameter as-is', () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[0]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[0]); expect(testLog).toStrictEqual({ test: 'get', @@ -297,8 +191,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = // Test 2 - get a free-form JSON and apply json transformation (should return an object) it('should retrieve a free-form JSON parameter with JSON transformation', () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[1]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[1]); expect(testLog).toStrictEqual({ test: 'get-freeform-json-binary', @@ -309,8 +203,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = // Test 3 - get a free-form base64-encoded plain text and apply binary transformation // (should return a decoded string) it('should retrieve a base64-encoded plain text parameter with binary transformation', () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[2]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[2]); expect(testLog).toStrictEqual({ test: 'get-freeform-base64-plaintext-binary', @@ -320,8 +214,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = // Test 4 - get a feature flag and apply json transformation (should return an object) it('should retrieve a feature flag parameter with JSON transformation', () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[3]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[3]); expect(testLog).toStrictEqual({ test: 'get-feature-flag-binary', @@ -334,8 +228,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = it( 'should retrieve single parameter cached', () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[4]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[4]); expect(testLog).toStrictEqual({ test: 'get-cached', @@ -350,8 +244,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = it( 'should retrieve single parameter twice without caching', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[5]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[5]); expect(testLog).toStrictEqual({ test: 'get-forced', @@ -367,8 +261,8 @@ describe(`parameters E2E tests (appConfigProvider) for runtime ${runtime}`, () = it( 'should retrieve single parameter twice, with expiration between and matching values', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[6]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[6]); const result = freeFormPlainTextValue; expect(testLog).toStrictEqual({ diff --git a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts index c47a006e30..59989d36bb 100644 --- a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts +++ b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts @@ -3,86 +3,21 @@ * * @group e2e/parameters/dynamodb/class */ -import path from 'path'; -import { AttributeType } from 'aws-cdk-lib/aws-dynamodb'; -import { Aspects } from 'aws-cdk-lib'; -import { v4 } from 'uuid'; -import { - generateUniqueName, - isValidRuntimeKey, - createStackWithLambdaFunction, - invokeFunction, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { + invokeFunctionOnce, + TestInvocationLogs, + TestNodejsFunction, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; -import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; +import { AttributeType } from 'aws-cdk-lib/aws-dynamodb'; +import { join } from 'node:path'; +import { TestDynamodbTableWithItems } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - createDynamoDBTable, - putDynamoDBItem, -} from '../helpers/parametersUtils'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'dynamoDBProvider' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'dynamoDBProvider' -); -const lambdaFunctionCodeFile = 'dynamoDBProvider.class.test.functionCode.ts'; - -const invocationCount = 1; - -// Parameters to be used by Parameters in the Lambda function -const tableGet = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'Table-Get' -); -const tableGetMultiple = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'Table-GetMultiple' -); -const tableGetCustomkeys = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'Table-GetCustomKeys' -); -const tableGetMultipleCustomkeys = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'Table-GetMultipleCustomKeys' -); -const keyAttr = 'key'; -const sortAttr = 'sort'; -const valueAttr = 'val'; - -const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of DynamoDB tables. @@ -160,208 +95,179 @@ const testStack = new TestStack(stackName); * Test 9 * Get a cached parameter and force retrieval. This also uses the same custom SDK client that counts the number of calls to DynamoDB. */ -describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; - - beforeAll(async () => { - // Create a stack with a Lambda function - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - UUID: uuid, - - // Values(s) to be used by Parameters in the Lambda function - TABLE_GET: tableGet, - TABLE_GET_MULTIPLE: tableGetMultiple, - TABLE_GET_CUSTOM_KEYS: tableGetCustomkeys, - TABLE_GET_MULTIPLE_CUSTOM_KEYS: tableGetMultipleCustomkeys, - KEY_ATTR: keyAttr, - SORT_ATTR: sortAttr, - VALUE_ATTR: valueAttr, - }, - runtime, - }); - - // Create the DynamoDB tables - const ddbTableGet = createDynamoDBTable({ - stack: testStack.stack, - id: 'Table-get', - tableName: tableGet, - partitionKey: { - name: 'id', - type: AttributeType.STRING, - }, - }); - const ddbTableGetMultiple = createDynamoDBTable({ - stack: testStack.stack, - id: 'Table-getMultiple', - tableName: tableGetMultiple, - partitionKey: { - name: 'id', - type: AttributeType.STRING, - }, - sortKey: { - name: 'sk', - type: AttributeType.STRING, - }, - }); - const ddbTableGetCustomKeys = createDynamoDBTable({ - stack: testStack.stack, - id: 'Table-getCustomKeys', - tableName: tableGetCustomkeys, - partitionKey: { - name: keyAttr, - type: AttributeType.STRING, - }, - }); - const ddbTabelGetMultipleCustomKeys = createDynamoDBTable({ - stack: testStack.stack, - id: 'Table-getMultipleCustomKeys', - tableName: tableGetMultipleCustomkeys, - partitionKey: { - name: keyAttr, - type: AttributeType.STRING, - }, - sortKey: { - name: sortAttr, - type: AttributeType.STRING, - }, - }); - - // Give the Lambda access to the DynamoDB tables - Aspects.of(testStack.stack).add( - new ResourceAccessGranter([ - ddbTableGet, - ddbTableGetMultiple, - ddbTableGetCustomKeys, - ddbTabelGetMultipleCustomKeys, - ]) - ); - - // Seed tables with test data - // Test 1 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test1', - table: ddbTableGet, - item: { - id: 'my-param', - value: 'foo', - }, - }); +describe(`Parameters E2E tests, dynamoDB provider`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'DynamoDBProvider', + }, + }); - // Test 2 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test2-a', - table: ddbTableGetMultiple, - item: { - id: 'my-params', - sk: 'config', - value: 'bar', - }, - }); - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test2-b', - table: ddbTableGetMultiple, - item: { - id: 'my-params', - sk: 'key', - value: 'baz', - }, - }); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'dynamoDBProvider.class.test.functionCode.ts' + ); - // Test 3 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test3', - table: ddbTableGetCustomKeys, - item: { - [keyAttr]: 'my-param', - [valueAttr]: 'foo', - }, - }); + const keyAttr = 'key'; + const sortAttr = 'sort'; + const valueAttr = 'val'; - // Test 4 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test4-a', - table: ddbTabelGetMultipleCustomKeys, - item: { - [keyAttr]: 'my-params', - [sortAttr]: 'config', - [valueAttr]: 'bar', - }, - }); - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test4-b', - table: ddbTabelGetMultipleCustomKeys, - item: { - [keyAttr]: 'my-params', - [sortAttr]: 'key', - [valueAttr]: 'baz', - }, - }); + let invocationLogs: TestInvocationLogs; - // Test 5 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test5', - table: ddbTableGet, - item: { - id: 'my-param-json', - value: JSON.stringify({ foo: 'bar' }), + beforeAll(async () => { + // Prepare + const testFunction = new TestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + KEY_ATTR: keyAttr, + SORT_ATTR: sortAttr, + VALUE_ATTR: valueAttr, + }, }, - }); + { + nameSuffix: 'dynamoDBProvider', + } + ); - // Test 6 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test6', - table: ddbTableGet, - item: { - id: 'my-param-binary', - value: 'YmF6', // base64 encoded 'baz' + // Table for Test 1, 5, 6 + const tableGet = new TestDynamodbTableWithItems( + testStack, + {}, + { + nameSuffix: 'Table-Get', + items: [ + { + id: 'my-param', + value: 'foo', + }, + { + id: 'my-param-json', + value: JSON.stringify({ foo: 'bar' }), + }, + { + id: 'my-param-binary', + value: 'YmF6', // base64 encoded 'baz' + }, + ], + } + ); + tableGet.grantReadData(testFunction); + testFunction.addEnvironment('TABLE_GET', tableGet.tableName); + // Table for Test 2, 7 + const tableGetMultiple = new TestDynamodbTableWithItems( + testStack, + { + sortKey: { + name: 'sk', + type: AttributeType.STRING, + }, }, - }); - - // Test 7 - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test7-a', - table: ddbTableGetMultiple, - item: { - id: 'my-encoded-params', - sk: 'config.json', - value: JSON.stringify({ foo: 'bar' }), + { + nameSuffix: 'Table-GetMultiple', + items: [ + { + id: 'my-params', + sk: 'config', + value: 'bar', + }, + { + id: 'my-params', + sk: 'key', + value: 'baz', + }, + { + id: 'my-encoded-params', + sk: 'config.json', + value: JSON.stringify({ foo: 'bar' }), + }, + { + id: 'my-encoded-params', + sk: 'key.binary', + value: 'YmF6', // base64 encoded 'baz' + }, + ], + } + ); + tableGetMultiple.grantReadData(testFunction); + testFunction.addEnvironment( + 'TABLE_GET_MULTIPLE', + tableGetMultiple.tableName + ); + // Table for Test 3 + const tableGetCustomkeys = new TestDynamodbTableWithItems( + testStack, + { + partitionKey: { + name: keyAttr, + type: AttributeType.STRING, + }, }, - }); - putDynamoDBItem({ - stack: testStack.stack, - id: 'my-param-test7-b', - table: ddbTableGetMultiple, - item: { - id: 'my-encoded-params', - sk: 'key.binary', - value: 'YmF6', // base64 encoded 'baz' + { + nameSuffix: 'Table-GetCustomKeys', + items: [ + { + [keyAttr]: 'my-param', + [valueAttr]: 'foo', + }, + ], + } + ); + tableGetCustomkeys.grantReadData(testFunction); + testFunction.addEnvironment( + 'TABLE_GET_CUSTOM_KEYS', + tableGetCustomkeys.tableName + ); + // Table for Test 4 + const tableGetMultipleCustomkeys = new TestDynamodbTableWithItems( + testStack, + { + partitionKey: { + name: keyAttr, + type: AttributeType.STRING, + }, + sortKey: { + name: sortAttr, + type: AttributeType.STRING, + }, }, - }); + { + nameSuffix: 'Table-GetMultipleCustomKeys', + items: [ + { + [keyAttr]: 'my-params', + [sortAttr]: 'config', + [valueAttr]: 'bar', + }, + { + [keyAttr]: 'my-params', + [sortAttr]: 'key', + [valueAttr]: 'baz', + }, + ], + } + ); + tableGetMultipleCustomkeys.grantReadData(testFunction); + testFunction.addEnvironment( + 'TABLE_GET_MULTIPLE_CUSTOM_KEYS', + tableGetMultipleCustomkeys.tableName + ); // Test 8 & 9 use the same items as Test 1 // Deploy the stack await testStack.deploy(); + // Get the actual function names from the stack outputs + const functionName = + testStack.findAndGetStackOutputValue('dynamoDBProvider'); + // and invoke the Lambda function - invocationLogs = await invokeFunction( + invocationLogs = await invokeFunctionOnce({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + }); }, SETUP_TIMEOUT); describe('DynamoDBProvider usage', () => { @@ -369,8 +275,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = it( 'should retrieve a single parameter', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[0]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[0]); expect(testLog).toStrictEqual({ test: 'get', @@ -384,8 +290,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = it( 'should retrieve multiple parameters', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[1]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[1]); expect(testLog).toStrictEqual({ test: 'get-multiple', @@ -399,8 +305,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = it( 'should retrieve a single parameter', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[2]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[2]); expect(testLog).toStrictEqual({ test: 'get-custom', @@ -414,8 +320,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = it( 'should retrieve multiple parameters', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[3]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[3]); expect(testLog).toStrictEqual({ test: 'get-multiple-custom', @@ -427,8 +333,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 5 - get a single parameter with json transform it('should retrieve a single parameter with json transform', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[4]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[4]); expect(testLog).toStrictEqual({ test: 'get-json-transform', @@ -438,8 +344,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 6 - get a single parameter with binary transform it('should retrieve a single parameter with binary transform', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[5]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[5]); expect(testLog).toStrictEqual({ test: 'get-binary-transform', @@ -449,8 +355,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 7 - get multiple parameters with auto transforms (json and binary) it('should retrieve multiple parameters with auto transforms', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[6]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[6]); expect(testLog).toStrictEqual({ test: 'get-multiple-auto-transform', @@ -463,8 +369,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 8 - Get a parameter twice and check that the value is cached. it('should retrieve multiple parameters with auto transforms', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[7]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[7]); expect(testLog).toStrictEqual({ test: 'get-cached', @@ -474,8 +380,8 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () = // Test 9 - Get a cached parameter and force retrieval. it('should retrieve multiple parameters with auto transforms', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[8]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[8]); expect(testLog).toStrictEqual({ test: 'get-forced', diff --git a/packages/parameters/tests/e2e/secretsProvider.class.test.ts b/packages/parameters/tests/e2e/secretsProvider.class.test.ts index d43dd768e5..303aa37344 100644 --- a/packages/parameters/tests/e2e/secretsProvider.class.test.ts +++ b/packages/parameters/tests/e2e/secretsProvider.class.test.ts @@ -4,34 +4,21 @@ * @group e2e/parameters/secrets/class */ import { - createStackWithLambdaFunction, - generateUniqueName, - invokeFunction, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; + invokeFunctionOnce, + TestInvocationLogs, + TestNodejsFunction, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { SecretValue } from 'aws-cdk-lib'; +import { join } from 'node:path'; +import { TestSecret } from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { v4 } from 'uuid'; -import { Tracing } from 'aws-cdk-lib/aws-lambda'; -import { - TestStack, - defaultRuntime, -} from '@aws-lambda-powertools/testing-utils'; -import { Aspects, SecretValue } from 'aws-cdk-lib'; -import path from 'path'; -import { Secret } from 'aws-cdk-lib/aws-secretsmanager'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; -import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key: ${runtime}`); -} /** * Collection of e2e tests for SecretsProvider utility. * @@ -49,139 +36,119 @@ if (!isValidRuntimeKey(runtime)) { * Make sure to add the right permissions to the lambda function to access the resources. We use our `ResourceAccessGranter` to add permissions. * */ -describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => { - const uuid = v4(); - let invocationLogs: InvocationLogs[]; - const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'secretsProvider' - ); - const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'secretsProvider' - ); - const lambdaFunctionCodeFile = 'secretsProvider.class.test.functionCode.ts'; +describe(`Parameters E2E tests, Secrets Manager provider`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'SecretsProvider', + }, + }); - const invocationCount = 1; + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'secretsProvider.class.test.functionCode.ts' + ); - const testStack = new TestStack(stackName); + let invocationLogs: TestInvocationLogs; beforeAll(async () => { - // use unique names for each test to keep a clean state - const secretNamePlain = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'testSecretPlain' - ); - const secretNameObject = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'testSecretObject' - ); - const secretNameBinary = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'testSecretBinary' - ); - const secretNamePlainCached = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'testSecretPlainCached' - ); - const secretNamePlainForceFetch = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'testSecretPlainForceFetch' + const testFunction = new TestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + }, + { + nameSuffix: 'secretsProvider', + } ); - // creates the test fuction that uses Powertools for AWS Lambda (TypeScript) secret provider we want to test - // pass env vars with secret names we want to fetch - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName: functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - tracing: Tracing.ACTIVE, - environment: { - UUID: uuid, - SECRET_NAME_PLAIN: secretNamePlain, - SECRET_NAME_OBJECT: secretNameObject, - SECRET_NAME_BINARY: secretNameBinary, - SECRET_NAME_PLAIN_CACHED: secretNamePlainCached, - SECRET_NAME_PLAIN_FORCE_FETCH: secretNamePlainForceFetch, + const secretString = new TestSecret( + testStack, + { + secretStringValue: SecretValue.unsafePlainText('foo'), }, - runtime: runtime, - }); - - const secretString = new Secret(testStack.stack, 'testSecretPlain', { - secretName: secretNamePlain, - secretStringValue: SecretValue.unsafePlainText('foo'), - }); + { + nameSuffix: 'testSecretPlain', + } + ); + secretString.grantRead(testFunction); + testFunction.addEnvironment('SECRET_NAME_PLAIN', secretString.secretName); - const secretObject = new Secret(testStack.stack, 'testSecretObject', { - secretName: secretNameObject, - secretObjectValue: { - foo: SecretValue.unsafePlainText('bar'), + const secretObject = new TestSecret( + testStack, + { + secretObjectValue: { + foo: SecretValue.unsafePlainText('bar'), + }, }, - }); + { + nameSuffix: 'testSecretObject', + } + ); + secretObject.grantRead(testFunction); + testFunction.addEnvironment('SECRET_NAME_OBJECT', secretObject.secretName); - const secretBinary = new Secret(testStack.stack, 'testSecretBinary', { - secretName: secretNameBinary, - secretStringValue: SecretValue.unsafePlainText('Zm9v'), // 'foo' encoded in base64 - }); + const secretBinary = new TestSecret( + testStack, + { + secretStringValue: SecretValue.unsafePlainText('Zm9v'), // 'foo' encoded in base64 + }, + { + nameSuffix: 'testSecretBinary', + } + ); + secretBinary.grantRead(testFunction); + testFunction.addEnvironment('SECRET_NAME_BINARY', secretBinary.secretName); - const secretStringCached = new Secret( - testStack.stack, - 'testSecretStringCached', + const secretStringCached = new TestSecret( + testStack, { - secretName: secretNamePlainCached, secretStringValue: SecretValue.unsafePlainText('foo'), + }, + { + nameSuffix: 'testSecretPlainCached', } ); + secretStringCached.grantRead(testFunction); + testFunction.addEnvironment( + 'SECRET_NAME_PLAIN_CACHED', + secretStringCached.secretName + ); - const secretStringForceFetch = new Secret( - testStack.stack, - 'testSecretStringForceFetch', + const secretStringForceFetch = new TestSecret( + testStack, { - secretName: secretNamePlainForceFetch, secretStringValue: SecretValue.unsafePlainText('foo'), + }, + { + nameSuffix: 'testSecretPlainForceFetch', } ); - - // add secrets here to grant lambda permisisons to access secrets - Aspects.of(testStack.stack).add( - new ResourceAccessGranter([ - secretString, - secretObject, - secretBinary, - secretStringCached, - secretStringForceFetch, - ]) + secretStringForceFetch.grantRead(testFunction); + testFunction.addEnvironment( + 'SECRET_NAME_PLAIN_FORCE_FETCH', + secretStringForceFetch.secretName ); + // Deploy the stack await testStack.deploy(); - invocationLogs = await invokeFunction( + // Get the actual function names from the stack outputs + const functionName = + testStack.findAndGetStackOutputValue('secretsProvider'); + + invocationLogs = await invokeFunctionOnce({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + }); }, SETUP_TIMEOUT); describe('SecretsProvider usage', () => { it( 'should retrieve a secret as plain string', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[0]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[0]); expect(testLog).toStrictEqual({ test: 'get-plain', @@ -194,8 +161,8 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => it( 'should retrieve a secret using transform json option', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[1]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[1]); expect(testLog).toStrictEqual({ test: 'get-transform-json', @@ -208,8 +175,8 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => it( 'should retrieve a secret using transform binary option', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[2]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[2]); expect(testLog).toStrictEqual({ test: 'get-transform-binary', @@ -221,8 +188,8 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => }); it('should retrieve a secret twice with cached value', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLogFirst = InvocationLogs.parseFunctionLog(logs[3]); + const logs = invocationLogs.getFunctionLogs(); + const testLogFirst = TestInvocationLogs.parseFunctionLog(logs[3]); // we fetch twice, but we expect to make an API call only once expect(testLogFirst).toStrictEqual({ @@ -232,8 +199,8 @@ describe(`parameters E2E tests (SecretsProvider) for runtime: ${runtime}`, () => }); it('should retrieve a secret twice with forceFetch second time', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLogFirst = InvocationLogs.parseFunctionLog(logs[4]); + const logs = invocationLogs.getFunctionLogs(); + const testLogFirst = TestInvocationLogs.parseFunctionLog(logs[4]); // we fetch twice, 2nd time with forceFetch: true flag, we expect two api calls expect(testLogFirst).toStrictEqual({ diff --git a/packages/parameters/tests/e2e/ssmProvider.class.test.ts b/packages/parameters/tests/e2e/ssmProvider.class.test.ts index a685a988f5..e8f0aae256 100644 --- a/packages/parameters/tests/e2e/ssmProvider.class.test.ts +++ b/packages/parameters/tests/e2e/ssmProvider.class.test.ts @@ -3,86 +3,23 @@ * * @group e2e/parameters/ssm/class */ -import path from 'path'; -import { Aspects } from 'aws-cdk-lib'; -import { StringParameter } from 'aws-cdk-lib/aws-ssm'; -import { v4 } from 'uuid'; -import { - generateUniqueName, - isValidRuntimeKey, - createStackWithLambdaFunction, - invokeFunction, -} from '../../../commons/tests/utils/e2eUtils'; -import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; import { + invokeFunctionOnce, + TestInvocationLogs, + TestNodejsFunction, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; -import { ResourceAccessGranter } from '../helpers/cdkAspectGrantAccess'; +import { join } from 'node:path'; +import { + TestSecureStringParameter, + TestStringParameter, +} from '../helpers/resources'; import { RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { createSSMSecureString } from '../helpers/parametersUtils'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'ssmProvider' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'ssmProvider' -); -const lambdaFunctionCodeFile = 'ssmProvider.class.test.functionCode.ts'; - -const invocationCount = 1; - -// Parameter names to be used by Parameters in the Lambda function -const paramA = generateUniqueName( - `/${RESOURCE_NAME_PREFIX}`, - uuid, - runtime, - 'param/a' -); -const paramB = generateUniqueName( - `/${RESOURCE_NAME_PREFIX}`, - uuid, - runtime, - 'param/b' -); -const paramEncryptedA = generateUniqueName( - `/${RESOURCE_NAME_PREFIX}`, - uuid, - runtime, - 'param-encrypted/a' -); -const paramEncryptedB = generateUniqueName( - `/${RESOURCE_NAME_PREFIX}`, - uuid, - runtime, - 'param-encrypted/b' -); - -// Parameters values -const paramAValue = 'foo'; -const paramBValue = 'bar'; -const paramEncryptedAValue = 'foo-encrypted'; -const paramEncryptedBValue = 'bar-encrypted'; - -const testStack = new TestStack(stackName); /** * This test suite deploys a CDK stack with a Lambda function and a number of SSM parameters. @@ -133,70 +70,112 @@ const testStack = new TestStack(stackName); * get parameter twice, but force fetch 2nd time, we count number of SDK requests and * check that we made two API calls */ -describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { - let invocationLogs: InvocationLogs[]; +describe(`Parameters E2E tests, SSM provider`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AppConfig', + }, + }); - beforeAll(async () => { - // Create a stack with a Lambda function - createStackWithLambdaFunction({ - stack: testStack.stack, - functionName, - functionEntry: path.join(__dirname, lambdaFunctionCodeFile), - environment: { - UUID: uuid, + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'ssmProvider.class.test.functionCode.ts' + ); - // Values(s) to be used by Parameters in the Lambda function - PARAM_A: paramA, - PARAM_B: paramB, - PARAM_ENCRYPTED_A: paramEncryptedA, - PARAM_ENCRYPTED_B: paramEncryptedB, + // Parameters values + let paramA: string; + let paramB: string; + const paramAValue = 'foo'; + const paramBValue = 'bar'; + let paramEncryptedA: string; + let paramEncryptedB: string; + const paramEncryptedAValue = 'foo-encrypted'; + const paramEncryptedBValue = 'bar-encrypted'; + + let invocationLogs: TestInvocationLogs; + + beforeAll(async () => { + // Prepare + const testFunction = new TestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, }, - runtime, - }); + { + nameSuffix: 'SsmProvider', + } + ); // Create SSM parameters - const parameterGetA = new StringParameter(testStack.stack, 'Param-a', { - parameterName: paramA, - stringValue: paramAValue, - }); - const parameterGetB = new StringParameter(testStack.stack, 'Param-b', { - parameterName: paramB, - stringValue: paramBValue, - }); - - const parameterEncryptedA = createSSMSecureString({ - stack: testStack.stack, - id: 'Param-encrypted-a', - name: paramEncryptedA, - value: paramEncryptedAValue, - }); + const parameterGetA = new TestStringParameter( + testStack, + { + stringValue: paramAValue, + }, + { + nameSuffix: 'get/a', + } + ); + parameterGetA.grantRead(testFunction); + testFunction.addEnvironment('PARAM_A', parameterGetA.parameterName); + const parameterGetB = new TestStringParameter( + testStack, + { + stringValue: paramBValue, + }, + { + nameSuffix: 'get/b', + } + ); + parameterGetB.grantRead(testFunction); + testFunction.addEnvironment('PARAM_B', parameterGetB.parameterName); - const parameterEncryptedB = createSSMSecureString({ - stack: testStack.stack, - id: 'Param-encrypted-b', - name: paramEncryptedB, - value: paramEncryptedBValue, - }); + const parameterEncryptedA = new TestSecureStringParameter( + testStack, + { + value: paramEncryptedAValue, + }, + { + nameSuffix: 'secure/a', + } + ); + parameterEncryptedA.grantReadData(testFunction); + testFunction.addEnvironment( + 'PARAM_ENCRYPTED_A', + parameterEncryptedA.parameterName + ); - // Give the Lambda function access to the SSM parameters - Aspects.of(testStack.stack).add( - new ResourceAccessGranter([ - parameterGetA, - parameterGetB, - parameterEncryptedA, - parameterEncryptedB, - ]) + const parameterEncryptedB = new TestSecureStringParameter( + testStack, + { + value: paramEncryptedBValue, + }, + { + nameSuffix: 'secure/b', + } + ); + parameterEncryptedB.grantReadData(testFunction); + testFunction.addEnvironment( + 'PARAM_ENCRYPTED_B', + parameterEncryptedB.parameterName ); // Deploy the stack await testStack.deploy(); + // Get the actual function names from the stack outputs + const functionName = testStack.findAndGetStackOutputValue('SsmProvider'); + paramA = testStack.findAndGetStackOutputValue('getaStr'); + paramB = testStack.findAndGetStackOutputValue('getbStr'); + paramEncryptedA = testStack.findAndGetStackOutputValue('secureaSecStr'); + paramEncryptedB = testStack.findAndGetStackOutputValue('securebSecStr'); + // and invoke the Lambda function - invocationLogs = await invokeFunction( + invocationLogs = await invokeFunctionOnce({ functionName, - invocationCount, - 'SEQUENTIAL' - ); + }); }, SETUP_TIMEOUT); describe('SSMProvider usage', () => { @@ -204,8 +183,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve a single parameter', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[0]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[0]); expect(testLog).toStrictEqual({ test: 'get', @@ -219,8 +198,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve a single parameter with decryption', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[1]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[1]); expect(testLog).toStrictEqual({ test: 'get-decrypt', @@ -234,8 +213,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve multiple parameters', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[2]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[2]); const expectedParameterNameA = paramA.substring( paramA.lastIndexOf('/') + 1 ); @@ -260,8 +239,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve multiple parameters recursively', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[3]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[3]); const expectedParameterNameA = paramA.substring( paramA.lastIndexOf('/') + 1 ); @@ -283,8 +262,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve multiple parameters with decryption', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[4]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[4]); const expectedParameterNameA = paramEncryptedA.substring( paramEncryptedA.lastIndexOf('/') + 1 ); @@ -307,8 +286,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve multiple parameters by name', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[5]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[5]); expect(testLog).toStrictEqual({ test: 'get-multiple-by-name', @@ -325,8 +304,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve multiple parameters by name with mixed decryption', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[6]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[6]); expect(testLog).toStrictEqual({ test: 'get-multiple-by-name-mixed-decrypt', @@ -345,8 +324,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve single parameter cached', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[7]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[7]); expect(testLog).toStrictEqual({ test: 'get-cached', @@ -361,8 +340,8 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => { it( 'should retrieve single parameter twice without caching', async () => { - const logs = invocationLogs[0].getFunctionLogs(); - const testLog = InvocationLogs.parseFunctionLog(logs[8]); + const logs = invocationLogs.getFunctionLogs(); + const testLog = TestInvocationLogs.parseFunctionLog(logs[8]); expect(testLog).toStrictEqual({ test: 'get-forced', diff --git a/packages/parameters/tests/helpers/cdkAspectGrantAccess.ts b/packages/parameters/tests/helpers/cdkAspectGrantAccess.ts deleted file mode 100644 index 5d832509df..0000000000 --- a/packages/parameters/tests/helpers/cdkAspectGrantAccess.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { IAspect, Stack } from 'aws-cdk-lib'; -import { IConstruct } from 'constructs'; -import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; -import { Table } from 'aws-cdk-lib/aws-dynamodb'; -import { PolicyStatement, Effect } from 'aws-cdk-lib/aws-iam'; -import { Secret } from 'aws-cdk-lib/aws-secretsmanager'; -import { CfnDeployment } from 'aws-cdk-lib/aws-appconfig'; -import { StringParameter, IStringParameter } from 'aws-cdk-lib/aws-ssm'; - -const isStringParameterGeneric = ( - parameter: IConstruct -): parameter is StringParameter | IStringParameter => - parameter.hasOwnProperty('parameterArn'); - -/** - * An aspect that grants access to resources to a Lambda function. - * - * In our integration tests, we dynamically generate AWS CDK stacks that contain a Lambda function. - * We want to grant access to resources to the Lambda function, but we don't know the name of the - * Lambda function at the time we create the resources. Additionally, we want to keep the code - * that creates the stacks and functions as generic as possible. - * - * This aspect allows us to grant access to specific resources to all Lambda functions in a stack - * after the stack tree has been generated and before the stack is deployed. This aspect is - * used to grant access to different resource types (DynamoDB tables, SSM parameters, etc.). - * - * @see {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html CDK Docs - Aspects} - */ -export class ResourceAccessGranter implements IAspect { - private readonly resources: - | Table[] - | Secret[] - | StringParameter[] - | IStringParameter[] - | CfnDeployment[]; - - public constructor( - resources: - | Table[] - | Secret[] - | StringParameter[] - | IStringParameter[] - | CfnDeployment[] - ) { - this.resources = resources; - } - - public visit(node: IConstruct): void { - // See that we're dealing with a Function - if (node instanceof NodejsFunction) { - // Grant access to the resources - this.resources.forEach( - ( - resource: - | Table - | Secret - | StringParameter - | IStringParameter - | CfnDeployment - ) => { - if (resource instanceof Table) { - resource.grantReadData(node); - } else if (resource instanceof Secret) { - resource.grantRead(node); - } else if (isStringParameterGeneric(resource)) { - resource.grantRead(node); - - // Grant access also to the path of the parameter - node.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: ['ssm:GetParametersByPath'], - resources: [ - resource.parameterArn.split(':').slice(0, -1).join(':'), - ], - }) - ); - } else if (resource instanceof CfnDeployment) { - const appConfigConfigurationArn = Stack.of(node).formatArn({ - service: 'appconfig', - resource: `application/${resource.applicationId}/environment/${resource.environmentId}/configuration/${resource.configurationProfileId}`, - }); - - node.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: [ - 'appconfig:StartConfigurationSession', - 'appconfig:GetLatestConfiguration', - ], - resources: [appConfigConfigurationArn], - }) - ); - } - } - ); - } - } -} diff --git a/packages/parameters/tests/helpers/parametersUtils.ts b/packages/parameters/tests/helpers/parametersUtils.ts deleted file mode 100644 index f351773f5b..0000000000 --- a/packages/parameters/tests/helpers/parametersUtils.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { Stack, RemovalPolicy } from 'aws-cdk-lib'; -import { PhysicalResourceId } from 'aws-cdk-lib/custom-resources'; -import { StringParameter, IStringParameter } from 'aws-cdk-lib/aws-ssm'; -import { Table, TableProps, BillingMode } from 'aws-cdk-lib/aws-dynamodb'; -import { - CfnApplication, - CfnConfigurationProfile, - CfnDeployment, - CfnDeploymentStrategy, - CfnEnvironment, - CfnHostedConfigurationVersion, -} from 'aws-cdk-lib/aws-appconfig'; -import { - AwsCustomResource, - AwsCustomResourcePolicy, -} from 'aws-cdk-lib/custom-resources'; -import { marshall } from '@aws-sdk/util-dynamodb'; - -export type CreateDynamoDBTableOptions = { - stack: Stack; - id: string; -} & TableProps; - -const createDynamoDBTable = (options: CreateDynamoDBTableOptions): Table => { - const { stack, id, ...tableProps } = options; - const props = { - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - ...tableProps, - }; - - return new Table(stack, id, props); -}; - -export type AppConfigResourcesOptions = { - stack: Stack; - applicationName: string; - environmentName: string; - deploymentStrategyName: string; -}; - -type AppConfigResourcesOutput = { - application: CfnApplication; - environment: CfnEnvironment; - deploymentStrategy: CfnDeploymentStrategy; -}; - -/** - * Utility function to create the base resources for an AppConfig application. - */ -const createBaseAppConfigResources = ( - options: AppConfigResourcesOptions -): AppConfigResourcesOutput => { - const { stack, applicationName, environmentName, deploymentStrategyName } = - options; - - // create a new app config application. - const application = new CfnApplication(stack, 'application', { - name: applicationName, - }); - - const environment = new CfnEnvironment(stack, 'environment', { - name: environmentName, - applicationId: application.ref, - }); - - const deploymentStrategy = new CfnDeploymentStrategy( - stack, - 'deploymentStrategy', - { - name: deploymentStrategyName, - deploymentDurationInMinutes: 0, - growthFactor: 100, - replicateTo: 'NONE', - finalBakeTimeInMinutes: 0, - } - ); - - return { - application, - environment, - deploymentStrategy, - }; -}; - -export type CreateAppConfigConfigurationProfileOptions = { - stack: Stack; - name: string; - application: CfnApplication; - environment: CfnEnvironment; - deploymentStrategy: CfnDeploymentStrategy; - type: 'AWS.Freeform' | 'AWS.AppConfig.FeatureFlags'; - content: { - contentType: 'application/json' | 'application/x-yaml' | 'text/plain'; - content: string; - }; -}; - -/** - * Utility function to create an AppConfig configuration profile and deployment. - */ -const createAppConfigConfigurationProfile = ( - options: CreateAppConfigConfigurationProfileOptions -): CfnDeployment => { - const { - stack, - name, - application, - environment, - deploymentStrategy, - type, - content, - } = options; - - const configProfile = new CfnConfigurationProfile( - stack, - `${name}-configProfile`, - { - name, - applicationId: application.ref, - locationUri: 'hosted', - type, - } - ); - - const configVersion = new CfnHostedConfigurationVersion( - stack, - `${name}-configVersion`, - { - applicationId: application.ref, - configurationProfileId: configProfile.ref, - ...content, - } - ); - - return new CfnDeployment(stack, `${name}-deployment`, { - applicationId: application.ref, - configurationProfileId: configProfile.ref, - configurationVersion: configVersion.ref, - deploymentStrategyId: deploymentStrategy.ref, - environmentId: environment.ref, - }); -}; - -export type CreateSSMSecureStringOptions = { - stack: Stack; - id: string; - name: string; - value: string; -}; - -const createSSMSecureString = ( - options: CreateSSMSecureStringOptions -): IStringParameter => { - const { stack, id, name, value } = options; - - const paramCreator = new AwsCustomResource(stack, `create-${id}`, { - onCreate: { - service: 'SSM', - action: 'putParameter', - parameters: { - Name: name, - Value: value, - Type: 'SecureString', - }, - physicalResourceId: PhysicalResourceId.of(id), - }, - onDelete: { - service: 'SSM', - action: 'deleteParameter', - parameters: { - Name: name, - }, - }, - policy: AwsCustomResourcePolicy.fromSdkCalls({ - resources: AwsCustomResourcePolicy.ANY_RESOURCE, - }), - }); - - const param = StringParameter.fromSecureStringParameterAttributes(stack, id, { - parameterName: name, - }); - param.node.addDependency(paramCreator); - - return param; -}; - -export type PutDynamoDBItemOptions = { - stack: Stack; - id: string; - table: Table; - item: Record<string, unknown>; -}; - -const putDynamoDBItem = async ( - options: PutDynamoDBItemOptions -): Promise<void> => { - const { stack, id, table, item } = options; - - new AwsCustomResource(stack, id, { - onCreate: { - service: 'DynamoDB', - action: 'putItem', - parameters: { - TableName: table.tableName, - Item: marshall(item), - }, - physicalResourceId: PhysicalResourceId.of(id), - }, - policy: AwsCustomResourcePolicy.fromSdkCalls({ - resources: [table.tableArn], - }), - }); -}; - -export { - createDynamoDBTable, - createBaseAppConfigResources, - createAppConfigConfigurationProfile, - createSSMSecureString, - putDynamoDBItem, -}; diff --git a/packages/parameters/tests/helpers/resources.ts b/packages/parameters/tests/helpers/resources.ts new file mode 100644 index 0000000000..59916cfb0e --- /dev/null +++ b/packages/parameters/tests/helpers/resources.ts @@ -0,0 +1,373 @@ +import type { + ExtraTestProps, + TestDynamodbTableProps, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { + concatenateResourceName, + TestDynamodbTable, + TestNodejsFunction, +} from '@aws-lambda-powertools/testing-utils'; +import { marshall } from '@aws-sdk/util-dynamodb'; +import { CfnOutput, Stack } from 'aws-cdk-lib'; +import { + CfnApplication, + CfnConfigurationProfile, + CfnDeployment, + CfnDeploymentStrategy, + CfnEnvironment, + CfnHostedConfigurationVersion, +} from 'aws-cdk-lib/aws-appconfig'; +import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; +import type { SecretProps } from 'aws-cdk-lib/aws-secretsmanager'; +import { Secret } from 'aws-cdk-lib/aws-secretsmanager'; +import type { StringParameterProps } from 'aws-cdk-lib/aws-ssm'; +import { IStringParameter, StringParameter } from 'aws-cdk-lib/aws-ssm'; +import { + AwsCustomResource, + AwsCustomResourcePolicy, + PhysicalResourceId, +} from 'aws-cdk-lib/custom-resources'; +import { Construct } from 'constructs'; +import { randomUUID } from 'node:crypto'; + +/** + * A secure string parameter that can be used in tests. + * + * It includes some default props and outputs the parameter name. + */ +class TestSecureStringParameter extends Construct { + public readonly parameterName: string; + public readonly secureString: IStringParameter; + + public constructor( + testStack: TestStack, + props: { + value: string; + }, + extraProps: ExtraTestProps + ) { + super( + testStack.stack, + concatenateResourceName({ + testName: testStack.testName, + resourceName: randomUUID(), + }) + ); + + const { value } = props; + + const name = `/secure/${randomUUID()}`; + + const secureStringCreator = new AwsCustomResource( + testStack.stack, + `create-${randomUUID()}`, + { + onCreate: { + service: 'SSM', + action: 'putParameter', + parameters: { + Name: name, + Value: value, + Type: 'SecureString', + }, + physicalResourceId: PhysicalResourceId.of(name), + }, + onDelete: { + service: 'SSM', + action: 'deleteParameter', + parameters: { + Name: name, + }, + }, + policy: AwsCustomResourcePolicy.fromSdkCalls({ + resources: AwsCustomResourcePolicy.ANY_RESOURCE, + }), + installLatestAwsSdk: false, + } + ); + + this.secureString = StringParameter.fromSecureStringParameterAttributes( + testStack.stack, + randomUUID(), + { + parameterName: name, + } + ); + this.secureString.node.addDependency(secureStringCreator); + + this.parameterName = this.secureString.parameterName; + + new CfnOutput(this, `${extraProps.nameSuffix.replace('/', '')}SecStr`, { + value: name, + }); + } + + /** + * Grant read access to the secure string to a function. + * + * @param fn The function to grant access to the secure string + */ + public grantReadData(fn: TestNodejsFunction): void { + this.secureString.grantRead(fn); + + // Grant access also to the path of the parameter + fn.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: ['ssm:GetParametersByPath'], + resources: [ + this.secureString.parameterArn.split(':').slice(0, -1).join(':'), + ], + }) + ); + } +} + +/** + * A string parameter that can be used in tests. + */ +class TestStringParameter extends StringParameter { + public constructor( + testStack: TestStack, + props: Omit<StringParameterProps, 'parameterName'>, + extraProps: ExtraTestProps + ) { + const parameterId = concatenateResourceName({ + testName: testStack.testName, + resourceName: extraProps.nameSuffix, + }); + + super(testStack.stack, parameterId, { + ...props, + parameterName: `/${parameterId}`, + }); + + new CfnOutput(this, `${extraProps.nameSuffix.replace('/', '')}Str`, { + value: this.parameterName, + }); + } +} + +/** + * A secret that can be used in tests. + */ +class TestSecret extends Secret { + public constructor( + testStack: TestStack, + props: Omit<SecretProps, 'secretName'>, + extraProps: ExtraTestProps + ) { + const secretId = concatenateResourceName({ + testName: testStack.testName, + resourceName: extraProps.nameSuffix, + }); + + super(testStack.stack, secretId, { + ...props, + secretName: `/${secretId}`, + }); + } +} + +class TestDynamodbTableWithItems extends TestDynamodbTable { + public constructor( + testStack: TestStack, + props: TestDynamodbTableProps, + extraProps: ExtraTestProps & { + items: Record<string, unknown>[]; + } + ) { + super(testStack, props, extraProps); + + const { items } = extraProps; + + const id = `putItems-${randomUUID()}`; + + new AwsCustomResource(testStack.stack, id, { + onCreate: { + service: 'DynamoDB', + action: 'batchWriteItem', + parameters: { + RequestItems: { + [this.tableName]: items.map((item) => ({ + PutRequest: { + Item: marshall(item), + }, + })), + }, + }, + physicalResourceId: PhysicalResourceId.of(id), + }, + policy: AwsCustomResourcePolicy.fromSdkCalls({ + resources: [this.tableArn], + }), + }); + } +} + +/** + * A set of AppConfig resources that can be used in tests. + */ +class TestAppConfigWithProfiles extends Construct { + private readonly application: CfnApplication; + private readonly deploymentStrategy: CfnDeploymentStrategy; + private readonly environment: CfnEnvironment; + private readonly profiles: CfnDeployment[] = []; + + public constructor( + testStack: TestStack, + props: { + profiles: { + nameSuffix: string; + type: 'AWS.Freeform' | 'AWS.AppConfig.FeatureFlags'; + content: { + contentType: 'application/json' | 'application/x-yaml' | 'text/plain'; + content: string; + }; + }[]; + } + ) { + super( + testStack.stack, + concatenateResourceName({ + testName: testStack.testName, + resourceName: randomUUID(), + }) + ); + + const { profiles } = props; + + this.application = new CfnApplication( + testStack.stack, + `app-${randomUUID()}`, + { + name: randomUUID(), + } + ); + + this.deploymentStrategy = new CfnDeploymentStrategy( + testStack.stack, + `de-${randomUUID()}`, + { + name: randomUUID(), + deploymentDurationInMinutes: 0, + growthFactor: 100, + replicateTo: 'NONE', + finalBakeTimeInMinutes: 0, + } + ); + + this.environment = new CfnEnvironment( + testStack.stack, + `ce-${randomUUID()}`, + { + name: randomUUID(), + applicationId: this.application.ref, + } + ); + + profiles.forEach((profile, index) => { + const configProfile = new CfnConfigurationProfile( + testStack.stack, + `cp-${randomUUID()}`, + { + name: randomUUID(), + applicationId: this.application.ref, + locationUri: 'hosted', + type: profile.type, + } + ); + + const configVersion = new CfnHostedConfigurationVersion( + testStack.stack, + `cv-${randomUUID()}`, + { + applicationId: this.application.ref, + configurationProfileId: configProfile.ref, + ...profile.content, + } + ); + + const deployment = new CfnDeployment( + testStack.stack, + concatenateResourceName({ + testName: testStack.testName, + resourceName: profile.nameSuffix, + }), + { + applicationId: this.application.ref, + configurationProfileId: configProfile.ref, + configurationVersion: configVersion.ref, + deploymentStrategyId: this.deploymentStrategy.ref, + environmentId: this.environment.ref, + } + ); + + if (index > 0 && this.profiles) { + deployment.node.addDependency(this.profiles[index - 1]); + } + + this.profiles.push(deployment); + }); + } + + /** + * Add the names of the AppConfig resources to the function as environment variables. + * + * @param fn The function to add the environment variables to + */ + public addEnvVariablesToFunction(fn: TestNodejsFunction): void { + fn.addEnvironment('APPLICATION_NAME', this.application.name); + fn.addEnvironment('ENVIRONMENT_NAME', this.environment.name); + fn.addEnvironment( + 'FREEFORM_JSON_NAME', + this.profiles[0].configurationProfileId + ); + fn.addEnvironment( + 'FREEFORM_YAML_NAME', + this.profiles[1].configurationProfileId + ); + fn.addEnvironment( + 'FREEFORM_BASE64_ENCODED_PLAIN_TEXT_NAME', + this.profiles[2].configurationProfileId + ); + fn.addEnvironment( + 'FEATURE_FLAG_NAME', + this.profiles[3].configurationProfileId + ); + } + + /** + * Grant access to all the profiles to a function. + * + * @param fn The function to grant access to the profiles + */ + public grantReadData(fn: TestNodejsFunction): void { + this.profiles.forEach((profile) => { + const appConfigConfigurationArn = Stack.of(fn).formatArn({ + service: 'appconfig', + resource: `application/${profile.applicationId}/environment/${profile.environmentId}/configuration/${profile.configurationProfileId}`, + }); + + fn.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [ + 'appconfig:StartConfigurationSession', + 'appconfig:GetLatestConfiguration', + ], + resources: [appConfigConfigurationArn], + }) + ); + }); + } +} + +export { + TestSecureStringParameter, + TestStringParameter, + TestSecret, + TestDynamodbTableWithItems, + TestAppConfigWithProfiles, +}; diff --git a/packages/commons/tests/utils/InvocationLogs.ts b/packages/testing/src/TestInvocationLogs.ts similarity index 85% rename from packages/commons/tests/utils/InvocationLogs.ts rename to packages/testing/src/TestInvocationLogs.ts index 00d3cc03ce..fa396c98eb 100644 --- a/packages/commons/tests/utils/InvocationLogs.ts +++ b/packages/testing/src/TestInvocationLogs.ts @@ -1,26 +1,26 @@ /** * Log level. used for filtering the log */ -export enum LEVEL { - DEBUG = 'DEBUG', - INFO = 'INFO', - WARN = 'WARN', - ERROR = 'ERROR', -} +const Level = { + DEBUG: 'DEBUG', + INFO: 'INFO', + WARN: 'WARN', + ERROR: 'ERROR', +} as const; -export type ErrorField = { +type ErrorField = { name: string; message: string; stack: string; }; -export type FunctionLog = { - level: LEVEL; +type FunctionLog = { + level: keyof typeof Level; error: ErrorField; } & { [key: string]: unknown }; -export class InvocationLogs { - public static LEVEL = LEVEL; +class TestInvocationLogs { + public static LEVEL = Level; /** * Array of logs from invocation. @@ -51,7 +51,7 @@ export class InvocationLogs { */ public doesAnyFunctionLogsContains( text: string, - levelToFilter?: LEVEL + levelToFilter?: keyof typeof Level ): boolean { const filteredLogs = this.getFunctionLogs(levelToFilter).filter((log) => log.includes(text) @@ -81,23 +81,23 @@ export class InvocationLogs { * Return only logs from function, exclude START, END, REPORT, * and X-Ray log generated by the Lambda service. * - * @param {LEVEL} [levelToFilter] - Level to filter the logs + * @param {typeof Level} [levelToFilter] - Level to filter the logs * @returns Array of function logs, filtered by level if provided */ - public getFunctionLogs(levelToFilter?: LEVEL): string[] { - const startLogIndex = InvocationLogs.getStartLogIndex(this.logs); - const endLogIndex = InvocationLogs.getEndLogIndex(this.logs); + public getFunctionLogs(levelToFilter?: keyof typeof Level): string[] { + const startLogIndex = TestInvocationLogs.getStartLogIndex(this.logs); + const endLogIndex = TestInvocationLogs.getEndLogIndex(this.logs); let filteredLogs = this.logs.slice(startLogIndex + 1, endLogIndex); if (levelToFilter) { filteredLogs = filteredLogs.filter((log) => { try { - const parsedLog = InvocationLogs.parseFunctionLog(log); + const parsedLog = TestInvocationLogs.parseFunctionLog(log); return parsedLog.level == levelToFilter; } catch (error) { // If log is not from structured logging : such as metrics one. - return log.split('\t')[2] == levelToFilter; + return (log.split('\t')[2] as keyof typeof Level) === levelToFilter; } }); } @@ -117,3 +117,5 @@ export class InvocationLogs { return JSON.parse(log); } } + +export { TestInvocationLogs }; diff --git a/packages/testing/src/TestStack.ts b/packages/testing/src/TestStack.ts index 8c84e86fb8..952f00a5a4 100644 --- a/packages/testing/src/TestStack.ts +++ b/packages/testing/src/TestStack.ts @@ -4,6 +4,35 @@ import { readFile } from 'node:fs/promises'; import { App, Stack } from 'aws-cdk-lib'; import { AwsCdkCli, RequireApproval } from '@aws-cdk/cli-lib-alpha'; import type { ICloudAssemblyDirectoryProducer } from '@aws-cdk/cli-lib-alpha'; +import { generateTestUniqueName } from './helpers'; + +type StackNameProps = { + /** + * Prefix for the stack name. + */ + stackNamePrefix: string; + /** + * Name of the test. + */ + testName: string; +}; + +interface TestStackProps { + /** + * Name of the test stack. + */ + stackNameProps: StackNameProps; + /** + * Reference to the AWS CDK App object. + * @default new App() + */ + app?: App; + /** + * Reference to the AWS CDK Stack object. + * @default new Stack(this.app, stackName) + */ + stack?: Stack; +} /** * Test stack that can be deployed to the selected environment. @@ -14,20 +43,35 @@ class TestStack implements ICloudAssemblyDirectoryProducer { * @default new App() */ public app: App; + /** + * Outputs of the deployed stack. + */ + public outputs: Record<string, string> = {}; /** * Reference to the AWS CDK Stack object. * @default new Stack(this.app, stackName) */ public stack: Stack; + /** + * Name of the test stack. + * @example + * Logger-E2E-node18-12345-someFeature + */ + public testName: string; + /** * @internal * Reference to the AWS CDK CLI object. */ #cli: AwsCdkCli; - public constructor(stackName: string, app?: App, stack?: Stack) { + public constructor({ stackNameProps, app, stack }: TestStackProps) { + this.testName = generateTestUniqueName({ + testName: stackNameProps.testName, + testPrefix: stackNameProps.stackNamePrefix, + }); this.app = app ?? new App(); - this.stack = stack ?? new Stack(this.app, stackName); + this.stack = stack ?? new Stack(this.app, this.testName); this.#cli = AwsCdkCli.fromCloudAssemblyDirectoryProducer(this); } @@ -48,9 +92,11 @@ class TestStack implements ICloudAssemblyDirectoryProducer { outputsFile: outputFilePath, }); - return JSON.parse(await readFile(outputFilePath, 'utf-8'))[ + this.outputs = JSON.parse(await readFile(outputFilePath, 'utf-8'))[ this.stack.stackName ]; + + return this.outputs; } /** @@ -63,6 +109,20 @@ class TestStack implements ICloudAssemblyDirectoryProducer { }); } + /** + * Find and get the value of a StackOutput by its key. + */ + public findAndGetStackOutputValue = (key: string): string => { + const value = Object.keys(this.outputs).find((outputKey) => + outputKey.includes(key) + ); + if (!value) { + throw new Error(`Cannot find output for ${key}`); + } + + return this.outputs[value]; + }; + /** * Produce the Cloud Assembly directory. */ diff --git a/packages/testing/src/helpers.ts b/packages/testing/src/helpers.ts new file mode 100644 index 0000000000..4a737590b2 --- /dev/null +++ b/packages/testing/src/helpers.ts @@ -0,0 +1,84 @@ +import { randomUUID } from 'node:crypto'; +import { TEST_RUNTIMES, defaultRuntime } from './constants'; + +const isValidRuntimeKey = ( + runtime: string +): runtime is keyof typeof TEST_RUNTIMES => runtime in TEST_RUNTIMES; + +const getRuntimeKey = (): keyof typeof TEST_RUNTIMES => { + const runtime: string = process.env.RUNTIME || defaultRuntime; + + if (!isValidRuntimeKey(runtime)) { + throw new Error(`Invalid runtime key value: ${runtime}`); + } + + return runtime; +}; + +/** + * Generate a unique name for a test. + * + * The maximum length of the name is 45 characters. + * + * @example + * ```ts + * process.env.RUNTIME = 'nodejs18x'; + * const testPrefix = 'E2E-TRACER'; + * const testName = 'someFeature'; + * const uniqueName = generateTestUniqueName({ testPrefix, testName }); + * // uniqueName = 'E2E-TRACER-node18-12345-someFeature' + * ``` + */ +const generateTestUniqueName = ({ + testPrefix, + testName, +}: { + testPrefix: string; + testName: string; +}): string => + [ + testPrefix, + getRuntimeKey().replace(/[jsx]/g, ''), + randomUUID().toString().substring(0, 5), + testName, + ] + .join('-') + .substring(0, 45); + +/** + * Given a test name and a resource name, generate a unique name for the resource. + * + * The maximum length of the name is 64 characters. + */ +const concatenateResourceName = ({ + testName, + resourceName, +}: { + testName: string; + resourceName: string; +}): string => `${testName}-${resourceName}`.substring(0, 64); + +/** + * Find and get the value of a StackOutput by its key. + */ +const findAndGetStackOutputValue = ( + outputs: Record<string, string>, + key: string +): string => { + const value = Object.keys(outputs).find((outputKey) => + outputKey.includes(key) + ); + if (!value) { + throw new Error(`Cannot find output for ${key}`); + } + + return outputs[value]; +}; + +export { + isValidRuntimeKey, + getRuntimeKey, + generateTestUniqueName, + concatenateResourceName, + findAndGetStackOutputValue, +}; diff --git a/packages/testing/src/index.ts b/packages/testing/src/index.ts index 6ba0fd1d5a..7c8276c774 100644 --- a/packages/testing/src/index.ts +++ b/packages/testing/src/index.ts @@ -1,2 +1,6 @@ export * from './TestStack'; export * from './constants'; +export * from './helpers'; +export * from './resources'; +export * from './invokeTestFunction'; +export * from './TestInvocationLogs'; diff --git a/packages/testing/src/invokeTestFunction.ts b/packages/testing/src/invokeTestFunction.ts new file mode 100644 index 0000000000..46a54d9553 --- /dev/null +++ b/packages/testing/src/invokeTestFunction.ts @@ -0,0 +1,94 @@ +import { InvokeCommand, LambdaClient } from '@aws-sdk/client-lambda'; +import { fromUtf8 } from '@aws-sdk/util-utf8-node'; +import { TestInvocationLogs } from './TestInvocationLogs'; + +type InvokeTestFunctionOptions = { + functionName: string; + times?: number; + invocationMode?: 'PARALLEL' | 'SEQUENTIAL'; + payload?: Record<string, unknown> | Array<Record<string, unknown>>; +}; + +const lambdaClient = new LambdaClient({}); + +/** + * Invoke a Lambda function once and return the logs + */ +const invokeFunctionOnce = async ({ + functionName, + payload = {}, +}: Omit< + InvokeTestFunctionOptions, + 'times' | 'invocationMode' +>): Promise<TestInvocationLogs> => { + const result = await lambdaClient.send( + new InvokeCommand({ + FunctionName: functionName, + InvocationType: 'RequestResponse', + LogType: 'Tail', // Wait until execution completes and return all logs + Payload: fromUtf8(JSON.stringify(payload)), + }) + ); + + if (result?.LogResult) { + return new TestInvocationLogs(result?.LogResult); + } else { + throw new Error( + 'No LogResult field returned in the response of Lambda invocation. This should not happen.' + ); + } +}; + +/** + * Invoke a Lambda function multiple times and return the logs + * + * When specifying a payload, you can either pass a single object that will be used for all invocations, + * or an array of objects that will be used for each invocation. If you pass an array, the length of the + * array must be the same as the times parameter. + */ +const invokeFunction = async ({ + functionName, + times = 1, + invocationMode = 'PARALLEL', + payload = {}, +}: InvokeTestFunctionOptions): Promise<TestInvocationLogs[]> => { + const invocationLogs: TestInvocationLogs[] = []; + + if (payload && Array.isArray(payload) && payload.length !== times) { + throw new Error( + `The payload array must have the same length as the times parameter.` + ); + } + + if (invocationMode == 'PARALLEL') { + const invocationPromises = Array.from( + { length: times }, + () => invokeFunctionOnce + ); + + invocationLogs.push( + ...(await Promise.all( + invocationPromises.map((invoke, index) => { + const invocationPayload = Array.isArray(payload) + ? payload[index] + : payload; + + return invoke({ functionName, payload: invocationPayload }); + }) + )) + ); + } else { + for (let index = 0; index < times; index++) { + const invocationPayload = Array.isArray(payload) + ? payload[index] + : payload; + invocationLogs.push( + await invokeFunctionOnce({ functionName, payload: invocationPayload }) + ); + } + } + + return invocationLogs; +}; + +export { invokeFunctionOnce, invokeFunction }; diff --git a/packages/testing/src/resources/TestDynamodbTable.ts b/packages/testing/src/resources/TestDynamodbTable.ts new file mode 100644 index 0000000000..2aa663639a --- /dev/null +++ b/packages/testing/src/resources/TestDynamodbTable.ts @@ -0,0 +1,39 @@ +import { CfnOutput, RemovalPolicy } from 'aws-cdk-lib'; +import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; +import { randomUUID } from 'node:crypto'; +import { concatenateResourceName } from '../helpers'; +import type { TestStack } from '../TestStack'; +import type { TestDynamodbTableProps, ExtraTestProps } from './types'; + +/** + * A DynamoDB Table that can be used in tests. + * + * It includes some default props and outputs the table name. + */ +class TestDynamodbTable extends Table { + public constructor( + stack: TestStack, + props: TestDynamodbTableProps, + extraProps: ExtraTestProps + ) { + super(stack.stack, `table-${randomUUID().substring(0, 5)}`, { + partitionKey: { + name: 'id', + type: AttributeType.STRING, + }, + ...props, + tableName: concatenateResourceName({ + testName: stack.testName, + resourceName: extraProps.nameSuffix, + }), + billingMode: BillingMode.PAY_PER_REQUEST, + removalPolicy: RemovalPolicy.DESTROY, + }); + + new CfnOutput(this, extraProps.nameSuffix, { + value: this.tableName, + }); + } +} + +export { TestDynamodbTable, TestDynamodbTableProps }; diff --git a/packages/testing/src/resources/TestNodejsFunction.ts b/packages/testing/src/resources/TestNodejsFunction.ts new file mode 100644 index 0000000000..d247551723 --- /dev/null +++ b/packages/testing/src/resources/TestNodejsFunction.ts @@ -0,0 +1,41 @@ +import { CfnOutput, Duration } from 'aws-cdk-lib'; +import { Tracing } from 'aws-cdk-lib/aws-lambda'; +import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; +import { RetentionDays } from 'aws-cdk-lib/aws-logs'; +import { randomUUID } from 'node:crypto'; +import { TEST_RUNTIMES } from '../constants'; +import { concatenateResourceName, getRuntimeKey } from '../helpers'; +import type { TestStack } from '../TestStack'; +import type { ExtraTestProps, TestNodejsFunctionProps } from './types'; + +/** + * A NodejsFunction that can be used in tests. + * + * It includes some default props and outputs the function name. + */ +class TestNodejsFunction extends NodejsFunction { + public constructor( + stack: TestStack, + props: TestNodejsFunctionProps, + extraProps: ExtraTestProps + ) { + super(stack.stack, `fn-${randomUUID().substring(0, 5)}`, { + timeout: Duration.seconds(30), + memorySize: 256, + tracing: Tracing.ACTIVE, + ...props, + functionName: concatenateResourceName({ + testName: stack.testName, + resourceName: extraProps.nameSuffix, + }), + runtime: TEST_RUNTIMES[getRuntimeKey()], + logRetention: RetentionDays.ONE_DAY, + }); + + new CfnOutput(this, extraProps.nameSuffix, { + value: this.functionName, + }); + } +} + +export { ExtraTestProps, TestNodejsFunction, TestNodejsFunctionProps }; diff --git a/packages/testing/src/resources/index.ts b/packages/testing/src/resources/index.ts new file mode 100644 index 0000000000..ce4b5bbc26 --- /dev/null +++ b/packages/testing/src/resources/index.ts @@ -0,0 +1,2 @@ +export * from './TestNodejsFunction'; +export * from './TestDynamodbTable'; diff --git a/packages/testing/src/resources/types.ts b/packages/testing/src/resources/types.ts new file mode 100644 index 0000000000..5596a08f31 --- /dev/null +++ b/packages/testing/src/resources/types.ts @@ -0,0 +1,31 @@ +import type { TableProps, AttributeType } from 'aws-cdk-lib/aws-dynamodb'; +import type { NodejsFunctionProps } from 'aws-cdk-lib/aws-lambda-nodejs'; + +interface ExtraTestProps { + /** + * The suffix to be added to the resource name. + * + * For example, if the resource name is `fn-12345` and the suffix is `BasicFeatures`, + * the output will be `fn-12345-BasicFeatures`. + * + * Note that the maximum length of the name is 64 characters, so the suffix might be truncated. + */ + nameSuffix: string; +} + +type TestDynamodbTableProps = Omit< + TableProps, + 'removalPolicy' | 'tableName' | 'billingMode' | 'partitionKey' +> & { + partitionKey?: { + name: string; + type: AttributeType; + }; +}; + +type TestNodejsFunctionProps = Omit< + NodejsFunctionProps, + 'logRetention' | 'runtime' | 'functionName' +>; + +export { ExtraTestProps, TestDynamodbTableProps, TestNodejsFunctionProps }; diff --git a/packages/commons/tests/unit/InvocationLogs.test.ts b/packages/testing/tests/unit/TestInvocationLogs.test.ts similarity index 89% rename from packages/commons/tests/unit/InvocationLogs.test.ts rename to packages/testing/tests/unit/TestInvocationLogs.test.ts index 5c457a6dbe..c81a05b0b0 100644 --- a/packages/commons/tests/unit/InvocationLogs.test.ts +++ b/packages/testing/tests/unit/TestInvocationLogs.test.ts @@ -5,7 +5,7 @@ * */ -import { InvocationLogs, LEVEL } from '../utils/InvocationLogs'; +import { TestInvocationLogs } from '../../src/TestInvocationLogs'; const exampleLogs = `START RequestId: c6af9ac6-7b61-11e6-9a41-93e812345678 Version: $LATEST {"cold_start":true,"function_arn":"arn:aws:lambda:eu-west-1:561912387782:function:loggerMiddyStandardFeatures-c555a2ec-1121-4586-9c04-185ab36ea34c","function_memory_size":128,"function_name":"loggerMiddyStandardFeatures-c555a2ec-1121-4586-9c04-185ab36ea34c","function_request_id":"7f586697-238a-4c3b-9250-a5f057c1119c","level":"DEBUG","message":"This is a DEBUG log but contains the word INFO some context and persistent key","service":"logger-e2e-testing","timestamp":"2022-01-27T16:04:39.323Z","persistentKey":"works"} @@ -17,20 +17,20 @@ REPORT RequestId: c6af9ac6-7b61-11e6-9a41-93e812345678\tDuration: 2.16 ms\tBille describe('Constructor', () => { test('it should parse base64 text correctly', () => { - const invocationLogs = new InvocationLogs( + const invocationLogs = new TestInvocationLogs( Buffer.from(exampleLogs).toString('base64') ); - expect(invocationLogs.getFunctionLogs(LEVEL.DEBUG).length).toBe(1); - expect(invocationLogs.getFunctionLogs(LEVEL.INFO).length).toBe(2); - expect(invocationLogs.getFunctionLogs(LEVEL.ERROR).length).toBe(1); + expect(invocationLogs.getFunctionLogs('DEBUG').length).toBe(1); + expect(invocationLogs.getFunctionLogs('INFO').length).toBe(2); + expect(invocationLogs.getFunctionLogs('ERROR').length).toBe(1); }); }); describe('doesAnyFunctionLogsContains()', () => { - let invocationLogs: InvocationLogs; + let invocationLogs: TestInvocationLogs; beforeEach(() => { - invocationLogs = new InvocationLogs( + invocationLogs = new TestInvocationLogs( Buffer.from(exampleLogs).toString('base64') ); }); @@ -74,49 +74,49 @@ describe('doesAnyFunctionLogsContains()', () => { test('it should apply filter log based on the given level', () => { const debugLogHasWordINFO = invocationLogs.doesAnyFunctionLogsContains( 'INFO', - LEVEL.DEBUG + 'DEBUG' ); expect(debugLogHasWordINFO).toBe(true); const infoLogHasWordINFO = invocationLogs.doesAnyFunctionLogsContains( 'INFO', - LEVEL.INFO + 'INFO' ); expect(infoLogHasWordINFO).toBe(true); const errorLogHasWordINFO = invocationLogs.doesAnyFunctionLogsContains( 'INFO', - LEVEL.ERROR + 'ERROR' ); expect(errorLogHasWordINFO).toBe(false); }); }); describe('getFunctionLogs()', () => { - let invocationLogs: InvocationLogs; + let invocationLogs: TestInvocationLogs; beforeEach(() => { - invocationLogs = new InvocationLogs( + invocationLogs = new TestInvocationLogs( Buffer.from(exampleLogs).toString('base64') ); }); test('it should retrive logs of the given level only', () => { - const infoLogs = invocationLogs.getFunctionLogs(LEVEL.INFO); + const infoLogs = invocationLogs.getFunctionLogs('INFO'); expect(infoLogs.length).toBe(2); expect(infoLogs[0].includes('INFO')).toBe(true); expect(infoLogs[1].includes('INFO')).toBe(true); expect(infoLogs[0].includes('ERROR')).toBe(false); expect(infoLogs[1].includes('ERROR')).toBe(false); - const errorLogs = invocationLogs.getFunctionLogs(LEVEL.ERROR); + const errorLogs = invocationLogs.getFunctionLogs('ERROR'); expect(errorLogs.length).toBe(1); expect(errorLogs[0].includes('INFO')).toBe(false); expect(errorLogs[0].includes('ERROR')).toBe(true); }); test('it should NOT return logs generated by Lambda service (e.g. START, END, and REPORT)', () => { - const errorLogs = invocationLogs.getFunctionLogs(LEVEL.ERROR); + const errorLogs = invocationLogs.getFunctionLogs('ERROR'); expect(errorLogs.length).toBe(1); expect(errorLogs[0].includes('START')).toBe(false); expect(errorLogs[0].includes('END')).toBe(false); @@ -129,7 +129,7 @@ describe('parseFunctionLog()', () => { const rawLogStr = '{"cold_start":true,"function_arn":"arn:aws:lambda:eu-west-1:561912387782:function:loggerMiddyStandardFeatures-c555a2ec-1121-4586-9c04-185ab36ea34c","function_memory_size":128,"function_name":"loggerMiddyStandardFeatures-c555a2ec-1121-4586-9c04-185ab36ea34c","function_request_id":"7f586697-238a-4c3b-9250-a5f057c1119c","level":"DEBUG","message":"This is a DEBUG log but contains the word INFO some context and persistent key","service":"logger-e2e-testing","timestamp":"2022-01-27T16:04:39.323Z","persistentKey":"works"}'; - const logObj = InvocationLogs.parseFunctionLog(rawLogStr); + const logObj = TestInvocationLogs.parseFunctionLog(rawLogStr); expect(logObj).toStrictEqual({ cold_start: true, function_arn: @@ -150,7 +150,7 @@ describe('parseFunctionLog()', () => { test('it should throw an error if receive incorrect formatted raw log string', () => { const notJSONstring = 'not-json-string'; expect(() => { - InvocationLogs.parseFunctionLog(notJSONstring); + TestInvocationLogs.parseFunctionLog(notJSONstring); }).toThrow(Error); }); }); diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts index a6f9c0911d..9550628171 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts @@ -3,18 +3,18 @@ * * @group e2e/tracer/decorator */ -import path from 'path'; import { TestStack, - defaultRuntime, + TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; -import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { RemovalPolicy } from 'aws-cdk-lib'; import { XRayClient } from '@aws-sdk/client-xray'; -import { STSClient } from '@aws-sdk/client-sts'; -import { v4 } from 'uuid'; +import { join } from 'node:path'; +import { TracerTestNodejsFunction } from '../helpers/resources'; +import { + assertAnnotation, + assertErrorAndFault, +} from '../helpers/traceAssertions'; import { - createTracerTestFunction, getFirstSubsegment, getFunctionArn, getInvocationSubsegment, @@ -23,191 +23,146 @@ import { splitSegmentsByName, } from '../helpers/tracesUtils'; import { - generateUniqueName, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { - expectedCustomAnnotationKey, - expectedCustomAnnotationValue, - expectedCustomErrorMessage, - expectedCustomMetadataKey, - expectedCustomMetadataValue, - expectedCustomResponseValue, + commonEnvironmentVars, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - assertAnnotation, - assertErrorAndFault, -} from '../helpers/traceAssertions'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} /** - * We will create a stack with 3 Lambda functions: + * The test includes one stack with 4 Lambda functions that correspond to the following test cases: * 1. With all flags enabled (capture both response and error) * 2. Do not capture error or response * 3. Do not enable tracer + * 4. Disable capture response via decorator options * Each stack must use a unique `serviceName` as it's used to for retrieving the trace. * Using the same one will result in traces from different test cases mixing up. */ -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - v4(), - runtime, - 'AllFeatures-Decorator' -); -const lambdaFunctionCodeFile = 'allFeatures.decorator.test.functionCode.ts'; -let startTime: Date; - -/** - * Function #1 is with all flags enabled. - */ -const uuidFunction1 = v4(); -const functionNameWithAllFlagsEnabled = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction1, - runtime, - 'AllFeatures-Decorator-AllFlagsEnabled' -); -const serviceNameWithAllFlagsEnabled = functionNameWithAllFlagsEnabled; - -/** - * Function #2 doesn't capture error or response - */ -const uuidFunction2 = v4(); -const functionNameWithNoCaptureErrorOrResponse = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction2, - runtime, - 'AllFeatures-Decorator-NoCaptureErrorOrResponse' -); -const serviceNameWithNoCaptureErrorOrResponse = - functionNameWithNoCaptureErrorOrResponse; -/** - * Function #3 disables tracer - */ -const uuidFunction3 = v4(); -const functionNameWithTracerDisabled = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction3, - runtime, - 'AllFeatures-Decorator-TracerDisabled' -); -const serviceNameWithTracerDisabled = functionNameWithNoCaptureErrorOrResponse; - -/** - * Function #4 disables capture response via decorator options - */ -const uuidFunction4 = v4(); -const functionNameWithCaptureResponseFalse = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction4, - runtime, - 'AllFeatures-Decorator-CaptureResponseFalse' -); -const serviceNameWithCaptureResponseFalse = - functionNameWithCaptureResponseFalse; - -const xrayClient = new XRayClient({}); -const stsClient = new STSClient({}); -const invocations = 3; +describe(`Tracer E2E tests, all features with decorator instantiation`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AllFeatures-Decorator', + }, + }); -const testStack = new TestStack(stackName); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'allFeatures.decorator.test.functionCode.ts' + ); + const startTime = new Date(); + + /** + * Table used by all functions to make an SDK call + */ + const testTable = new TestDynamodbTable( + testStack, + {}, + { + nameSuffix: 'TestTable', + } + ); -describe(`Tracer E2E tests, all features with decorator instantiation for runtime: ${runtime}`, () => { - beforeAll(async () => { - // Prepare - startTime = new Date(); - const ddbTableName = stackName + '-table'; - - const ddbTable = new Table(testStack.stack, 'Table', { - tableName: ddbTableName, - partitionKey: { - name: 'id', - type: AttributeType.STRING, + /** + * Function #1 is with all flags enabled. + */ + let fnNameAllFlagsEnabled: string; + const fnAllFlagsEnabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - }); - - const entry = path.join(__dirname, lambdaFunctionCodeFile); - const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithAllFlagsEnabled, - entry, - expectedServiceName: serviceNameWithAllFlagsEnabled, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', + }, + { + nameSuffix: 'AllFlagsOn', + } + ); + testTable.grantWriteData(fnAllFlagsEnabled); + + /** + * Function #2 doesn't capture error or response + */ + let fnNameNoCaptureErrorOrResponse: string; + const fnNoCaptureErrorOrResponse = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, + POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'false', + POWERTOOLS_TRACER_CAPTURE_ERROR: 'false', }, - runtime, - }); - ddbTable.grantWriteData(functionWithAllFlagsEnabled); - - const functionThatDoesNotCapturesErrorAndResponse = - createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithNoCaptureErrorOrResponse, - entry, - expectedServiceName: serviceNameWithNoCaptureErrorOrResponse, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'false', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'false', - POWERTOOLS_TRACE_ENABLED: 'true', - }, - runtime, - }); - ddbTable.grantWriteData(functionThatDoesNotCapturesErrorAndResponse); - - const functionWithTracerDisabled = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithTracerDisabled, - entry, - expectedServiceName: serviceNameWithTracerDisabled, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', + }, + { + nameSuffix: 'NoCaptureErrOrResp', + } + ); + testTable.grantWriteData(fnNoCaptureErrorOrResponse); + + /** + * Function #3 disables tracer + */ + let fnNameTracerDisabled: string; + const fnTracerDisabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, POWERTOOLS_TRACE_ENABLED: 'false', }, - runtime, - }); - ddbTable.grantWriteData(functionWithTracerDisabled); - - const functionWithCaptureResponseFalse = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithCaptureResponseFalse, + }, + { + nameSuffix: 'TracerDisabled', + } + ); + testTable.grantWriteData(fnTracerDisabled); + + /** + * Function #4 disables capture response via decorator options + */ + let fnNameCaptureResponseOff: string; + const fnCaptureResponseOff = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, handler: 'handlerWithCaptureResponseFalse', - entry, - expectedServiceName: serviceNameWithCaptureResponseFalse, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - runtime, - }); - ddbTable.grantWriteData(functionWithCaptureResponseFalse); + }, + { + nameSuffix: 'CaptureResponseOff', + } + ); + testTable.grantWriteData(fnCaptureResponseOff); + + const xrayClient = new XRayClient({}); + const invocationCount = 3; + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); - // Act + // Get the actual function names from the stack outputs + fnNameAllFlagsEnabled = testStack.findAndGetStackOutputValue('AllFlagsOn'); + fnNameNoCaptureErrorOrResponse = + testStack.findAndGetStackOutputValue('NoCaptureErrOrResp'); + fnNameTracerDisabled = + testStack.findAndGetStackOutputValue('TracerDisabled'); + fnNameCaptureResponseOff = + testStack.findAndGetStackOutputValue('CaptureResponseOff'); + + // Invoke all functions await Promise.all([ - invokeAllTestCases(functionNameWithAllFlagsEnabled), - invokeAllTestCases(functionNameWithNoCaptureErrorOrResponse), - invokeAllTestCases(functionNameWithTracerDisabled), - invokeAllTestCases(functionNameWithCaptureResponseFalse), + invokeAllTestCases(fnNameAllFlagsEnabled, invocationCount), + invokeAllTestCases(fnNameNoCaptureErrorOrResponse, invocationCount), + invokeAllTestCases(fnNameTracerDisabled, invocationCount), + invokeAllTestCases(fnNameCaptureResponseOff, invocationCount), ]); }, SETUP_TIMEOUT); @@ -220,18 +175,21 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim it( 'should generate all custom traces', async () => { + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + const tracesWhenAllFlagsEnabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationCount, 4 ); - expect(tracesWhenAllFlagsEnabled.length).toBe(invocations); + expect(tracesWhenAllFlagsEnabled.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; /** @@ -268,7 +226,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim expect(subsegments.get('### myMethod')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -280,15 +238,23 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim it( 'should have correct annotations and metadata', async () => { + const { + EXPECTED_CUSTOM_ANNOTATION_KEY: expectedCustomAnnotationKey, + EXPECTED_CUSTOM_ANNOTATION_VALUE: expectedCustomAnnotationValue, + EXPECTED_CUSTOM_METADATA_KEY: expectedCustomMetadataKey, + EXPECTED_CUSTOM_METADATA_VALUE: expectedCustomMetadataValue, + EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, + } = commonEnvironmentVars; + const tracesWhenAllFlagsEnabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationCount, 4 ); - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; const invocationSubsegment = getInvocationSubsegment(trace); const handlerSubsegment = getFirstSubsegment(invocationSubsegment); @@ -298,7 +264,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim assertAnnotation({ annotations, isColdStart, - expectedServiceName: serviceNameWithAllFlagsEnabled, + expectedServiceName: 'AllFlagsOn', expectedCustomAnnotationKey, expectedCustomAnnotationValue, }); @@ -306,16 +272,16 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim if (!metadata) { fail('metadata is missing'); } - expect( - metadata[serviceNameWithAllFlagsEnabled][expectedCustomMetadataKey] - ).toEqual(expectedCustomMetadataValue); + expect(metadata['AllFlagsOn'][expectedCustomMetadataKey]).toEqual( + expectedCustomMetadataValue + ); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (!shouldThrowAnError) { // Assert that the metadata object contains the response - expect( - metadata[serviceNameWithAllFlagsEnabled]['index.handler response'] - ).toEqual(expectedCustomResponseValue); + expect(metadata['AllFlagsOn']['index.handler response']).toEqual( + expectedCustomResponseValue + ); } } }, @@ -328,18 +294,15 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim const tracesWithNoCaptureErrorOrResponse = await getTraces( xrayClient, startTime, - await getFunctionArn( - stsClient, - functionNameWithNoCaptureErrorOrResponse - ), - invocations, + await getFunctionArn(fnNameNoCaptureErrorOrResponse), + invocationCount, 4 ); - expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocations); + expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureErrorOrResponse[i]; /** @@ -376,7 +339,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim expect(subsegments.get('### myMethod')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { // Assert that the subsegment has the expected fault expect(invocationSubsegment.error).toBe(true); @@ -392,18 +355,21 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim it( 'should not capture response when captureResponse is set to false', async () => { + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + const tracesWithCaptureResponseFalse = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithCaptureResponseFalse), - invocations, + await getFunctionArn(fnNameCaptureResponseOff), + invocationCount, 4 ); - expect(tracesWithCaptureResponseFalse.length).toBe(invocations); + expect(tracesWithCaptureResponseFalse.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithCaptureResponseFalse[i]; /** @@ -450,7 +416,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim expect(myMethodSegment).toBeDefined(); expect(myMethodSegment).not.toHaveProperty('metadata'); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -466,15 +432,15 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim const tracesWithTracerDisabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithTracerDisabled), - invocations, + await getFunctionArn(fnNameTracerDisabled), + invocationCount, expectedNoOfTraces ); - expect(tracesWithTracerDisabled.length).toBe(invocations); + expect(tracesWithTracerDisabled.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithTracerDisabled[i]; expect(trace.Segments.length).toBe(2); @@ -484,7 +450,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim const invocationSubsegment = getInvocationSubsegment(trace); expect(invocationSubsegment?.subsegments).toBeUndefined(); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { expect(invocationSubsegment.error).toBe(true); } diff --git a/packages/tracer/tests/e2e/allFeatures.manual.test.ts b/packages/tracer/tests/e2e/allFeatures.manual.test.ts index 9d8cbb7bed..e3d6c427f4 100644 --- a/packages/tracer/tests/e2e/allFeatures.manual.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.manual.test.ts @@ -3,18 +3,18 @@ * * @group e2e/tracer/manual */ -import path from 'path'; -import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { RemovalPolicy } from 'aws-cdk-lib'; -import { XRayClient } from '@aws-sdk/client-xray'; -import { STSClient } from '@aws-sdk/client-sts'; -import { v4 } from 'uuid'; import { + TestDynamodbTable, TestStack, - defaultRuntime, } from '@aws-lambda-powertools/testing-utils'; +import { XRayClient } from '@aws-sdk/client-xray'; +import { join } from 'path'; +import { TracerTestNodejsFunction } from '../helpers/resources'; +import { + assertAnnotation, + assertErrorAndFault, +} from '../helpers/traceAssertions'; import { - createTracerTestFunction, getFirstSubsegment, getFunctionArn, getInvocationSubsegment, @@ -24,101 +24,74 @@ import { } from '../helpers/tracesUtils'; import type { ParsedTrace } from '../helpers/traceUtils.types'; import { - generateUniqueName, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { - expectedCustomAnnotationKey, - expectedCustomAnnotationValue, - expectedCustomErrorMessage, - expectedCustomMetadataKey, - expectedCustomMetadataValue, - expectedCustomResponseValue, + commonEnvironmentVars, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - assertAnnotation, - assertErrorAndFault, -} from '../helpers/traceAssertions'; -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const uuid = v4(); -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'AllFeatures-Manual' -); -const functionName = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuid, - runtime, - 'AllFeatures-Manual' -); -const lambdaFunctionCodeFile = 'allFeatures.manual.test.functionCode.ts'; -const expectedServiceName = functionName; - -const xrayClient = new XRayClient({}); -const stsClient = new STSClient({}); -const invocations = 3; -let sortedTraces: ParsedTrace[]; +describe(`Tracer E2E tests, all features with manual instantiation`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AllFeatures-Manual', + }, + }); -const testStack = new TestStack(stackName); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'allFeatures.manual.test.functionCode.ts' + ); + const startTime = new Date(); + + /** + * Table used by all functions to make an SDK call + */ + const testTable = new TestDynamodbTable( + testStack, + {}, + { + nameSuffix: 'TestTable', + } + ); -describe(`Tracer E2E tests, all features with manual instantiation for runtime: ${runtime}`, () => { - beforeAll(async () => { - // Prepare - const startTime = new Date(); - const ddbTableName = stackName + '-table'; - - const entry = path.join(__dirname, lambdaFunctionCodeFile); - const environmentParams = { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', - }; - const testFunction = createTracerTestFunction({ - stack: testStack.stack, - functionName, - entry, - expectedServiceName, - environmentParams, - runtime, - }); - - const ddbTable = new Table(testStack.stack, 'Table', { - tableName: ddbTableName, - partitionKey: { - name: 'id', - type: AttributeType.STRING, + let fnNameAllFlagsEnabled: string; + const fnAllFlagsEnabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - }); + }, + { + nameSuffix: 'AllFlagsOn', + } + ); + testTable.grantWriteData(fnAllFlagsEnabled); - ddbTable.grantWriteData(testFunction); + const xrayClient = new XRayClient({}); + const invocationCount = 3; + let sortedTraces: ParsedTrace[]; + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); - // Act - await invokeAllTestCases(functionName); + // Get the actual function names from the stack outputs + fnNameAllFlagsEnabled = testStack.findAndGetStackOutputValue('AllFlagsOn'); + + // Invoke all test cases + await invokeAllTestCases(fnNameAllFlagsEnabled, invocationCount); // Retrieve traces from X-Ray for assertion - const lambdaFunctionArn = await getFunctionArn(stsClient, functionName); sortedTraces = await getTraces( xrayClient, startTime, - lambdaFunctionArn, - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationCount, 4 ); }, SETUP_TIMEOUT); @@ -132,10 +105,13 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: it( 'should generate all custom traces', async () => { - expect(sortedTraces.length).toBe(invocations); + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + + expect(sortedTraces.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = sortedTraces[i]; /** @@ -169,7 +145,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: expect(subsegments.get('docs.powertools.aws.dev')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -181,7 +157,15 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: it( 'should have correct annotations and metadata', async () => { - for (let i = 0; i < invocations; i++) { + const { + EXPECTED_CUSTOM_ANNOTATION_KEY: expectedCustomAnnotationKey, + EXPECTED_CUSTOM_ANNOTATION_VALUE: expectedCustomAnnotationValue, + EXPECTED_CUSTOM_METADATA_KEY: expectedCustomMetadataKey, + EXPECTED_CUSTOM_METADATA_VALUE: expectedCustomMetadataValue, + EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, + } = commonEnvironmentVars; + + for (let i = 0; i < invocationCount; i++) { const trace = sortedTraces[i]; const invocationSubsegment = getInvocationSubsegment(trace); const handlerSubsegment = getFirstSubsegment(invocationSubsegment); @@ -191,7 +175,7 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: assertAnnotation({ annotations, isColdStart, - expectedServiceName, + expectedServiceName: 'AllFlagsOn', expectedCustomAnnotationKey, expectedCustomAnnotationValue, }); @@ -199,16 +183,16 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime: if (!metadata) { fail('metadata is missing'); } - expect( - metadata[expectedServiceName][expectedCustomMetadataKey] - ).toEqual(expectedCustomMetadataValue); + expect(metadata['AllFlagsOn'][expectedCustomMetadataKey]).toEqual( + expectedCustomMetadataValue + ); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (!shouldThrowAnError) { // Assert that the metadata object contains the response - expect( - metadata[expectedServiceName]['index.handler response'] - ).toEqual(expectedCustomResponseValue); + expect(metadata['AllFlagsOn']['index.handler response']).toEqual( + expectedCustomResponseValue + ); } } }, diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.ts index 7066a549db..7fbe843943 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.ts @@ -3,19 +3,18 @@ * * @group e2e/tracer/middy */ - -import path from 'path'; -import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { RemovalPolicy } from 'aws-cdk-lib'; -import { XRayClient } from '@aws-sdk/client-xray'; -import { STSClient } from '@aws-sdk/client-sts'; -import { v4 } from 'uuid'; import { TestStack, - defaultRuntime, + TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; +import { XRayClient } from '@aws-sdk/client-xray'; +import { join } from 'node:path'; +import { TracerTestNodejsFunction } from '../helpers/resources'; +import { + assertAnnotation, + assertErrorAndFault, +} from '../helpers/traceAssertions'; import { - createTracerTestFunction, getFirstSubsegment, getFunctionArn, getInvocationSubsegment, @@ -24,195 +23,146 @@ import { splitSegmentsByName, } from '../helpers/tracesUtils'; import { - generateUniqueName, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { - expectedCustomAnnotationKey, - expectedCustomAnnotationValue, - expectedCustomErrorMessage, - expectedCustomMetadataKey, - expectedCustomMetadataValue, - expectedCustomResponseValue, + commonEnvironmentVars, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - assertAnnotation, - assertErrorAndFault, -} from '../helpers/traceAssertions'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} /** - * We will create a stack with 3 Lambda functions: + * The test includes one stack with 4 Lambda functions that correspond to the following test cases: * 1. With all flags enabled (capture both response and error) * 2. Do not capture error or response * 3. Do not enable tracer + * 4. Disable response capture via middleware option * Each stack must use a unique `serviceName` as it's used to for retrieving the trace. * Using the same one will result in traces from different test cases mixing up. */ -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - v4(), - runtime, - 'AllFeatures-Middy' -); -const lambdaFunctionCodeFile = 'allFeatures.middy.test.functionCode.ts'; -let startTime: Date; - -/** - * Function #1 is with all flags enabled. - */ -const uuidFunction1 = v4(); -const functionNameWithAllFlagsEnabled = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction1, - runtime, - 'AllFeatures-Middy-AllFlagsEnabled' -); -const serviceNameWithAllFlagsEnabled = functionNameWithAllFlagsEnabled; - -/** - * Function #2 doesn't capture error or response - */ -const uuidFunction2 = v4(); -const functionNameWithNoCaptureErrorOrResponse = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction2, - runtime, - 'AllFeatures-Middy-NoCaptureErrorOrResponse' -); -const serviceNameWithNoCaptureErrorOrResponse = - functionNameWithNoCaptureErrorOrResponse; -/** - * Function #3 disables tracer - */ -const uuidFunction3 = v4(); -const functionNameWithTracerDisabled = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction3, - runtime, - 'AllFeatures-Middy-TracerDisabled' -); -const serviceNameWithTracerDisabled = functionNameWithNoCaptureErrorOrResponse; - -/** - * Function #4 doesn't capture response - */ -const uuidFunction4 = v4(); -const functionNameWithNoCaptureResponseViaMiddlewareOption = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction4, - runtime, - 'AllFeatures-Middy-NoCaptureResponse2' -); -const serviceNameWithNoCaptureResponseViaMiddlewareOption = - functionNameWithNoCaptureResponseViaMiddlewareOption; - -const xrayClient = new XRayClient({}); -const stsClient = new STSClient({}); -const invocations = 3; +describe(`Tracer E2E tests, all features with middy instantiation`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AllFeatures-Decorator', + }, + }); -const testStack = new TestStack(stackName); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'allFeatures.middy.test.functionCode.ts' + ); + const startTime = new Date(); + + /** + * Table used by all functions to make an SDK call + */ + const testTable = new TestDynamodbTable( + testStack, + {}, + { + nameSuffix: 'TestTable', + } + ); -describe(`Tracer E2E tests, all features with middy instantiation for runtime: ${runtime}`, () => { - beforeAll(async () => { - // Prepare - startTime = new Date(); - const ddbTableName = stackName + '-table'; - - const ddbTable = new Table(testStack.stack, 'Table', { - tableName: ddbTableName, - partitionKey: { - name: 'id', - type: AttributeType.STRING, + /** + * Function #1 is with all flags enabled. + */ + let fnNameAllFlagsEnabled: string; + const fnAllFlagsEnabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - }); - - const entry = path.join(__dirname, lambdaFunctionCodeFile); - const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithAllFlagsEnabled, - entry, - expectedServiceName: serviceNameWithAllFlagsEnabled, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', + }, + { + nameSuffix: 'AllFlagsOn', + } + ); + testTable.grantWriteData(fnAllFlagsEnabled); + + /** + * Function #2 doesn't capture error or response + */ + let fnNameNoCaptureErrorOrResponse: string; + const fnNoCaptureErrorOrResponse = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, + POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'false', + POWERTOOLS_TRACER_CAPTURE_ERROR: 'false', }, - runtime, - }); - ddbTable.grantWriteData(functionWithAllFlagsEnabled); - - const functionThatDoesNotCapturesErrorAndResponse = - createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithNoCaptureErrorOrResponse, - entry, - expectedServiceName: serviceNameWithNoCaptureErrorOrResponse, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'false', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'false', - POWERTOOLS_TRACE_ENABLED: 'true', - }, - runtime, - }); - ddbTable.grantWriteData(functionThatDoesNotCapturesErrorAndResponse); - - const functionWithTracerDisabled = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithTracerDisabled, - entry, - expectedServiceName: serviceNameWithTracerDisabled, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', + }, + { + nameSuffix: 'NoCaptureErrOrResp', + } + ); + testTable.grantWriteData(fnNoCaptureErrorOrResponse); + + /** + * Function #3 disables tracer + */ + let fnNameTracerDisabled: string; + const fnTracerDisabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, POWERTOOLS_TRACE_ENABLED: 'false', }, - runtime, - }); - ddbTable.grantWriteData(functionWithTracerDisabled); - - const functionThatDoesNotCaptureResponseViaMiddlewareOption = - createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithNoCaptureResponseViaMiddlewareOption, - entry, - handler: 'handlerWithNoCaptureResponseViaMiddlewareOption', - expectedServiceName: - serviceNameWithNoCaptureResponseViaMiddlewareOption, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', - }, - runtime, - }); - ddbTable.grantWriteData( - functionThatDoesNotCaptureResponseViaMiddlewareOption - ); + }, + { + nameSuffix: 'TracerDisabled', + } + ); + testTable.grantWriteData(fnTracerDisabled); + + /** + * Function #4 disables response capture via middleware option + */ + let fnNameCaptureResponseOff: string; + const fnCaptureResponseOff = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + handler: 'handlerWithNoCaptureResponseViaMiddlewareOption', + environment: { + TEST_TABLE_NAME: testTable.tableName, + }, + }, + { + nameSuffix: 'CaptureResponseOff', + } + ); + testTable.grantWriteData(fnCaptureResponseOff); + + const xrayClient = new XRayClient({}); + const invocationCount = 3; + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); - // Act + // Get the actual function names from the stack outputs + fnNameAllFlagsEnabled = testStack.findAndGetStackOutputValue('AllFlagsOn'); + fnNameNoCaptureErrorOrResponse = + testStack.findAndGetStackOutputValue('NoCaptureErrOrResp'); + fnNameTracerDisabled = + testStack.findAndGetStackOutputValue('TracerDisabled'); + fnNameCaptureResponseOff = + testStack.findAndGetStackOutputValue('CaptureResponseOff'); + + // Invoke all functions await Promise.all([ - invokeAllTestCases(functionNameWithAllFlagsEnabled), - invokeAllTestCases(functionNameWithNoCaptureErrorOrResponse), - invokeAllTestCases(functionNameWithTracerDisabled), - invokeAllTestCases(functionNameWithNoCaptureResponseViaMiddlewareOption), + invokeAllTestCases(fnNameAllFlagsEnabled, invocationCount), + invokeAllTestCases(fnNameNoCaptureErrorOrResponse, invocationCount), + invokeAllTestCases(fnNameTracerDisabled, invocationCount), + invokeAllTestCases(fnNameCaptureResponseOff, invocationCount), ]); }, SETUP_TIMEOUT); @@ -225,18 +175,21 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ it( 'should generate all custom traces', async () => { + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + const tracesWhenAllFlagsEnabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationCount, 4 ); - expect(tracesWhenAllFlagsEnabled.length).toBe(invocations); + expect(tracesWhenAllFlagsEnabled.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; /** @@ -270,7 +223,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ expect(subsegments.get('docs.powertools.aws.dev')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -282,15 +235,23 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ it( 'should have correct annotations and metadata', async () => { + const { + EXPECTED_CUSTOM_ANNOTATION_KEY: expectedCustomAnnotationKey, + EXPECTED_CUSTOM_ANNOTATION_VALUE: expectedCustomAnnotationValue, + EXPECTED_CUSTOM_METADATA_KEY: expectedCustomMetadataKey, + EXPECTED_CUSTOM_METADATA_VALUE: expectedCustomMetadataValue, + EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, + } = commonEnvironmentVars; + const tracesWhenAllFlagsEnabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationCount, 4 ); - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; const invocationSubsegment = getInvocationSubsegment(trace); const handlerSubsegment = getFirstSubsegment(invocationSubsegment); @@ -300,7 +261,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ assertAnnotation({ annotations, isColdStart, - expectedServiceName: serviceNameWithAllFlagsEnabled, + expectedServiceName: 'AllFlagsOn', expectedCustomAnnotationKey, expectedCustomAnnotationValue, }); @@ -308,16 +269,16 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ if (!metadata) { fail('metadata is missing'); } - expect( - metadata[serviceNameWithAllFlagsEnabled][expectedCustomMetadataKey] - ).toEqual(expectedCustomMetadataValue); + expect(metadata['AllFlagsOn'][expectedCustomMetadataKey]).toEqual( + expectedCustomMetadataValue + ); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (!shouldThrowAnError) { // Assert that the metadata object contains the response - expect( - metadata[serviceNameWithAllFlagsEnabled]['index.handler response'] - ).toEqual(expectedCustomResponseValue); + expect(metadata['AllFlagsOn']['index.handler response']).toEqual( + expectedCustomResponseValue + ); } } }, @@ -330,18 +291,15 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const tracesWithNoCaptureErrorOrResponse = await getTraces( xrayClient, startTime, - await getFunctionArn( - stsClient, - functionNameWithNoCaptureErrorOrResponse - ), - invocations, + await getFunctionArn(fnNameNoCaptureErrorOrResponse), + invocationCount, 4 ); - expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocations); + expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureErrorOrResponse[i]; /** @@ -375,7 +333,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ expect(subsegments.get('docs.powertools.aws.dev')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { // Assert that the subsegment has the expected fault expect(invocationSubsegment.error).toBe(true); @@ -391,21 +349,21 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ it( 'should not capture response when captureResponse is set to false', async () => { + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + const tracesWithNoCaptureResponse = await getTraces( xrayClient, startTime, - await getFunctionArn( - stsClient, - functionNameWithNoCaptureResponseViaMiddlewareOption - ), - invocations, + await getFunctionArn(fnNameCaptureResponseOff), + invocationCount, 4 ); - expect(tracesWithNoCaptureResponse.length).toBe(invocations); + expect(tracesWithNoCaptureResponse.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureResponse[i]; /** @@ -443,7 +401,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ expect(subsegments.get('docs.powertools.aws.dev')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -459,15 +417,15 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const tracesWithTracerDisabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithTracerDisabled), - invocations, + await getFunctionArn(fnNameTracerDisabled), + invocationCount, expectedNoOfTraces ); - expect(tracesWithTracerDisabled.length).toBe(invocations); + expect(tracesWithTracerDisabled.length).toBe(invocationCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationCount; i++) { const trace = tracesWithTracerDisabled[i]; expect(trace.Segments.length).toBe(2); @@ -477,7 +435,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ const invocationSubsegment = getInvocationSubsegment(trace); expect(invocationSubsegment?.subsegments).toBeUndefined(); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationCount - 1; if (shouldThrowAnError) { expect(invocationSubsegment.error).toBe(true); } diff --git a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts index 8d460ee0f1..a37f0ad34b 100644 --- a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts +++ b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts @@ -3,19 +3,18 @@ * * @group e2e/tracer/decorator-async-handler */ - -import path from 'path'; -import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; -import { RemovalPolicy } from 'aws-cdk-lib'; -import { XRayClient } from '@aws-sdk/client-xray'; -import { STSClient } from '@aws-sdk/client-sts'; -import { v4 } from 'uuid'; import { TestStack, - defaultRuntime, + TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; +import { XRayClient } from '@aws-sdk/client-xray'; +import { join } from 'node:path'; +import { TracerTestNodejsFunction } from '../helpers/resources'; +import { + assertAnnotation, + assertErrorAndFault, +} from '../helpers/traceAssertions'; import { - createTracerTestFunction, getFirstSubsegment, getFunctionArn, getInvocationSubsegment, @@ -24,128 +23,93 @@ import { splitSegmentsByName, } from '../helpers/tracesUtils'; import { - generateUniqueName, - isValidRuntimeKey, -} from '../../../commons/tests/utils/e2eUtils'; -import { - expectedCustomAnnotationKey, - expectedCustomAnnotationValue, - expectedCustomErrorMessage, - expectedCustomMetadataKey, - expectedCustomMetadataValue, - expectedCustomResponseValue, - expectedCustomSubSegmentName, + commonEnvironmentVars, RESOURCE_NAME_PREFIX, SETUP_TIMEOUT, TEARDOWN_TIMEOUT, TEST_CASE_TIMEOUT, } from './constants'; -import { - assertAnnotation, - assertErrorAndFault, -} from '../helpers/traceAssertions'; - -const runtime: string = process.env.RUNTIME || defaultRuntime; - -if (!isValidRuntimeKey(runtime)) { - throw new Error(`Invalid runtime key value: ${runtime}`); -} - -const stackName = generateUniqueName( - RESOURCE_NAME_PREFIX, - v4(), - runtime, - 'AllFeatures-Decorator' -); -const lambdaFunctionCodeFile = 'asyncHandler.decorator.test.functionCode.ts'; -let startTime: Date; - -/** - * Function #1 is with all flags enabled. - */ -const uuidFunction1 = v4(); -const functionNameWithAllFlagsEnabled = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction1, - runtime, - 'AllFeatures-Decorator-Async-AllFlagsEnabled' -); -const serviceNameWithAllFlagsEnabled = functionNameWithAllFlagsEnabled; - -/** - * Function #2 sets a custom subsegment name in the decorated method - */ -const uuidFunction2 = v4(); -const functionNameWithCustomSubsegmentNameInMethod = generateUniqueName( - RESOURCE_NAME_PREFIX, - uuidFunction2, - runtime, - 'AllFeatures-Decorator-Async-CustomSubsegmentNameInMethod' -); -const serviceNameWithCustomSubsegmentNameInMethod = - functionNameWithCustomSubsegmentNameInMethod; -const xrayClient = new XRayClient({}); -const stsClient = new STSClient({}); -const invocations = 3; +describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { + const testStack = new TestStack({ + stackNameProps: { + stackNamePrefix: RESOURCE_NAME_PREFIX, + testName: 'AllFeatures-Decorator', + }, + }); -const testStack = new TestStack(stackName); + // Location of the lambda function code + const lambdaFunctionCodeFilePath = join( + __dirname, + 'asyncHandler.decorator.test.functionCode.ts' + ); + const startTime = new Date(); + + /** + * Table used by all functions to make an SDK call + */ + const testTable = new TestDynamodbTable( + testStack, + {}, + { + nameSuffix: 'TestTable', + } + ); -describe(`Tracer E2E tests, asynchronous handler with decorator instantiation for runtime: ${runtime}`, () => { - beforeAll(async () => { - // Prepare - startTime = new Date(); - const ddbTableName = stackName + '-table'; - - const ddbTable = new Table(testStack.stack, 'Table', { - tableName: ddbTableName, - partitionKey: { - name: 'id', - type: AttributeType.STRING, - }, - billingMode: BillingMode.PAY_PER_REQUEST, - removalPolicy: RemovalPolicy.DESTROY, - }); - - const entry = path.join(__dirname, lambdaFunctionCodeFile); - const functionWithAllFlagsEnabled = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithAllFlagsEnabled, - entry, - expectedServiceName: serviceNameWithAllFlagsEnabled, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', + /** + * Function #1 is with all flags enabled. + */ + let fnNameAllFlagsEnabled: string; + const fnAllFlagsEnabled = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - runtime, - }); - ddbTable.grantWriteData(functionWithAllFlagsEnabled); - - const functionWithCustomSubsegmentNameInMethod = createTracerTestFunction({ - stack: testStack.stack, - functionName: functionNameWithCustomSubsegmentNameInMethod, + }, + { + nameSuffix: 'AllFlagsOn', + } + ); + testTable.grantWriteData(fnAllFlagsEnabled); + + /** + * Function #2 sets a custom subsegment name in the decorated method + */ + let fnNameCustomSubsegment: string; + const fnCustomSubsegmentName = new TracerTestNodejsFunction( + testStack, + { + entry: lambdaFunctionCodeFilePath, handler: 'handlerWithCustomSubsegmentNameInMethod', - entry, - expectedServiceName: serviceNameWithCustomSubsegmentNameInMethod, - environmentParams: { - TEST_TABLE_NAME: ddbTableName, - EXPECTED_CUSTOM_SUBSEGMENT_NAME: expectedCustomSubSegmentName, - POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', - POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', - POWERTOOLS_TRACE_ENABLED: 'true', + environment: { + TEST_TABLE_NAME: testTable.tableName, }, - runtime, - }); - ddbTable.grantWriteData(functionWithCustomSubsegmentNameInMethod); + }, + { + nameSuffix: 'CustomSubsegmentName', + } + ); + testTable.grantWriteData(fnCustomSubsegmentName); + + const xrayClient = new XRayClient({}); + const invocationsCount = 3; + beforeAll(async () => { + // Deploy the stack await testStack.deploy(); + // Get the actual function names from the stack outputs + fnNameAllFlagsEnabled = testStack.findAndGetStackOutputValue('AllFlagsOn'); + fnNameCustomSubsegment = testStack.findAndGetStackOutputValue( + 'CustomSubsegmentName' + ); + // Act await Promise.all([ - invokeAllTestCases(functionNameWithAllFlagsEnabled), - invokeAllTestCases(functionNameWithCustomSubsegmentNameInMethod), + invokeAllTestCases(fnNameAllFlagsEnabled, invocationsCount), + invokeAllTestCases(fnNameCustomSubsegment, invocationsCount), ]); }, SETUP_TIMEOUT); @@ -158,18 +122,21 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo it( 'should generate all custom traces', async () => { + const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = + commonEnvironmentVars; + const tracesWhenAllFlagsEnabled = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationsCount, 4 ); - expect(tracesWhenAllFlagsEnabled.length).toBe(invocations); + expect(tracesWhenAllFlagsEnabled.length).toBe(invocationsCount); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationsCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; /** @@ -206,7 +173,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo expect(subsegments.get('### myMethod')?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationsCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } @@ -218,15 +185,23 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo it( 'should have correct annotations and metadata', async () => { + const { + EXPECTED_CUSTOM_ANNOTATION_KEY: expectedCustomAnnotationKey, + EXPECTED_CUSTOM_ANNOTATION_VALUE: expectedCustomAnnotationValue, + EXPECTED_CUSTOM_METADATA_KEY: expectedCustomMetadataKey, + EXPECTED_CUSTOM_METADATA_VALUE: expectedCustomMetadataValue, + EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, + } = commonEnvironmentVars; + const traces = await getTraces( xrayClient, startTime, - await getFunctionArn(stsClient, functionNameWithAllFlagsEnabled), - invocations, + await getFunctionArn(fnNameAllFlagsEnabled), + invocationsCount, 4 ); - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationsCount; i++) { const trace = traces[i]; const invocationSubsegment = getInvocationSubsegment(trace); const handlerSubsegment = getFirstSubsegment(invocationSubsegment); @@ -236,7 +211,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo assertAnnotation({ annotations, isColdStart, - expectedServiceName: serviceNameWithAllFlagsEnabled, + expectedServiceName: 'AllFlagsOn', expectedCustomAnnotationKey, expectedCustomAnnotationValue, }); @@ -244,16 +219,16 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo if (!metadata) { fail('metadata is missing'); } - expect( - metadata[serviceNameWithAllFlagsEnabled][expectedCustomMetadataKey] - ).toEqual(expectedCustomMetadataValue); + expect(metadata['AllFlagsOn'][expectedCustomMetadataKey]).toEqual( + expectedCustomMetadataValue + ); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationsCount - 1; if (!shouldThrowAnError) { // Assert that the metadata object contains the response - expect( - metadata[serviceNameWithAllFlagsEnabled]['index.handler response'] - ).toEqual(expectedCustomResponseValue); + expect(metadata['AllFlagsOn']['index.handler response']).toEqual( + expectedCustomResponseValue + ); } } }, @@ -263,21 +238,25 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo it( 'should have a custom name as the subsegment name for the decorated method', async () => { + const { + EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage, + EXPECTED_CUSTOM_SUBSEGMENT_NAME: expectedCustomSubSegmentName, + } = commonEnvironmentVars; + const tracesWhenCustomSubsegmentNameInMethod = await getTraces( xrayClient, startTime, - await getFunctionArn( - stsClient, - functionNameWithCustomSubsegmentNameInMethod - ), - invocations, + await getFunctionArn(fnNameCustomSubsegment), + invocationsCount, 4 ); - expect(tracesWhenCustomSubsegmentNameInMethod.length).toBe(invocations); + expect(tracesWhenCustomSubsegmentNameInMethod.length).toBe( + invocationsCount + ); // Assess - for (let i = 0; i < invocations; i++) { + for (let i = 0; i < invocationsCount; i++) { const trace = tracesWhenCustomSubsegmentNameInMethod[i]; /** @@ -316,7 +295,7 @@ describe(`Tracer E2E tests, asynchronous handler with decorator instantiation fo expect(subsegments.get(expectedCustomSubSegmentName)?.length).toBe(1); expect(subsegments.get('other')?.length).toBe(0); - const shouldThrowAnError = i === invocations - 1; + const shouldThrowAnError = i === invocationsCount - 1; if (shouldThrowAnError) { assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); } diff --git a/packages/tracer/tests/e2e/constants.ts b/packages/tracer/tests/e2e/constants.ts index 7d27f4cde4..7e817e1aac 100644 --- a/packages/tracer/tests/e2e/constants.ts +++ b/packages/tracer/tests/e2e/constants.ts @@ -1,13 +1,30 @@ -export const RESOURCE_NAME_PREFIX = 'Tracer-E2E'; -export const ONE_MINUTE = 60 * 1_000; -export const TEST_CASE_TIMEOUT = 5 * ONE_MINUTE; -export const SETUP_TIMEOUT = 5 * ONE_MINUTE; -export const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; +// Prefix for all resources created by the E2E tests +const RESOURCE_NAME_PREFIX = 'Tracer-E2E'; +// Constants relating time to be used in the tests +const ONE_MINUTE = 60 * 1_000; +const TEST_CASE_TIMEOUT = 5 * ONE_MINUTE; +const SETUP_TIMEOUT = 5 * ONE_MINUTE; +const TEARDOWN_TIMEOUT = 5 * ONE_MINUTE; -export const expectedCustomAnnotationKey = 'myAnnotation'; -export const expectedCustomAnnotationValue = 'myValue'; -export const expectedCustomMetadataKey = 'myMetadata'; -export const expectedCustomMetadataValue = { bar: 'baz' }; -export const expectedCustomResponseValue = { foo: 'bar' }; -export const expectedCustomErrorMessage = 'An error has occurred'; -export const expectedCustomSubSegmentName = 'mySubsegment'; +// Expected values for custom annotations, metadata, and response +const commonEnvironmentVars = { + EXPECTED_CUSTOM_ANNOTATION_KEY: 'myAnnotation', + EXPECTED_CUSTOM_ANNOTATION_VALUE: 'myValue', + EXPECTED_CUSTOM_METADATA_KEY: 'myMetadata', + EXPECTED_CUSTOM_METADATA_VALUE: { bar: 'baz' }, + EXPECTED_CUSTOM_RESPONSE_VALUE: { foo: 'bar' }, + EXPECTED_CUSTOM_ERROR_MESSAGE: 'An error has occurred', + POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', + POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', + POWERTOOLS_TRACE_ENABLED: 'true', + EXPECTED_CUSTOM_SUBSEGMENT_NAME: 'mySubsegment', +}; + +export { + RESOURCE_NAME_PREFIX, + ONE_MINUTE, + TEST_CASE_TIMEOUT, + SETUP_TIMEOUT, + TEARDOWN_TIMEOUT, + commonEnvironmentVars, +}; diff --git a/packages/tracer/tests/helpers/populateEnvironmentVariables.ts b/packages/tracer/tests/helpers/populateEnvironmentVariables.ts index 4d4166743d..096b3c67be 100644 --- a/packages/tracer/tests/helpers/populateEnvironmentVariables.ts +++ b/packages/tracer/tests/helpers/populateEnvironmentVariables.ts @@ -10,6 +10,7 @@ if ( process.env.AWS_REGION = 'eu-west-1'; } process.env._HANDLER = 'index.handler'; +process.env.AWS_NODEJS_CONNECTION_REUSE_ENABLED = '1'; // Powertools for AWS Lambda (TypeScript) variables process.env.POWERTOOLS_SERVICE_NAME = 'hello-world'; diff --git a/packages/tracer/tests/helpers/resources.ts b/packages/tracer/tests/helpers/resources.ts new file mode 100644 index 0000000000..6f46cb98d6 --- /dev/null +++ b/packages/tracer/tests/helpers/resources.ts @@ -0,0 +1,36 @@ +import type { + ExtraTestProps, + TestNodejsFunctionProps, + TestStack, +} from '@aws-lambda-powertools/testing-utils'; +import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils'; +import { commonEnvironmentVars } from '../e2e/constants'; + +class TracerTestNodejsFunction extends TestNodejsFunction { + public constructor( + scope: TestStack, + props: TestNodejsFunctionProps, + extraProps: ExtraTestProps + ) { + super( + scope, + { + ...props, + environment: { + ...commonEnvironmentVars, + EXPECTED_SERVICE_NAME: extraProps.nameSuffix, + EXPECTED_CUSTOM_METADATA_VALUE: JSON.stringify( + commonEnvironmentVars.EXPECTED_CUSTOM_METADATA_VALUE + ), + EXPECTED_CUSTOM_RESPONSE_VALUE: JSON.stringify( + commonEnvironmentVars.EXPECTED_CUSTOM_RESPONSE_VALUE + ), + ...props.environment, + }, + }, + extraProps + ); + } +} + +export { TracerTestNodejsFunction }; diff --git a/packages/tracer/tests/helpers/traceUtils.types.ts b/packages/tracer/tests/helpers/traceUtils.types.ts index 6b537deced..fc2c8cac05 100644 --- a/packages/tracer/tests/helpers/traceUtils.types.ts +++ b/packages/tracer/tests/helpers/traceUtils.types.ts @@ -1,5 +1,3 @@ -import type { Stack } from 'aws-cdk-lib'; - interface ParsedDocument { name: string; id: string; @@ -61,16 +59,6 @@ interface ParsedTrace { Segments: ParsedSegment[]; } -interface TracerTestFunctionParams { - stack: Stack; - functionName: string; - handler?: string; - entry: string; - expectedServiceName: string; - environmentParams: { [key: string]: string }; - runtime: string; -} - interface AssertAnnotationParams { annotations: ParsedDocument['annotations']; isColdStart: boolean; @@ -79,10 +67,4 @@ interface AssertAnnotationParams { expectedCustomAnnotationValue: string | number | boolean; } -export { - ParsedDocument, - ParsedSegment, - ParsedTrace, - TracerTestFunctionParams, - AssertAnnotationParams, -}; +export { ParsedDocument, ParsedSegment, ParsedTrace, AssertAnnotationParams }; diff --git a/packages/tracer/tests/helpers/tracesUtils.ts b/packages/tracer/tests/helpers/tracesUtils.ts index 3bda9c551c..daa7d6cc70 100644 --- a/packages/tracer/tests/helpers/tracesUtils.ts +++ b/packages/tracer/tests/helpers/tracesUtils.ts @@ -1,33 +1,17 @@ import promiseRetry from 'promise-retry'; -import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; -import { Duration } from 'aws-cdk-lib'; -import { Architecture, Tracing } from 'aws-cdk-lib/aws-lambda'; import type { XRayClient } from '@aws-sdk/client-xray'; import { BatchGetTracesCommand, GetTraceSummariesCommand, } from '@aws-sdk/client-xray'; -import type { STSClient } from '@aws-sdk/client-sts'; +import { STSClient } from '@aws-sdk/client-sts'; import { GetCallerIdentityCommand } from '@aws-sdk/client-sts'; -import { - expectedCustomAnnotationKey, - expectedCustomAnnotationValue, - expectedCustomErrorMessage, - expectedCustomMetadataKey, - expectedCustomMetadataValue, - expectedCustomResponseValue, -} from '../e2e/constants'; -import { - invokeFunction, - TEST_RUNTIMES, - TestRuntimesKey, -} from '../../../commons/tests/utils/e2eUtils'; +import { invokeFunction } from '@aws-lambda-powertools/testing-utils'; import { FunctionSegmentNotDefinedError } from './FunctionSegmentNotDefinedError'; import type { ParsedDocument, ParsedSegment, ParsedTrace, - TracerTestFunctionParams, } from './traceUtils.types'; const getTraces = async ( @@ -43,9 +27,9 @@ const getTraces = async ( maxTimeout: 10_000, factor: 1.25, }; + const endTime = new Date(); return promiseRetry(async (retry: (err?: Error) => never, _: number) => { - const endTime = new Date(); console.log( `Manual query: aws xray get-trace-summaries --start-time ${Math.floor( startTime.getTime() / 1000 @@ -228,67 +212,36 @@ const splitSegmentsByName = ( * * @param functionName */ -const invokeAllTestCases = async (functionName: string): Promise<void> => { - await invokeFunction(functionName, 1, 'SEQUENTIAL', { - invocation: 1, - throw: false, - }); - await invokeFunction(functionName, 1, 'SEQUENTIAL', { - invocation: 2, - throw: false, - }); - await invokeFunction(functionName, 1, 'SEQUENTIAL', { - invocation: 3, - throw: true, // only last invocation should throw - }); -}; - -const createTracerTestFunction = ( - params: TracerTestFunctionParams -): NodejsFunction => { - const { - stack, +const invokeAllTestCases = async ( + functionName: string, + times: number +): Promise<void> => { + await invokeFunction({ functionName, - entry, - expectedServiceName, - environmentParams, - runtime, - } = params; - const func = new NodejsFunction(stack, functionName, { - entry: entry, - functionName: functionName, - handler: params.handler ?? 'handler', - tracing: Tracing.ACTIVE, - architecture: Architecture.X86_64, - memorySize: 256, // Default value (128) will take too long to process - environment: { - EXPECTED_SERVICE_NAME: expectedServiceName, - EXPECTED_CUSTOM_ANNOTATION_KEY: expectedCustomAnnotationKey, - EXPECTED_CUSTOM_ANNOTATION_VALUE: expectedCustomAnnotationValue, - EXPECTED_CUSTOM_METADATA_KEY: expectedCustomMetadataKey, - EXPECTED_CUSTOM_METADATA_VALUE: JSON.stringify( - expectedCustomMetadataValue - ), - EXPECTED_CUSTOM_RESPONSE_VALUE: JSON.stringify( - expectedCustomResponseValue - ), - EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage, - ...environmentParams, - }, - timeout: Duration.seconds(30), // Default value (3 seconds) will time out - runtime: TEST_RUNTIMES[runtime as TestRuntimesKey], + times, + invocationMode: 'SEQUENTIAL', + payload: [ + { + invocation: 1, + throw: false, + }, + { + invocation: 2, + throw: false, + }, + { + invocation: 3, + throw: true, // only last invocation should throw + }, + ], }); - - return func; }; let account: string | undefined; -const getFunctionArn = async ( - stsClient: STSClient, - functionName: string -): Promise<string> => { +const getFunctionArn = async (functionName: string): Promise<string> => { const region = process.env.AWS_REGION; if (!account) { + const stsClient = new STSClient({}); const identity = await stsClient.send(new GetCallerIdentityCommand({})); account = identity.Account; } @@ -303,6 +256,5 @@ export { getInvocationSubsegment, splitSegmentsByName, invokeAllTestCases, - createTracerTestFunction, getFunctionArn, }; From f3916d158e073ad9472d000cfc21b0ddb018a361 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Mon, 4 Sep 2023 10:40:31 +0200 Subject: [PATCH 18/28] chore(tests): address integration test flakiness (#1669) * chore: traces retrieval * chore: secure string uniqueness * chore: update e2e command * chore: update test names * chore: remove layer flag * chore: remove layer flag * chore: remove STS client from devDeps tracer * chore: restore retryOptions --- .github/workflows/run-e2e-tests.yml | 58 ++------- layers/src/layer-publisher-stack.ts | 7 +- layers/tests/e2e/layerPublisher.test.ts | 1 - package-lock.json | 1 - .../tests/e2e/basicFeatures.middy.test.ts | 2 +- .../tests/e2e/dynamoDBProvider.class.test.ts | 2 +- .../tests/e2e/secretsProvider.class.test.ts | 2 +- .../tests/e2e/ssmProvider.class.test.ts | 2 +- .../parameters/tests/helpers/resources.ts | 4 +- packages/tracer/package.json | 1 - .../tests/e2e/allFeatures.decorator.test.ts | 119 +++++++---------- .../tests/e2e/allFeatures.manual.test.ts | 34 ++--- .../tests/e2e/allFeatures.middy.test.ts | 123 +++++++----------- .../tests/e2e/asyncHandler.decorator.test.ts | 76 +++++------ packages/tracer/tests/helpers/tracesUtils.ts | 87 ++++++------- 15 files changed, 191 insertions(+), 328 deletions(-) diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index d1e6e934c4..f77589063f 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -19,7 +19,7 @@ jobs: contents: read strategy: matrix: - package: [logger, metrics, tracer, parameters, idempotency] + package: [layers, packages/logger, packages/metrics, packages/tracer, packages/parameters, packages/idempotency] version: [14, 16, 18] fail-fast: false steps: @@ -55,56 +55,14 @@ jobs: role-to-assume: ${{ secrets.AWS_ROLE_ARN_TO_ASSUME }} aws-region: eu-west-1 mask-aws-account-id: true - - name: Run integration tests on utils - run: | - RUNTIME=nodejs${{ matrix.version }}x npm run test:e2e -w packages/${{ matrix.package }} - layer-e2e-tests: - runs-on: ubuntu-latest - env: - NODE_ENV: dev - PR_NUMBER: ${{ inputs.prNumber }} - permissions: - id-token: write # needed to interact with GitHub's OIDC Token endpoint. - contents: read - strategy: - fail-fast: false - matrix: - version: [14, 16, 18] - steps: - - name: Checkout Repo - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - # If we pass a PR Number when triggering the workflow we will retrieve the PR info and get its headSHA - - name: Extract PR details - id: extract_PR_details - if: ${{ inputs.prNumber != '' }} - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 - with: - script: | - const script = require('.github/scripts/get_pr_info.js'); - await script({github, context, core}); - # Only if a PR Number was passed and the headSHA of the PR extracted, - # we checkout the PR at that point in time - - name: Checkout PR code - if: ${{ inputs.prNumber != '' }} - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - with: - ref: ${{ steps.extract_PR_details.outputs.headSHA }} - - name: Setup NodeJS - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 - with: - # Always use version 18 - node-version: 18 - - name: Setup dependencies - uses: ./.github/actions/cached-node-modules - - name: "Configure AWS credentials" - uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN_TO_ASSUME }} - aws-region: eu-west-1 - mask-aws-account-id: true - name: Create layer files + if: ${{ matrix.package == 'layers' }} run: | export VERSION=latest bash .github/scripts/setup_tmp_layer_files.sh - - name: Run integration test on layers - run: RUNTIME=nodejs${{ matrix.version }}x npm run test:e2e -w layers + - name: Run integration tests on utils + env: + RUNTIME: nodejs${{ matrix.version }}x + CI: true + JSII_SILENCE_WARNING_DEPRECATED_NODE_VERSION: true + run: npm run test:e2e -w ${{ matrix.package }} diff --git a/layers/src/layer-publisher-stack.ts b/layers/src/layer-publisher-stack.ts index 6be087a7b0..42bbd78e9a 100644 --- a/layers/src/layer-publisher-stack.ts +++ b/layers/src/layer-publisher-stack.ts @@ -13,7 +13,6 @@ export interface LayerPublisherStackProps extends StackProps { readonly layerName?: string; readonly powertoolsPackageVersion?: string; readonly ssmParameterLayerArn: string; - readonly removeLayerVersion?: boolean; } export class LayerPublisherStack extends Stack { @@ -25,7 +24,7 @@ export class LayerPublisherStack extends Stack { ) { super(scope, id, props); - const { layerName, powertoolsPackageVersion, removeLayerVersion } = props; + const { layerName, powertoolsPackageVersion } = props; console.log( `publishing layer ${layerName} version : ${powertoolsPackageVersion}` @@ -43,10 +42,6 @@ export class LayerPublisherStack extends Stack { // This is needed because the following regions do not support the compatibleArchitectures property #1400 // ...(![ 'eu-south-2', 'eu-central-2', 'ap-southeast-4' ].includes(Stack.of(this).region) ? { compatibleArchitectures: [Architecture.X86_64] } : {}), code: Code.fromAsset(resolve(__dirname, '..', '..', 'tmp')), - removalPolicy: - removeLayerVersion === true - ? RemovalPolicy.DESTROY - : RemovalPolicy.RETAIN, }); const layerPermission = new CfnLayerVersionPermission( diff --git a/layers/tests/e2e/layerPublisher.test.ts b/layers/tests/e2e/layerPublisher.test.ts index a1a00c39ba..7ec4d82aba 100644 --- a/layers/tests/e2e/layerPublisher.test.ts +++ b/layers/tests/e2e/layerPublisher.test.ts @@ -61,7 +61,6 @@ describe(`Layers E2E tests, publisher stack`, () => { layerName: layerId, powertoolsPackageVersion: powerToolsPackageVersion, ssmParameterLayerArn: ssmParameterLayerName, - removeLayerVersion: true, }); const testLayerStack = new TestStack({ stackNameProps: { diff --git a/package-lock.json b/package-lock.json index 5db333ef67..8f7aff0cb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18608,7 +18608,6 @@ "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-sts": "^3.360.0", "@aws-sdk/client-xray": "^3.360.0", "@types/promise-retry": "^1.1.3", "aws-sdk": "^2.1354.0", diff --git a/packages/logger/tests/e2e/basicFeatures.middy.test.ts b/packages/logger/tests/e2e/basicFeatures.middy.test.ts index 099053f538..8a66abaac9 100644 --- a/packages/logger/tests/e2e/basicFeatures.middy.test.ts +++ b/packages/logger/tests/e2e/basicFeatures.middy.test.ts @@ -25,7 +25,7 @@ describe(`Logger E2E tests, basic functionalities middy usage`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'AllFeatures-Decorator', + testName: 'Basic-Middy', }, }); diff --git a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts index 59989d36bb..dfc730d469 100644 --- a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts +++ b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts @@ -99,7 +99,7 @@ describe(`Parameters E2E tests, dynamoDB provider`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'DynamoDBProvider', + testName: 'DynamoDB', }, }); diff --git a/packages/parameters/tests/e2e/secretsProvider.class.test.ts b/packages/parameters/tests/e2e/secretsProvider.class.test.ts index 303aa37344..3b700cdd3f 100644 --- a/packages/parameters/tests/e2e/secretsProvider.class.test.ts +++ b/packages/parameters/tests/e2e/secretsProvider.class.test.ts @@ -40,7 +40,7 @@ describe(`Parameters E2E tests, Secrets Manager provider`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'SecretsProvider', + testName: 'Secrets', }, }); diff --git a/packages/parameters/tests/e2e/ssmProvider.class.test.ts b/packages/parameters/tests/e2e/ssmProvider.class.test.ts index e8f0aae256..771aafd7c8 100644 --- a/packages/parameters/tests/e2e/ssmProvider.class.test.ts +++ b/packages/parameters/tests/e2e/ssmProvider.class.test.ts @@ -74,7 +74,7 @@ describe(`Parameters E2E tests, SSM provider`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'AppConfig', + testName: 'SSM', }, }); diff --git a/packages/parameters/tests/helpers/resources.ts b/packages/parameters/tests/helpers/resources.ts index 59916cfb0e..4b29d66e32 100644 --- a/packages/parameters/tests/helpers/resources.ts +++ b/packages/parameters/tests/helpers/resources.ts @@ -5,6 +5,7 @@ import type { } from '@aws-lambda-powertools/testing-utils'; import { concatenateResourceName, + getRuntimeKey, TestDynamodbTable, TestNodejsFunction, } from '@aws-lambda-powertools/testing-utils'; @@ -57,7 +58,7 @@ class TestSecureStringParameter extends Construct { const { value } = props; - const name = `/secure/${randomUUID()}`; + const name = `/secure/${getRuntimeKey()}/${randomUUID()}`; const secureStringCreator = new AwsCustomResource( testStack.stack, @@ -202,6 +203,7 @@ class TestDynamodbTableWithItems extends TestDynamodbTable { policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: [this.tableArn], }), + installLatestAwsSdk: false, }); } } diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 364eba31df..5fb5298b13 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -34,7 +34,6 @@ "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-sts": "^3.360.0", "@aws-sdk/client-xray": "^3.360.0", "@types/promise-retry": "^1.1.3", "aws-sdk": "^2.1354.0", diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts index 9550628171..2ec65d83b3 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts @@ -7,7 +7,6 @@ import { TestStack, TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; -import { XRayClient } from '@aws-sdk/client-xray'; import { join } from 'node:path'; import { TracerTestNodejsFunction } from '../helpers/resources'; import { @@ -16,7 +15,6 @@ import { } from '../helpers/traceAssertions'; import { getFirstSubsegment, - getFunctionArn, getInvocationSubsegment, getTraces, invokeAllTestCases, @@ -141,7 +139,6 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { ); testTable.grantWriteData(fnCaptureResponseOff); - const xrayClient = new XRayClient({}); const invocationCount = 3; beforeAll(async () => { @@ -178,28 +175,23 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - const tracesWhenAllFlagsEnabled = await getTraces( - xrayClient, + /** + * The trace should have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 4. DynamoDB (AWS::DynamoDB) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWhenAllFlagsEnabled = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationCount, - 4 - ); - - expect(tracesWhenAllFlagsEnabled.length).toBe(invocationCount); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 4. DynamoDB (AWS::DynamoDB) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); /** @@ -246,13 +238,12 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, } = commonEnvironmentVars; - const tracesWhenAllFlagsEnabled = await getTraces( - xrayClient, + const tracesWhenAllFlagsEnabled = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationCount, - 4 - ); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; @@ -291,30 +282,24 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { it( 'should not capture error nor response when the flags are false', async () => { - const tracesWithNoCaptureErrorOrResponse = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB (AWS::DynamoDB) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWithNoCaptureErrorOrResponse = await getTraces({ startTime, - await getFunctionArn(fnNameNoCaptureErrorOrResponse), - invocationCount, - 4 - ); - - expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocationCount); + resourceName: fnNameNoCaptureErrorOrResponse, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureErrorOrResponse[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB (AWS::DynamoDB) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); - /** * Invocation subsegment should have a subsegment '## index.handler' (default behavior for Tracer) * '## index.handler' subsegment should have 3 subsegments @@ -358,30 +343,24 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - const tracesWithCaptureResponseFalse = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB (AWS::DynamoDB) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWithCaptureResponseFalse = await getTraces({ startTime, - await getFunctionArn(fnNameCaptureResponseOff), - invocationCount, - 4 - ); - - expect(tracesWithCaptureResponseFalse.length).toBe(invocationCount); + resourceName: fnNameCaptureResponseOff, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithCaptureResponseFalse[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB (AWS::DynamoDB) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); - /** * Invocation subsegment should have a subsegment '## index.handler' (default behavior for Tracer) * '## index.handler' subsegment should have 3 subsegments @@ -428,22 +407,16 @@ describe(`Tracer E2E tests, all features with decorator instantiation`, () => { it( 'should not capture any custom traces when disabled', async () => { - const expectedNoOfTraces = 2; - const tracesWithTracerDisabled = await getTraces( - xrayClient, + const tracesWithTracerDisabled = await getTraces({ startTime, - await getFunctionArn(fnNameTracerDisabled), - invocationCount, - expectedNoOfTraces - ); - - expect(tracesWithTracerDisabled.length).toBe(invocationCount); + resourceName: fnNameTracerDisabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 2, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithTracerDisabled[i]; - expect(trace.Segments.length).toBe(2); - /** * Expect no subsegment in the invocation */ diff --git a/packages/tracer/tests/e2e/allFeatures.manual.test.ts b/packages/tracer/tests/e2e/allFeatures.manual.test.ts index e3d6c427f4..3374205e67 100644 --- a/packages/tracer/tests/e2e/allFeatures.manual.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.manual.test.ts @@ -7,7 +7,6 @@ import { TestDynamodbTable, TestStack, } from '@aws-lambda-powertools/testing-utils'; -import { XRayClient } from '@aws-sdk/client-xray'; import { join } from 'path'; import { TracerTestNodejsFunction } from '../helpers/resources'; import { @@ -16,7 +15,6 @@ import { } from '../helpers/traceAssertions'; import { getFirstSubsegment, - getFunctionArn, getInvocationSubsegment, getTraces, invokeAllTestCases, @@ -72,7 +70,6 @@ describe(`Tracer E2E tests, all features with manual instantiation`, () => { ); testTable.grantWriteData(fnAllFlagsEnabled); - const xrayClient = new XRayClient({}); const invocationCount = 3; let sortedTraces: ParsedTrace[]; @@ -86,14 +83,19 @@ describe(`Tracer E2E tests, all features with manual instantiation`, () => { // Invoke all test cases await invokeAllTestCases(fnNameAllFlagsEnabled, invocationCount); - // Retrieve traces from X-Ray for assertion - sortedTraces = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB (AWS::DynamoDB) + * 4. Remote call (docs.powertools.aws.dev) + */ + sortedTraces = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationCount, - 4 - ); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); }, SETUP_TIMEOUT); afterAll(async () => { @@ -108,22 +110,10 @@ describe(`Tracer E2E tests, all features with manual instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - expect(sortedTraces.length).toBe(invocationCount); - // Assess for (let i = 0; i < invocationCount; i++) { const trace = sortedTraces[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB (AWS::DynamoDB) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); - /** * Invocation subsegment should have a subsegment '## index.handler' (default behavior for Tracer) * '## index.handler' subsegment should have 2 subsegments diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.ts index 7fbe843943..5f8f965d8c 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.ts @@ -7,7 +7,6 @@ import { TestStack, TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; -import { XRayClient } from '@aws-sdk/client-xray'; import { join } from 'node:path'; import { TracerTestNodejsFunction } from '../helpers/resources'; import { @@ -16,7 +15,6 @@ import { } from '../helpers/traceAssertions'; import { getFirstSubsegment, - getFunctionArn, getInvocationSubsegment, getTraces, invokeAllTestCases, @@ -43,7 +41,7 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'AllFeatures-Decorator', + testName: 'AllFeatures-Middy', }, }); @@ -141,7 +139,6 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { ); testTable.grantWriteData(fnCaptureResponseOff); - const xrayClient = new XRayClient({}); const invocationCount = 3; beforeAll(async () => { @@ -178,28 +175,23 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - const tracesWhenAllFlagsEnabled = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB Table (AWS::DynamoDB::Table) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWhenAllFlagsEnabled = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationCount, - 4 - ); - - expect(tracesWhenAllFlagsEnabled.length).toBe(invocationCount); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB Table (AWS::DynamoDB::Table) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); /** @@ -243,13 +235,12 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, } = commonEnvironmentVars; - const tracesWhenAllFlagsEnabled = await getTraces( - xrayClient, + const tracesWhenAllFlagsEnabled = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationCount, - 4 - ); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); for (let i = 0; i < invocationCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; @@ -288,30 +279,23 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { it( 'should not capture error nor response when the flags are false', async () => { - const tracesWithNoCaptureErrorOrResponse = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB Table (AWS::DynamoDB::Table) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWithNoCaptureErrorOrResponse = await getTraces({ startTime, - await getFunctionArn(fnNameNoCaptureErrorOrResponse), - invocationCount, - 4 - ); - - expect(tracesWithNoCaptureErrorOrResponse.length).toBe(invocationCount); - + resourceName: fnNameNoCaptureErrorOrResponse, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureErrorOrResponse[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB Table (AWS::DynamoDB::Table) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); - /** * Invocation subsegment should have a subsegment '## index.handler' (default behavior for Tracer) * '## index.handler' subsegment should have 2 subsegments @@ -352,30 +336,24 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - const tracesWithNoCaptureResponse = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB Table (AWS::DynamoDB::Table) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWithNoCaptureResponse = await getTraces({ startTime, - await getFunctionArn(fnNameCaptureResponseOff), - invocationCount, - 4 - ); - - expect(tracesWithNoCaptureResponse.length).toBe(invocationCount); + resourceName: fnNameCaptureResponseOff, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithNoCaptureResponse[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB Table (AWS::DynamoDB::Table) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); - /** * Invocation subsegment should have a subsegment '## index.handlerWithNoCaptureResponseViaMiddlewareOption' (default behavior for Tracer) * '## index.handlerWithNoCaptureResponseViaMiddlewareOption' subsegment should have 2 subsegments @@ -413,22 +391,15 @@ describe(`Tracer E2E tests, all features with middy instantiation`, () => { it( 'should not capture any custom traces when disabled', async () => { - const expectedNoOfTraces = 2; - const tracesWithTracerDisabled = await getTraces( - xrayClient, + const tracesWithTracerDisabled = await getTraces({ startTime, - await getFunctionArn(fnNameTracerDisabled), - invocationCount, - expectedNoOfTraces - ); - - expect(tracesWithTracerDisabled.length).toBe(invocationCount); - + resourceName: fnNameTracerDisabled, + expectedTracesCount: invocationCount, + expectedSegmentsCount: 2, + }); // Assess for (let i = 0; i < invocationCount; i++) { const trace = tracesWithTracerDisabled[i]; - expect(trace.Segments.length).toBe(2); - /** * Expect no subsegment in the invocation */ diff --git a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts index a37f0ad34b..f97f9d2f77 100644 --- a/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts +++ b/packages/tracer/tests/e2e/asyncHandler.decorator.test.ts @@ -7,7 +7,6 @@ import { TestStack, TestDynamodbTable, } from '@aws-lambda-powertools/testing-utils'; -import { XRayClient } from '@aws-sdk/client-xray'; import { join } from 'node:path'; import { TracerTestNodejsFunction } from '../helpers/resources'; import { @@ -16,7 +15,6 @@ import { } from '../helpers/traceAssertions'; import { getFirstSubsegment, - getFunctionArn, getInvocationSubsegment, getTraces, invokeAllTestCases, @@ -34,7 +32,7 @@ describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { const testStack = new TestStack({ stackNameProps: { stackNamePrefix: RESOURCE_NAME_PREFIX, - testName: 'AllFeatures-Decorator', + testName: 'AllFeatures-AsyncDecorator', }, }); @@ -93,7 +91,6 @@ describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { ); testTable.grantWriteData(fnCustomSubsegmentName); - const xrayClient = new XRayClient({}); const invocationsCount = 3; beforeAll(async () => { @@ -125,28 +122,23 @@ describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { const { EXPECTED_CUSTOM_ERROR_MESSAGE: expectedCustomErrorMessage } = commonEnvironmentVars; - const tracesWhenAllFlagsEnabled = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB Table (AWS::DynamoDB::Table) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWhenAllFlagsEnabled = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationsCount, - 4 - ); - - expect(tracesWhenAllFlagsEnabled.length).toBe(invocationsCount); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationsCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationsCount; i++) { const trace = tracesWhenAllFlagsEnabled[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB Table (AWS::DynamoDB::Table) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); /** @@ -193,13 +185,12 @@ describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { EXPECTED_CUSTOM_RESPONSE_VALUE: expectedCustomResponseValue, } = commonEnvironmentVars; - const traces = await getTraces( - xrayClient, + const traces = await getTraces({ startTime, - await getFunctionArn(fnNameAllFlagsEnabled), - invocationsCount, - 4 - ); + resourceName: fnNameAllFlagsEnabled, + expectedTracesCount: invocationsCount, + expectedSegmentsCount: 4, + }); for (let i = 0; i < invocationsCount; i++) { const trace = traces[i]; @@ -243,30 +234,23 @@ describe(`Tracer E2E tests, async handler with decorator instantiation`, () => { EXPECTED_CUSTOM_SUBSEGMENT_NAME: expectedCustomSubSegmentName, } = commonEnvironmentVars; - const tracesWhenCustomSubsegmentNameInMethod = await getTraces( - xrayClient, + /** + * Expect the trace to have 4 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB Table (AWS::DynamoDB::Table) + * 4. Remote call (docs.powertools.aws.dev) + */ + const tracesWhenCustomSubsegmentNameInMethod = await getTraces({ startTime, - await getFunctionArn(fnNameCustomSubsegment), - invocationsCount, - 4 - ); - - expect(tracesWhenCustomSubsegmentNameInMethod.length).toBe( - invocationsCount - ); + resourceName: fnNameCustomSubsegment, + expectedTracesCount: invocationsCount, + expectedSegmentsCount: 4, + }); // Assess for (let i = 0; i < invocationsCount; i++) { const trace = tracesWhenCustomSubsegmentNameInMethod[i]; - - /** - * Expect the trace to have 4 segments: - * 1. Lambda Context (AWS::Lambda) - * 2. Lambda Function (AWS::Lambda::Function) - * 3. DynamoDB Table (AWS::DynamoDB::Table) - * 4. Remote call (docs.powertools.aws.dev) - */ - expect(trace.Segments.length).toBe(4); const invocationSubsegment = getInvocationSubsegment(trace); /** diff --git a/packages/tracer/tests/helpers/tracesUtils.ts b/packages/tracer/tests/helpers/tracesUtils.ts index daa7d6cc70..7995474a3b 100644 --- a/packages/tracer/tests/helpers/tracesUtils.ts +++ b/packages/tracer/tests/helpers/tracesUtils.ts @@ -1,11 +1,9 @@ import promiseRetry from 'promise-retry'; -import type { XRayClient } from '@aws-sdk/client-xray'; import { + XRayClient, BatchGetTracesCommand, GetTraceSummariesCommand, } from '@aws-sdk/client-xray'; -import { STSClient } from '@aws-sdk/client-sts'; -import { GetCallerIdentityCommand } from '@aws-sdk/client-sts'; import { invokeFunction } from '@aws-lambda-powertools/testing-utils'; import { FunctionSegmentNotDefinedError } from './FunctionSegmentNotDefinedError'; import type { @@ -14,41 +12,49 @@ import type { ParsedTrace, } from './traceUtils.types'; -const getTraces = async ( - xrayClient: XRayClient, - startTime: Date, - resourceArn: string, - expectedTraces: number, - expectedSegments: number -): Promise<ParsedTrace[]> => { - const retryOptions = { - retries: 20, - minTimeout: 5_000, - maxTimeout: 10_000, - factor: 1.25, - }; +type GetTracesOptions = { + startTime: Date; + resourceName: string; + expectedTracesCount: number; + expectedSegmentsCount: number; +}; + +const retryOptions = { + retries: 20, + minTimeout: 5_000, + maxTimeout: 10_000, + factor: 1.25, +}; +const xrayClient = new XRayClient({}); + +const getTraces = async ({ + startTime, + resourceName, + expectedTracesCount, + expectedSegmentsCount, +}: GetTracesOptions): Promise<ParsedTrace[]> => { const endTime = new Date(); + console.log( + `Manual query: aws xray get-trace-summaries --start-time ${Math.floor( + startTime.getTime() / 1000 + )} --end-time ${Math.floor( + endTime.getTime() / 1000 + )} --filter-expression 'resource.arn ENDSWITH ":function:${resourceName}"'` + ); return promiseRetry(async (retry: (err?: Error) => never, _: number) => { - console.log( - `Manual query: aws xray get-trace-summaries --start-time ${Math.floor( - startTime.getTime() / 1000 - )} --end-time ${Math.floor( - endTime.getTime() / 1000 - )} --filter-expression 'resource.arn = "${resourceArn}"'` - ); const traces = await xrayClient.send( new GetTraceSummariesCommand({ StartTime: startTime, EndTime: endTime, - FilterExpression: `resource.arn = "${resourceArn}"`, + FilterExpression: `resource.arn ENDSWITH ":function:${resourceName}"`, }) ); - if (traces.TraceSummaries?.length !== expectedTraces) { + if (traces.TraceSummaries?.length !== expectedTracesCount) { retry( new Error( - `Expected ${expectedTraces} traces, got ${traces.TraceSummaries?.length} for ${resourceArn}` + `Expected ${expectedTracesCount} traces, got ${traces.TraceSummaries?.length} for ${resourceName}` ) ); } @@ -59,7 +65,7 @@ const getTraces = async ( if (!traceIds.every((traceId) => traceId !== undefined)) { retry( new Error( - `Expected all trace summaries to have an ID, got ${traceIds} for ${resourceArn}` + `Expected all trace summaries to have an ID, got ${traceIds} for ${resourceName}` ) ); } @@ -70,10 +76,10 @@ const getTraces = async ( }) ); - if (traceDetails.Traces?.length !== expectedTraces) { + if (traceDetails.Traces?.length !== expectedTracesCount) { retry( new Error( - `Expected ${expectedTraces} trace summaries, got ${traceDetails.Traces?.length} for ${resourceArn}` + `Expected ${expectedTracesCount} trace summaries, got ${traceDetails.Traces?.length} for ${resourceName}` ) ); } @@ -126,20 +132,20 @@ const getTraces = async ( } if (sortedTraces === undefined) { - throw new Error(`Traces are undefined for ${resourceArn}`); + throw new Error(`Traces are undefined for ${resourceName}`); } - if (sortedTraces.length !== expectedTraces) { + if (sortedTraces.length !== expectedTracesCount) { throw new Error( - `Expected ${expectedTraces} sorted traces, but got ${sortedTraces.length} for ${resourceArn}` + `Expected ${expectedTracesCount} sorted traces, but got ${sortedTraces.length} for ${resourceName}` ); } sortedTraces.forEach((trace) => { - if (trace.Segments?.length != expectedSegments) { + if (trace.Segments?.length != expectedSegmentsCount) { retry( new Error( - `Expected ${expectedSegments} segments, got ${trace.Segments?.length} for trace id ${trace.Id}` + `Expected ${expectedSegmentsCount} segments, got ${trace.Segments?.length} for trace id ${trace.Id}` ) ); } @@ -237,18 +243,6 @@ const invokeAllTestCases = async ( }); }; -let account: string | undefined; -const getFunctionArn = async (functionName: string): Promise<string> => { - const region = process.env.AWS_REGION; - if (!account) { - const stsClient = new STSClient({}); - const identity = await stsClient.send(new GetCallerIdentityCommand({})); - account = identity.Account; - } - - return `arn:aws:lambda:${region}:${account}:function:${functionName}`; -}; - export { getTraces, getFunctionSegment, @@ -256,5 +250,4 @@ export { getInvocationSubsegment, splitSegmentsByName, invokeAllTestCases, - getFunctionArn, }; From 858d2f2af72221436a7199bd910826805d74c8c8 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Mon, 4 Sep 2023 15:42:26 +0200 Subject: [PATCH 19/28] chore(internal): revisit `tsconfig` files (#1667) * chore(ci): update tsconfig * wip * wip * chore: tsconfig batch * chore: tsconfig commons * chore: tsconfig commons * chore: tsconfig idempotency * chore: tsconfig testing * chore: tsconfig tracer * chore: tsconfig parameters * chore: tsconfig metrics * chore: tsconfig logger * chore: main tsconfig * chore: tsconfig layers * chore: tsconfig docs * chore: add resolveJsonModules to layers * chore: add comments to tsconfig * chore: add resolveJsonModules to layers * chore: rebase * fix: test * chore: removed orphaned configs * test: workspace build * revert workspace build --- .gitignore | 5 +- .npmignore | 3 +- docs/snippets/tsconfig.json | 28 +------ layers/package.json | 3 +- layers/tests/tsconfig.json | 12 +++ layers/tsconfig.es.json | 31 -------- layers/tsconfig.json | 40 +++------- packages/batch/package.json | 2 +- packages/batch/src/constants.ts | 6 +- packages/batch/src/types.ts | 2 +- packages/batch/tests/tsconfig.json | 11 +++ .../tests/unit/AsyncBatchProcessor.test.ts | 2 +- .../batch/tests/unit/BatchProcessor.test.ts | 2 +- .../unit/asyncProcessPartialResponse.test.ts | 4 +- .../tests/unit/processPartialResponse.test.ts | 4 +- packages/batch/tsconfig-dev.json | 11 --- packages/batch/tsconfig.es.json | 11 --- packages/batch/tsconfig.json | 37 +++------ packages/commons/package.json | 5 +- .../src/config/EnvironmentVariablesService.ts | 2 +- packages/commons/src/middleware/constants.ts | 2 +- .../samples/resources/contexts/hello-world.ts | 2 +- .../src/utils/lambda/LambdaInterface.ts | 2 +- packages/commons/tests/tsconfig.json | 11 +++ .../tests/unit/LambdaInterface.test.ts | 4 - packages/commons/tsconfig-dev.json | 31 -------- packages/commons/tsconfig.json | 33 ++------ packages/idempotency/package.json | 5 +- packages/idempotency/tests/tsconfig.json | 11 +++ packages/idempotency/tsconfig-dev.json | 11 --- packages/idempotency/tsconfig.es.json | 11 --- packages/idempotency/tsconfig.json | 37 +++------ packages/logger/package.json | 7 +- packages/logger/tests/tsconfig.json | 11 +++ packages/logger/tests/unit/Logger.test.ts | 22 +----- packages/logger/tsconfig-dev.json | 30 ------- packages/logger/tsconfig.es.json | 30 ------- packages/logger/tsconfig.json | 32 ++------ packages/metrics/package.json | 7 +- packages/metrics/src/Metrics.ts | 7 +- .../src/config/EnvironmentVariablesService.ts | 2 +- packages/metrics/src/types/Metrics.ts | 4 +- ...sicFeatures.decorator.test.functionCode.ts | 4 +- .../basicFeatures.manual.test.functionCode.ts | 2 +- packages/metrics/tests/tsconfig.json | 11 +++ packages/metrics/tests/unit/Metrics.test.ts | 2 - .../tests/unit/middleware/middy.test.ts | 4 +- packages/metrics/tsconfig.es.json | 31 -------- packages/metrics/tsconfig.json | 34 ++------ packages/parameters/package.json | 5 +- ...pConfigProvider.class.test.functionCode.ts | 10 +-- ...ynamoDBProvider.class.test.functionCode.ts | 10 +-- ...secretsProvider.class.test.functionCode.ts | 6 +- .../ssmProvider.class.test.functionCode.ts | 10 +-- .../parameters/tests/helpers/resources.ts | 1 - .../helpers/sdkMiddlewareRequestCounter.ts | 41 ++++++---- packages/parameters/tests/tsconfig.json | 11 +++ packages/parameters/tsconfig-dev.json | 30 ------- packages/parameters/tsconfig.es.json | 30 ------- packages/parameters/tsconfig.json | 32 ++------ packages/testing/package.json | 2 +- packages/testing/tests/tsconfig.json | 11 +++ packages/testing/tsconfig.es.json | 31 -------- packages/testing/tsconfig.json | 34 ++------ packages/tracer/package.json | 5 +- packages/tracer/src/Tracer.ts | 17 ++-- packages/tracer/src/TracerInterface.ts | 4 +- packages/tracer/src/helpers.ts | 2 +- packages/tracer/src/types/Tracer.ts | 6 +- ...allFeatures.decorator.test.functionCode.ts | 2 +- .../allFeatures.manual.test.functionCode.ts | 2 +- .../allFeatures.middy.test.functionCode.ts | 2 +- ...syncHandler.decorator.test.functionCode.ts | 2 +- packages/tracer/tests/tsconfig.json | 11 +++ packages/tracer/tests/unit/Tracer.test.ts | 13 +--- packages/tracer/tsconfig.es.json | 31 -------- packages/tracer/tsconfig.json | 34 ++------ tsconfig.json | 78 ++++++++++++------- 78 files changed, 340 insertions(+), 754 deletions(-) create mode 100644 layers/tests/tsconfig.json delete mode 100644 layers/tsconfig.es.json create mode 100644 packages/batch/tests/tsconfig.json delete mode 100644 packages/batch/tsconfig-dev.json delete mode 100644 packages/batch/tsconfig.es.json create mode 100644 packages/commons/tests/tsconfig.json delete mode 100644 packages/commons/tsconfig-dev.json create mode 100644 packages/idempotency/tests/tsconfig.json delete mode 100644 packages/idempotency/tsconfig-dev.json delete mode 100644 packages/idempotency/tsconfig.es.json create mode 100644 packages/logger/tests/tsconfig.json delete mode 100644 packages/logger/tsconfig-dev.json delete mode 100644 packages/logger/tsconfig.es.json create mode 100644 packages/metrics/tests/tsconfig.json delete mode 100644 packages/metrics/tsconfig.es.json create mode 100644 packages/parameters/tests/tsconfig.json delete mode 100644 packages/parameters/tsconfig-dev.json delete mode 100644 packages/parameters/tsconfig.es.json create mode 100644 packages/testing/tests/tsconfig.json delete mode 100644 packages/testing/tsconfig.es.json create mode 100644 packages/tracer/tests/tsconfig.json delete mode 100644 packages/tracer/tsconfig.es.json diff --git a/.gitignore b/.gitignore index eab53c4c25..3f1196546a 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,7 @@ site !/examples/sam/src/handlers/COPY_LAMBDA_FUNCTIONS_HERE # Layer temp files -tmp \ No newline at end of file +tmp + +# TS build files +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/.npmignore b/.npmignore index d055233733..ec8c75c6f9 100644 --- a/.npmignore +++ b/.npmignore @@ -18,4 +18,5 @@ jest.config.js .eslintignore .huskyrc.js .eslintrc.json -examples \ No newline at end of file +examples +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/docs/snippets/tsconfig.json b/docs/snippets/tsconfig.json index 2d76b059c1..1a3fe8b171 100644 --- a/docs/snippets/tsconfig.json +++ b/docs/snippets/tsconfig.json @@ -1,21 +1,9 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "esModuleInterop": true, - "allowJs": true, + "rootDir": "./", "baseUrl": ".", + "noEmit": true, "paths": { "@aws-lambda-powertools/parameters/ssm": [ "../../packages/parameters/lib/ssm" @@ -41,13 +29,5 @@ ], "@aws-lambda-powertools/batch": ["../../packages/batch/lib"] } - }, - "exclude": ["./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": ["ES2020"], - "types": ["node"] + } } diff --git a/layers/package.json b/layers/package.json index ce626f56f8..80115a55cb 100644 --- a/layers/package.json +++ b/layers/package.json @@ -17,8 +17,7 @@ "test:e2e": "jest --group=e2e" }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "repository": { "type": "git", diff --git a/layers/tests/tsconfig.json b/layers/tests/tsconfig.json new file mode 100644 index 0000000000..a07fdb8a65 --- /dev/null +++ b/layers/tests/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "../package.json", + "./**/*", + ] +} \ No newline at end of file diff --git a/layers/tsconfig.es.json b/layers/tsconfig.es.json deleted file mode 100644 index 7743a7b77d..0000000000 --- a/layers/tsconfig.es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2019", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2019" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/layers/tsconfig.json b/layers/tsconfig.json index ce59f26c4a..4acbde11be 100644 --- a/layers/tsconfig.json +++ b/layers/tsconfig.json @@ -1,30 +1,12 @@ { - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2019", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true -}, -"include": [ "src/**/*" ], -"exclude": [ "./node_modules", "cdk.out"], -"watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" -}, -"lib": [ "es2019" ], -"types": [ - "jest", - "node" -] -} + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./", + "resolveJsonModule": true + }, + "include": [ + "./src/**/*", + "./bin/**/*" + ], +} \ No newline at end of file diff --git a/packages/batch/package.json b/packages/batch/package.json index 2c7932df74..9e046c15bc 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -17,7 +17,7 @@ "test:e2e:nodejs18x": "echo 'Not Implemented'", "test:e2e": "echo 'Not Implemented'", "watch": "jest --watch", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", diff --git a/packages/batch/src/constants.ts b/packages/batch/src/constants.ts index 02437e356c..d06d5a8872 100644 --- a/packages/batch/src/constants.ts +++ b/packages/batch/src/constants.ts @@ -1,4 +1,8 @@ -import { DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; +import type { + DynamoDBRecord, + KinesisStreamRecord, + SQSRecord, +} from 'aws-lambda'; import type { PartialItemFailureResponse, EventSourceDataClassTypes, diff --git a/packages/batch/src/types.ts b/packages/batch/src/types.ts index 17ce3633c7..5033ce6f5a 100644 --- a/packages/batch/src/types.ts +++ b/packages/batch/src/types.ts @@ -1,4 +1,4 @@ -import { +import type { Context, DynamoDBRecord, KinesisStreamRecord, diff --git a/packages/batch/tests/tsconfig.json b/packages/batch/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/batch/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts b/packages/batch/tests/unit/AsyncBatchProcessor.test.ts index 0bccdd6d07..127bae2705 100644 --- a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts +++ b/packages/batch/tests/unit/AsyncBatchProcessor.test.ts @@ -4,7 +4,7 @@ * @group unit/batch/class/asyncBatchProcessor */ import type { Context } from 'aws-lambda'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; import { AsyncBatchProcessor } from '../../src/AsyncBatchProcessor'; import { EventType } from '../../src/constants'; import { BatchProcessingError, FullBatchFailureError } from '../../src/errors'; diff --git a/packages/batch/tests/unit/BatchProcessor.test.ts b/packages/batch/tests/unit/BatchProcessor.test.ts index 97f50b7d11..0f928b4bc7 100644 --- a/packages/batch/tests/unit/BatchProcessor.test.ts +++ b/packages/batch/tests/unit/BatchProcessor.test.ts @@ -4,7 +4,7 @@ * @group unit/batch/class/batchprocessor */ import type { Context } from 'aws-lambda'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; import { BatchProcessor } from '../../src/BatchProcessor'; import { EventType } from '../../src/constants'; import { BatchProcessingError, FullBatchFailureError } from '../../src/errors'; diff --git a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts b/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts index aef38f33ec..c7e98edca4 100644 --- a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts +++ b/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts @@ -9,8 +9,8 @@ import type { KinesisStreamEvent, SQSEvent, } from 'aws-lambda'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; -import { Custom as dummyEvent } from '../../../commons/src/samples/resources/events'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; +import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; import { AsyncBatchProcessor, asyncProcessPartialResponse } from '../../src'; import { EventType } from '../../src/constants'; import type { diff --git a/packages/batch/tests/unit/processPartialResponse.test.ts b/packages/batch/tests/unit/processPartialResponse.test.ts index f33caa6f06..5fba12f88e 100644 --- a/packages/batch/tests/unit/processPartialResponse.test.ts +++ b/packages/batch/tests/unit/processPartialResponse.test.ts @@ -9,8 +9,8 @@ import type { KinesisStreamEvent, SQSEvent, } from 'aws-lambda'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; -import { Custom as dummyEvent } from '../../../commons/src/samples/resources/events'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; +import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; import { BatchProcessor, processPartialResponse } from '../../src'; import { EventType } from '../../src/constants'; import type { diff --git a/packages/batch/tsconfig-dev.json b/packages/batch/tsconfig-dev.json deleted file mode 100644 index 6f766859ea..0000000000 --- a/packages/batch/tsconfig-dev.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declarationMap": true, - "esModuleInterop": false - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "types": [ - "jest" - ] -} \ No newline at end of file diff --git a/packages/batch/tsconfig.es.json b/packages/batch/tsconfig.es.json deleted file mode 100644 index 6f766859ea..0000000000 --- a/packages/batch/tsconfig.es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declarationMap": true, - "esModuleInterop": false - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "types": [ - "jest" - ] -} \ No newline at end of file diff --git a/packages/batch/tsconfig.json b/packages/batch/tsconfig.json index 09df4b9ba4..1cb9d72773 100644 --- a/packages/batch/tsconfig.json +++ b/packages/batch/tsconfig.json @@ -1,29 +1,10 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true - }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "node" - ] +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + }, + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/commons/package.json b/packages/commons/package.json index b47028a343..a7bbde3aeb 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -15,15 +15,14 @@ "test:e2e": "echo 'Not Applicable'", "watch": "jest --watch", "generateVersionFile": "echo \"// this file is auto generated, do not modify\nexport const PT_VERSION = '$(jq -r '.version' package.json)';\" > src/version.ts", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme", "license": "MIT-0", diff --git a/packages/commons/src/config/EnvironmentVariablesService.ts b/packages/commons/src/config/EnvironmentVariablesService.ts index 72f2e81306..3e1be7af6c 100644 --- a/packages/commons/src/config/EnvironmentVariablesService.ts +++ b/packages/commons/src/config/EnvironmentVariablesService.ts @@ -1,4 +1,4 @@ -import { ConfigService } from '.'; +import { ConfigService } from './ConfigService'; /** * Class EnvironmentVariablesService diff --git a/packages/commons/src/middleware/constants.ts b/packages/commons/src/middleware/constants.ts index 9f9b30bcb6..cf38261995 100644 --- a/packages/commons/src/middleware/constants.ts +++ b/packages/commons/src/middleware/constants.ts @@ -9,4 +9,4 @@ const METRICS_KEY = `${PREFIX}.metrics`; const LOGGER_KEY = `${PREFIX}.logger`; const IDEMPOTENCY_KEY = `${PREFIX}.idempotency`; -export { TRACER_KEY, METRICS_KEY, LOGGER_KEY, IDEMPOTENCY_KEY }; +export { PREFIX, TRACER_KEY, METRICS_KEY, LOGGER_KEY, IDEMPOTENCY_KEY }; diff --git a/packages/commons/src/samples/resources/contexts/hello-world.ts b/packages/commons/src/samples/resources/contexts/hello-world.ts index 0f26aed05f..2dccd0cc8b 100644 --- a/packages/commons/src/samples/resources/contexts/hello-world.ts +++ b/packages/commons/src/samples/resources/contexts/hello-world.ts @@ -1,4 +1,4 @@ -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; const helloworldContext: Context = { callbackWaitsForEmptyEventLoop: true, diff --git a/packages/commons/src/utils/lambda/LambdaInterface.ts b/packages/commons/src/utils/lambda/LambdaInterface.ts index fc2e95ffb7..0871d433f9 100644 --- a/packages/commons/src/utils/lambda/LambdaInterface.ts +++ b/packages/commons/src/utils/lambda/LambdaInterface.ts @@ -1,4 +1,4 @@ -import { Handler } from 'aws-lambda'; +import type { Handler } from 'aws-lambda'; export type SyncHandler<T extends Handler> = ( event: Parameters<T>[0], diff --git a/packages/commons/tests/tsconfig.json b/packages/commons/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/commons/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/commons/tests/unit/LambdaInterface.test.ts b/packages/commons/tests/unit/LambdaInterface.test.ts index 7fb7f0e389..52049aadc0 100644 --- a/packages/commons/tests/unit/LambdaInterface.test.ts +++ b/packages/commons/tests/unit/LambdaInterface.test.ts @@ -128,8 +128,6 @@ describe('LambdaInterface with decorator', () => { // WHEN class LambdaFunction implements LambdaInterface { @dummyModule.dummyDecorator() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler( _event: unknown, context: Context @@ -147,8 +145,6 @@ describe('LambdaInterface with decorator', () => { // WHEN class LambdaFunction implements LambdaInterface { @dummyModule.dummyDecorator() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public handler( _event: unknown, context: Context, diff --git a/packages/commons/tsconfig-dev.json b/packages/commons/tsconfig-dev.json deleted file mode 100644 index 802f18e8f9..0000000000 --- a/packages/commons/tsconfig-dev.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/commons/tsconfig.json b/packages/commons/tsconfig.json index cbd9922f32..1cb9d72773 100644 --- a/packages/commons/tsconfig.json +++ b/packages/commons/tsconfig.json @@ -1,31 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 5ed19121b3..059588447d 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -17,15 +17,14 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --watch", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/idempotency#readme", "license": "MIT-0", diff --git a/packages/idempotency/tests/tsconfig.json b/packages/idempotency/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/idempotency/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/idempotency/tsconfig-dev.json b/packages/idempotency/tsconfig-dev.json deleted file mode 100644 index 6f766859ea..0000000000 --- a/packages/idempotency/tsconfig-dev.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declarationMap": true, - "esModuleInterop": false - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "types": [ - "jest" - ] -} \ No newline at end of file diff --git a/packages/idempotency/tsconfig.es.json b/packages/idempotency/tsconfig.es.json deleted file mode 100644 index 6f766859ea..0000000000 --- a/packages/idempotency/tsconfig.es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declarationMap": true, - "esModuleInterop": false - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "types": [ - "jest" - ] -} \ No newline at end of file diff --git a/packages/idempotency/tsconfig.json b/packages/idempotency/tsconfig.json index 09df4b9ba4..1cb9d72773 100644 --- a/packages/idempotency/tsconfig.json +++ b/packages/idempotency/tsconfig.json @@ -1,29 +1,10 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true - }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "node" - ] +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + }, + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/logger/package.json b/packages/logger/package.json index 321648326c..0d2aceaa24 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -17,15 +17,14 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --watch --group=unit", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/logger#readme", "license": "MIT-0", @@ -58,4 +57,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file diff --git a/packages/logger/tests/tsconfig.json b/packages/logger/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/logger/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/logger/tests/unit/Logger.test.ts b/packages/logger/tests/unit/Logger.test.ts index 61424c04c1..5e56ae83c6 100644 --- a/packages/logger/tests/unit/Logger.test.ts +++ b/packages/logger/tests/unit/Logger.test.ts @@ -18,7 +18,7 @@ import { LogLevelThresholds, LogLevel, } from '../../src/types'; -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import { Console } from 'console'; const mockDate = new Date(1466424490000); @@ -1050,8 +1050,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1097,8 +1095,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1153,8 +1149,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1215,8 +1209,6 @@ describe('Class: Logger', () => { jest.spyOn(logger['console'], 'debug').mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext({ clearState: true }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1263,8 +1255,6 @@ describe('Class: Logger', () => { jest.spyOn(logger['console'], 'debug').mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext({ clearState: true }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1309,8 +1299,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext({ logEvent: true }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1361,8 +1349,6 @@ describe('Class: Logger', () => { class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1418,8 +1404,6 @@ describe('Class: Logger', () => { } @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context @@ -1473,8 +1457,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler( _event: unknown, _context: unknown @@ -1517,8 +1499,6 @@ describe('Class: Logger', () => { .mockImplementation(); class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext({ clearState: true, logEvent: true }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler( event: { foo: string }, _context: unknown diff --git a/packages/logger/tsconfig-dev.json b/packages/logger/tsconfig-dev.json deleted file mode 100644 index 4ea999b37f..0000000000 --- a/packages/logger/tsconfig-dev.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/logger/tsconfig.es.json b/packages/logger/tsconfig.es.json deleted file mode 100644 index 4ea999b37f..0000000000 --- a/packages/logger/tsconfig.es.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index 20da6e39a9..1cb9d72773 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -1,30 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 6c75003d8b..6215132367 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -17,15 +17,14 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --group=unit --watch ", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme", "license": "MIT-0", @@ -58,4 +57,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file diff --git a/packages/metrics/src/Metrics.ts b/packages/metrics/src/Metrics.ts index 0a236db877..b2a1c1e34e 100644 --- a/packages/metrics/src/Metrics.ts +++ b/packages/metrics/src/Metrics.ts @@ -1,7 +1,10 @@ -import { Callback, Context, Handler } from 'aws-lambda'; +import type { Callback, Context, Handler } from 'aws-lambda'; import { Utility } from '@aws-lambda-powertools/commons'; import type { MetricsInterface } from './MetricsInterface'; -import { ConfigServiceInterface, EnvironmentVariablesService } from './config'; +import { + type ConfigServiceInterface, + EnvironmentVariablesService, +} from './config'; import { MAX_DIMENSION_COUNT, MAX_METRICS_SIZE, diff --git a/packages/metrics/src/config/EnvironmentVariablesService.ts b/packages/metrics/src/config/EnvironmentVariablesService.ts index 6105759e4d..907036092d 100644 --- a/packages/metrics/src/config/EnvironmentVariablesService.ts +++ b/packages/metrics/src/config/EnvironmentVariablesService.ts @@ -1,4 +1,4 @@ -import { ConfigServiceInterface } from './ConfigServiceInterface'; +import type { ConfigServiceInterface } from './ConfigServiceInterface'; import { EnvironmentVariablesService as CommonEnvironmentVariablesService } from '@aws-lambda-powertools/commons'; class EnvironmentVariablesService diff --git a/packages/metrics/src/types/Metrics.ts b/packages/metrics/src/types/Metrics.ts index afdda1d9ef..ef5e7d5454 100644 --- a/packages/metrics/src/types/Metrics.ts +++ b/packages/metrics/src/types/Metrics.ts @@ -1,5 +1,5 @@ -import { Handler } from 'aws-lambda'; -import { +import type { Handler } from 'aws-lambda'; +import type { LambdaInterface, AsyncHandler, SyncHandler, diff --git a/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts b/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts index 5a8f104843..9016a01cbe 100644 --- a/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts +++ b/packages/metrics/tests/e2e/basicFeatures.decorator.test.functionCode.ts @@ -1,6 +1,6 @@ import { Metrics, MetricUnits } from '../../src'; -import { Context } from 'aws-lambda'; -import { LambdaInterface } from '@aws-lambda-powertools/commons'; +import type { Context } from 'aws-lambda'; +import type { LambdaInterface } from '@aws-lambda-powertools/commons'; const namespace = process.env.EXPECTED_NAMESPACE ?? 'CdkExample'; const serviceName = diff --git a/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts b/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts index eae2c1a842..67ea224083 100644 --- a/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts +++ b/packages/metrics/tests/e2e/basicFeatures.manual.test.functionCode.ts @@ -1,5 +1,5 @@ import { Metrics, MetricUnits } from '../../src'; -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; const namespace = process.env.EXPECTED_NAMESPACE ?? 'CdkExample'; const serviceName = diff --git a/packages/metrics/tests/tsconfig.json b/packages/metrics/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/metrics/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/metrics/tests/unit/Metrics.test.ts b/packages/metrics/tests/unit/Metrics.test.ts index 42c5f2ded8..81808a0f5c 100644 --- a/packages/metrics/tests/unit/Metrics.test.ts +++ b/packages/metrics/tests/unit/Metrics.test.ts @@ -1213,8 +1213,6 @@ describe('Class: Metrics', () => { const errorMessage = 'Unexpected error occurred!'; class LambdaFunction implements LambdaInterface { @metrics.logMetrics() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public async handler<TEvent>( _event: TEvent, _context: Context diff --git a/packages/metrics/tests/unit/middleware/middy.test.ts b/packages/metrics/tests/unit/middleware/middy.test.ts index fe2268a78a..5713bcbe9c 100644 --- a/packages/metrics/tests/unit/middleware/middy.test.ts +++ b/packages/metrics/tests/unit/middleware/middy.test.ts @@ -12,8 +12,8 @@ import { import middy from '@middy/core'; import { ExtraOptions } from '../../../src/types'; import { cleanupMiddlewares } from '@aws-lambda-powertools/commons/lib/middleware'; -import { helloworldContext as dummyContext } from '../../../../commons/src/samples/resources/contexts/hello-world'; -import { CustomEvent as dummyEvent } from '../../../../commons/src/samples/resources/events/custom/index'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts/hello-world'; +import { CustomEvent as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events/custom/index'; const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(); diff --git a/packages/metrics/tsconfig.es.json b/packages/metrics/tsconfig.es.json deleted file mode 100644 index d28abaa6d5..0000000000 --- a/packages/metrics/tsconfig.es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "examples/**/*", "tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/metrics/tsconfig.json b/packages/metrics/tsconfig.json index 582618277f..1cb9d72773 100644 --- a/packages/metrics/tsconfig.json +++ b/packages/metrics/tsconfig.json @@ -1,32 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*"], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/parameters/package.json b/packages/parameters/package.json index e73696355b..d39ac6599c 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -17,15 +17,14 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --watch", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/parameters#readme", "license": "MIT-0", diff --git a/packages/parameters/tests/e2e/appConfigProvider.class.test.functionCode.ts b/packages/parameters/tests/e2e/appConfigProvider.class.test.functionCode.ts index ece202a259..48735b703b 100644 --- a/packages/parameters/tests/e2e/appConfigProvider.class.test.functionCode.ts +++ b/packages/parameters/tests/e2e/appConfigProvider.class.test.functionCode.ts @@ -1,4 +1,4 @@ -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import { Transform } from '../../src'; import { AppConfigProvider } from '../../src/appconfig'; import { AppConfigGetOptions } from '../../src/types/AppConfigProvider'; @@ -56,7 +56,7 @@ const _call_get = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -99,7 +99,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-cached', - error: err.message, + error: (err as Error).message, }); } @@ -119,7 +119,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-forced', - error: err.message, + error: (err as Error).message, }); } // Test 7 @@ -152,7 +152,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-expired', - error: err.message, + error: (err as Error).message, }); } }; diff --git a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.functionCode.ts b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.functionCode.ts index 18df7bb21e..88f1eccd20 100644 --- a/packages/parameters/tests/e2e/dynamoDBProvider.class.test.functionCode.ts +++ b/packages/parameters/tests/e2e/dynamoDBProvider.class.test.functionCode.ts @@ -1,4 +1,4 @@ -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import { Transform } from '../../src'; import { DynamoDBProvider } from '../../src/dynamodb'; import { @@ -67,7 +67,7 @@ const _call_get = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -88,7 +88,7 @@ const _call_get_multiple = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -147,7 +147,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-cached', - error: err.message, + error: (err as Error).message, }); } @@ -165,7 +165,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-forced', - error: err.message, + error: (err as Error).message, }); } }; diff --git a/packages/parameters/tests/e2e/secretsProvider.class.test.functionCode.ts b/packages/parameters/tests/e2e/secretsProvider.class.test.functionCode.ts index a52eeea586..e7526fdefc 100644 --- a/packages/parameters/tests/e2e/secretsProvider.class.test.functionCode.ts +++ b/packages/parameters/tests/e2e/secretsProvider.class.test.functionCode.ts @@ -41,7 +41,7 @@ const _call_get = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -76,7 +76,7 @@ export const handler = async ( } catch (err) { logger.log({ test: secretNamePlainChached, - error: err.message, + error: (err as Error).message, }); } // Test 5 @@ -95,7 +95,7 @@ export const handler = async ( } catch (err) { logger.log({ test: secretNamePlainChached, - error: err.message, + error: (err as Error).message, }); } }; diff --git a/packages/parameters/tests/e2e/ssmProvider.class.test.functionCode.ts b/packages/parameters/tests/e2e/ssmProvider.class.test.functionCode.ts index 49aefa90bd..a8915c2779 100644 --- a/packages/parameters/tests/e2e/ssmProvider.class.test.functionCode.ts +++ b/packages/parameters/tests/e2e/ssmProvider.class.test.functionCode.ts @@ -51,7 +51,7 @@ const _call_get = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -77,7 +77,7 @@ const _call_get_multiple = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -103,7 +103,7 @@ const _call_get_parameters_by_name = async ( } catch (err) { logger.log({ test: testName, - error: err.message, + error: (err as Error).message, }); } }; @@ -176,7 +176,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-cached', - error: err.message, + error: (err as Error).message, }); } @@ -194,7 +194,7 @@ export const handler = async ( } catch (err) { logger.log({ test: 'get-forced', - error: err.message, + error: (err as Error).message, }); } }; diff --git a/packages/parameters/tests/helpers/resources.ts b/packages/parameters/tests/helpers/resources.ts index 4b29d66e32..7067f608fd 100644 --- a/packages/parameters/tests/helpers/resources.ts +++ b/packages/parameters/tests/helpers/resources.ts @@ -59,7 +59,6 @@ class TestSecureStringParameter extends Construct { const { value } = props; const name = `/secure/${getRuntimeKey()}/${randomUUID()}`; - const secureStringCreator = new AwsCustomResource( testStack.stack, `create-${randomUUID()}`, diff --git a/packages/parameters/tests/helpers/sdkMiddlewareRequestCounter.ts b/packages/parameters/tests/helpers/sdkMiddlewareRequestCounter.ts index 76cea93cc3..e8addbf68a 100644 --- a/packages/parameters/tests/helpers/sdkMiddlewareRequestCounter.ts +++ b/packages/parameters/tests/helpers/sdkMiddlewareRequestCounter.ts @@ -1,3 +1,10 @@ +import type { + InitializeHandler, + HandlerExecutionContext, + InitializeHandlerArguments, + MiddlewareStack, +} from '@aws-sdk/types'; + /** * Middleware to count the number of API calls made by the SDK. * @@ -14,23 +21,29 @@ export const middleware = { // counter: 0, - applyToStack: (stack) => { + applyToStack: <Input extends object, Output extends object>( + stack: MiddlewareStack<Input, Output> + ) => { // Middleware added to mark start and end of an complete API call. stack.add( - (next, context) => async (args) => { - // We only want to count API calls to retrieve data, - // not the StartConfigurationSessionCommand - if ( - context.clientName !== 'AppConfigDataClient' || - context.commandName !== 'StartConfigurationSessionCommand' - ) { - // Increment counter - middleware.counter++; - } + <ServiceInputTypes extends object, ServiceOutputTypes extends object>( + next: InitializeHandler<ServiceInputTypes, ServiceOutputTypes>, + context: HandlerExecutionContext + ) => + async (args: InitializeHandlerArguments<ServiceInputTypes>) => { + // We only want to count API calls to retrieve data, + // not the StartConfigurationSessionCommand + if ( + context.clientName !== 'AppConfigDataClient' || + context.commandName !== 'StartConfigurationSessionCommand' + ) { + // Increment counter + middleware.counter++; + } - // Call next middleware - return await next(args); - }, + // Call next middleware + return await next(args); + }, { tags: ['ROUND_TRIP'] } ); }, diff --git a/packages/parameters/tests/tsconfig.json b/packages/parameters/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/parameters/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/parameters/tsconfig-dev.json b/packages/parameters/tsconfig-dev.json deleted file mode 100644 index 4ea999b37f..0000000000 --- a/packages/parameters/tsconfig-dev.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/parameters/tsconfig.es.json b/packages/parameters/tsconfig.es.json deleted file mode 100644 index 4ea999b37f..0000000000 --- a/packages/parameters/tsconfig.es.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/parameters/tsconfig.json b/packages/parameters/tsconfig.json index 20da6e39a9..1cb9d72773 100644 --- a/packages/parameters/tsconfig.json +++ b/packages/parameters/tsconfig.json @@ -1,30 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/testing/package.json b/packages/testing/package.json index 375374f9ef..5b922f4ab2 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -12,7 +12,7 @@ "test:unit": "jest --group=unit --detectOpenHandles --coverage --verbose", "test:e2e": "echo 'Not implemented'", "watch": "jest --watch", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", diff --git a/packages/testing/tests/tsconfig.json b/packages/testing/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/testing/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/testing/tsconfig.es.json b/packages/testing/tsconfig.es.json deleted file mode 100644 index 802f18e8f9..0000000000 --- a/packages/testing/tsconfig.es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/testing/tsconfig.json b/packages/testing/tsconfig.json index 8b93f8c299..1cb9d72773 100644 --- a/packages/testing/tsconfig.json +++ b/packages/testing/tsconfig.json @@ -1,32 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 5fb5298b13..6e9c6dae66 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -17,15 +17,14 @@ "test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e", "test:e2e": "jest --group=e2e", "watch": "jest --watch", - "build": "tsc", + "build": "tsc --build --force", "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .", "prebuild": "rimraf ./lib", "prepack": "node ../../.github/scripts/release_patch_package_json.js ." }, "lint-staged": { - "*.ts": "npm run lint-fix", - "*.js": "npm run lint-fix" + "*.{js,ts}": "npm run lint-fix" }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/tracer#readme", "license": "MIT-0", diff --git a/packages/tracer/src/Tracer.ts b/packages/tracer/src/Tracer.ts index 52e687e11f..c780ef6f48 100644 --- a/packages/tracer/src/Tracer.ts +++ b/packages/tracer/src/Tracer.ts @@ -1,20 +1,23 @@ -import { Handler } from 'aws-lambda'; +import type { Handler } from 'aws-lambda'; import { - AsyncHandler, - SyncHandler, + type AsyncHandler, + type SyncHandler, Utility, } from '@aws-lambda-powertools/commons'; -import { TracerInterface } from '.'; -import { ConfigServiceInterface, EnvironmentVariablesService } from './config'; +import type { TracerInterface } from '.'; import { + type ConfigServiceInterface, + EnvironmentVariablesService, +} from './config'; +import type { HandlerMethodDecorator, TracerOptions, MethodDecorator, CaptureLambdaHandlerOptions, CaptureMethodOptions, } from './types'; -import { ProviderService, ProviderServiceInterface } from './provider'; -import { Segment, Subsegment } from 'aws-xray-sdk-core'; +import { ProviderService, type ProviderServiceInterface } from './provider'; +import { type Segment, Subsegment } from 'aws-xray-sdk-core'; /** * ## Intro diff --git a/packages/tracer/src/TracerInterface.ts b/packages/tracer/src/TracerInterface.ts index 65d7d4a10a..b346af0f73 100644 --- a/packages/tracer/src/TracerInterface.ts +++ b/packages/tracer/src/TracerInterface.ts @@ -1,10 +1,10 @@ -import { +import type { CaptureLambdaHandlerOptions, CaptureMethodOptions, HandlerMethodDecorator, MethodDecorator, } from './types'; -import { Segment, Subsegment } from 'aws-xray-sdk-core'; +import type { Segment, Subsegment } from 'aws-xray-sdk-core'; interface TracerInterface { addErrorAsMetadata(error: Error, remote?: boolean): void; diff --git a/packages/tracer/src/helpers.ts b/packages/tracer/src/helpers.ts index ff198f88f5..485475c07c 100644 --- a/packages/tracer/src/helpers.ts +++ b/packages/tracer/src/helpers.ts @@ -1,5 +1,5 @@ import { Tracer } from '.'; -import { TracerOptions } from './types'; +import type { TracerOptions } from './types'; const createTracer = (options: TracerOptions = {}): Tracer => new Tracer(options); diff --git a/packages/tracer/src/types/Tracer.ts b/packages/tracer/src/types/Tracer.ts index eea9113326..e31c06c4e7 100644 --- a/packages/tracer/src/types/Tracer.ts +++ b/packages/tracer/src/types/Tracer.ts @@ -1,6 +1,6 @@ -import { ConfigServiceInterface } from '../config'; -import { Handler } from 'aws-lambda'; -import { +import type { ConfigServiceInterface } from '../config'; +import type { Handler } from 'aws-lambda'; +import type { AsyncHandler, LambdaInterface, SyncHandler, diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts index 6522cb3bff..90480bc3cd 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts @@ -1,5 +1,5 @@ import { Tracer } from '../../src'; -import { Callback, Context } from 'aws-lambda'; +import type { Callback, Context } from 'aws-lambda'; import AWS from 'aws-sdk'; import axios from 'axios'; diff --git a/packages/tracer/tests/e2e/allFeatures.manual.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.manual.test.functionCode.ts index e878fdee08..f7bd2cda64 100644 --- a/packages/tracer/tests/e2e/allFeatures.manual.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.manual.test.functionCode.ts @@ -1,5 +1,5 @@ import { Tracer } from '../../src'; -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import axios from 'axios'; import AWS from 'aws-sdk'; import type { Subsegment } from 'aws-xray-sdk-core'; diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts index 1b768052d9..2dd55050da 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts @@ -1,6 +1,6 @@ import middy from '@middy/core'; import { captureLambdaHandler, Tracer } from '../../src'; -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb'; import axios from 'axios'; diff --git a/packages/tracer/tests/e2e/asyncHandler.decorator.test.functionCode.ts b/packages/tracer/tests/e2e/asyncHandler.decorator.test.functionCode.ts index d4cca85893..98ee23cbf1 100644 --- a/packages/tracer/tests/e2e/asyncHandler.decorator.test.functionCode.ts +++ b/packages/tracer/tests/e2e/asyncHandler.decorator.test.functionCode.ts @@ -1,5 +1,5 @@ import { Tracer } from '../../src'; -import { Context } from 'aws-lambda'; +import type { Context } from 'aws-lambda'; import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { DynamoDBDocumentClient, PutCommand } from '@aws-sdk/lib-dynamodb'; import axios from 'axios'; diff --git a/packages/tracer/tests/tsconfig.json b/packages/tracer/tests/tsconfig.json new file mode 100644 index 0000000000..5654b3e15f --- /dev/null +++ b/packages/tracer/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/packages/tracer/tests/unit/Tracer.test.ts b/packages/tracer/tests/unit/Tracer.test.ts index 7aef53a05f..983764f65f 100644 --- a/packages/tracer/tests/unit/Tracer.test.ts +++ b/packages/tracer/tests/unit/Tracer.test.ts @@ -3,14 +3,13 @@ * * @group unit/tracer/all */ - import { ContextExamples as dummyContext, Events as dummyEvent, LambdaInterface, } from '@aws-lambda-powertools/commons'; -import { Tracer } from '../../src'; -import { Callback, Context } from 'aws-lambda/handler'; +import { Tracer } from './../../src'; +import type { Callback, Context } from 'aws-lambda/handler'; import { Segment, setContextMissingStrategy, @@ -535,8 +534,6 @@ describe('Class: Tracer', () => { class Lambda implements LambdaInterface { @tracer.captureLambdaHandler() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public handler<TEvent, TResult>( _event: TEvent, _context: Context, @@ -575,8 +572,6 @@ describe('Class: Tracer', () => { class Lambda implements LambdaInterface { @tracer.captureLambdaHandler({ captureResponse: false }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public handler<TEvent, TResult>( _event: TEvent, _context: Context, @@ -614,8 +609,6 @@ describe('Class: Tracer', () => { class Lambda implements LambdaInterface { @tracer.captureLambdaHandler({ captureResponse: true }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public handler<TEvent, TResult>( _event: TEvent, _context: Context, @@ -661,8 +654,6 @@ describe('Class: Tracer', () => { class Lambda implements LambdaInterface { @tracer.captureLambdaHandler() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore public handler<TEvent, TResult>( _event: TEvent, _context: Context, diff --git a/packages/tracer/tsconfig.es.json b/packages/tracer/tsconfig.es.json deleted file mode 100644 index 802f18e8f9..0000000000 --- a/packages/tracer/tsconfig.es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] - }, - "include": [ "src/**/*", "tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/packages/tracer/tsconfig.json b/packages/tracer/tsconfig.json index 8b93f8c299..1cb9d72773 100644 --- a/packages/tracer/tsconfig.json +++ b/packages/tracer/tsconfig.json @@ -1,32 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true + "outDir": "./lib", + "rootDir": "./src", }, - "include": [ "src/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "jest", - "node" - ] + "include": [ + "./src/**/*" + ], } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 5fefd1f535..953342aef1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,53 @@ { - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ], - "esModuleInterop": true - }, - "include": [ "packages" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2020" ], - "types": [ - "node" - ] + "compilerOptions": { + "incremental": true, + "composite": true, + "target": "ES2020", // Node.js 14 + "experimentalDecorators": true, // TODO: remove this once we move to TypeScript 5.x + "module": "commonjs", + "moduleResolution": "node", // TODO: experiment with bundler & esnext + "baseUrl": ".", + // "traceResolution": true, // Enable this to debug module resolution issues + "declaration": true, + "removeComments": true, + // TODO: experiment with this & move to tslib in v2 + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // TODO: see if this can introduced in v2 (requires breaking changes in exports) + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "pretty": true, // Enable pretty formatting for output messages. + }, + "files": [], + "references": [ + { + "path": "./packages/commons" + }, + { + "path": "./packages/tracer" + }, + { + "path": "./packages/metrics" + }, + { + "path": "./packages/logger" + }, + { + "path": "./packages/parameters" + }, + { + "path": "./packages/idempotency" + }, + { + "path": "./packages/batch" + }, + { + "path": "./packages/testing" + }, + ] } \ No newline at end of file From b2fe34150a0d896f1755ca30cbe89175cdb66ff2 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Mon, 4 Sep 2023 19:02:03 +0200 Subject: [PATCH 20/28] fix(parameters): return type when options without transform is used (#1671) --- packages/parameters/src/types/AppConfigProvider.ts | 2 ++ packages/parameters/src/types/SecretsProvider.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/parameters/src/types/AppConfigProvider.ts b/packages/parameters/src/types/AppConfigProvider.ts index 6bfc26ecb9..b16b5156a5 100644 --- a/packages/parameters/src/types/AppConfigProvider.ts +++ b/packages/parameters/src/types/AppConfigProvider.ts @@ -107,6 +107,8 @@ type AppConfigGetOutput< InferredFromOptionsType = undefined > = undefined extends ExplicitUserProvidedType ? undefined extends InferredFromOptionsType | AppConfigGetOptionsTransformNone + ? Uint8Array + : InferredFromOptionsType extends AppConfigGetOptionsTransformNone ? Uint8Array : InferredFromOptionsType extends AppConfigGetOptionsTransformBinary ? string diff --git a/packages/parameters/src/types/SecretsProvider.ts b/packages/parameters/src/types/SecretsProvider.ts index 94af356f3a..a9e5c1ef98 100644 --- a/packages/parameters/src/types/SecretsProvider.ts +++ b/packages/parameters/src/types/SecretsProvider.ts @@ -85,7 +85,9 @@ type SecretsGetOutput< ExplicitUserProvidedType = undefined, InferredFromOptionsType = undefined > = undefined extends ExplicitUserProvidedType - ? undefined extends InferredFromOptionsType | SecretsGetOptionsTransformNone + ? undefined extends InferredFromOptionsType + ? string | Uint8Array + : InferredFromOptionsType extends SecretsGetOptionsTransformNone ? string | Uint8Array : InferredFromOptionsType extends SecretsGetOptionsTransformBinary ? string From 6d2de72ebb98696477b590a1a616f3970ae643aa Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Wed, 13 Sep 2023 12:56:05 +0200 Subject: [PATCH 21/28] chore(maintenance): adopt TypeScript 5.x (#1672) * chore(maintenance): upgrade to TypeScript 5.x * docs: update docs with decorators requirement * chore: dependencies * chore: downgrade eslint deps due to nodejs14x --- docs/core/logger.md | 2 +- docs/core/metrics.md | 2 +- docs/core/tracer.md | 2 +- examples/cdk/package.json | 15 +- examples/sam/package.json | 16 +- package-lock.json | 3477 ++++++++++++++++----------------- package.json | 26 +- packages/testing/package.json | 2 +- tsconfig.json | 2 +- 9 files changed, 1731 insertions(+), 1813 deletions(-) diff --git a/docs/core/logger.md b/docs/core/logger.md index 7dcdf04eff..1db08f0839 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -119,7 +119,7 @@ This functionality will include the following keys in your structured logs: === "Decorator" !!! info - Decorators can only be attached to a class declaration, method, accessor, property, or parameter. Therefore, if you prefer to write your handler as a standard function rather than a Class method, use the middleware or the manual instrumentation instead. See the [official TypeScript documentation](https://www.typescriptlang.org/docs/handbook/decorators.html) for more details. + Powertools decorators can only be attached to class methods and follow the experimetal decorators proposal implementation found in TypeScript 4.x. As such, you need to enable the `experimentalDecorators` compiler option in your `tsconfig.json` file to use them. ```typescript hl_lines="8" --8<-- "docs/snippets/logger/decorator.ts" diff --git a/docs/core/metrics.md b/docs/core/metrics.md index 9d1366ad4b..925fa6d6cc 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -212,7 +212,7 @@ You can add default dimensions to your metrics by passing them as parameters in === "with logMetrics decorator" !!! info - Decorators can only be attached to a class declaration, method, accessor, property, or parameter. Therefore, if you prefer to write your handler as a standard function rather than a Class method, use the middleware or the manual instrumentation instead. See the [official TypeScript documentation](https://www.typescriptlang.org/docs/handbook/decorators.html) for more details. + Powertools decorators can only be attached to class methods and follow the experimetal decorators proposal implementation found in TypeScript 4.x. As such, you need to enable the `experimentalDecorators` compiler option in your `tsconfig.json` file to use them. ```typescript hl_lines="12" --8<-- "docs/snippets/metrics/defaultDimensionsDecorator.ts" diff --git a/docs/core/tracer.md b/docs/core/tracer.md index 6baa64a58e..c9c0b79cf0 100644 --- a/docs/core/tracer.md +++ b/docs/core/tracer.md @@ -98,7 +98,7 @@ You can quickly start by importing the `Tracer` class, initialize it outside the === "Decorator" !!! info - Decorators can only be attached to a class declaration, method, accessor, property, or parameter. Therefore, if you prefer to write your handler as a standard function rather than a Class method, use the middleware or the manual instrumentation instead. See the [official TypeScript documentation](https://www.typescriptlang.org/docs/handbook/decorators.html) for more details. + Powertools decorators can only be attached to class methods and follow the experimetal decorators proposal implementation found in TypeScript 4.x. As such, you need to enable the `experimentalDecorators` compiler option in your `tsconfig.json` file to use them. ```typescript hl_lines="8" --8<-- "docs/snippets/tracer/decorator.ts" diff --git a/examples/cdk/package.json b/examples/cdk/package.json index d04cae5563..34e9bbf1bf 100644 --- a/examples/cdk/package.json +++ b/examples/cdk/package.json @@ -33,19 +33,14 @@ "@aws-sdk/client-ssm": "^3.360.0", "@aws-sdk/lib-dynamodb": "^3.360.0", "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "18.11.17", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", "aws-cdk": "^2.73.0", - "esbuild": "^0.16.9", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "jest": "^29.3.1", - "ts-jest": "^29.0.3", + "esbuild": "^0.19.2", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "typescript": "^5.2.2" }, "dependencies": { "@middy/core": "^3.6.2", diff --git a/examples/sam/package.json b/examples/sam/package.json index 2d5d7493c8..f594b74ef9 100644 --- a/examples/sam/package.json +++ b/examples/sam/package.json @@ -22,18 +22,12 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "18.11.17", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", - "eslint": "^8.30.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "jest": "^29.3.1", - "ts-jest": "^29.0.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "typescript": "^5.2.2" }, "dependencies": { "@aws-lambda-powertools/logger": "^1.12.1", @@ -44,7 +38,7 @@ "@aws-sdk/client-ssm": "^3.360.0", "@aws-sdk/lib-dynamodb": "^3.360.0", "@middy/core": "^3.6.2", - "esbuild": "^0.18.14", + "esbuild": "^0.19.2", "phin": "^3.7.0" } } diff --git a/package-lock.json b/package-lock.json index 8f7aff0cb3..ce6b1655c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,29 +25,29 @@ "devDependencies": { "@middy/core": "^3.6.2", "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "^18.16.18", "@types/uuid": "^9.0.2", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", - "eslint": "^8.29.0", - "eslint-config-prettier": "^8.8.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-import-resolver-typescript": "^3.6.0", + "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.2", - "jest": "^29.3.1", + "jest": "^29.6.4", "jest-runner-groups": "^2.2.0", "lerna": "^6.6.2", "lint-staged": "^13.1.2", "prettier": "^2.8.8", "rimraf": "^5.0.1", - "ts-jest": "^29.0.3", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typedoc": "^0.24.7", - "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "^4.9.4" + "typedoc": "^0.25.1", + "typedoc-plugin-missing-exports": "^2.1.0", + "typescript": "^5.2.2" }, "engines": { "node": ">=14" @@ -296,19 +296,14 @@ "@aws-sdk/client-ssm": "^3.360.0", "@aws-sdk/lib-dynamodb": "^3.360.0", "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "18.11.17", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", "aws-cdk": "^2.73.0", - "esbuild": "^0.16.9", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "jest": "^29.3.1", - "ts-jest": "^29.0.3", + "esbuild": "^0.19.2", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "typescript": "^5.2.2" } }, "examples/cdk/node_modules/@types/node": { @@ -339,38 +334,17 @@ "@aws-sdk/client-ssm": "^3.360.0", "@aws-sdk/lib-dynamodb": "^3.360.0", "@middy/core": "^3.6.2", - "esbuild": "^0.18.14", + "esbuild": "^0.19.2", "phin": "^3.7.0" }, "devDependencies": { "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "18.11.17", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", - "eslint": "^8.30.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "jest": "^29.3.1", - "ts-jest": "^29.0.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^4.9.4" - } - }, - "examples/sam/node_modules/@esbuild/linux-arm64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.15.tgz", - "integrity": "sha512-BWncQeuWDgYv0jTNzJjaNgleduV4tMbQjmk/zpPh/lUdMcNEAxy+jvneDJ6RJkrqloG7tB9S9rCrtfk/kuplsQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "typescript": "^5.2.2" } }, "examples/sam/node_modules/@types/node": { @@ -379,42 +353,6 @@ "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", "dev": true }, - "examples/sam/node_modules/esbuild": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.15.tgz", - "integrity": "sha512-3WOOLhrvuTGPRzQPU6waSDWrDTnQriia72McWcn6UCi43GhCHrXH4S59hKMeez+IITmdUuUyvbU9JIp+t3xlPQ==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.15", - "@esbuild/android-arm64": "0.18.15", - "@esbuild/android-x64": "0.18.15", - "@esbuild/darwin-arm64": "0.18.15", - "@esbuild/darwin-x64": "0.18.15", - "@esbuild/freebsd-arm64": "0.18.15", - "@esbuild/freebsd-x64": "0.18.15", - "@esbuild/linux-arm": "0.18.15", - "@esbuild/linux-arm64": "0.18.15", - "@esbuild/linux-ia32": "0.18.15", - "@esbuild/linux-loong64": "0.18.15", - "@esbuild/linux-mips64el": "0.18.15", - "@esbuild/linux-ppc64": "0.18.15", - "@esbuild/linux-riscv64": "0.18.15", - "@esbuild/linux-s390x": "0.18.15", - "@esbuild/linux-x64": "0.18.15", - "@esbuild/netbsd-x64": "0.18.15", - "@esbuild/openbsd-x64": "0.18.15", - "@esbuild/sunos-x64": "0.18.15", - "@esbuild/win32-arm64": "0.18.15", - "@esbuild/win32-ia32": "0.18.15", - "@esbuild/win32-x64": "0.18.15" - } - }, "layers": { "version": "1.12.1", "license": "MIT-0", @@ -806,6 +744,15 @@ "source-map": "^0.6.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "dev": true, @@ -2619,9 +2566,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2649,17 +2597,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2763,9 +2713,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -2829,11 +2780,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2923,11 +2875,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2978,12 +2931,13 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2992,8 +2946,9 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -3016,9 +2971,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.15.tgz", - "integrity": "sha512-wlkQBWb79/jeEEoRmrxt/yhn5T1lU236OCNpnfRzaCJHZ/5gf82uYx1qmADTBWE0AR/v7FiozE1auk2riyQd3w==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", + "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", "cpu": [ "arm" ], @@ -3031,9 +2986,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.15.tgz", - "integrity": "sha512-NI/gnWcMl2kXt1HJKOn2H69SYn4YNheKo6NZt1hyfKWdMbaGadxjZIkcj4Gjk/WPxnbFXs9/3HjGHaknCqjrww==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", + "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", "cpu": [ "arm64" ], @@ -3046,9 +3001,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.15.tgz", - "integrity": "sha512-FM9NQamSaEm/IZIhegF76aiLnng1kEsZl2eve/emxDeReVfRuRNmvT28l6hoFD9TsCxpK+i4v8LPpEj74T7yjA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", + "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", "cpu": [ "x64" ], @@ -3061,9 +3016,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.15.tgz", - "integrity": "sha512-XmrFwEOYauKte9QjS6hz60FpOCnw4zaPAb7XV7O4lx1r39XjJhTN7ZpXqJh4sN6q60zbP6QwAVVA8N/wUyBH/w==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", + "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", "cpu": [ "arm64" ], @@ -3076,9 +3031,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.15.tgz", - "integrity": "sha512-bMqBmpw1e//7Fh5GLetSZaeo9zSC4/CMtrVFdj+bqKPGJuKyfNJ5Nf2m3LknKZTS+Q4oyPiON+v3eaJ59sLB5A==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", + "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", "cpu": [ "x64" ], @@ -3091,9 +3046,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.15.tgz", - "integrity": "sha512-LoTK5N3bOmNI9zVLCeTgnk5Rk0WdUTrr9dyDAQGVMrNTh9EAPuNwSTCgaKOKiDpverOa0htPcO9NwslSE5xuLA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", + "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", "cpu": [ "arm64" ], @@ -3106,9 +3061,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.15.tgz", - "integrity": "sha512-62jX5n30VzgrjAjOk5orYeHFq6sqjvsIj1QesXvn5OZtdt5Gdj0vUNJy9NIpjfdNdqr76jjtzBJKf+h2uzYuTQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", + "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", "cpu": [ "x64" ], @@ -3121,9 +3076,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.15.tgz", - "integrity": "sha512-dT4URUv6ir45ZkBqhwZwyFV6cH61k8MttIwhThp2BGiVtagYvCToF+Bggyx2VI57RG4Fbt21f9TmXaYx0DeUJg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", + "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", "cpu": [ "arm" ], @@ -3136,12 +3091,12 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.10", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", + "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3151,9 +3106,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.15.tgz", - "integrity": "sha512-JPXORvgHRHITqfms1dWT/GbEY89u848dC08o0yK3fNskhp0t2TuNUnsrrSgOdH28ceb1hJuwyr8R/1RnyPwocw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", + "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", "cpu": [ "ia32" ], @@ -3166,9 +3121,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.15.tgz", - "integrity": "sha512-kArPI0DopjJCEplsVj/H+2Qgzz7vdFSacHNsgoAKpPS6W/Ndh8Oe24HRDQ5QCu4jHgN6XOtfFfLpRx3TXv/mEg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", + "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", "cpu": [ "loong64" ], @@ -3181,9 +3136,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.15.tgz", - "integrity": "sha512-b/tmngUfO02E00c1XnNTw/0DmloKjb6XQeqxaYuzGwHe0fHVgx5/D6CWi+XH1DvkszjBUkK9BX7n1ARTOst59w==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", + "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", "cpu": [ "mips64el" ], @@ -3196,9 +3151,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.15.tgz", - "integrity": "sha512-KXPY69MWw79QJkyvUYb2ex/OgnN/8N/Aw5UDPlgoRtoEfcBqfeLodPr42UojV3NdkoO4u10NXQdamWm1YEzSKw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", + "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", "cpu": [ "ppc64" ], @@ -3211,9 +3166,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.15.tgz", - "integrity": "sha512-komK3NEAeeGRnvFEjX1SfVg6EmkfIi5aKzevdvJqMydYr9N+pRQK0PGJXk+bhoPZwOUgLO4l99FZmLGk/L1jWg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", + "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", "cpu": [ "riscv64" ], @@ -3226,9 +3181,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.15.tgz", - "integrity": "sha512-632T5Ts6gQ2WiMLWRRyeflPAm44u2E/s/TJvn+BP6M5mnHSk93cieaypj3VSMYO2ePTCRqAFXtuYi1yv8uZJNA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", + "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", "cpu": [ "s390x" ], @@ -3241,9 +3196,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.15.tgz", - "integrity": "sha512-MsHtX0NgvRHsoOtYkuxyk4Vkmvk3PLRWfA4okK7c+6dT0Fu4SUqXAr9y4Q3d8vUf1VWWb6YutpL4XNe400iQ1g==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", + "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", "cpu": [ "x64" ], @@ -3256,9 +3211,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.15.tgz", - "integrity": "sha512-djST6s+jQiwxMIVQ5rlt24JFIAr4uwUnzceuFL7BQT4CbrRtqBPueS4GjXSiIpmwVri1Icj/9pFRJ7/aScvT+A==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", + "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", "cpu": [ "x64" ], @@ -3271,9 +3226,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.15.tgz", - "integrity": "sha512-naeRhUIvhsgeounjkF5mvrNAVMGAm6EJWiabskeE5yOeBbLp7T89tAEw0j5Jm/CZAwyLe3c67zyCWH6fsBLCpw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", + "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", "cpu": [ "x64" ], @@ -3286,9 +3241,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.15.tgz", - "integrity": "sha512-qkT2+WxyKbNIKV1AEhI8QiSIgTHMcRctzSaa/I3kVgMS5dl3fOeoqkb7pW76KwxHoriImhx7Mg3TwN/auMDsyQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", + "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", "cpu": [ "x64" ], @@ -3301,9 +3256,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.15.tgz", - "integrity": "sha512-HC4/feP+pB2Vb+cMPUjAnFyERs+HJN7E6KaeBlFdBv799MhD+aPJlfi/yk36SED58J9TPwI8MAcVpJgej4ud0A==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", + "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", "cpu": [ "arm64" ], @@ -3316,9 +3271,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.15.tgz", - "integrity": "sha512-ovjwoRXI+gf52EVF60u9sSDj7myPixPxqzD5CmkEUmvs+W9Xd0iqISVBQn8xcx4ciIaIVlWCuTbYDOXOnOL44Q==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", + "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", "cpu": [ "ia32" ], @@ -3331,9 +3286,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.15.tgz", - "integrity": "sha512-imUxH9a3WJARyAvrG7srLyiK73XdX83NXQkjKvQ+7vPh3ZxoLrzvPkQKKw2DwZ+RV2ZB6vBfNHP8XScAmQC3aA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", + "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", "cpu": [ "x64" ], @@ -3345,14 +3300,39 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.4.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -3367,35 +3347,25 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", + "node_modules/@eslint/js": { + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, "node_modules/@gar/promisify": { "version": "1.1.3", "dev": true, "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -3419,8 +3389,9 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -3625,15 +3596,16 @@ } }, "node_modules/@jest/console": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -3641,36 +3613,37 @@ } }, "node_modules/@jest/core": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^29.3.1", - "@jest/reporters": "^29.3.1", - "@jest/test-result": "^29.3.1", - "@jest/transform": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.2.0", - "jest-config": "^29.3.1", - "jest-haste-map": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.3.1", - "jest-resolve-dependencies": "^29.3.1", - "jest-runner": "^29.3.1", - "jest-runtime": "^29.3.1", - "jest-snapshot": "^29.3.1", - "jest-util": "^29.3.1", - "jest-validate": "^29.3.1", - "jest-watcher": "^29.3.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -3686,84 +3659,134 @@ } } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/environment": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.3.1" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "license": "MIT", "dependencies": { - "expect": "^29.3.1", - "jest-snapshot": "^29.3.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, - "license": "MIT", "dependencies": { - "jest-get-type": "^29.2.0" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", - "@sinonjs/fake-timers": "^9.1.2", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.3.1", - "jest-mock": "^29.3.1", - "jest-util": "^29.3.1" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@jest/fake-timers/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, "node_modules/@jest/globals": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^29.3.1", - "@jest/expect": "^29.3.1", - "@jest/types": "^29.3.1", - "jest-mock": "^29.3.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.3.1", - "@jest/test-result": "^29.3.1", - "@jest/transform": "^29.3.1", - "@jest/types": "^29.3.1", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -3771,13 +3794,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1", - "jest-worker": "^29.3.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -3795,28 +3818,47 @@ } } }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@jest/schemas": { - "version": "29.4.3", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { - "version": "0.25.24", - "dev": true, - "license": "MIT" + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, "node_modules/@jest/source-map": { - "version": "29.2.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, @@ -3825,12 +3867,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -3839,13 +3882,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^29.3.1", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.3.1", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -3853,36 +3897,38 @@ } }, "node_modules/@jest/transform": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.3.1", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.3.1", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.3.1", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "29.3.1", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3927,12 +3973,13 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@lerna/child-process": { @@ -5534,25 +5581,6 @@ "node": ">=14" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/@sigstore/protobuf-specs": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", @@ -5816,12 +5844,13 @@ "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.1.20", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -5829,27 +5858,30 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/cls-hooked": { @@ -5889,9 +5921,10 @@ } }, "node_modules/@types/jest": { - "version": "29.2.4", + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", "dev": true, - "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -5903,14 +5936,16 @@ "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/lodash": { "version": "4.14.191", @@ -5954,11 +5989,6 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "dev": true, - "license": "MIT" - }, "node_modules/@types/promise-retry": { "version": "1.1.3", "dev": true, @@ -5973,9 +6003,10 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.3.13", - "dev": true, - "license": "MIT" + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "dev": true }, "node_modules/@types/sinon": { "version": "10.0.13", @@ -6015,17 +6046,19 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/type-utils": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -6047,13 +6080,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -6073,12 +6107,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6089,12 +6124,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -6115,9 +6151,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6127,12 +6164,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6153,17 +6191,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, - "license": "MIT", "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -6178,11 +6217,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.0", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6268,9 +6308,10 @@ } }, "node_modules/acorn": { - "version": "8.8.1", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -6280,8 +6321,9 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -6336,6 +6378,22 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "dev": true, @@ -6437,6 +6495,19 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -6477,6 +6548,25 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "dev": true, @@ -6494,6 +6584,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -6998,14 +7127,15 @@ } }, "node_modules/babel-jest": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/transform": "^29.3.1", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.2.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -7033,9 +7163,10 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.2.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -7069,11 +7200,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.2.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.2.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -7510,9 +7642,10 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true }, "node_modules/clean-stack": { "version": "2.2.0", @@ -7731,8 +7864,9 @@ }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -8072,6 +8206,27 @@ "node": ">=10" } }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "dev": true, @@ -8186,13 +8341,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8217,9 +8374,10 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, - "license": "MIT", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -8322,9 +8480,10 @@ } }, "node_modules/diff-sequences": { - "version": "29.3.1", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -8419,8 +8578,9 @@ }, "node_modules/emittery": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -8519,35 +8679,50 @@ } }, "node_modules/es-abstract": { - "version": "1.20.5", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, - "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", - "unbox-primitive": "^1.0.2" + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -8556,6 +8731,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "dev": true, @@ -8581,10 +8770,10 @@ } }, "node_modules/esbuild": { - "version": "0.16.10", - "dev": true, + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", + "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -8592,432 +8781,324 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.10", - "@esbuild/android-arm64": "0.16.10", - "@esbuild/android-x64": "0.16.10", - "@esbuild/darwin-arm64": "0.16.10", - "@esbuild/darwin-x64": "0.16.10", - "@esbuild/freebsd-arm64": "0.16.10", - "@esbuild/freebsd-x64": "0.16.10", - "@esbuild/linux-arm": "0.16.10", - "@esbuild/linux-arm64": "0.16.10", - "@esbuild/linux-ia32": "0.16.10", - "@esbuild/linux-loong64": "0.16.10", - "@esbuild/linux-mips64el": "0.16.10", - "@esbuild/linux-ppc64": "0.16.10", - "@esbuild/linux-riscv64": "0.16.10", - "@esbuild/linux-s390x": "0.16.10", - "@esbuild/linux-x64": "0.16.10", - "@esbuild/netbsd-x64": "0.16.10", - "@esbuild/openbsd-x64": "0.16.10", - "@esbuild/sunos-x64": "0.16.10", - "@esbuild/win32-arm64": "0.16.10", - "@esbuild/win32-ia32": "0.16.10", - "@esbuild/win32-x64": "0.16.10" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", - "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "@esbuild/android-arm": "0.19.2", + "@esbuild/android-arm64": "0.19.2", + "@esbuild/android-x64": "0.19.2", + "@esbuild/darwin-arm64": "0.19.2", + "@esbuild/darwin-x64": "0.19.2", + "@esbuild/freebsd-arm64": "0.19.2", + "@esbuild/freebsd-x64": "0.19.2", + "@esbuild/linux-arm": "0.19.2", + "@esbuild/linux-arm64": "0.19.2", + "@esbuild/linux-ia32": "0.19.2", + "@esbuild/linux-loong64": "0.19.2", + "@esbuild/linux-mips64el": "0.19.2", + "@esbuild/linux-ppc64": "0.19.2", + "@esbuild/linux-riscv64": "0.19.2", + "@esbuild/linux-s390x": "0.19.2", + "@esbuild/linux-x64": "0.19.2", + "@esbuild/netbsd-x64": "0.19.2", + "@esbuild/openbsd-x64": "0.19.2", + "@esbuild/sunos-x64": "0.19.2", + "@esbuild/win32-arm64": "0.19.2", + "@esbuild/win32-ia32": "0.19.2", + "@esbuild/win32-x64": "0.19.2" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", - "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", - "cpu": [ - "arm64" - ], + "node_modules/escalade": { + "version": "3.1.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", - "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", - "cpu": [ - "x64" - ], + "node_modules/escape-string-regexp": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.10.tgz", - "integrity": "sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==", - "cpu": [ - "arm64" - ], + "node_modules/eslint": { + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", - "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", - "cpu": [ - "x64" - ], + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", - "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", - "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", - "cpu": [ - "x64" - ], + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", - "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", - "cpu": [ - "arm" - ], + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=12" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", - "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", - "cpu": [ - "ia32" - ], + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "debug": "^3.2.7" + }, "engines": { - "node": ">=12" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", - "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", - "cpu": [ - "loong64" - ], + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", - "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", - "cpu": [ - "mips64el" - ], + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, "engines": { - "node": ">=12" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", - "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", - "cpu": [ - "ppc64" - ], + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", - "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", - "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", - "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", - "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", - "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", - "cpu": [ - "x64" - ], + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", - "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", - "cpu": [ - "x64" - ], + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", - "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", - "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", - "cpu": [ - "ia32" - ], + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", - "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", - "cpu": [ - "x64" - ], + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/eslint": { - "version": "8.30.0", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.4.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9026,344 +9107,69 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "node_modules/esprima": { + "version": "4.0.1", "dev": true, + "license": "BSD-2-Clause", "bin": { - "eslint-config-prettier": "bin/cli.js" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=4.0" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.2", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" + "estraverse": "^5.2.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "node": ">=4.0" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/espree": { - "version": "9.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/esutils": { + "version": "2.0.3", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -9417,21 +9223,24 @@ }, "node_modules/exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9479,9 +9288,10 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9511,8 +9321,9 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fast-xml-parser": { "version": "4.2.5", @@ -9856,12 +9667,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -10026,9 +9839,13 @@ } }, "node_modules/get-tsconfig": { - "version": "4.2.0", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", "dev": true, - "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } @@ -10158,9 +9975,10 @@ } }, "node_modules/globals": { - "version": "13.19.0", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -10171,10 +9989,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalyzer": { - "version": "0.1.0", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT" + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/globby": { "version": "11.1.0", @@ -10195,11 +10023,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/gopd": { "version": "1.0.1", "dev": true, @@ -10216,10 +10039,11 @@ "dev": true, "license": "ISC" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "dev": true, - "license": "MIT" + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/handlebars": { "version": "4.7.7", @@ -10289,6 +10113,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "dev": true, @@ -10346,8 +10182,9 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-cache-semantics": { "version": "4.1.1", @@ -10615,11 +10452,12 @@ } }, "node_modules/internal-slot": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -10642,6 +10480,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "dev": true, @@ -10703,9 +10555,10 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.11.0", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -10759,8 +10612,9 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -11068,22 +10922,39 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -11094,9 +10965,10 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -11142,14 +11014,15 @@ } }, "node_modules/jest": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/core": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.3.1" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -11167,11 +11040,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.2.0", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, - "license": "MIT", "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -11179,27 +11054,29 @@ } }, "node_modules/jest-circus": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^29.3.1", - "@jest/expect": "^29.3.1", - "@jest/test-result": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.3.1", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-runtime": "^29.3.1", - "jest-snapshot": "^29.3.1", - "jest-util": "^29.3.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.3.1", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -11207,22 +11084,62 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-cli": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/core": "^29.3.1", - "@jest/test-result": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.3.1", - "jest-util": "^29.3.1", - "jest-validate": "^29.3.1", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -11241,30 +11158,31 @@ } }, "node_modules/jest-config": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.3.1", - "@jest/types": "^29.3.1", - "babel-jest": "^29.3.1", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.3.1", - "jest-environment-node": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.3.1", - "jest-runner": "^29.3.1", - "jest-util": "^29.3.1", - "jest-validate": "^29.3.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.3.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -11284,24 +11202,78 @@ } } }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-diff": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "29.2.0", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -11310,58 +11282,88 @@ } }, "node_modules/jest-each": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "jest-util": "^29.3.1", - "pretty-format": "^29.3.1" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^29.3.1", - "@jest/fake-timers": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.3.1", - "jest-util": "^29.3.1" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.2.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.3.1", - "jest-worker": "^29.3.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -11387,43 +11389,98 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -11431,14 +11488,41 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-mock": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.3.1" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11461,26 +11545,28 @@ } }, "node_modules/jest-regex-util": { - "version": "29.2.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.3.1", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.3.1", - "jest-validate": "^29.3.1", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { @@ -11488,41 +11574,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, - "license": "MIT", "dependencies": { - "jest-regex-util": "^29.2.0", - "jest-snapshot": "^29.3.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^29.3.1", - "@jest/environment": "^29.3.1", - "@jest/test-result": "^29.3.1", - "@jest/transform": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.2.0", - "jest-environment-node": "^29.3.1", - "jest-haste-map": "^29.3.1", - "jest-leak-detector": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-resolve": "^29.3.1", - "jest-runtime": "^29.3.1", - "jest-util": "^29.3.1", - "jest-watcher": "^29.3.1", - "jest-worker": "^29.3.1", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -11543,30 +11631,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.3.1", - "@jest/fake-timers": "^29.3.1", - "@jest/globals": "^29.3.1", - "@jest/source-map": "^29.2.0", - "@jest/test-result": "^29.3.1", - "@jest/transform": "^29.3.1", - "@jest/types": "^29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-mock": "^29.3.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.3.1", - "jest-snapshot": "^29.3.1", - "jest-util": "^29.3.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -11575,45 +11664,69 @@ } }, "node_modules/jest-snapshot": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.3.1", - "@jest/transform": "^29.3.1", - "@jest/types": "^29.3.1", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.3.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-haste-map": "^29.3.1", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.3.1", - "semver": "^7.3.5" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11625,44 +11738,73 @@ } }, "node_modules/jest-validate": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.3.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.3.1" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^29.3.1", - "@jest/types": "^29.3.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.3.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -11670,12 +11812,13 @@ } }, "node_modules/jest-worker": { - "version": "29.3.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", - "jest-util": "^29.3.1", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -11685,8 +11828,9 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11704,15 +11848,6 @@ "node": ">= 0.6.0" } }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "dev": true, @@ -11751,6 +11886,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "dev": true, @@ -11850,8 +11991,9 @@ }, "node_modules/kleur": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -12094,6 +12236,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/lerna/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/lerna/node_modules/uuid": { "version": "8.3.2", "dev": true, @@ -12133,16 +12288,18 @@ }, "node_modules/leven": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13471,8 +13628,9 @@ }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -14357,9 +14515,10 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14389,6 +14548,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.values": { "version": "1.1.6", "dev": true, @@ -14449,16 +14637,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -15124,8 +15313,9 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -15241,8 +15431,9 @@ }, "node_modules/prompts": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -15285,6 +15476,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/q": { "version": "1.5.1", "dev": true, @@ -15670,13 +15877,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -15685,17 +15893,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-directory": { "version": "2.1.1", "dev": true, @@ -15705,11 +15902,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -15739,10 +15937,20 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { - "version": "1.1.0", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -15892,6 +16100,30 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "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==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "dev": true, @@ -16019,8 +16251,9 @@ }, "node_modules/side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -16181,8 +16414,9 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, "node_modules/slash": { "version": "3.0.0", @@ -16422,6 +16656,23 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "dev": true, @@ -16555,21 +16806,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/tapable": { "version": "2.2.1", "dev": true, @@ -16721,15 +16957,6 @@ "readable-stream": "3" } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "dev": true, - "license": "MIT", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -16806,17 +17033,18 @@ } }, "node_modules/ts-jest": { - "version": "29.0.3", + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, - "license": "MIT", "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", - "json5": "^2.2.1", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", - "semver": "7.x", + "semver": "^7.5.3", "yargs-parser": "^21.0.1" }, "bin": { @@ -16830,7 +17058,7 @@ "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", - "typescript": ">=4.3" + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { @@ -16857,8 +17085,9 @@ }, "node_modules/ts-node": { "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -16906,20 +17135,22 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -16929,8 +17160,9 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -16941,8 +17173,9 @@ }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -16955,8 +17188,9 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tuf-js": { "version": "1.1.7", @@ -17075,8 +17309,9 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -17094,8 +17329,9 @@ }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -17103,6 +17339,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -17110,33 +17411,33 @@ "dev": true }, "node_modules/typedoc": { - "version": "0.24.7", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.7.tgz", - "integrity": "sha512-zzfKDFIZADA+XRIp2rMzLe9xZ6pt12yQOhCr7cD7/PBTjhPmMyMvGrkZ2lPNJitg3Hj1SeiYFNzCsSDrlpxpKw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", + "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", "dev": true, "dependencies": { "lunr": "^2.3.9", "marked": "^4.3.0", - "minimatch": "^9.0.0", + "minimatch": "^9.0.3", "shiki": "^0.14.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 14.14" + "node": ">= 16" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" } }, "node_modules/typedoc-plugin-missing-exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.0.0.tgz", - "integrity": "sha512-t0QlKCm27/8DaheJkLo/gInSNjzBXgSciGhoLpL6sLyXZibm7SuwJtHvg4qXI2IjJfFBgW9mJvvszpoxMyB0TA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.1.0.tgz", + "integrity": "sha512-+1DhqZCEu7Vu5APnrqpPwl31D+hXpt1fV0Le9ycCRL1eLVdatdl6KVt4SEVwPxnEpKwgOn2dNX6I9+0F1aO2aA==", "dev": true, "peerDependencies": { - "typedoc": "0.24.x" + "typedoc": "0.24.x || 0.25.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -17149,9 +17450,9 @@ } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -17164,15 +17465,16 @@ } }, "node_modules/typescript": { - "version": "4.9.4", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -17338,9 +17640,10 @@ "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.0.1", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -17352,8 +17655,9 @@ }, "node_modules/v8-to-istanbul/node_modules/convert-source-map": { "version": "1.9.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -17456,16 +17760,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17483,15 +17787,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -18228,373 +18523,7 @@ "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.18.17" - } - }, - "packages/testing/node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/testing/node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" + "esbuild": "^0.19.2" } }, "packages/tracer": { diff --git a/package.json b/package.json index c8867af64c..195223fb8a 100644 --- a/package.json +++ b/package.json @@ -48,29 +48,29 @@ "devDependencies": { "@middy/core": "^3.6.2", "@types/aws-lambda": "^8.10.109", - "@types/jest": "^29.2.4", + "@types/jest": "^29.5.4", "@types/node": "^18.16.18", "@types/uuid": "^9.0.2", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", - "eslint": "^8.29.0", - "eslint-config-prettier": "^8.8.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-import-resolver-typescript": "^3.6.0", + "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.2", - "jest": "^29.3.1", + "jest": "^29.6.4", "jest-runner-groups": "^2.2.0", "lerna": "^6.6.2", "lint-staged": "^13.1.2", "prettier": "^2.8.8", "rimraf": "^5.0.1", - "ts-jest": "^29.0.3", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typedoc": "^0.24.7", - "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "^4.9.4" + "typedoc": "^0.25.1", + "typedoc-plugin-missing-exports": "^2.1.0", + "typescript": "^5.2.2" }, "engines": { "node": ">=14" diff --git a/packages/testing/package.json b/packages/testing/package.json index 5b922f4ab2..28814fd43e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -45,6 +45,6 @@ "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.18.17" + "esbuild": "^0.19.2" } } diff --git a/tsconfig.json b/tsconfig.json index 953342aef1..1a375d128b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "incremental": true, "composite": true, "target": "ES2020", // Node.js 14 - "experimentalDecorators": true, // TODO: remove this once we move to TypeScript 5.x + "experimentalDecorators": true, "module": "commonjs", "moduleResolution": "node", // TODO: experiment with bundler & esnext "baseUrl": ".", From e1a3452dc3904cc0b98c698c10d4493b05af4c34 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Wed, 13 Sep 2023 14:29:18 +0200 Subject: [PATCH 22/28] docs(batch): add section on how to trace batch processing (#1673) * docs(batch): tracing batch processing * docs(batch): add guidance on how to trace batch processing --- docs/index.md | 31 ++++++------- .../batch/advancedTracingRecordHandler.ts | 43 +++++++++++++++++++ docs/snippets/batch/customPartialProcessor.ts | 7 +-- docs/stylesheets/extra.css | 41 +++++++++++++----- docs/utilities/batch.md | 16 ++++++- docs/utilities/parameters.md | 2 +- mkdocs.yml | 9 ++-- 7 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 docs/snippets/batch/advancedTracingRecordHandler.ts diff --git a/docs/index.md b/docs/index.md index e3f7350ef3..dc80473c9d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -294,20 +294,21 @@ Core utilities such as Tracing, Logging, and Metrics will be available across al ???+ info Explicit parameters take precedence over environment variables -| Environment variable | Description | Utility | Default | -| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------- | -| **POWERTOOLS_SERVICE_NAME** | Sets service name used for tracing namespace, metrics dimension and structured logging | All | `service_undefined` | -| **POWERTOOLS_METRICS_NAMESPACE** | Sets namespace used for metrics | [Metrics](./core/metrics) | `default_namespace` | -| **POWERTOOLS_TRACE_ENABLED** | Explicitly disables tracing | [Tracer](./core/tracer) | `true` | -| **POWERTOOLS_TRACER_CAPTURE_RESPONSE** | Captures Lambda or method return as metadata. | [Tracer](./core/tracer) | `true` | -| **POWERTOOLS_TRACER_CAPTURE_ERROR** | Captures Lambda or method exception as metadata. | [Tracer](./core/tracer) | `true` | -| **POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS** | Captures HTTP(s) requests as segments. | [Tracer](./core/tracer) | `true` | -| **POWERTOOLS_LOGGER_LOG_EVENT** | Logs incoming event | [Logger](./core/logger) | `false` | -| **POWERTOOLS_LOGGER_SAMPLE_RATE** | Debug log sampling | [Logger](./core/logger) | `0` | -| **POWERTOOLS_DEV** | Increase JSON indentation to ease debugging when running functions locally or in a non-production environment | [Logger](./core/logger) | `false` | -| **LOG_LEVEL** | Sets logging level | [Logger](./core/logger) | `INFO` | -| **POWERTOOLS_PARAMETERS_MAX_AGE** | Adjust how long values are kept in cache (in seconds) | [Parameters](./utilities/parameters) | `5` | -| **POWERTOOLS_PARAMETERS_SSM_DECRYPT** | Sets whether to decrypt or not values retrieved from AWS Systems Manager Parameters Store | [Parameters](./utilities/parameters) | `false` | +| Environment variable | Description | Utility | Default | +| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------- | +| **POWERTOOLS_SERVICE_NAME** | Set service name used for tracing namespace, metrics dimension and structured logging | All | `service_undefined` | +| **POWERTOOLS_METRICS_NAMESPACE** | Set namespace used for metrics | [Metrics](core/metrics.md) | `default_namespace` | +| **POWERTOOLS_TRACE_ENABLED** | Explicitly disables tracing | [Tracer](core/tracer.md) | `true` | +| **POWERTOOLS_TRACER_CAPTURE_RESPONSE** | Capture Lambda or method return as metadata. | [Tracer](core/tracer.md) | `true` | +| **POWERTOOLS_TRACER_CAPTURE_ERROR** | Capture Lambda or method exception as metadata. | [Tracer](core/tracer.md) | `true` | +| **POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS** | Capture HTTP(s) requests as segments. | [Tracer](core/tracer.md) | `true` | +| **POWERTOOLS_LOGGER_LOG_EVENT** | Log incoming event | [Logger](core/logger.md) | `false` | +| **POWERTOOLS_LOGGER_SAMPLE_RATE** | Debug log sampling | [Logger](core/logger.md) | `0` | +| **POWERTOOLS_DEV** | Increase JSON indentation to ease debugging when running functions locally or in a non-production environment | [Logger](core/logger.md) | `false` | +| **LOG_LEVEL** | Set logging level | [Logger](core/logger.md) | `INFO` | +| **POWERTOOLS_PARAMETERS_MAX_AGE** | Adjust how long values are kept in cache (in seconds) | [Parameters](utilities/parameters.md) | `5` | +| **POWERTOOLS_PARAMETERS_SSM_DECRYPT** | Set whether to decrypt or not values retrieved from AWS Systems Manager Parameters Store | [Parameters](utilities/parameters.md) | `false` | +| **POWERTOOLS_IDEMPOTENCY_DISABLED** | Disable the Idempotency logic without changing your code, useful for testing | [Idempotency](utilities/idempotency.md) | `false` | Each Utility page provides information on example values and allowed values. @@ -331,7 +332,7 @@ The following companies, among others, use Powertools: ### Sharing your work -Share what you did with Powertools for AWS Lambda (TypeScript) 💞💞. Blog post, workshops, presentation, sample apps and others. Check out what the community has already shared about Powertools for AWS Lambda (TypeScript) [here](./we_made_this). +Share what you did with Powertools for AWS Lambda (TypeScript) 💞💞. Blog post, workshops, presentation, sample apps and others. Check out what the community has already shared about Powertools for AWS Lambda (TypeScript) [here](we_made_this.md). ### Using Lambda Layer diff --git a/docs/snippets/batch/advancedTracingRecordHandler.ts b/docs/snippets/batch/advancedTracingRecordHandler.ts new file mode 100644 index 0000000000..4de43b3198 --- /dev/null +++ b/docs/snippets/batch/advancedTracingRecordHandler.ts @@ -0,0 +1,43 @@ +import { + BatchProcessor, + EventType, + processPartialResponse, +} from '@aws-lambda-powertools/batch'; +import { Tracer, captureLambdaHandler } from '@aws-lambda-powertools/tracer'; +import middy from '@middy/core'; +import type { + SQSEvent, + SQSRecord, + Context, + SQSBatchResponse, +} from 'aws-lambda'; + +const processor = new BatchProcessor(EventType.SQS); +const tracer = new Tracer({ serviceName: 'serverlessAirline' }); + +const recordHandler = (record: SQSRecord): void => { + const subsegment = tracer.getSegment()?.addNewSubsegment('### recordHandler'); // (1)! + subsegment?.addAnnotation('messageId', record.messageId); // (2)! + + const payload = record.body; + if (payload) { + try { + const item = JSON.parse(payload); + // do something with the item + subsegment?.addMetadata('item', item); + } catch (error) { + subsegment?.addError(error); + throw error; + } + } + + subsegment?.close(); // (3)! +}; + +export const handler = middy( + async (event: SQSEvent, context: Context): Promise<SQSBatchResponse> => { + return processPartialResponse(event, recordHandler, processor, { + context, + }); + } +).use(captureLambdaHandler(tracer)); diff --git a/docs/snippets/batch/customPartialProcessor.ts b/docs/snippets/batch/customPartialProcessor.ts index 9a45c92f01..6ebd113282 100644 --- a/docs/snippets/batch/customPartialProcessor.ts +++ b/docs/snippets/batch/customPartialProcessor.ts @@ -5,7 +5,8 @@ import { } from '@aws-sdk/client-dynamodb'; import { marshall } from '@aws-sdk/util-dynamodb'; import { - BasePartialProcessor, + EventType, + BasePartialBatchProcessor, processPartialResponse, } from '@aws-lambda-powertools/batch'; import type { @@ -17,12 +18,12 @@ import type { SQSEvent, Context, SQSBatchResponse } from 'aws-lambda'; const tableName = process.env.TABLE_NAME || 'table-not-found'; -class MyPartialProcessor extends BasePartialProcessor { +class MyPartialProcessor extends BasePartialBatchProcessor { #tableName: string; #client?: DynamoDBClient; public constructor(tableName: string) { - super(); + super(EventType.SQS); this.#tableName = tableName; } diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 1e7d781b9b..d04907563a 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,25 +1,45 @@ -@font-face { - font-size: 0.65rem; +.md-grid { + max-width: 90vw } -.md-grid { - max-width: 81vw; +.highlight .hll { + background-color: lavender; + + [data-md-color-scheme="slate"] { + background-color: rgb(69, 48, 164) + } +} + +.md-typeset table:not([class]) { + font-size: 0.75rem } .md-typeset a { - border-bottom: 0.1px dashed black; + border-bottom: 0.1px dashed black +} + +.md-typeset table:not([class]) { + font-size: 0.75rem +} + +.md-tabs__link { + font-size: 0.8rem +} + +.md-tabs__link--active { + border-bottom: 6px solid white } .md-nav__link--active { - font-weight: bold; + font-weight: bold } .md-typeset .admonition, .md-typeset details { - font-size: 0.70rem; + font-size: 0.70rem } [data-md-color-scheme="slate"] { - --md-typeset-a-color: rgb(28, 152, 152); + --md-typeset-a-color: rgb(28, 152, 152) } .copyMe { @@ -27,6 +47,7 @@ border-bottom: 0.1px dashed black; } -p code { - font-weight: bolder; +p > code, +li > code { + font-weight: bold } \ No newline at end of file diff --git a/docs/utilities/batch.md b/docs/utilities/batch.md index 6b02a2f538..ac426546e5 100644 --- a/docs/utilities/batch.md +++ b/docs/utilities/batch.md @@ -409,7 +409,7 @@ For these scenarios, you can subclass `BatchProcessor` and quickly override `suc ???+ example Let's suppose you'd like to add a metric named `BatchRecordFailures` for each batch record that failed processing -```typescript hl_lines="5-6 17 21 25 31 35 50-52" title="Extending failure handling mechanism in BatchProcessor" +```typescript hl_lines="17 21 25 31 35" title="Extending failure handling mechanism in BatchProcessor" --8<-- "docs/snippets/batch/extendingFailure.ts" ``` @@ -448,10 +448,22 @@ classDiagram You can then use this class as a context manager, or pass it to `processPartialResponse` to process the records in your Lambda handler function. -```typescript hl_lines="8 12-14 20 29 40 61 72 83 93-95" title="Creating a custom batch processor" +```typescript hl_lines="21 30 41 62 73 84" title="Creating a custom batch processor" --8<-- "docs/snippets/batch/customPartialProcessor.ts" ``` +## Tracing with AWS X-Ray + +You can use Tracer to create subsegments for each batch record processed. To do so, you can open a new subsegment for each record, and close it when you're done processing it. When adding annotations and metadata to the subsegment, you can do so directly without calling `tracer.setSegment(subsegment)`. This allows you to work with the subsegment directly and avoid having to either pass the parent subsegment around or have to restore the parent subsegment at the end of the record processing. + +```ts +--8<-- "docs/snippets/batch/advancedTracingRecordHandler.ts" +``` + +1. Retrieve the current segment, then create a subsegment for the record being processed +2. You can add annotations and metadata to the subsegment directly without calling `tracer.setSegment(subsegment)` +3. Close the subsegment when you're done processing the record + ## Testing your code As there is no external calls, you can unit test your code with `BatchProcessor` quite easily. diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index 8f98b07c08..c2b844376e 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -392,7 +392,7 @@ You can use the `awsSdkV3Client` parameter via any of the available [Provider Cl | [DynamoDBProvider](#dynamodbprovider) | `new DynamoDBClient();` | ???+ question "When is this useful?" - Injecting a custom AWS SDK v3 client allows you to [apply tracing](/core/tracer/#patching-aws-sdk-clients) or make unit/snapshot testing easier, including SDK customizations. + Injecting a custom AWS SDK v3 client allows you to [apply tracing](../core/tracer.md#patching-aws-sdk-clients) or make unit/snapshot testing easier, including SDK customizations. === "SSMProvider" ```typescript hl_lines="5 7" diff --git a/mkdocs.yml b/mkdocs.yml index f5f85643d4..0fdc7b8484 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,11 +10,10 @@ nav: - Roadmap: roadmap.md - API reference: api/" target="_blank - We Made This (Community): we_made_this.md - - Core utilities: + - Features: - core/tracer.md - core/logger.md - core/metrics.md - - Utilities: - utilities/parameters.md - utilities/idempotency.md - utilities/batch.md @@ -39,15 +38,12 @@ theme: features: - header.autohide - navigation.sections - - navigation.expand - navigation.top - navigation.instant - navigation.indexes - navigation.tracking - content.code.annotate - content.code.copy - - toc.follow - - toc.integrate - announce.dismiss icon: repo: fontawesome/brands/github @@ -65,6 +61,7 @@ markdown_extensions: - pymdownx.snippets: base_path: "." check_paths: true + restrict_base_path: false - meta - toc: permalink: true @@ -79,6 +76,8 @@ markdown_extensions: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format + - pymdownx.tasklist: + custom_checkbox: true copyright: Copyright © 2023 Amazon Web Services From 81f2d69f443e8c0c848cb005b9258a0c3f6b1f95 Mon Sep 17 00:00:00 2001 From: Alexander Schueren <amelnyk@amazon.com> Date: Thu, 14 Sep 2023 00:46:35 +0200 Subject: [PATCH 23/28] docs(idempotency): add batch integration to idempotency docs (#1676) * add batch integration to idempotency docs * revert unintended IDE formatting changes * chore: fixed imports / highlight --------- Co-authored-by: Andrea Amorosi <dreamorosi@gmail.com> --- docs/snippets/idempotency/workingWithBatch.ts | 46 +++++++++++++++ docs/utilities/idempotency.md | 56 +++++++++++++++++-- 2 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 docs/snippets/idempotency/workingWithBatch.ts diff --git a/docs/snippets/idempotency/workingWithBatch.ts b/docs/snippets/idempotency/workingWithBatch.ts new file mode 100644 index 0000000000..274ff6d674 --- /dev/null +++ b/docs/snippets/idempotency/workingWithBatch.ts @@ -0,0 +1,46 @@ +import { + BatchProcessor, + EventType, + processPartialResponse, +} from '@aws-lambda-powertools/batch'; +import type { + Context, + SQSBatchResponse, + SQSEvent, + SQSRecord, +} from 'aws-lambda'; +import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; +import { + IdempotencyConfig, + makeIdempotent, +} from '@aws-lambda-powertools/idempotency'; + +const processor = new BatchProcessor(EventType.SQS); + +const dynamoDBPersistence = new DynamoDBPersistenceLayer({ + tableName: 'idempotencyTable', +}); +const idempotencyConfig = new IdempotencyConfig({ + eventKeyJmesPath: 'messageId', +}); + +const processIdempotently = makeIdempotent( + async (_record: SQSRecord) => { + // process your event + }, + { + persistenceStore: dynamoDBPersistence, + config: idempotencyConfig, + } +); + +export const handler = async ( + event: SQSEvent, + context: Context +): Promise<SQSBatchResponse> => { + idempotencyConfig.registerLambdaContext(context); + + return processPartialResponse(event, processIdempotently, processor, { + context, + }); +}; diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 5b2cc4fb13..59de2a9850 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -79,10 +79,10 @@ As of now, Amazon DynamoDB is the only supported persistent storage layer, so yo If you're not [changing the default configuration for the DynamoDB persistence layer](#dynamodbpersistencelayer), this is the expected default configuration: -| Configuration | Default value | Notes | -| ------------------ |:--------------|-----------------------------------------------------------------------------------------| -| Partition key | `id` | The id of each idempotency record which a combination of `functionName#hashOfPayload`. | -| TTL attribute name | `expiration` | This can only be configured after your table is created if you're using AWS Console. | +| Configuration | Default value | Notes | +| ------------------ | :------------ | -------------------------------------------------------------------------------------- | +| Partition key | `id` | The id of each idempotency record which a combination of `functionName#hashOfPayload`. | +| TTL attribute name | `expiration` | This can only be configured after your table is created if you're using AWS Console. | ???+ tip "Tip: You can share a single state table for all functions" You can reuse the same DynamoDB table to store idempotency state. We add the Lambda function name in addition to the idempotency key as a hash key. @@ -767,6 +767,54 @@ This means that we will raise **`IdempotencyKeyError`** if the evaluation of **` } ``` +### Batch integration + +You can easily integrate with [Batch](batch.md) utility by using idempotency wrapper around your processing function. +This ensures that you process each record in an idempotent manner, and guard against a [Lambda timeout](#lambda-timeouts) idempotent situation. + +???+ "Choosing a unique batch record attribute" + In this example, we choose `messageId` as our idempotency key since we know it'll be unique. + Depending on your use case, it might be more accurate [to choose another field](#choosing-a-payload-subset-for-idempotency) your producer intentionally set to define uniqueness. + + + +=== "Integration with batch processor" + + ```typescript hl_lines="27 31-34 41" + --8<-- "docs/snippets/idempotency/workingWithBatch.ts" + ``` + +=== "Sample event" + + ```json hl_lines="4" + { + "Records": [ + { + "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", + "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + "body": "Test message.", + "attributes": { + "ApproximateReceiveCount": "1", + "SentTimestamp": "1545082649183", + "SenderId": "AIDAIENQZJOLO23YVJ4VO", + "ApproximateFirstReceiveTimestamp": "1545082649185" + }, + "messageAttributes": { + "testAttr": { + "stringValue": "100", + "binaryValue": "base64Str", + "dataType": "Number" + } + }, + "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", + "eventSource": "aws:sqs", + "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "awsRegion": "us-east-2" + } + ] + } + ``` + ### Customizing AWS SDK configuration The **`clientConfig`** and **`awsSdkV3Client`** parameters enable you to pass in custom configurations or your own [DynamoDBClient](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/dynamodb/){target="_blank"} when constructing the persistence store. From cabee4d33278907014e8a5bedbe28f721c2a157b Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Thu, 14 Sep 2023 11:36:08 +0200 Subject: [PATCH 24/28] improv(idempotency): expose record status & expiry config + make DynamoDB Client optional (#1679) * improv(idempotency): expose record status & expiry config + make DynamoDB deps optional * chore: set peerDependenciesMetadata to avoid autoinstall * fix ScanCommand import to ddb client instead of lib * fix: dependencies * fix: patch imports * chore: address code smells --------- Co-authored-by: Alexander Melnyk <amelnyk@amazon.com> --- docs/utilities/idempotency.md | 3 +- package-lock.json | 23457 ++++++++-------- .../tests/unit/userAgentMiddleware.test.ts | 3 +- packages/idempotency/README.md | 2 +- packages/idempotency/package.json | 20 +- .../idempotency/src/IdempotencyHandler.ts | 3 +- packages/idempotency/src/constants.ts | 15 +- packages/idempotency/src/index.ts | 1 + .../src/persistence/BasePersistenceLayer.ts | 12 +- .../persistence/DynamoDBPersistenceLayer.ts | 2 +- .../src/persistence/IdempotencyRecord.ts | 13 +- .../src/types/IdempotencyRecord.ts | 13 +- .../tests/unit/IdempotencyHandler.test.ts | 3 +- .../tests/unit/makeHandlerIdempotent.test.ts | 7 +- .../tests/unit/makeIdempotent.test.ts | 7 +- .../persistence/BasePersistenceLayer.test.ts | 16 +- .../DynamoDbPersistenceLayer.test.ts | 2 +- .../persistence/IdempotencyRecord.test.ts | 7 +- .../tests/unit/AppConfigProvider.test.ts | 2 +- .../parameters/tests/unit/SSMProvider.test.ts | 2 +- .../tests/unit/getAppConfig.test.ts | 2 +- 21 files changed, 11624 insertions(+), 11968 deletions(-) diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 59de2a9850..c06f28a149 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -53,9 +53,10 @@ classDiagram ## Getting started ### Installation + Install the library in your project ```shell -npm i @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb +npm i @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb ``` While we support Amazon DynamoDB as a persistance layer out of the box, you need to bring your own AWS SDK for JavaScript v3 DynamoDB client. diff --git a/package-lock.json b/package-lock.json index ce6b1655c9..1e9966a1b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,209 +70,6 @@ "hashi-vault-js": "^0.4.13" } }, - "docs/snippets/node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/@types/jest": { - "version": "28.1.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", - "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", - "dev": true, - "dependencies": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" - } - }, - "docs/snippets/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "docs/snippets/node_modules/aws-sdk-client-mock": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-2.2.0.tgz", - "integrity": "sha512-Kq2N+6gHRDedbrgTA0NMMfyN1XDWEA5Kbpm9/M/cenSxoNjfvQBOtBawI1lQe5h4UziLl///E7u17K9PBoHEKA==", - "dev": true, - "dependencies": { - "@types/sinon": "^10.0.10", - "sinon": "^14.0.2", - "tslib": "^2.1.0" - } - }, - "docs/snippets/node_modules/aws-sdk-client-mock-jest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-2.2.0.tgz", - "integrity": "sha512-lpPapmCjTe70qhXYFIjUL9cdA75YmtC0surig3QSr2Y5doaG1e4fuXlgkNeH6V873rlwu9TWCG2MFOr4rHuMfg==", - "dev": true, - "dependencies": { - "@types/jest": "^28.1.3", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "aws-sdk-client-mock": "2.2.0" - } - }, - "docs/snippets/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "docs/snippets/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "examples/cdk": { "name": "cdk-sample", "version": "1.12.1", @@ -312,15 +109,6 @@ "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", "dev": true }, - "examples/cdk/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "examples/sam": { "name": "sam-example", "version": "1.12.1", @@ -369,416 +157,78 @@ "source-map-support": "^0.5.21" } }, - "layers/node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], + "layers/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "layers/node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "layers/node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "layers/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "layers/node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, - "layers/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.200", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.200.tgz", - "integrity": "sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg==" + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.200", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.200.tgz", + "integrity": "sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg==" }, "node_modules/@aws-cdk/asset-kubectl-v20": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v5": { - "version": "2.0.165", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.165.tgz", - "integrity": "sha512-bsyLQD/vqXQcc9RDmlM1XqiFNO/yewgVFXmkMcQkndJbmE/jgYkzewwYGrBlfL725hGLQipXq19+jwWwdsXQqg==" + "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz", + "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==" }, "node_modules/@aws-cdk/cli-lib-alpha": { "version": "2.88.0-alpha.0", @@ -911,60 +361,48 @@ "resolved": "packages/tracer", "link": true }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.357.0.tgz", - "integrity": "sha512-nQYDJon87quPwt2JZJwUN2GFKJnvE5kWb6tZP4xb5biSGUKBqDQo06oYed7yokatCuCMouIXV462aN0fWODtOw==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.360.0.tgz", - "integrity": "sha512-ezGTbUwuBWphG1eCOrZ8XuBljoAt2aOxNQmZvND9E4xQQEJK+594Q6+QzNsugAqKM+DYdw6r28MSbTM2gSUCuw==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.410.0.tgz", + "integrity": "sha512-44Q+7do689TBuKLI6hgmbNvB10pORfiQ9fmv1bwAC2u9ofp7+6jGWJoB9NBpiMik07dKizEnVjG/h8s4Pj5EVQ==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-stream": "3.360.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.9", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { @@ -972,47 +410,47 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.360.0.tgz", - "integrity": "sha512-4Vvlq2ahaUWYUs8P0sp+6bqCjiydwszLqwRzqA9dPwRbPtITEwP+tdREAiqVXSRSRv2y5VcmZUMHjixpIpflGg==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.410.0.tgz", + "integrity": "sha512-KDV95lC7GPsBgSDDmcGwzWV86cpz+64KVqpq+SVb6alxyKtbCrKxJmcg15eqvd8/ZchCqIKNr4/xZNjYuCd4YA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.357.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.6", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -1021,47 +459,47 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.360.0.tgz", - "integrity": "sha512-iaLlb4mmZHQjPz7ZyCBUFBvC8XUezzStzjn9ketemJLoWwnMgzmAse3I5ULkya4jyiaocwVvczZVfyOlHgDayQ==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.410.0.tgz", + "integrity": "sha512-Uq5+ePGx+SnUMuCKMqhZ8q6hSHiWoBNpJXYr9fpL9zcZQ63chCBIOqOYw71OqKH8D89aRa8Y6G6dlt7/tW8CXQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-endpoint-discovery": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.357.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-endpoint-discovery": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1069,59 +507,52 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.360.0.tgz", - "integrity": "sha512-FndD1IL7birajJz21m6pjCb4CSlF/mKJTEIaSCKPgN9WqrNL/sUZV5LzLOVVlGho0RdwLqdzAFhUBiQI/PSz4A==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.410.0.tgz", + "integrity": "sha512-zbcdA++4zE1ODRCmKkbZT4N0f4I5pVXLEP5uBtE0Bxgs1UyiHlqHFfjQprdW9CeaMmtTBHEBB6dDcKlGGOSU/w==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/eventstream-serde-browser": "3.357.0", - "@aws-sdk/eventstream-serde-config-resolver": "3.357.0", - "@aws-sdk/eventstream-serde-node": "3.357.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-stream": "3.360.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.357.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/eventstream-serde-browser": "^2.0.6", + "@smithy/eventstream-serde-config-resolver": "^2.0.6", + "@smithy/eventstream-serde-node": "^2.0.6", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.9", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -1129,46 +560,46 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.360.0.tgz", - "integrity": "sha512-HfgOGsneJwQHkWSfzC2reuCo9lBZ4hOF1oYCwVSbzOD/cvOm6pxND7gqacJOTrOc+wUUW0Sj+HdaLj8KbmljVg==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.410.0.tgz", + "integrity": "sha512-+h+33cU8JpOFp1tfY/oNh6nMzCq0/hUBw/HW1l6nrKQa66+xiGcqaZ6mq/2l/1Fzime0DQMidPy/75ApQRBg2w==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1176,55 +607,47 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.360.0.tgz", - "integrity": "sha512-VpykmgTlXeoCpOZFuvRuanJTJHa0OGrN84t2/07xAY1oxii0O+/ZH7/lcENpJAm9CJH1a/64smE/vVW4d0TFiw==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.410.0.tgz", + "integrity": "sha512-SbnQxFHU/fm/kMN3/9hie1TKZoBUhwSRV8fMmIsTu0nztr5Kv5Xdi/SbBVA2uBc0VyBbED2nY2PMMh4IbHY37w==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.357.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1232,93 +655,43 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@aws-sdk/client-sso": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.360.0.tgz", - "integrity": "sha512-0f6eG+6XFbDxrma5xxNGg/FJxh/OHC6h8AkfNms9Lv1gBoQSagpcTor+ax0z9F6lypOjaelX6k4DpeKAp4PZeA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.360.0.tgz", - "integrity": "sha512-czIpPt75fS3gH3vgFz76+WTaKcvPxC/DnPuqVyHdihMmP0UuwGPU9jn+Xx9RdUw7Yay3+rJRe3AYgBn4Xb220g==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.410.0.tgz", + "integrity": "sha512-MC9GrgwtlOuSL2WS3DRM3dQ/5y+49KSMMJRH6JiEcU5vE0dX/OtEcX+VfEwpi73x5pSfIjm7xnzjzOFx+sQBIg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { @@ -1326,45 +699,45 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.360.0.tgz", - "integrity": "sha512-ORRwSdwlSYGHfhQCXKtr1eJeTjI14l5IZRJbRDgXs46y4/GQj/rt/2Q6WGjVMfM1ZRRiEII2/vK7mU7IJcWkFw==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.410.0.tgz", + "integrity": "sha512-e6VMrBJtnTxxUXwDmkADGIvyppmDMFf4+cGGA68tVCUm1cFNlCI6M/67bVSIPN/WVKAAfhEL5O2vVXCM7aatYg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-sdk-sts": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-sdk-sts": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -1373,60 +746,46 @@ } }, "node_modules/@aws-sdk/client-xray": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.360.0.tgz", - "integrity": "sha512-PGUb0oWkPEt1KzSEaHrbo8apStt0+3oXStJmAFGKfzLNvtYoEmz1iNzLjmwMgmRnoBYWCJELyM/luZzJr2LJfg==", + "version": "3.412.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.412.0.tgz", + "integrity": "sha512-bOHrCNLP2GzeB79xyOUoDjC/2+7iDVD7dgGuu0T5mDlDLEtcDvUDRZwDK8lqUItfdGJLcO32auC3dCNUEhQJ3g==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.360.0", - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-node": "3.360.0", - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/hash-node": "3.357.0", - "@aws-sdk/invalid-dependency": "3.357.0", - "@aws-sdk/middleware-content-length": "3.357.0", - "@aws-sdk/middleware-endpoint": "3.357.0", - "@aws-sdk/middleware-host-header": "3.357.0", - "@aws-sdk/middleware-logger": "3.357.0", - "@aws-sdk/middleware-recursion-detection": "3.357.0", - "@aws-sdk/middleware-retry": "3.357.0", - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/middleware-user-agent": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/smithy-client": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.360.0", - "@aws-sdk/util-defaults-mode-node": "3.360.0", - "@aws-sdk/util-endpoints": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "@aws-sdk/util-user-agent-browser": "3.357.0", - "@aws-sdk/util-user-agent-node": "3.357.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.357.0.tgz", - "integrity": "sha512-cukfg0nX7Tzx/xFyH5F4Eyb8DA1ITCGtSQv4vnEjgUop+bkzckuGLKEeBcBhyZY+aw+2C9CVwIHwIMhRm0ul5w==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.357.0", + "@aws-sdk/client-sts": "3.410.0", + "@aws-sdk/credential-provider-node": "3.410.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/protocol-http": "^3.0.2", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { @@ -1434,27 +793,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.357.0.tgz", - "integrity": "sha512-UOecwfqvXgJVqhfWSZ2S44v2Nq2oceW0PQVQp0JAa9opc2rxSVIfyOhPr0yMoPmpyNcP22rgeg6ce70KULYwiA==", - "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.357.0.tgz", - "integrity": "sha512-upw/bfsl7/WydT6gM0lBuR4Ipp4fzYm/E3ObFr0Mg5OkgVPt5ZJE+eeFTvwCpDdBSTKs4JfrK6/iEK8A23Q1jQ==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.410.0.tgz", + "integrity": "sha512-c7TB9LbN0PkFOsXI0lcRJnqPNOmc4VBvrHf8jP/BkTDg4YUoKQKOFd4d0SqzODmlZiAyoMQVZTR4ISZo95Zj4Q==", "dependencies": { - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", + "@aws-sdk/types": "3.410.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1462,18 +807,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.360.0.tgz", - "integrity": "sha512-pWuLTq+yjSFssPGhDJ8oxvZsu7/F1KissGRt65G4qrfxHhoiMRcLF1GtFJueDQpitZ1i3mZXHVn/OSv4LPQ1Lw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.357.0", - "@aws-sdk/credential-provider-imds": "3.357.0", - "@aws-sdk/credential-provider-process": "3.357.0", - "@aws-sdk/credential-provider-sso": "3.360.0", - "@aws-sdk/credential-provider-web-identity": "3.357.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/types": "3.357.0", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.410.0.tgz", + "integrity": "sha512-D8rcr5bRCFD0f42MPQ7K6TWZq5d3pfqrKINL1/bpfkK5BJbvq1BGYmR88UC6CLpTRtZ1LHY2HgYG0fp/2zjjww==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.410.0", + "@aws-sdk/credential-provider-process": "3.410.0", + "@aws-sdk/credential-provider-sso": "3.410.0", + "@aws-sdk/credential-provider-web-identity": "3.410.0", + "@aws-sdk/types": "3.410.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.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1481,19 +827,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.360.0.tgz", - "integrity": "sha512-j4Lu5vXkdzz/L6fGKKxnL0vcwAGHlwFHjTg9nRagMn1lvaVjtktXeM30duHTBQq9i+ejdFxpVNWYrmHGaWPNdg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.357.0", - "@aws-sdk/credential-provider-imds": "3.357.0", - "@aws-sdk/credential-provider-ini": "3.360.0", - "@aws-sdk/credential-provider-process": "3.357.0", - "@aws-sdk/credential-provider-sso": "3.360.0", - "@aws-sdk/credential-provider-web-identity": "3.357.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/types": "3.357.0", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.410.0.tgz", + "integrity": "sha512-0wmVm33T/j1FS7MZ/j+WsPlgSc0YnCXnpbWSov1Mn6R86SHI2b2JhdIPRRE4XbGfyW2QGNUl2CwoZVaqhXeF5g==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.410.0", + "@aws-sdk/credential-provider-ini": "3.410.0", + "@aws-sdk/credential-provider-process": "3.410.0", + "@aws-sdk/credential-provider-sso": "3.410.0", + "@aws-sdk/credential-provider-web-identity": "3.410.0", + "@aws-sdk/types": "3.410.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.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1501,13 +848,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.357.0.tgz", - "integrity": "sha512-qFWWilFPsc2hR7O0KIhwcE78w+pVIK+uQR6MQMfdRyxUndgiuCorJwVjedc3yZtmnoELHF34j+m8whTBXv9E7Q==", - "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/types": "3.357.0", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.410.0.tgz", + "integrity": "sha512-BMju1hlDCDNkkSZpKF5SQ8G0WCLRj6/Jvw9QmudLHJuVwYJXEW1r2AsVMg98OZ3hB9G+MAvHruHZIbMiNmUMXQ==", + "dependencies": { + "@aws-sdk/types": "3.410.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1515,15 +863,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.360.0.tgz", - "integrity": "sha512-kW0FR8AbMQrJxADxIqYSjHVN2RXwHmA5DzogYm1AjOkYRMN9JHDVOMQP2K2M6FCynZqTYsKW5lzjPOjS0fu8Dw==", - "dependencies": { - "@aws-sdk/client-sso": "3.360.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/token-providers": "3.360.0", - "@aws-sdk/types": "3.357.0", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.410.0.tgz", + "integrity": "sha512-zEaoY/sY+KYTlQUkp9dvveAHf175b8RIt0DsQkDrRPtrg/RBHR00r5rFvz9+nrwsR8546RaBU7h/zzTaQGhmcA==", + "dependencies": { + "@aws-sdk/client-sso": "3.410.0", + "@aws-sdk/token-providers": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1531,12 +880,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.357.0.tgz", - "integrity": "sha512-0KRRAFrXy5HJe2vqnCWCoCS+fQw7IoIj3KQsuURJMW4F+ifisxCgEsh3brJ2LQlN4ElWTRJhlrDHNZ/pd61D4w==", + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.410.0.tgz", + "integrity": "sha512-cE0l8LmEHdWbDkdPNgrfdYSgp4/cIVXrjUKI1QCATA729CrHZ/OQjB/maOBOrMHO9YTiggko887NkslVvwVB7w==", "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", + "@aws-sdk/types": "3.410.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { @@ -1555,1485 +905,1065 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-codec": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.357.0.tgz", - "integrity": "sha512-bqenTHG6GH6aCk/Il+ooWXVVAZuc8lOgVEy9bE2hI49oVqT8zSuXxQB+w1WWyZoAOPcelsjayB1wfPub8VDBxQ==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-browser": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.357.0.tgz", - "integrity": "sha512-hBabtmwuspVHGSKnUccDiSIbg+IVoBThx6wYt6i4edbWAITHF3ADVKXy7icV400CAyG0XTZgxjE6FKpiDxj9rQ==", - "dev": true, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "tslib": "^2.3.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-serde-config-resolver": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.357.0.tgz", - "integrity": "sha512-E6rwk+1KFXhKmJ+v7JW5Uyyda1yN5XRVupCnCrtFsHFmhVGQxFacoUZIee3bfuCpC58dLSyESggxGpUd3XOSsw==", - "dev": true, + "node_modules/@aws-sdk/lib-dynamodb": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.410.0.tgz", + "integrity": "sha512-YdGd8/DeN9zHXnvBh6zp+iZnFJtQ1JSTAye7OPPcno+xqW8KYoT+cn/vHzljtMoNEBhUE4udmaeqwYPOYSQCGA==", "dependencies": { - "@aws-sdk/types": "3.357.0", + "@aws-sdk/util-dynamodb": "3.410.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-node": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.357.0.tgz", - "integrity": "sha512-boXDy+JWcPfHc9OIKV6I4Bh2XrLcg+eac+/LldNZFcDIB33/gHIM2CJw8u565Iebdz1NKEkP/QPPZbk2y+abPA==", - "dev": true, - "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.0.0" } }, - "node_modules/@aws-sdk/eventstream-serde-universal": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.357.0.tgz", - "integrity": "sha512-9/Wcdxx38XQAturqOAGYNCaLOzFVnW+xwxd4af9eNOfZfZ5PP5PRKBIpvKDsN26e3l4f3GodHx7MS1WB7BBc2w==", - "dev": true, + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.410.0.tgz", + "integrity": "sha512-XHX4IqsyF3yVmh7mgeq9HMg0bpUOMhO5659JF56MdyxZ8JPVZVsgWfJYmQ/hCMG850kvYXS2/8kxCjERrONQFA==", "dependencies": { - "@aws-sdk/eventstream-codec": "3.357.0", - "@aws-sdk/types": "3.357.0", + "@aws-sdk/endpoint-cache": "3.310.0", + "@aws-sdk/types": "3.410.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.357.0.tgz", - "integrity": "sha512-5sPloTO8y8fAnS/6/Sfp/aVoL9zuhzkLdWBORNzMazdynVNEzWKWCPZ27RQpgkaCDHiXjqUY4kfuFXAGkvFfDQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/querystring-builder": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.357.0.tgz", - "integrity": "sha512-fq3LS9AxHKb7dTZkm6iM1TrGk6XOTZz96iEZPME1+vjiSEXGWuebHt87q92n+KozVGRypn9MId3lHOPBBjygNQ==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.410.0.tgz", + "integrity": "sha512-ED/OVcyITln5rrxnajZP+V0PN1nug+gSDHJDqdDo/oLy7eiDr/ZWn3nlWW7WcMplQ1/Jnb+hK0UetBp/25XooA==", "dependencies": { - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.410.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/hash-node/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.410.0.tgz", + "integrity": "sha512-YtmKYCVtBfScq3/UFJk+aSZOktKJBNZL9DaSc2aPcy/goCVsYDOkGwtHk0jIkC1JRSNCkVTqL7ya60sSr8zaQQ==", "dependencies": { + "@aws-sdk/types": "3.410.0", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/hash-node/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.410.0.tgz", + "integrity": "sha512-KWaes5FLzRqj28vaIEE4Bimpga2E596WdPF2HaH6zsVMJddoRDsc3ZX9ZhLOGrXzIO1RqBd0QxbLrM0S/B2aOQ==", "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", + "@aws-sdk/types": "3.410.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.357.0.tgz", - "integrity": "sha512-HnCYZczf0VdyxMVMMxmA3QJAyyPSFbcMtZzgKbxVTWTG7GKpQe0psWZu/7O2Nk31mKg6vEUdiP1FylqLBsgMOA==", + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.410.0.tgz", + "integrity": "sha512-YfBpctDocRR4CcROoDueJA7D+aMLBV8nTFfmVNdLLLgyuLZ/AUR11VQSu1lf9gQZKl8IpKE/BLf2fRE/qV1ZuA==", "dependencies": { - "@aws-sdk/types": "3.357.0", + "@aws-sdk/middleware-signing": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.360.0.tgz", - "integrity": "sha512-OBbagM2zx+T2csfFU9ZaK7qMR9LDFVqUwIIsIfu6GsR0gSqzGmozOycW8S1HPPvxOvHUh8ObJT4F2/KSc7pjpg==", - "dependencies": { - "@aws-sdk/util-dynamodb": "3.360.0", + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.410.0.tgz", + "integrity": "sha512-KBAZ/eoAJUSJv5us2HsKwK2OszG2s9FEyKpEhgnHLcbbKzW873zHBH5GcOGEQu4AWArTy2ndzJu3FF+9/J9hJQ==", + "dependencies": { + "@aws-sdk/types": "3.410.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.0", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.0.0", - "@aws-sdk/smithy-client": "^3.0.0", - "@aws-sdk/types": "^3.0.0" } }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.357.0.tgz", - "integrity": "sha512-zQOFEyzOXAgN4M54tYNWGxKxnyzY0WwYDTFzh9riJRmxN1hTEKHUKmze4nILIf5rkQmOG4kTf1qmfazjkvZAhw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/types": "3.357.0", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.410.0.tgz", + "integrity": "sha512-ZayDtLfvCZUohSxQc/49BfoU/y6bDHLfLdyyUJbJ54Sv8zQcrmdyKvCBFUZwE6tHQgAmv9/ZT18xECMl+xiONA==", + "dependencies": { + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.357.0.tgz", - "integrity": "sha512-ScJi0SL8X/Lyi0Fp5blg0QN/Z6PoRwV/ZJXd8dQkXSznkbSvJHfqPP0xk/w3GcQ1TKsu5YEPfeYy8ejcq+7Pgg==", + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.374.0.tgz", + "integrity": "sha512-7vFs0+zrP7Ni/t/e5kU/qZyLi7kRR375QWwvoR2ie3lD7cPAa+84IZqzKfcAkL2305Byb4RQrhogrsUh7ts9TA==", + "deprecated": "This package has moved to @smithy/service-error-classification", "dependencies": { - "@aws-sdk/middleware-serde": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/url-parser": "3.357.0", - "@aws-sdk/util-middleware": "3.357.0", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^1.0.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.357.0.tgz", - "integrity": "sha512-oWv3Js/iEMQb0Ob3bHQs7P2Z2Fwg1fNiKYEX4ScsavX6wPD2Y8/LKgrovgt0PreW+UHuuILSKccLBT3/fWiPBw==", - "dependencies": { - "@aws-sdk/endpoint-cache": "3.310.0", - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, + "node_modules/@aws-sdk/service-error-classification/node_modules/@smithy/service-error-classification": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz", + "integrity": "sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==", "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.357.0.tgz", - "integrity": "sha512-HuGLcP7JP1qJ5wGT9GSlEknDaTSnOzHY4T6IPFuvFjAy3PvY5siQNm6+VRqdVS+n6/kzpL3JP5sAVM3aoxHT6Q==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.410.0.tgz", + "integrity": "sha512-d5Nc0xydkH/X0LA1HDyhGY5sEv4LuADFk+QpDtT8ogLilcre+b1jpdY8Sih/gd1KoGS1H+d1tz2hSGwUHAbUbw==", "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/types": "3.357.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.410.0", + "@aws-sdk/middleware-logger": "3.410.0", + "@aws-sdk/middleware-recursion-detection": "3.410.0", + "@aws-sdk/middleware-user-agent": "3.410.0", + "@aws-sdk/types": "3.410.0", + "@aws-sdk/util-endpoints": "3.410.0", + "@aws-sdk/util-user-agent-browser": "3.410.0", + "@aws-sdk/util-user-agent-node": "3.410.0", + "@smithy/config-resolver": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.2", + "@smithy/hash-node": "^2.0.6", + "@smithy/invalid-dependency": "^2.0.6", + "@smithy/middleware-content-length": "^2.0.8", + "@smithy/middleware-endpoint": "^2.0.6", + "@smithy/middleware-retry": "^2.0.9", + "@smithy/middleware-serde": "^2.0.6", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/node-http-handler": "^2.1.2", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.2", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.3", + "@smithy/types": "^2.3.0", + "@smithy/url-parser": "^2.0.6", + "@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.7", + "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.357.0.tgz", - "integrity": "sha512-dncT3tr+lZ9+duZo52rASgO6AKVwRcsc2/T93gmaYVrJqI6WWAwQ7yML5s72l9ZjQ5LZ+4jjrgtlufavAS0eCg==", + "node_modules/@aws-sdk/types": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.410.0.tgz", + "integrity": "sha512-D7iaUCszv/v04NDaZUmCmekamy6VD/lKozm/3gS9+dkfU6cC2CsNoUfPV8BlV6dPdw0oWgF91am3I1stdvfVrQ==", "dependencies": { - "@aws-sdk/types": "3.357.0", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.357.0.tgz", - "integrity": "sha512-AXC54IeDS3jC1dbbkYHML4STvBPcKZ4IJTWdjEK1RCOgqXd0Ze1cE1e21wyj1tM6prF03zLyvpBd+3TS++nqfA==", + "node_modules/@aws-sdk/util-base64-node": { + "version": "3.209.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", + "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.357.0.tgz", - "integrity": "sha512-ZCbXCYv3nglQqwREYxxpclrnR9MYPAnHlLcC8e9PbApqxGnaZdhoywxoqbgqT3hf/RM7kput4vEHDl1fyymcRQ==", + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/service-error-classification": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-middleware": "3.357.0", - "@aws-sdk/util-retry": "3.357.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@aws-sdk/is-array-buffer": "3.201.0", + "tslib": "^2.3.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.357.0.tgz", - "integrity": "sha512-Ng2VjLrPiL02QOcs1qs9jG2boO4Gn+v3VIbOJLG4zXcfbSq55iIWtlmr2ljfw9vP5aLhWtcODfmKHS5Bp+019Q==", + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.410.0.tgz", + "integrity": "sha512-BHsiggDcotKWUgbv/ZIYGNRzGzkDnek7IRjyZJc/Bl7uA6EnOKAWDS86z+CjnEI9H0vbDnvihLiANdjEcNOa0w==", "dependencies": { - "@aws-sdk/middleware-signing": "3.357.0", - "@aws-sdk/types": "3.357.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.357.0.tgz", - "integrity": "sha512-bGI4kYuuEsFjlANbyJLyy4AovETnyf/SukgLOG7Qjbua+ZGuzvRhMsk21mBKKGrnsTO4PmtieJo6xClThGAN8g==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.410.0.tgz", + "integrity": "sha512-iNiqJyC7N3+8zFwnXUqcWSxrZecVZLToo1iTQQdeYL2af1IcOtRgb7n8jpAI/hmXhBSx2+3RI+Y7pxyFo1vu+w==", "dependencies": { - "@aws-sdk/types": "3.357.0", + "@aws-sdk/types": "3.410.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.357.0.tgz", - "integrity": "sha512-yB9ewEqI6Fw1OrmKFrUypbCqN5ijk06UGPochybamMuPxxkwMT3bnrm7eezsCA+TZbJyKhpffpyobwuv+xGNrA==", - "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/signature-v4": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-middleware": "3.357.0", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.357.0.tgz", - "integrity": "sha512-nNV+jfwGwmbOGZujAY/U8AW3EbVlxa9DJDLz3TPp/39o6Vu5KEzHJyDDNreo2k9V/TMvV+nOzHafufgPdagv7w==", + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.410.0.tgz", + "integrity": "sha512-i1G/XGpXGMRT2zEiAhi1xucJsfCWk8nNYjk/LbC0sA+7B9Huri96YAzVib12wkHPsJQvZxZC6CpQDIHWm4lXMA==", "dependencies": { + "@aws-sdk/types": "3.410.0", + "@smithy/types": "^2.3.0", + "bowser": "^2.11.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.357.0.tgz", - "integrity": "sha512-M/CsAXjGblZS4rEbMb0Dn9IXbfq4EjVaTHBfvuILU/dKRppWvjnm2lRtqCZ+LIT3ATbAjA3/dY7dWsjxQWwijA==", + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.410.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.410.0.tgz", + "integrity": "sha512-bK70t1jHRl8HrJXd4hEIwc5PBZ7U0w+81AKFnanIVKZwZedd6nLibUXDTK14z/Jp2GFcBqd4zkt2YLGkRt/U4A==", "dependencies": { - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-endpoints": "3.357.0", + "@aws-sdk/types": "3.410.0", + "@smithy/node-config-provider": "^2.0.9", + "@smithy/types": "^2.3.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.357.0.tgz", - "integrity": "sha512-kwBIzKCaW3UWqLdELhy7TcN8itNMOjbzga530nalFILMvn2IxrkdKQhNgxGBXy6QK6kCOtH6OmcrG3/oZkLwig==", + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "tslib": "^2.3.1" } }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.360.0.tgz", - "integrity": "sha512-oMsXdMmNwHpUbebETO44bq0N4SocEMGfPjYNUTRs8md7ita5fuFd2qFuvf+ZRt6iVcGWluIqmF8DidD+b7d+TA==", + "node_modules/@aws-sdk/util-utf8-node": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.259.0.tgz", + "integrity": "sha512-2sbGdmrkODKeJb6kbEOKpX8cYtS9IO16XRAtINcN7sInWfspAITDofrabf0i0tFQF0hsJtbC5dyJRn87w0gYIQ==", + "dev": true, "dependencies": { - "@aws-sdk/abort-controller": "3.357.0", - "@aws-sdk/protocol-http": "3.357.0", - "@aws-sdk/querystring-builder": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.357.0.tgz", - "integrity": "sha512-im4W0u8WaYxG7J7ko4Xl3OEzK3Mrm1Rz6/txTGe6hTIHlyUISu1ekOQJXK6XYPqNMn8v1G3BiQREoRXUEJFbHg==", + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.357.0.tgz", - "integrity": "sha512-w1JHiI50VEea7duDeAspUiKJmmdIQblvRyjVMOqWA6FIQAyDVuEiPX7/MdQr0ScxhtRQxHbP0I4MFyl7ctRQvA==", + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.357.0.tgz", - "integrity": "sha512-aQcicqB6Y2cNaXPPwunz612a01SMiQQPsdz632F/3Lzn0ua82BJKobHOtaiTUlmVJ5Q4/EAeNfwZgL7tTUNtDQ==", + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "tslib": "^2.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.357.0.tgz", - "integrity": "sha512-Svvq+atRNP9s2VxiklcUNgCzmt3T5kfs7X2C+yjmxHvOQTPjLNaNGbfC/vhjOK7aoXw0h+lBac48r5ymx1PbQA==", + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "color-name": "1.1.3" } }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.357.0.tgz", - "integrity": "sha512-VuXeL4g5vKO9HjgCZlxmH8Uv1FcqUSjmbPpQkbNtYIDck6u0qzM0rG+n0/1EjyQbPSr3MhW/pkWs5nx2Nljlyg==", + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=0.8.0" } }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.357.0.tgz", - "integrity": "sha512-ceyqM4XxQe0Plb/oQAD2t1UOV2Iy4PFe1oAGM8dfJzYrRKu7zvMwru7/WaB3NYq+/mIY6RU+jjhRmjQ3GySVqA==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.357.0.tgz", - "integrity": "sha512-itt4/Jh9FqnzK30qIjXFBvM4J7zN4S/AAqsRMnaX7U4f/MV+1YxQHmzimpdMnsCXXs2jqFqKVRu6DewxJ3nbxg==", + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "@aws-sdk/eventstream-codec": "3.357.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.357.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/signature-v4/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.360.0.tgz", - "integrity": "sha512-R7wbT2SkgWNEAxMekOTNcPcvBszabW2+qHjrcelbbVJNjx/2yK+MbpZI4WRSncByQMeeoW+aSUP+JgsbpiOWfw==", - "dependencies": { - "@aws-sdk/middleware-stack": "3.357.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-stream": "3.360.0", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" + "node_modules/@babel/core": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.360.0.tgz", - "integrity": "sha512-gtnCmn2NL7uSwadqQPeU74Wo7Wf1NMJtui+KSWPYpc3joRZqIYj0kL5w0IT2S9tPQwCFerWVfhkvRkSGJ4nZ/g==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.360.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/shared-ini-file-loader": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.357.0.tgz", - "integrity": "sha512-fAaU6cFsaAba01lCRsRJiYR/LfXvX2wudyEyutBVglE4dWSoSeu3QJNxImIzTBULfbiFhz59++NQ1JUVx88IVg==", - "dependencies": { - "@aws-sdk/querystring-parser": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-base64-node": { - "version": "3.209.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", - "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", - "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-base64/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-base64/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" + "@babel/types": "^7.22.15" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "dependencies": { - "tslib": "^2.5.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.360.0.tgz", - "integrity": "sha512-/GR8VlK9xo1Q5WbVYuNaZ+XfoCFdWNb4z4mpoEgvEgBH4R0GjqiAqLftUA8Ykq1tJuDAKPYVzUNzK8DC0pt7/g==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, "dependencies": { - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">= 10.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.360.0.tgz", - "integrity": "sha512-gR3Ctqpyl7SgStDJ1Jlq6qQDuw/rS9AgbAXx+s3wsmm3fm8lHKkXkDPYVvNDqd6dVXRO6q8MRx00lwkGI4qrpQ==", - "dependencies": { - "@aws-sdk/config-resolver": "3.357.0", - "@aws-sdk/credential-provider-imds": "3.357.0", - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/property-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.360.0.tgz", - "integrity": "sha512-/XParSr/dZHo/t/GFLwYN0i/WjU9PZFmnC6xsDMzQGCItSVrEk9IU13xxh490Bpo1im15Pl0MU6JzvkPMhl+rQ==", - "dependencies": { - "tslib": "^2.5.0" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.357.0.tgz", - "integrity": "sha512-XHKyS5JClT9su9hDif715jpZiWHQF9gKZXER8tW0gOizU3R9cyWc9EsJ2BRhFNhi7nt/JF/CLUEc5qDx3ETbUw==", - "dependencies": { - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.357.0.tgz", - "integrity": "sha512-pV1krjZs7BdahZBfsCJMatE8kcor7GFsBOWrQgQDm9T0We5b5xPpOO2vxAD0RytBpY8Ky2ELs/+qXMv7l5fWIA==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.357.0.tgz", - "integrity": "sha512-SUqYJE9msbuOVq+vnUy+t0LH7XuYNFz66dSF8q6tedsbJK4j8tgya0I1Ct3m06ynGrXDJMaj39I7AXCyW9bjtw==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "@aws-sdk/service-error-classification": "3.357.0", - "tslib": "^2.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/util-stream": { - "version": "3.360.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream/-/util-stream-3.360.0.tgz", - "integrity": "sha512-t3naBfNesXwLis29pzSfLx2ifCn2180GiPjRaIsQP14IiVCBOeT1xaU6Dpyk7WeR/jW4cu7wGl+kbeyfNF6QmQ==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "@aws-sdk/fetch-http-handler": "3.357.0", - "@aws-sdk/node-http-handler": "3.360.0", - "@aws-sdk/types": "3.357.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=0.8.0" } }, - "node_modules/@aws-sdk/util-stream/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/util-stream/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", - "dependencies": { - "tslib": "^2.5.0" + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.357.0.tgz", - "integrity": "sha512-JHaWlNIUkPNvXkqeDOrqFzAlAgdwZK5mZw7FQnCRvf8tdSogpGZSkuyb9Z6rLD9gC40Srbc2nepO1cFpeMsDkA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.357.0.tgz", - "integrity": "sha512-RdpQoaJWQvcS99TVgSbT451iGrlH4qpWUWFA9U1IRhxOSsmC1hz8ME7xc8nci9SREx/ZlfT3ai6LpoAzAtIEMA==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { - "@aws-sdk/node-config-provider": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "license": "Apache-2.0", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "dependencies": { - "tslib": "^2.3.1" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.259.0.tgz", - "integrity": "sha512-2sbGdmrkODKeJb6kbEOKpX8cYtS9IO16XRAtINcN7sInWfspAITDofrabf0i0tFQF0hsJtbC5dyJRn87w0gYIQ==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "license": "Apache-2.0", + "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==", + "dev": true, "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.357.0.tgz", - "integrity": "sha512-jQQGA5G8bm0JP5C4U85VzMpkFHdeeT7fOSUncXLG9Sh8Ambzi4XTud8m5/dA7aNJkvPwZeIF9QdgWCOzpkp1xA==", - "dependencies": { - "@aws-sdk/abort-controller": "3.357.0", - "@aws-sdk/types": "3.357.0", - "tslib": "^2.5.0" + "node": ">=6.9.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/core": { - "version": "7.20.5", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/generator": { - "version": "7.20.5", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.20.5", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "node_modules/@babel/traverse": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", + "node_modules/@babel/types": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", - "dev": true, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "dev": true, - "license": "MIT", + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helpers": { - "version": "7.20.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -3046,9 +1976,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], @@ -3061,9 +1991,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -3076,9 +2006,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ "arm" ], @@ -3091,9 +2021,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ "arm64" ], @@ -3106,9 +2036,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ "ia32" ], @@ -3121,9 +2051,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -3136,9 +2066,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ "mips64el" ], @@ -3151,9 +2081,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ "ppc64" ], @@ -3166,9 +2096,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ "riscv64" ], @@ -3181,9 +2111,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ "s390x" ], @@ -3196,9 +2126,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ "x64" ], @@ -3211,9 +2141,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ "x64" ], @@ -3226,9 +2156,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -3241,9 +2171,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", "cpu": [ "x64" ], @@ -3256,9 +2186,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ "arm64" ], @@ -3271,9 +2201,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ "ia32" ], @@ -3286,9 +2216,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ "x64" ], @@ -3358,8 +2288,9 @@ }, "node_modules/@gar/promisify": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", @@ -3377,8 +2308,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -3506,8 +2438,9 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -3521,16 +2454,18 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3541,8 +2476,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3553,8 +2489,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3564,8 +2501,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3578,8 +2516,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3587,10 +2526,20 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3659,32 +2608,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -3742,24 +2665,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@jest/fake-timers/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/@jest/globals": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", @@ -3818,22 +2723,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3846,12 +2735,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, "node_modules/@jest/source-map": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", @@ -3940,37 +2823,42 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.19", @@ -4020,6 +2908,12 @@ "node": "^14.17.0 || >=16.0.0" } }, + "node_modules/@lerna/create/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, "node_modules/@lerna/legacy-package-management": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/legacy-package-management/-/legacy-package-management-6.6.2.tgz", @@ -4090,16 +2984,7 @@ "yargs": "16.2.0" }, "engines": { - "node": "^14.17.0 || >=16.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" + "node": "^14.17.0 || >=16.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/chalk": { @@ -4118,16 +3003,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@lerna/legacy-package-management/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "node_modules/@lerna/legacy-package-management/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/execa": { "version": "5.0.0", @@ -4176,19 +3056,11 @@ "node": ">= 6" } }, - "node_modules/@lerna/legacy-package-management/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } + "node_modules/@lerna/legacy-package-management/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/inquirer": { "version": "8.2.4", @@ -4213,648 +3085,360 @@ "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/make-fetch-happen/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/minipass-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", - "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@middy/core": { - "version": "3.6.2", - "license": "MIT", - "engines": { - "node": ">=14" + "node": ">=12.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@lerna/legacy-package-management/node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@lerna/legacy-package-management/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@lerna/legacy-package-management/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/@npmcli/arborist": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-6.2.3.tgz", - "integrity": "sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA==", + "node_modules/@lerna/legacy-package-management/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^3.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^6.1.6", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" + "semver": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/arborist/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "node_modules/@lerna/legacy-package-management/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz", - "integrity": "sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw==", + "node_modules/@lerna/legacy-package-management/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@npmcli/arborist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@lerna/legacy-package-management/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@npmcli/arborist/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", + "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", "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/@npmcli/arborist/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, + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/gauge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", - "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", + "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/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/@npmcli/arborist/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "node_modules/@lerna/legacy-package-management/node_modules/pretty-format": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", - "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "node_modules/@lerna/legacy-package-management/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@npmcli/arborist/node_modules/minipass": { + "node_modules/@lerna/legacy-package-management/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "node_modules/@lerna/legacy-package-management/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@npmcli/arborist/node_modules/npmlog": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", - "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", + "node_modules/@lerna/legacy-package-management/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" + "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/readable-stream": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.0.tgz", - "integrity": "sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==", + "node_modules/@lerna/legacy-package-management/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==", "dev": true, "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@npmcli/arborist/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/@lerna/legacy-package-management/node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/@npmcli/arborist/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/@lerna/legacy-package-management/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/legacy-package-management/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "builtins": "^5.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@npmcli/arborist/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "node_modules/@middy/core": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@middy/core/-/core-3.6.2.tgz", + "integrity": "sha512-/vyvG34RIt7CTmuB/jksGkk9vs6RCoOlRFPfdQq11dHkiKlT2mm8j/jZx7gSpEhXXh9LeaEMuKPnsgWBIlGS1g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "node_modules/@npmcli/arborist": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-6.2.3.tgz", + "integrity": "sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.0", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^6.1.6", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^1.0.0" }, "bin": { - "node-which": "bin/which.js" + "arborist": "bin/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "node_modules/@npmcli/arborist/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", - "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", + "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", "dev": true, "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "node_modules/@npmcli/arborist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -4863,215 +3447,147 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz", - "integrity": "sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/@npmcli/arborist/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": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@npmcli/metavuln-calculator": { + "node_modules/@npmcli/arborist/node_modules/gauge": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", - "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", "dev": true, - "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/package-json": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.1.1.tgz", - "integrity": "sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA==", + "node_modules/@npmcli/arborist/node_modules/npmlog": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", "dev": true, "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.1", - "proc-log": "^3.0.0" + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz", - "integrity": "sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==", + "node_modules/@npmcli/arborist/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/@npmcli/arborist/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "node_modules/@npmcli/arborist/node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "node_modules/@npmcli/arborist/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "which": "^3.0.0" + "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { + "node_modules/@npmcli/arborist/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", @@ -5086,4828 +3602,5329 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz", - "integrity": "sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==", + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.10" + "semver": "^7.3.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.7.tgz", - "integrity": "sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw==", + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { - "infer-owner": "^1.0.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/cli": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.4.tgz", - "integrity": "sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw==", - "dev": true, - "dependencies": { - "nx": "15.9.4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/devkit": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.4.tgz", - "integrity": "sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ==", + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", "dev": true, "dependencies": { - "ejs": "^3.1.7", - "ignore": "^5.0.4", - "semver": "7.3.4", - "tmp": "~0.2.1", - "tslib": "^2.3.0" + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" }, - "peerDependencies": { - "nx": ">= 14.1 <= 16" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/devkit/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0" } }, - "node_modules/@nrwl/devkit/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "semver": "bin/semver.js" + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/nx-darwin-arm64": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.4.tgz", - "integrity": "sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nrwl/nx-darwin-x64": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.4.tgz", - "integrity": "sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nrwl/nx-linux-arm-gnueabihf": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.4.tgz", - "integrity": "sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA==", - "cpu": [ - "arm" - ], + "node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", + "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/nx-linux-arm64-gnu": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.4.tgz", - "integrity": "sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@nrwl/nx-linux-arm64-musl": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.4.tgz", - "integrity": "sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nrwl/nx-linux-x64-gnu": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.4.tgz", - "integrity": "sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/nx-linux-x64-musl": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.4.tgz", - "integrity": "sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/nx-win32-arm64-msvc": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.4.tgz", - "integrity": "sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA==", - "cpu": [ - "arm64" - ], + "node_modules/@npmcli/package-json": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.1.1.tgz", + "integrity": "sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.1", + "proc-log": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/nx-win32-x64-msvc": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.4.tgz", - "integrity": "sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw==", - "cpu": [ - "x64" - ], + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@nrwl/tao": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.4.tgz", - "integrity": "sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg==", + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { - "nx": "15.9.4" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "tao": "index.js" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "dev": true, + "glob": "dist/cjs/src/bin.js" + }, "engines": { - "node": ">= 14" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 14" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "which": "^3.0.0" }, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", + "node_modules/@npmcli/query": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.1.tgz", + "integrity": "sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA==", "dev": true, "dependencies": { - "@octokit/types": "^6.41.0" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.7.tgz", + "integrity": "sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "node_modules/@npmcli/run-script/node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz", - "integrity": "sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==", + "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "dependencies": { - "@octokit/types": "^8.1.1", - "deprecation": "^2.3.1" + "infer-owner": "^1.0.4" }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", + "node_modules/@npmcli/run-script/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", - "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", + "node_modules/@npmcli/run-script/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^14.0.0" + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "node_modules/@nrwl/cli": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.7.tgz", + "integrity": "sha512-1jtHBDuJzA57My5nLzYiM372mJW0NY6rFKxlWt5a0RLsAZdPTHsd8lE3Gs9XinGC1jhXbruWmhhnKyYtZvX/zA==", "dev": true, "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "nx": "15.9.7" } }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "node_modules/@nrwl/devkit": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.7.tgz", + "integrity": "sha512-Sb7Am2TMT8AVq8e+vxOlk3AtOA2M0qCmhBzoM1OJbdHaPKc0g0UgSnWRml1kPGg5qfPk72tWclLoZJ5/ut0vTg==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.5.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" }, + "peerDependencies": { + "nx": ">= 14.1 <= 16" + } + }, + "node_modules/@nrwl/nx-darwin-arm64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.7.tgz", + "integrity": "sha512-aBUgnhlkrgC0vu0fK6eb9Vob7eFnkuknrK+YzTjmLrrZwj7FGNAeyGXSlyo1dVokIzjVKjJg2saZZ0WQbfuCJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 14" + "node": ">= 10" } }, - "node_modules/@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", + "node_modules/@nrwl/nx-darwin-x64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.7.tgz", + "integrity": "sha512-L+elVa34jhGf1cmn38Z0sotQatmLovxoASCIw5r1CBZZeJ5Tg7Y9nOwjRiDixZxNN56hPKXm6xl9EKlVHVeKlg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 14" + "node": ">= 10" } }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "node_modules/@nrwl/nx-linux-arm-gnueabihf": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.7.tgz", + "integrity": "sha512-pqmfqqEUGFu6PmmHKyXyUw1Al0Ki8PSaR0+ndgCAb1qrekVDGDfznJfaqxN0JSLeolPD6+PFtLyXNr9ZyPFlFg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "node_modules/@nrwl/nx-linux-arm64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.7.tgz", + "integrity": "sha512-NYOa/eRrqmM+In5g3M0rrPVIS9Z+q6fvwXJYf/KrjOHqqan/KL+2TOfroA30UhcBrwghZvib7O++7gZ2hzwOnA==", + "cpu": [ + "arm64" + ], "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">= 10" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@nrwl/nx-linux-arm64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.7.tgz", + "integrity": "sha512-zyStqjEcmbvLbejdTOrLUSEdhnxNtdQXlmOuymznCzYUEGRv+4f7OAepD3yRoR0a/57SSORZmmGQB7XHZoYZJA==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">= 10" } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "node_modules/@nrwl/nx-linux-x64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.7.tgz", + "integrity": "sha512-saNK5i2A8pKO3Il+Ejk/KStTApUpWgCxjeUz9G+T8A+QHeDloZYH2c7pU/P3jA9QoNeKwjVO9wYQllPL9loeVg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "node_modules/@nrwl/nx-linux-x64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.7.tgz", + "integrity": "sha512-extIUThYN94m4Vj4iZggt6hhMZWQSukBCo8pp91JHnDcryBg7SnYmnikwtY1ZAFyyRiNFBLCKNIDFGkKkSrZ9Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@sigstore/tuf/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@nrwl/nx-win32-arm64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.7.tgz", + "integrity": "sha512-GSQ54hJ5AAnKZb4KP4cmBnJ1oC4ILxnrG1mekxeM65c1RtWg9NpBwZ8E0gU3xNrTv8ZNsBeKi/9UhXBxhsIh8A==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">= 10" } }, - "node_modules/@sigstore/tuf/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/@nrwl/nx-win32-x64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.7.tgz", + "integrity": "sha512-x6URof79RPd8AlapVbPefUD3ynJZpmah3tYaYZ9xZRMXojVtEHV8Qh5vysKXQ1rNYJiiB8Ah6evSKWLbAH60tw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/@sigstore/tuf/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/@nrwl/tao": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.7.tgz", + "integrity": "sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "nx": "15.9.7" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "tao": "index.js" } }, - "node_modules/@sigstore/tuf/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/@sigstore/tuf/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">= 14" } }, - "node_modules/@sigstore/tuf/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, - "node_modules/@sigstore/tuf/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "dev": true, - "license": "MIT" + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "dev": true }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", + "node_modules/@octokit/plugin-paginate-rest": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", + "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@octokit/types": "^6.41.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" } }, - "node_modules/@sinonjs/samsam": { - "version": "7.0.1", + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "@octokit/openapi-types": "^12.11.0" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz", + "integrity": "sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==", "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@smithy/protocol-http": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", - "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", "dependencies": { - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" + "@octokit/types": "^8.1.1", + "deprecation": "^2.3.1" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", - "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", - "dependencies": { - "tslib": "^2.5.0" + "node": ">= 14" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", + "dev": true }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", + "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "@octokit/openapi-types": "^14.0.0" } }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/@octokit/rest": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", + "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^3.0.0", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^6.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 14" } }, - "node_modules/@types/aws-lambda": { - "version": "8.10.109", + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, - "license": "MIT" + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, + "hasInstallScript": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/cls-hooked": { - "version": "4.3.3", - "license": "MIT", + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, "dependencies": { - "@types/node": "*" + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/node": "*" + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, - "node_modules/@types/istanbul-lib-report": { + "node_modules/@sinonjs/commons": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "type-detect": "4.0.8" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@types/jest": { - "version": "29.5.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", - "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "node_modules/@sinonjs/samsam": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", + "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", "dev": true, "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, - "node_modules/@types/jmespath": { - "version": "0.15.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.191", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash.merge": { - "version": "4.6.7", + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/lodash": "*" + "type-detect": "4.0.8" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", - "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "node_modules/@smithy/abort-controller": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.7.tgz", + "integrity": "sha512-rITz65zk8QA3GQ1OeoJ3/Q4+8j/HqubWU8TBqk57BMYTOX+P+LNMoVHPqzLHhE6qKot5muhThNCYvOKNt7ojJA==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@types/promise-retry": { - "version": "1.1.3", - "dev": true, - "license": "MIT", + "node_modules/@smithy/config-resolver": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.8.tgz", + "integrity": "sha512-e7mwQteHjo9S1GK+TfzP3o7ujE2ZK30d6wkv5brKtabrZF7MBflj9CwUP2XYuOYebdWirHOtv8ZfkMrpcbJfYw==", "dependencies": { - "@types/retry": "*" + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@types/retry": { - "version": "0.12.2", - "dev": true, - "license": "MIT" + "node_modules/@smithy/credential-provider-imds": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.10.tgz", + "integrity": "sha512-may2/gYlDip2rjlU1Z5fcCEWY0Fu3tSu/HykgZrLfb2/171P6OYuz7dGNKBOCS1W57vP4W5wmUhm0WGehrixig==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/property-provider": "^2.0.8", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", - "dev": true + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.7.tgz", + "integrity": "sha512-sW3AhXZhmmhh0f11EOotmNNa0rjrKwnMYNKfbp3B/qigdw6foKcmFGX+HF3XGN7w7fFeEFuXr97Ok24gRj92Xg==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } }, - "node_modules/@types/sinon": { - "version": "10.0.13", + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.7.tgz", + "integrity": "sha512-5ZKW1tUe+LD1F6dSHs+nC0vRNmMMWDJWCsw44FkhivhOB4MliGfC1ZNeO45AHD749jfJT/zcGGr2ruQT9VbThA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/sinonjs__fake-timers": "*" + "@smithy/eventstream-serde-universal": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.2", + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.7.tgz", + "integrity": "sha512-0n4LPHZt6/RAHVkwzms6U2xibmizkSYLS9HzlT86WF29X56v7OTCkMF+pUFNYZamN7iRq1Z8PM48mQsBoJPaSA==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.7.tgz", + "integrity": "sha512-ZkBvDIBlJ9eJx/+CC2AY8LxAndGO+Z2FOPPprmNNDbK9/pZzVLHWGwlpsPYnA9Pc0gfOu7isIJM1yPXiK70O3A==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", - "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", - "dev": true + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@types/yargs": { - "version": "17.0.17", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.7.tgz", + "integrity": "sha512-CNYEzEPDIGbfvYYN7iajPY6sVZdtGvJzSbvqgH+EvismooFj8ahydGp8IKYPnd5ge5uwTATppJ2t8149tYkS7g==", "dev": true, - "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@smithy/eventstream-codec": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" + "node_modules/@smithy/fetch-http-handler": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.3.tgz", + "integrity": "sha512-kUg+Ey4mJeR/3+Ponuhb1rsmsfZRwjCLvC+WcPgeI+ittretEzuWAPN+9anD0HJEoApVjHpndzxPtlncbCUJDQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.3", + "@smithy/querystring-builder": "^2.0.7", + "@smithy/types": "^2.3.1", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, + "node_modules/@smithy/hash-node": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.7.tgz", + "integrity": "sha512-aB5lvIDP1v+ZUUS8ek3XW5xnZ6jUQ86JXqG7a5jMP6AbjAc3439mIbs6+f1EQ5MtYmrQCEtRRyvv5QofvotH0w==", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@smithy/types": "^2.3.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.7.tgz", + "integrity": "sha512-qVOZnHFPzQo4BS47/PANHX32Y69c0tJxKBkqTL795D/DKInqBwmBO/m1gS7v0ZQqmtCuoy2l87RflQfRY2xEIw==", + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.9.tgz", + "integrity": "sha512-2XVFsGqswxrIBi0w4Njwzb1zsbte26U513K+WPFm9z6SB/3WR5/VBVjTaTcamrXznTAqBjTwTL0Ysisv1dW0Rw==", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.7.tgz", + "integrity": "sha512-4/L0wV7PzHEprJB0gazSTIwlW/2cCfwC9EHavUMhoCyl1tLer6CJwDbAMit1IMvwbHkwuKopueb8dFPHfpS2Pw==", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@smithy/middleware-serde": "^2.0.7", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@smithy/middleware-retry": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.10.tgz", + "integrity": "sha512-VwAQOR5Rh/y9BzUgb5DzUk7qYBiMZu3pEQa5EwwAf/F7lpMuNildGrAxtDmsXk90490FJwa6LyFknXP3kO5BnA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/protocol-http": "^3.0.3", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.7.tgz", + "integrity": "sha512-tOldis4PUNafdGErLZ+33p9Pf3MmTlLa176X321Z6ZaCf1XNEow9m3T5vXrcHErVAvjPG0mp3l54J94HnPc+rQ==", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=14.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, + "node_modules/@smithy/node-config-provider": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.10.tgz", + "integrity": "sha512-e5MiLH5Eu+BbYsmhZIkvUKCzite6JCBPL75PNjlRK2TWvSpfp19hNf2SiJIQbPalcFj5zlyBvtcEkF1sfYIdhg==", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@smithy/property-provider": "^2.0.8", + "@smithy/shared-ini-file-loader": "^2.0.9", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=14.0.0" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "node_modules/@smithy/node-http-handler": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.3.tgz", + "integrity": "sha512-TGkgpx68SqvbspVHaG3iwqP2mKYOT4whiq7Kv2X9v+InngL4MkpH3LQ0Dk7kbloahZr+hAOyb6s8D7T8TXRrzA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.7", + "@smithy/protocol-http": "^3.0.3", + "@smithy/querystring-builder": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, + "node_modules/@smithy/property-provider": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.8.tgz", + "integrity": "sha512-oaaP/i7bGG8XbxG9Kx4PZh83iJ2jo/vt8RmJdi9hmc8APBaW1HGDperVXDCyPQdVYXmiqrtxc/rPImyBma1G3A==", "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=14.15.0" + "node": ">=14.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/@smithy/protocol-http": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", + "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", "dependencies": { - "sprintf-js": "~1.0.2" + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.7.tgz", + "integrity": "sha512-RPHnqt4iH1Kwp1Zbf4gJI88hZiynEZjE5hEWJNBmKqCe1Q6v7HBLtaovTaiuYaMEmPyb2KxOi3lISAdT6uuPqw==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@smithy/types": "^2.3.1", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.7.tgz", + "integrity": "sha512-Cwi/Hgs73nbLKfgH7dXAxzvDxyTrK+BLrlAd0KXU7xcBR94V132nvxoq39BMWckYAPmnMwxCwq8uusNH4Dnagw==", "dependencies": { - "argparse": "^2.0.1" + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/abbrev": { + "node_modules/@smithy/service-error-classification": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.9.tgz", + "integrity": "sha512-vBLgJI+Qpz1TZ0W2kUBOmG2Q+geVEhiXE99UX02+UFag2WzOQ6frvV6rpadwJu0uwF02GG620NbiKGboqZ19YA==", "dependencies": { - "event-target-shim": "^5.0.0" + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.5" + "node": ">=14.0.0" } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/@smithy/signature-v4": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.7.tgz", + "integrity": "sha512-qNCJpyhRWxT5RWmeSo/Zv+miQ60Y/D2JmPdFw7v2WpPVxVK7JDpqUbvq0QYE+dBGPX/uagAkE3NvJUcn0fTE3A==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.7", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=14.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@smithy/smithy-client": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.4.tgz", + "integrity": "sha512-KRQvYYjEGqvmwnKSAZ8EL0hZvPxGQMYbAKS/AMGq2fuRmwAlinSVJ/fkIs65bZp2oYjcskd1ZgKcP+2UDjNPTQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-stream": "^2.0.10", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.1.tgz", + "integrity": "sha512-cS48e4Yawb6pGakj7DBJUIPFIkqnUWyXTe2ndPRNagD73b6kEJqTc8bhTyfUve0A+sijK256UKE0J1juAfCeDA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.7.tgz", + "integrity": "sha512-SwMl1Lq3yFR2hzhwWYKg04uJHpfcXWMBPycm4Z8GkLI6Dw7rJNDApEbMtujlYw6pVP2WKbrpaGHjQ9MdP92kMQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", + "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==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=14.0.0" } }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", "dependencies": { - "debug": "4" + "tslib": "^2.5.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=14.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "tslib": "^2.5.0" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.8.tgz", + "integrity": "sha512-8znx01mkmfKxhiSB2bOF5eMutuCLMd8m2Kh0ulRp8vgzhwRLDJoU6aHSEUoNptbuTAtiFf4u0gpkYC2XfbWwuA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@smithy/property-provider": "^2.0.8", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.10.tgz", + "integrity": "sha512-QUcUckL4ZqDFVwLnh7zStRUnXtTC6hcJZ4FmMqnxlPcL33Rko0sMQwrMDnMdzF3rS3wvqugAaq3zzop1HCluvw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.8", + "@smithy/credential-provider-imds": "^2.0.10", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/property-provider": "^2.0.8", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=6" + "node": ">= 10.0.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "dependencies": { - "type-fest": "^0.21.3" + "tslib": "^2.5.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=8" + "node": ">= 14.0.0" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-stream": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.10.tgz", + "integrity": "sha512-2EgK5cBiv9OaDmhSXmsZY8ZByBl1dg/Tbc51iBJ5GkLGVYhaA6/1l6vHHV41m4Im3D0XfZV1tmeLlQgmRnYsTQ==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/types": "^2.3.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "tslib": "^2.5.0" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/aproba": { + "node_modules/@smithy/util-utf8": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, + "node_modules/@smithy/util-waiter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.7.tgz", + "integrity": "sha512-lIY4GOmrSwMiGHhm++1ea0MdKx5y4V39ue4eNg4yxmip1hiuCLxkfXGZVLh0JPxBxAzbQw+E/5TPfY4w/RBkNw==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "@smithy/abort-controller": "^2.0.7", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/arg": { - "version": "4.1.3", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 10" + } }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, - "node_modules/array-buffer-byte-length": { + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/array-ify": { - "version": "1.0.0", + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT" + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/array-includes": { - "version": "3.1.6", + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.121", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.121.tgz", + "integrity": "sha512-Y/jsUwO18HuC0a39BuMQkSOd/kMGATh/h5LNksw8FlTafbQ3Ge3578ZoT8w8gSOsWl2qH1p/SS/R61vc0X5jIQ==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/types": "^7.20.7" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "dev": true, - "license": "MIT", + "node_modules/@types/cls-hooked": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.6.tgz", + "integrity": "sha512-Ys46tagI3aFwFizHYwG2v0oS+mMfp1nubY2ETU/RY/D0jLOXpqqVEItjhOmKMI8SklF3MI4Y7oSp9UFkBk4CXQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/astral-regex": { - "version": "2.0.0", + "node_modules/@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" + "node_modules/@types/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@types/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha512-uaht4XcYSq5ZrPriQW8C+g5DhptewRd1E84ph7L167sCyzLObz+U3JTpmYq/CNkvjNsz2mtyQoHPNEYQYTzWmg==", + "dev": true }, - "node_modules/async-hook-jl": { - "version": "1.7.6", - "license": "MIT", + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "dev": true + }, + "node_modules/@types/lodash.merge": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.7.tgz", + "integrity": "sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==", + "dev": true, "dependencies": { - "stack-chain": "^1.3.7" - }, - "engines": { - "node": "^4.7 || >=6.9 || >=7.3" + "@types/lodash": "*" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/promise-retry": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.3.tgz", + "integrity": "sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "@types/retry": "*" } }, - "node_modules/atomic-batcher": { - "version": "1.0.2", - "license": "MIT" + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", + "node_modules/@types/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", + "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/aws-cdk": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.88.0.tgz", - "integrity": "sha512-7Tj0uusA2nsEOsqkd4kB5vmzciz7l/eGBN5a+Ce4/CCcoe4ZCvT85L+T6tK0aohUTLZTAlTPBceH34RN5iMYpA==", - "bin": { - "cdk": "bin/cdk" - }, - "engines": { - "node": ">= 14.15.0" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true }, - "node_modules/aws-cdk-lib": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.88.0.tgz", - "integrity": "sha512-bmhokh30HVeqlotWaoEmK7mKB9SJbJwpbsiVgmYe3JcMu8DposHQqaIPI7LnC+dg015tZaxUsExxOYBEw+vntQ==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml" - ], + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.3.tgz", + "integrity": "sha512-taHQQH/3ZyI3zP8M/puluDEIEvtQHVYcC6y3N8ijFtAd28+Ey/G4sg1u2gB01S8MwybLOKAp9/yCMu/uR5l3Ug==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.200", - "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.165", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.1.1", - "ignore": "^5.2.4", - "jsonschema": "^1.4.1", - "minimatch": "^3.1.2", - "punycode": "^2.3.0", - "semver": "^7.5.4", - "table": "^6.8.1", - "yaml": "1.10.2" + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">= 14.15.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "constructs": "^10.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.12.0", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, "engines": { - "node": ">= 0.8.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=7.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.1.1", - "inBundle": true, - "license": "MIT", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=14.14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.2.4", - "inBundle": true, - "license": "MIT", + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, "engines": { - "node": ">= 4" + "node": ">=14.15.0" } }, - "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, "dependencies": { - "universalify": "^2.0.0" + "argparse": "^2.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, "engines": { - "node": "*" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=6.5" } }, - "node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "*" + "node": ">=0.4.0" } }, - "node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">= 8.0.0" } }, - "node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.1", - "inBundle": true, - "license": "BSD-3-Clause", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=10.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/uri-js": { - "version": "4.4.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-cdk-lib/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "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" - ], + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aws-sdk": { - "version": "2.1405.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1405.0.tgz", - "integrity": "sha512-NVVZpRmr+KoBq5xFbB+ivCMDPGx8g1XOZVcswXotZZZIQVdDdHixrkZDqOrZ/p1hJ0eylGc7VQ8mkR7DVryXlQ==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 8" } }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, - "node_modules/aws-xray-sdk-core": { - "version": "3.4.1", - "license": "Apache-2.0", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "dependencies": { - "@aws-sdk/service-error-classification": "^3.4.1", - "@aws-sdk/types": "^3.4.1", - "@types/cls-hooked": "^4.3.3", - "atomic-batcher": "^1.0.2", - "cls-hooked": "^4.2.2", - "semver": "^5.3.0" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 14.x" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/aws-xray-sdk-core/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/balanced-match": { + "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, - "license": "MIT" + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/base64-js": { - "version": "1.5.1", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "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" - } - ], - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, - "node_modules/bin-links": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz", - "integrity": "sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA==", - "dev": true, - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "dependencies": { + "stack-chain": "^1.3.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^4.7 || >=6.9 || >=7.3" } }, - "node_modules/bin-links/node_modules/cmd-shim": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", - "dev": true, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 4.0.0" } }, - "node_modules/bin-links/node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "node_modules/atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-links/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, + "node_modules/aws-cdk": { + "version": "2.96.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.96.0.tgz", + "integrity": "sha512-Zk/6q6taSqeKtWFmDqpdh9LQuB9ZKTLj7eiFCvUtGRP9Zo9Td13tj6Gxg6i/YDeeJT1oSIN3gD+0jQ4Yj5p/4A==", + "bin": { + "cdk": "bin/cdk" + }, "engines": { - "node": ">=14" + "node": ">= 14.15.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, + "node_modules/aws-cdk-lib": { + "version": "2.96.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.96.0.tgz", + "integrity": "sha512-344rjcoVt9IXkQYJF6X+rpfiAaIX2PIWZtGJN4vE63VeCYEiEnzEQL4kNfET7xK5/+1kuRULQudjSwKoLQHAvQ==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml" + ], "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "@aws-cdk/asset-awscli-v1": "^2.2.200", + "@aws-cdk/asset-kubectl-v20": "^2.1.2", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.1.1", + "ignore": "^5.2.4", + "jsonschema": "^1.4.1", + "minimatch": "^3.1.2", + "punycode": "^2.3.0", + "semver": "^7.5.4", + "table": "^6.8.1", + "yaml": "1.10.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14.15.0" + }, + "peerDependencies": { + "constructs": "^10.0.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.12.0", + "inBundle": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "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/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/brace-expansion": { + "node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, + "node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/browserslist": { - "version": "4.21.4", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=7.0.0" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.1.1", + "inBundle": true, "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">=14.14" } }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } + "node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" }, - "node_modules/buffer": { - "version": "4.9.2", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.2.4", + "inBundle": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "engines": { + "node": ">= 4" } }, - "node_modules/buffer-from": { - "version": "1.1.2", + "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "inBundle": true, "license": "MIT" }, - "node_modules/builtins": { - "version": "5.0.1", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, "license": "MIT", "dependencies": { - "semver": "^7.0.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/byte-size": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.0.tgz", - "integrity": "sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=10" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz", - "integrity": "sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/cacache/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cacache/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.5.4", + "inBundle": true, + "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "inBundle": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/cdk-sample": { - "resolved": "examples/cdk", - "link": true - }, - "node_modules/centra": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/centra/-/centra-2.6.0.tgz", - "integrity": "sha512-dgh+YleemrT8u85QL11Z6tYhegAs3MMxsaWAq/oXeAmYJ7VxL3SI9TZtnfaEvNDMAPolj25FXIb3S+HCI4wQaQ==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.1", + "inBundle": true, + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.0.0" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" + "node_modules/aws-cdk-lib/node_modules/uri-js": { + "version": "4.4.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, + "node_modules/aws-cdk-lib/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/ci-info": { - "version": "3.7.0", + "node_modules/aws-sdk": { + "version": "2.1457.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1457.0.tgz", + "integrity": "sha512-Gj6R/YISU9L8XzFWJgOW6dKDAZciiCvHs0CGb9GCHsxHO2vgQf2rVrvxV8kg/5ISypOCRtqT9J1xY7HK35fYOA==", "dev": true, - "license": "MIT", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/clean-stack": { + "node_modules/aws-sdk-client-mock": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-2.2.0.tgz", + "integrity": "sha512-Kq2N+6gHRDedbrgTA0NMMfyN1XDWEA5Kbpm9/M/cenSxoNjfvQBOtBawI1lQe5h4UziLl///E7u17K9PBoHEKA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/sinon": "^10.0.10", + "sinon": "^14.0.2", + "tslib": "^2.1.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/aws-sdk-client-mock-jest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-2.2.0.tgz", + "integrity": "sha512-lpPapmCjTe70qhXYFIjUL9cdA75YmtC0surig3QSr2Y5doaG1e4fuXlgkNeH6V873rlwu9TWCG2MFOr4rHuMfg==", "dev": true, - "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "@types/jest": "^28.1.3", + "tslib": "^2.1.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "aws-sdk-client-mock": "2.2.0" } }, - "node_modules/cli-spinners": { - "version": "2.6.1", + "node_modules/aws-sdk-client-mock-jest/node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "jest-get-type": "^28.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", + "node_modules/aws-sdk-client-mock-jest/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, - "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "@sinclair/typebox": "^0.24.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/aws-sdk-client-mock-jest/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" + "node_modules/aws-sdk-client-mock-jest/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/aws-sdk-client-mock-jest/node_modules/@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "5.0.0", + "node_modules/aws-sdk-client-mock-jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", + "node_modules/aws-sdk-client-mock-jest/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", + "node_modules/aws-sdk-client-mock-jest/node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cliui": { - "version": "8.0.1", + "node_modules/aws-sdk-client-mock-jest/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", + "node_modules/aws-sdk-client-mock-jest/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/aws-sdk-client-mock-jest/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/aws-sdk-client-mock-jest/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cls-hooked": { - "version": "4.2.2", - "license": "BSD-2-Clause", + "node_modules/aws-sdk-client-mock-jest/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, "dependencies": { - "async-hook-jl": "^1.7.6", - "emitter-listener": "^1.0.1", - "semver": "^5.4.1" + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" - } - }, - "node_modules/cls-hooked/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "node_modules/aws-sdk-client-mock-jest/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "mkdirp-infer-owner": "^2.0.0" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "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, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", + "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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.4.x" } }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "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/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "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", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "dev": true, "bin": { - "color-support": "bin.js" + "uuid": "dist/bin/uuid" } }, - "node_modules/colorette": { - "version": "2.0.19", - "dev": true, - "license": "MIT" - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, + "node_modules/aws-xray-sdk-core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.5.1.tgz", + "integrity": "sha512-Q3S+K/UkDw/M9NnRZbyXNXsjB3amsv+6XhPdomtfzAdyNkf6q+GOQVuWpaLGHunBz91VzpGBzP9Qg0/elm6Cwg==", "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "@aws-sdk/service-error-classification": "^3.4.1", + "@aws-sdk/types": "^3.4.1", + "@types/cls-hooked": "^4.3.3", + "atomic-batcher": "^1.0.2", + "cls-hooked": "^4.2.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=8.0.0" + "node": ">= 14.x" } }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/axios": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dev": true, - "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/commander": { - "version": "9.5.0", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "MIT", "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/constructs": { - "version": "10.1.196", - "license": "Apache-2.0", + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, "engines": { - "node": ">= 14.17.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.12", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true + }, + "node_modules/bin-links": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.2.tgz", + "integrity": "sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/bin-links/node_modules/cmd-shim": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", + "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/bin-links/node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "node_modules/bin-links/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/conventional-changelog-writer": { + "node_modules/bin-links/node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" }, "bin": { - "create-jest": "bin/create-jest.js" + "browserslist": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "fast-json-stable-stringify": "2.x" }, "engines": { - "node": ">= 8" + "node": ">= 6" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "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.1.13" } }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "semver": "^7.0.0" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "node_modules/byte-size": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.0.tgz", + "integrity": "sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ==", "dev": true, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.1.2" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/cacache/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/dedent": { - "version": "0.7.0", + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "MIT" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/cacache/node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/defaults": { - "version": "1.0.4", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/caniuse-lite": { + "version": "1.0.30001534", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", + "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/cdk-sample": { + "resolved": "examples/cdk", + "link": true + }, + "node_modules/centra": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/centra/-/centra-2.6.0.tgz", + "integrity": "sha512-dgh+YleemrT8u85QL11Z6tYhegAs3MMxsaWAq/oXeAmYJ7VxL3SI9TZtnfaEvNDMAPolj25FXIb3S+HCI4wQaQ==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/depd": { + "node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-newline": { + "node_modules/cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, - "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/diff": { - "version": "5.1.0", + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=0.3.1" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/docs": { - "resolved": "docs/snippets", - "link": true - }, - "node_modules/doctrine": { + "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "MIT" + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "dev": true, - "license": "ISC" - }, - "node_modules/emitter-listener": { - "version": "1.1.2", - "license": "BSD-2-Clause", + "node_modules/cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", "dependencies": { - "shimmer": "^1.2.0" + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" + }, + "engines": { + "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" } }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "node_modules/cls-hooked/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, - "license": "MIT" + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/encoding": { - "version": "0.1.13", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "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==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "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==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "bin": { + "color-support": "bin.js" } }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, - "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8.0.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=8.6" + "node": ">= 0.8" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "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": ">=6" + "node": ">=16" } }, - "node_modules/envinfo": { - "version": "7.8.1", + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "license": "MIT" + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, - "license": "MIT", + "engines": [ + "node >= 6.0" + ], "dependencies": { - "is-arrayish": "^0.2.1" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/constructs": { + "version": "10.2.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.2.70.tgz", + "integrity": "sha512-z6zr1E8K/9tzJbCQzY0UGX0/oVKPFKu9C/mzEnghCG6TAJINnvlq0CMKm63XqqeMleadZYm5T3sZGJKcxJS/Pg==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 16.14.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/esbuild": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.2", - "@esbuild/android-arm64": "0.19.2", - "@esbuild/android-x64": "0.19.2", - "@esbuild/darwin-arm64": "0.19.2", - "@esbuild/darwin-x64": "0.19.2", - "@esbuild/freebsd-arm64": "0.19.2", - "@esbuild/freebsd-x64": "0.19.2", - "@esbuild/linux-arm": "0.19.2", - "@esbuild/linux-arm64": "0.19.2", - "@esbuild/linux-ia32": "0.19.2", - "@esbuild/linux-loong64": "0.19.2", - "@esbuild/linux-mips64el": "0.19.2", - "@esbuild/linux-ppc64": "0.19.2", - "@esbuild/linux-riscv64": "0.19.2", - "@esbuild/linux-s390x": "0.19.2", - "@esbuild/linux-x64": "0.19.2", - "@esbuild/netbsd-x64": "0.19.2", - "@esbuild/openbsd-x64": "0.19.2", - "@esbuild/sunos-x64": "0.19.2", - "@esbuild/win32-arm64": "0.19.2", - "@esbuild/win32-ia32": "0.19.2", - "@esbuild/win32-x64": "0.19.2" + "node": ">=10" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/escape-string-regexp": { + "node_modules/conventional-changelog-core/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, "bin": { - "eslint": "bin/eslint.js" + "conventional-changelog-writer": "cli.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10" } }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "semver": "bin/semver.js" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "bin": { + "conventional-recommended-bump": "cli.js" }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "dependencies": { - "debug": "^3.2.7" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=10" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">= 8" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "node": "*" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "ms": "2.1.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.10.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "clone": "^1.0.2" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "estraverse": "^5.2.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, - "license": "BSD-2-Clause", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, - "node_modules/events": { - "version": "1.1.1", + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.4.x" + "node": ">=4" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=0.3.1" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "node_modules/docs": { + "resolved": "docs/snippets", + "link": true }, - "node_modules/external-editor": { - "version": "3.1.0", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "esutils": "^2.0.2" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, - "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=10" + } }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "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==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=8.6.0" + "node": ">=0.10.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", + "node_modules/electron-to-chromium": { + "version": "1.4.520", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.520.tgz", + "integrity": "sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==", + "dev": true + }, + "node_modules/emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "shimmer": "^1.2.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "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==", "dev": true }, - "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" + "iconv-lite": "^0.6.2" } }, - "node_modules/fastq": { - "version": "1.14.0", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "ISC", + "optional": true, "dependencies": { - "reusify": "^1.0.4" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "bser": "2.1.1" + "once": "^1.4.0" } }, - "node_modules/figures": { - "version": "3.2.0", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8.6" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" } }, - "node_modules/file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "minimatch": "^5.0.1" + "is-arrayish": "^0.2.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "has": "^1.0.3" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, + "node_modules/esbuild": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", + "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", + "hasInstallScript": true, "bin": { - "flat": "cli.js" + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.3", + "@esbuild/android-arm64": "0.19.3", + "@esbuild/android-x64": "0.19.3", + "@esbuild/darwin-arm64": "0.19.3", + "@esbuild/darwin-x64": "0.19.3", + "@esbuild/freebsd-arm64": "0.19.3", + "@esbuild/freebsd-x64": "0.19.3", + "@esbuild/linux-arm": "0.19.3", + "@esbuild/linux-arm64": "0.19.3", + "@esbuild/linux-ia32": "0.19.3", + "@esbuild/linux-loong64": "0.19.3", + "@esbuild/linux-mips64el": "0.19.3", + "@esbuild/linux-ppc64": "0.19.3", + "@esbuild/linux-riscv64": "0.19.3", + "@esbuild/linux-s390x": "0.19.3", + "@esbuild/linux-x64": "0.19.3", + "@esbuild/netbsd-x64": "0.19.3", + "@esbuild/openbsd-x64": "0.19.3", + "@esbuild/sunos-x64": "0.19.3", + "@esbuild/win32-arm64": "0.19.3", + "@esbuild/win32-ia32": "0.19.3", + "@esbuild/win32-x64": "0.19.3" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.3.tgz", + "integrity": "sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.3.tgz", + "integrity": "sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.3.tgz", + "integrity": "sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.3.tgz", + "integrity": "sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.3.tgz", + "integrity": "sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" ], - "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=12" } }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.3.tgz", + "integrity": "sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.3.tgz", + "integrity": "sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.3.tgz", + "integrity": "sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.3.tgz", + "integrity": "sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.3.tgz", + "integrity": "sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.3.tgz", + "integrity": "sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.3.tgz", + "integrity": "sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.3.tgz", + "integrity": "sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.3.tgz", + "integrity": "sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.3.tgz", + "integrity": "sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.3.tgz", + "integrity": "sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.3.tgz", + "integrity": "sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.3.tgz", + "integrity": "sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.3.tgz", + "integrity": "sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.3.tgz", + "integrity": "sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8.0.0" + "node": ">=12" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.3.tgz", + "integrity": "sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.3.tgz", + "integrity": "sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/eslint": { + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" + "ms": "^2.1.1" } }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "debug": "^3.2.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "node": ">=4" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" + "ms": "^2.1.1" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/git-semver-tags/node_modules/semver": { + "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", @@ -9916,360 +8933,417 @@ "semver": "bin/semver.js" } }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" - } - }, - "node_modules/git-url-parse": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", - "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", - "dev": true, - "dependencies": { - "git-up": "^7.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { - "ini": "^1.3.2" + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.0.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "estraverse": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "engines": { + "node": ">=4.0" + } }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=4.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/has": { - "version": "1.0.3", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "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, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.8.x" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/hashi-vault-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/hashi-vault-js/-/hashi-vault-js-0.4.13.tgz", - "integrity": "sha512-0M+3/kZ39LQXrQ7QDkPjaYJbUrYZR1MvaJJeodMhYyxs4xG5J56TOpFacDV5TIgUbvUvqiIvriUxtQ8z7BiJvQ==", + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "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==", "dev": true, "dependencies": { - "axios": "^1.3.4" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=14" + "node": ">=8.6.0" } }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "is-glob": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "dependencies": { - "agent-base": "6", - "debug": "4" + "strnum": "^1.0.5" }, - "engines": { - "node": ">= 6" + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.0.0" + "bser": "2.1.1" } }, - "node_modules/husky": { - "version": "8.0.2", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" + "dependencies": { + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/ieee754": { - "version": "1.1.13", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "BSD-3-Clause" + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "node_modules/ignore": { - "version": "5.2.4", + "node_modules/file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/ignore-walk/node_modules/brace-expansion": { + "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -10278,7 +9352,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/ignore-walk/node_modules/minimatch": { + "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", @@ -10290,398 +9364,438 @@ "node": ">=10" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" + "bin": { + "flat": "cli.js" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, - "license": "MIT", + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, - "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "is-callable": "^1.1.3" } }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/init-package-json/node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inquirer": { - "version": "8.2.5", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=12.0.0" + "node": ">= 6" } }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "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" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, - "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, "bin": { - "is-docker": "cli.js" + "get-pkg-repo": "src/cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/get-pkg-repo/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/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "safe-buffer": "~5.1.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/is-interactive": { - "version": "1.0.0", + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -10690,145 +9804,166 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { - "version": "2.0.0", + "node_modules/get-tsconfig": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, - "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "node_modules/git-url-parse": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", + "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", "dev": true, "dependencies": { - "protocols": "^2.0.1" + "git-up": "^7.0.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ini": "^1.3.2" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.13.0" } }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { - "text-extensions": "^1.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -10837,10 +9972,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -10848,2924 +9992,3119 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=8" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=6" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4.0" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "has-symbols": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hashi-vault-js": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/hashi-vault-js/-/hashi-vault-js-0.4.14.tgz", + "integrity": "sha512-TUn4G7GYbARfYMfb/M24hjFdkqtSY9FKSw3yPvKM60CzdduNSaasZnlMNMoydo2khQH+4NoBWpApH5OiCT5nuw==", "dev": true, "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "axios": "^1.5.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "lru-cache": "^7.5.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/jest-circus/node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">= 6" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10.17.0" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "ms": "^2.0.0" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, + "bin": { + "husky": "lib/bin.js" + }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "minimatch": "^5.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.8.19" } }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/init-package-json": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", + "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", "dev": true, + "dependencies": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "lru-cache": "^7.5.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-haste-map/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=12" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/init-package-json/node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "has-bigints": "^1.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "ci-info": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "has": "^1.0.3" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "has-tostringtag": "^1.0.0" }, - "peerDependencies": { - "jest-resolve": "*" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "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==", "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-runner-groups": { - "version": "2.2.0", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.4" }, - "peerDependencies": { - "jest-docblock": ">= 24", - "jest-runner": ">= 24" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jmespath": { - "version": "0.16.0", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.6.0" + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "dependencies": { + "protocols": "^2.0.1" } }, - "node_modules/js-tokens": { - "version": "4.0.0", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "has-tostringtag": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { + "node_modules/is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/jsonfile": { - "version": "6.1.0", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "call-bind": "^1.0.2" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "is-docker": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/just-diff": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "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/just-diff-apply": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/just-extend": { - "version": "4.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "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==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/layers": { - "resolved": "layers", - "link": true - }, - "node_modules/lerna": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", - "integrity": "sha512-W4qrGhcdutkRdHEaDf9eqp7u4JvI+1TwFy5woX6OI8WPe4PYBdxuILAsvhp614fUG41rKSGDKlOh+AWzdSidTg==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", "dev": true, "dependencies": { - "@lerna/child-process": "6.6.2", - "@lerna/create": "6.6.2", - "@lerna/legacy-package-management": "6.6.2", - "@npmcli/arborist": "6.2.3", - "@npmcli/run-script": "4.1.7", - "@nrwl/devkit": ">=15.5.2 < 16", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.3", - "byte-size": "7.0.0", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "5.0.0", - "columnify": "1.6.0", - "config-chain": "1.1.12", - "conventional-changelog-angular": "5.0.12", - "conventional-changelog-core": "4.2.4", - "conventional-recommended-bump": "6.1.0", - "cosmiconfig": "7.0.0", - "dedent": "0.7.0", - "dot-prop": "6.0.1", - "envinfo": "^7.7.4", - "execa": "5.0.0", - "fs-extra": "9.1.0", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.10", - "has-unicode": "2.0.1", - "import-local": "^3.0.2", - "init-package-json": "3.0.2", - "inquirer": "^8.2.4", - "is-ci": "2.0.0", - "is-stream": "2.0.0", - "js-yaml": "^4.1.0", - "libnpmaccess": "^6.0.3", - "libnpmpublish": "7.1.4", - "load-json-file": "6.2.0", - "make-dir": "3.1.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^6.0.2", - "nx": ">=15.5.2 < 16", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "15.1.1", - "pify": "5.0.0", - "read-cmd-shim": "3.0.0", - "read-package-json": "5.0.1", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.1.11", - "temp-dir": "1.0.0", - "typescript": "^3 || ^4", - "upath": "^2.0.1", - "uuid": "8.3.2", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "4.0.0", - "write-file-atomic": "4.0.1", - "write-pkg": "4.0.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4" - }, - "bin": { - "lerna": "dist/cli.js" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" } }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.2", + "node_modules/jackspeak": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "dev": true, - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/lerna/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, - "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=10" } }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "7.4.3", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, - "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, - "license": "ISC", "dependencies": { - "glob": "^9.2.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, "bin": { - "rimraf": "dist/cjs/src/bin.js" + "jest": "bin/jest.js" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/lerna/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=4.2.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/lerna/node_modules/uuid": { - "version": "8.3.2", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/write-file-atomic": { - "version": "4.0.1", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/yargs": { - "version": "16.2.0", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmaccess": { - "version": "6.0.3", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "ISC", "dependencies": { - "lru-cache": "^7.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmaccess/node_modules/minipass": { - "version": "3.3.6", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "9.1.2", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "ISC", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { - "version": "13.3.1", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "ISC", "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmaccess/node_modules/proc-log": { - "version": "2.0.1", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.1.4.tgz", - "integrity": "sha512-mMntrhVwut5prP4rJ228eEbEyvIzLWhqFuY90j5QeXBCTT2pWSMno7Yo2S2qplPUr02zPurGH4heGLZ+wORczg==", - "dev": true, - "dependencies": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", - "semver": "^7.3.7", - "sigstore": "^1.4.0", - "ssri": "^10.0.1" + "node": ">=6" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/libnpmpublish/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmpublish/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/libnpmpublish/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "builtins": "^5.0.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lilconfig": { - "version": "2.0.6", + "node_modules/jest-runner-groups": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jest-runner-groups/-/jest-runner-groups-2.2.0.tgz", + "integrity": "sha512-Sp/B9ZX0CDAKa9dIkgH0sGyl2eDuScV4SVvOxqhBMxqWpsNAkmol/C58aTFmPWZj+C0ZTW1r1BSu66MTCN+voA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10.14.2" + }, + "peerDependencies": { + "jest-docblock": ">= 24", + "jest-runner": ">= 24" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "license": "MIT" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "node_modules/lint-staged": { - "version": "13.1.2", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, - "license": "MIT", "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.3" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, - "license": "Apache-2.0", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=12.20.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6.0" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">= 14" + "node": ">=4" } }, - "node_modules/listr2": { - "version": "5.0.7", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "engines": { - "node": ">=8" - } + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" }, - "engines": { - "node": ">=10" + "bin": { + "JSONStream": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "license": "MIT" + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "node_modules/lodash.memoize": { - "version": "4.1.2", + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT" + "dependencies": { + "json-buffer": "3.0.1" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/log-update": { - "version": "4.0.0", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", + "node_modules/layers": { + "resolved": "layers", + "link": true + }, + "node_modules/lerna": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", + "integrity": "sha512-W4qrGhcdutkRdHEaDf9eqp7u4JvI+1TwFy5woX6OI8WPe4PYBdxuILAsvhp614fUG41rKSGDKlOh+AWzdSidTg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@lerna/child-process": "6.6.2", + "@lerna/create": "6.6.2", + "@lerna/legacy-package-management": "6.6.2", + "@npmcli/arborist": "6.2.3", + "@npmcli/run-script": "4.1.7", + "@nrwl/devkit": ">=15.5.2 < 16", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.3", + "byte-size": "7.0.0", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "5.0.0", + "columnify": "1.6.0", + "config-chain": "1.1.12", + "conventional-changelog-angular": "5.0.12", + "conventional-changelog-core": "4.2.4", + "conventional-recommended-bump": "6.1.0", + "cosmiconfig": "7.0.0", + "dedent": "0.7.0", + "dot-prop": "6.0.1", + "envinfo": "^7.7.4", + "execa": "5.0.0", + "fs-extra": "9.1.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.10", + "has-unicode": "2.0.1", + "import-local": "^3.0.2", + "init-package-json": "3.0.2", + "inquirer": "^8.2.4", + "is-ci": "2.0.0", + "is-stream": "2.0.0", + "js-yaml": "^4.1.0", + "libnpmaccess": "^6.0.3", + "libnpmpublish": "7.1.4", + "load-json-file": "6.2.0", + "make-dir": "3.1.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^6.0.2", + "nx": ">=15.5.2 < 16", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "15.1.1", + "pify": "5.0.0", + "read-cmd-shim": "3.0.0", + "read-package-json": "5.0.1", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "typescript": "^3 || ^4", + "upath": "^2.0.1", + "uuid": "8.3.2", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "4.0.0", + "write-file-atomic": "4.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4" + }, + "bin": { + "lerna": "dist/cli.js" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || >=16.0.0" } }, - "node_modules/lru-cache": { - "version": "7.14.1", + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "ISC", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lunr": { - "version": "2.3.9", - "dev": true, - "license": "MIT" + "node_modules/lerna/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, - "node_modules/make-dir": { - "version": "3.1.0", + "node_modules/lerna/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, - "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "engines": { + "node": ">=10" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", + "node_modules/lerna/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "ISC", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { - "version": "2.0.0", + "node_modules/lerna/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">= 10" + "node": ">= 6" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", + "node_modules/lerna/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, - "license": "ISC", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-fetch-happen/node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/lerna/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", + "node_modules/lerna/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "5.0.0", + "node_modules/lerna/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, - "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 6" + "node": "*" } }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/lerna/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", + "node_modules/lerna/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/lerna/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^9.2.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/lerna/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" } }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/lerna/node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/lerna/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { - "version": "7.0.0", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 10" + "node": ">= 0.8.0" } }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", + "node_modules/libnpmaccess": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz", + "integrity": "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==", "dev": true, - "license": "ISC", "dependencies": { - "unique-slug": "^3.0.0" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", + "node_modules/libnpmaccess/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, - "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/makeerror": { - "version": "1.0.12", + "node_modules/libnpmaccess/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "tmpl": "1.0.5" + "balanced-match": "^1.0.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/libnpmaccess/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "node_modules/libnpmaccess/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "minipass": "^3.0.0" }, "engines": { - "node": ">= 12" + "node": ">= 8" } }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/libnpmaccess/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/libnpmaccess/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/libnpmaccess/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/libnpmaccess/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/libnpmaccess/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/libnpmaccess/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/libnpmaccess/node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/libnpmaccess/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/libnpmaccess/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/libnpmaccess/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/libnpmaccess/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/libnpmaccess/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "unique-slug": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", + "node_modules/libnpmaccess/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, - "license": "MIT" + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/libnpmaccess/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/libnpmpublish": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.1.4.tgz", + "integrity": "sha512-mMntrhVwut5prP4rJ228eEbEyvIzLWhqFuY90j5QeXBCTT2pWSMno7Yo2S2qplPUr02zPurGH4heGLZ+wORczg==", "dev": true, - "license": "MIT", + "dependencies": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/micromatch": { - "version": "4.0.5", + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, - "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">=8.6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/libnpmpublish/node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, - "license": "MIT", + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": ">= 0.6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/libnpmpublish/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, - "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "builtins": "^5.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mimic-fn": { + "node_modules/lilconfig": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/lint-staged": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "*" + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/minimist": { - "version": "1.2.7", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "node_modules/lint-staged/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/minipass": { - "version": "4.2.5", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, - "license": "ISC", "engines": { - "node": ">=8" + "node": ">=14.18.0" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-fetch": { - "version": "2.1.2", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, - "license": "MIT", "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "path-key": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "engines": { + "node": ">= 14" } }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/listr2/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/listr2/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/minizlib": { - "version": "2.1.2", + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, - "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "dependencies": { - "obliterator": "^1.6.1" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multimatch": { + "node_modules/log-update/node_modules/ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nise": { - "version": "5.1.4", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } + "node_modules/log-update/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/log-update/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "node_modules/log-update/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "node_modules/node-gyp/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "semver": "^7.5.3" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/make-fetch-happen": { + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", @@ -13791,7 +13130,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/minipass": { + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -13800,193 +13148,123 @@ "node": ">=8" } }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "node_modules/make-fetch-happen/node_modules/ssri/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "tmpl": "1.0.5" } }, - "node_modules/node-gyp/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" + "node": ">=8" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "dependencies": { - "abbrev": "^2.0.0" - }, "bin": { - "nopt": "bin/nopt.js" + "marked": "bin/marked.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 12" } }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "semver": "^7.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/npm-package-arg/node_modules/lru-cache": { + "node_modules/meow/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -13998,871 +13276,841 @@ "node": ">=10" } }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "builtins": "^1.0.3" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" + "p-try": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-packlist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/npm-packlist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "semver": "bin/semver" } }, - "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8.6" } }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "mime-db": "1.52.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">= 0.6" } }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10" + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-registry-fetch/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/nx": { - "version": "15.9.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.4.tgz", - "integrity": "sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA==", + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dev": true, - "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "15.9.4", - "@nrwl/tao": "15.9.4", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, - "bin": { - "nx": "bin/nx.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { - "@nrwl/nx-darwin-arm64": "15.9.4", - "@nrwl/nx-darwin-x64": "15.9.4", - "@nrwl/nx-linux-arm-gnueabihf": "15.9.4", - "@nrwl/nx-linux-arm64-gnu": "15.9.4", - "@nrwl/nx-linux-arm64-musl": "15.9.4", - "@nrwl/nx-linux-x64-gnu": "15.9.4", - "@nrwl/nx-linux-x64-musl": "15.9.4", - "@nrwl/nx-win32-arm64-msvc": "15.9.4", - "@nrwl/nx-win32-x64-msvc": "15.9.4" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "encoding": "^0.1.13" } }, - "node_modules/nx/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/nx/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/nx/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/nx/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" } }, - "node_modules/nx/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/nx/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/nx/node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/mnemonist": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", + "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", + "dependencies": { + "obliterator": "^1.6.1" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, - "node_modules/object.values": { - "version": "1.1.6", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, - "node_modules/once": { - "version": "1.4.0", + "node_modules/nise": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", + "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", "dev": true, - "license": "ISC", "dependencies": { - "wrappy": "1" + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" } }, - "node_modules/onetime": { - "version": "5.1.2", + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type-detect": "4.0.8" } }, - "node_modules/open": { - "version": "8.4.0", + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=12" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 0.8.0" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/ora": { - "version": "5.4.1", + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=10" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "abbrev": "^2.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "nopt": "bin/nopt.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/p-map": { - "version": "4.0.0", + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, - "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/p-pipe": { - "version": "3.1.0", + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/npm-install-checks": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", + "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "semver": "^7.1.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/npm-package-arg": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/p-try": { - "version": "2.2.0", + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, - "license": "MIT", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "p-reduce": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/pacote": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", - "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^4.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "builtins": "^1.0.3" } }, - "node_modules/pacote/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "node_modules/npm-package-arg/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/npm-packlist": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pacote/node_modules/brace-expansion": { + "node_modules/npm-packlist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -14871,74 +14119,68 @@ "balanced-match": "^1.0.0" } }, - "node_modules/pacote/node_modules/glob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz", - "integrity": "sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==", + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pacote/node_modules/glob/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/pacote/node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "minimatch": "^9.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/pacote/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/pacote/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/npm-package-arg": { + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", @@ -14953,46 +14195,37 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" + "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "node_modules/npm-registry-fetch/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -15001,604 +14234,601 @@ "node": ">=8" } }, - "node_modules/pacote/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-conflict-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", - "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", + "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "dependencies": { - "parse-path": "^7.0.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, + "path-key": "^3.0.0" + }, "engines": { - "node": "14 || >=16.14" + "node": ">=8" } }, - "node_modules/path-scurry/node_modules/minipass": { + "node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/path-to-regexp": { - "version": "1.8.0", + "node_modules/nx": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.7.tgz", + "integrity": "sha512-1qlEeDjX9OKZEryC8i4bA+twNg+lB5RKrozlNwWx/lLJHqWPUfvUTvxh+uxlPYL9KzVReQjUuxMLFMsHNqWUrA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "dependencies": { - "isarray": "0.0.1" + "@nrwl/cli": "15.9.7", + "@nrwl/tao": "15.9.7", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nrwl/nx-darwin-arm64": "15.9.7", + "@nrwl/nx-darwin-x64": "15.9.7", + "@nrwl/nx-linux-arm-gnueabihf": "15.9.7", + "@nrwl/nx-linux-arm64-gnu": "15.9.7", + "@nrwl/nx-linux-arm64-musl": "15.9.7", + "@nrwl/nx-linux-x64-gnu": "15.9.7", + "@nrwl/nx-linux-x64-musl": "15.9.7", + "@nrwl/nx-win32-arm64-msvc": "15.9.7", + "@nrwl/nx-win32-x64-msvc": "15.9.7" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, - "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { "node": ">=8" } }, - "node_modules/phin": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.0.tgz", - "integrity": "sha512-DqnVNrpYhKGBZppNKprD+UJylMeEKOZxHgPB+ZP6mGzf3uA2uox4Ep9tUm+rUc8WLIdHT3HcAE4X8fhwQA9JKg==", + "node_modules/nx/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "dependencies": { - "centra": "^2.6.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=14.14" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": "*" } }, - "node_modules/pidtree": { - "version": "0.6.0", + "node_modules/nx/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 6" } }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/pirates": { - "version": "4.0.5", + "node_modules/nx/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/pkg-dir": { + "node_modules/nx/node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/obliterator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "wrappy": "1" } }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "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==", "dev": true, "dependencies": { - "fast-diff": "^1.1.2" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format": { - "version": "29.4.3", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", - "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "read": "1" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/q": { - "version": "1.5.1", + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">=8" } }, - "node_modules/querystring": { - "version": "0.2.0", + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "engines": { - "node": ">=0.4.x" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-is": { - "version": "18.2.0", + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/read": { - "version": "1.0.7", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, - "license": "ISC", "dependencies": { - "mute-stream": "~0.0.4" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "p-reduce": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "node_modules/pacote": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "node_modules/pacote/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/brace-expansion": { + "node_modules/pacote/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -15607,525 +14837,669 @@ "balanced-match": "^1.0.0" } }, - "node_modules/read-package-json/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/pacote/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "node_modules/pacote/node_modules/glob/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "minimatch": "^9.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/pacote/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "node_modules/pacote/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "node_modules/pacote/node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/pacote/node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "node_modules/pacote/node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "locate-path": "^2.0.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "p-try": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", "dev": true, "dependencies": { - "p-limit": "^1.1.0" - }, + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "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==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "isarray": "0.0.1" } }, - "node_modules/read-pkg/node_modules/parse-json": { + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, + "node_modules/phin": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.0.tgz", + "integrity": "sha512-DqnVNrpYhKGBZppNKprD+UJylMeEKOZxHgPB+ZP6mGzf3uA2uox4Ep9tUm+rUc8WLIdHT3HcAE4X8fhwQA9JKg==", "dependencies": { - "pify": "^3.0.0" + "centra": "^2.6.0" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "bin": { - "semver": "bin/semver" + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { "node": ">= 6" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/require-directory": { - "version": "2.1.1", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "p-try": "^2.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "5.0.0", + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, - "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "fast-diff": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/retry": { - "version": "0.12.0", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/rfdc": { - "version": "1.3.0", + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "license": "MIT" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.6.0" } }, - "node_modules/rimraf/node_modules/brace-expansion": { + "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "node_modules/promise-call-limit": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/rimraf/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 6" } }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, - "license": "MIT", + "dependencies": { + "read": "1" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { - "node": ">=0.12.0" + "node": ">=6" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/fast-check" } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } + ] }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "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==", - "dev": true + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "node_modules/safe-buffer": { - "version": "5.2.1", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -16140,1636 +15514,1809 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, - "node_modules/safe-regex-test": { - "version": "1.0.0", + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sam-example": { - "resolved": "examples/sam", - "link": true - }, - "node_modules/sax": { - "version": "1.2.1", - "dev": true, - "license": "ISC" + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "mute-stream": "~0.0.4" }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/read-cmd-shim": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/read-package-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "dependencies": { - "kind-of": "^6.0.2" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, - "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/shiki": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz", - "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==", + "node_modules/read-package-json/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/shimmer": { - "version": "1.2.1", - "license": "BSD-2-Clause" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "lru-cache": "^7.5.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "node_modules/read-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/sigstore/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/sigstore/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/sigstore/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/sigstore/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "locate-path": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=4" } }, - "node_modules/sigstore/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/sigstore/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "p-try": "^1.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/sinon": { - "version": "14.0.2", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^7.0.1", - "diff": "^5.0.0", - "nise": "^5.1.2", - "supports-color": "^7.2.0" + "p-limit": "^1.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" + "engines": { + "node": ">=4" } }, - "node_modules/sinon/node_modules/@sinonjs/commons": { - "version": "2.0.0", + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=4" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { + "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/slice-ansi": { + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "MIT", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=4" } }, - "node_modules/socks": { - "version": "2.7.1", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, - "license": "MIT", "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "pify": "^3.0.0" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=4" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=4" + } }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, "engines": { "node": ">=4" } }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/source-map-support": { - "version": "0.5.13", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "through": "2" - }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "BSD-3-Clause" + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } }, - "node_modules/ssri": { - "version": "9.0.1", + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.3.6", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/stack-chain": { - "version": "1.3.7", - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 4" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/string_decoder": { + "node_modules/rfdc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", + "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", "dev": true, - "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "glob": "^10.2.5" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/string-argv": { - "version": "0.3.1", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/string-length": { - "version": "4.0.2", + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, - "license": "MIT", "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/string-width": { - "version": "4.2.3", + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/string-width-cjs": { - "name": "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==", + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sam-example": { + "resolved": "examples/sam", + "link": true + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/shiki": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", "dev": true, "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" }, "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" + "sigstore": "bin/sigstore.js" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/sinon": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", + "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^7.0.1", + "diff": "^5.0.0", + "nise": "^5.1.2", + "supports-color": "^7.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "node_modules/tapable": { - "version": "2.2.1", + "node_modules/sinon/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/tar": { - "version": "6.1.11", + "node_modules/sinon/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, - "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/tar-stream": { - "version": "2.2.0", + "node_modules/sinon/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, - "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "type-detect": "4.0.8" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=0.3.1" } }, - "node_modules/tar/node_modules/minipass": { - "version": "3.3.6", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/tempy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", - "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tempy/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10" } }, - "node_modules/test-exclude": { - "version": "6.0.0", + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, - "license": "ISC", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "is-plain-obj": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "node_modules/through": { - "version": "2.3.8", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "MIT" + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { - "readable-stream": "3" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "dependencies": { - "rimraf": "^3.0.0" + "through": "2" }, "engines": { - "node": ">=8.17.0" + "node": "*" } }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "readable-stream": "^3.0.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, - "license": "MIT", + "dependencies": { + "minipass": "^3.1.1" + }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "node_modules/ssri/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/treeverse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "node_modules/stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } + "safe-buffer": "~5.2.0" } }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, - "license": "ISC", "engines": { - "node": ">=12" + "node": ">=0.6.19" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", + "node_modules/string-width-cjs/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==", "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "node_modules/string-width/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==", "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tslib": { - "version": "2.5.0", - "license": "0BSD" + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">=8" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/tuf-js/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/tuf-js/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "min-indent": "^1.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/tuf-js/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "engines": { + "node": ">=4" } }, - "node_modules/tuf-js/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "dependencies": { - "minipass": "^5.0.0" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10" } }, - "node_modules/type-detect": { - "version": "4.0.8", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/typed-array-buffer": { + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/temp-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/typed-array-byte-length": { + "node_modules/tempy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", + "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "node_modules/tempy/node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedoc": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", - "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" + "node": ">=8" } }, - "node_modules/typedoc-plugin-missing-exports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.1.0.tgz", - "integrity": "sha512-+1DhqZCEu7Vu5APnrqpPwl31D+hXpt1fV0Le9ycCRL1eLVdatdl6KVt4SEVwPxnEpKwgOn2dNX6I9+0F1aO2aA==", + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, - "peerDependencies": { - "typedoc": "0.24.x || 0.25.x" + "engines": { + "node": ">=0.10" } }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "readable-stream": "3" } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.17.0" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "rimraf": "bin.js" }, - "engines": { - "node": ">=14.17" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "is-number": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0" } }, - "node_modules/unique-filename": { + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/treeverse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "browserslist-lint": "cli.js" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/uri-js": { - "version": "4.4.1", + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "punycode": "^2.1.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/url": { - "version": "0.10.3", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/util": { - "version": "0.12.5", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "engines": { + "node": ">=4" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "tslib": "^1.8.1" }, "engines": { - "node": ">=10.12.0" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, - "license": "ISC", "dependencies": { - "builtins": "^5.0.0" + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "makeerror": "1.0.12" + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" + "engines": { + "node": ">=4" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which": { - "version": "2.0.2", + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, - "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -17778,742 +17325,804 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/typedoc": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", + "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.1" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "bin": { + "typedoc": "bin/typedoc" }, "engines": { - "node": ">=10" + "node": ">= 16" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", + "node_modules/typedoc-plugin-missing-exports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.1.0.tgz", + "integrity": "sha512-+1DhqZCEu7Vu5APnrqpPwl31D+hXpt1fV0Le9ycCRL1eLVdatdl6KVt4SEVwPxnEpKwgOn2dNX6I9+0F1aO2aA==", "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "typedoc": "0.24.x || 0.25.x" } }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" + "balanced-match": "^1.0.0" } }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=6" + "node": ">=14.17" } }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, + "optional": true, "bin": { - "semver": "bin/semver" + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/xml2js": { - "version": "0.5.0", + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "license": "MIT", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, "engines": { - "node": ">=0.4" + "node": ">=8" } }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=4", + "yarn": "*" } }, - "node_modules/yargs": { - "version": "17.6.2", + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "cliui": "^8.0.1", "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/yargs-parser": { - "version": "20.2.4", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true }, - "node_modules/yocto-queue": { - "version": "0.1.0", + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "packages/batch": { - "name": "@aws-lambda-powertools/batch", - "version": "1.12.1", - "license": "MIT-0" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, - "packages/commons": { - "name": "@aws-lambda-powertools/commons", - "version": "1.12.1", - "license": "MIT-0", - "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-lambda": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-utf8-node": "^3.259.0" + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "packages/idempotency": { - "name": "@aws-lambda-powertools/idempotency", - "version": "1.12.1", - "license": "MIT-0", + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", - "@aws-sdk/lib-dynamodb": "^3.231.0", - "@aws-sdk/util-base64-node": "^3.209.0", - "jmespath": "^0.16.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@types/jmespath": "^0.15.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "engines": { + "node": ">=10.12.0" } }, - "packages/idempotency/node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "packages/idempotency/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "builtins": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "packages/idempotency/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "makeerror": "1.0.12" } }, - "packages/idempotency/node_modules/@types/jest": { - "version": "28.1.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", - "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" + "defaults": "^1.0.3" } }, - "packages/idempotency/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">= 8" } }, - "packages/idempotency/node_modules/aws-sdk-client-mock": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-2.2.0.tgz", - "integrity": "sha512-Kq2N+6gHRDedbrgTA0NMMfyN1XDWEA5Kbpm9/M/cenSxoNjfvQBOtBawI1lQe5h4UziLl///E7u17K9PBoHEKA==", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "dependencies": { - "@types/sinon": "^10.0.10", - "sinon": "^14.0.2", - "tslib": "^2.1.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/idempotency/node_modules/aws-sdk-client-mock-jest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-2.2.0.tgz", - "integrity": "sha512-lpPapmCjTe70qhXYFIjUL9cdA75YmtC0surig3QSr2Y5doaG1e4fuXlgkNeH6V873rlwu9TWCG2MFOr4rHuMfg==", + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { - "@types/jest": "^28.1.3", - "tslib": "^2.1.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, - "peerDependencies": { - "aws-sdk-client-mock": "2.2.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/idempotency/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "packages/idempotency/node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" } }, - "packages/idempotency/node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "packages/idempotency/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, - "packages/idempotency/node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "packages/idempotency/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "packages/idempotency/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "packages/idempotency/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "packages/logger": { - "name": "@aws-lambda-powertools/logger", - "version": "1.12.1", - "license": "MIT-0", - "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", - "lodash.merge": "^4.6.2" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@types/lodash.merge": "^4.6.7" + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "packages/metrics": { - "name": "@aws-lambda-powertools/metrics", - "version": "1.12.1", - "license": "MIT-0", + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1" - }, - "devDependencies": { - "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.360.0", - "@types/promise-retry": "^1.1.3", - "promise-retry": "^2.0.1" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "packages/parameters": { - "name": "@aws-lambda-powertools/parameters", - "version": "1.12.1", - "license": "MIT-0", + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", - "@aws-sdk/util-base64-node": "^3.209.0" + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" }, - "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-dynamodb": "^3.360.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "engines": { + "node": ">=8" } }, - "packages/parameters/node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "packages/parameters/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=4.0.0" } }, - "packages/parameters/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=4.0" } }, - "packages/parameters/node_modules/@types/jest": { - "version": "28.1.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", - "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "dependencies": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" + "engines": { + "node": ">=0.4" } }, - "packages/parameters/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "packages/parameters/node_modules/aws-sdk-client-mock": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-2.2.0.tgz", - "integrity": "sha512-Kq2N+6gHRDedbrgTA0NMMfyN1XDWEA5Kbpm9/M/cenSxoNjfvQBOtBawI1lQe5h4UziLl///E7u17K9PBoHEKA==", - "dev": true, - "dependencies": { - "@types/sinon": "^10.0.10", - "sinon": "^14.0.2", - "tslib": "^2.1.0" + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" } }, - "packages/parameters/node_modules/aws-sdk-client-mock-jest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-2.2.0.tgz", - "integrity": "sha512-lpPapmCjTe70qhXYFIjUL9cdA75YmtC0surig3QSr2Y5doaG1e4fuXlgkNeH6V873rlwu9TWCG2MFOr4rHuMfg==", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "@types/jest": "^28.1.3", - "tslib": "^2.1.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "peerDependencies": { - "aws-sdk-client-mock": "2.2.0" + "engines": { + "node": ">=12" } }, - "packages/parameters/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" } }, - "packages/parameters/node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "node_modules/yargs/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==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=12" } }, - "packages/parameters/node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "node_modules/yargs/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==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "packages/parameters/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=12" } }, - "packages/parameters/node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "packages/parameters/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/batch": { + "name": "@aws-lambda-powertools/batch", + "version": "1.12.1", + "license": "MIT-0" + }, + "packages/commons": { + "name": "@aws-lambda-powertools/commons", + "version": "1.12.1", + "license": "MIT-0", + "devDependencies": { + "@aws-sdk/client-appconfigdata": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.360.0", + "@aws-sdk/client-lambda": "^3.360.0", + "@aws-sdk/client-secrets-manager": "^3.360.0", + "@aws-sdk/client-ssm": "^3.360.0", + "@aws-sdk/util-utf8-node": "^3.259.0" + } + }, + "packages/idempotency": { + "name": "@aws-lambda-powertools/idempotency", + "version": "1.12.1", + "license": "MIT-0", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-sdk/util-base64-node": "^3.209.0", + "jmespath": "^0.16.0" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-dynamodb": "^3.360.0", + "@aws-sdk/lib-dynamodb": "^3.360.0", + "@types/jmespath": "^0.15.0", + "aws-sdk-client-mock": "^2.2.0", + "aws-sdk-client-mock-jest": "^2.2.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/lib-dynamodb": ">=3.x", + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/lib-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } } }, - "packages/parameters/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, + "packages/logger": { + "name": "@aws-lambda-powertools/logger", + "version": "1.12.1", + "license": "MIT-0", "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@aws-lambda-powertools/commons": "^1.12.1", + "lodash.merge": "^4.6.2" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@types/lodash.merge": "^4.6.7" } }, - "packages/parameters/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, + "packages/metrics": { + "name": "@aws-lambda-powertools/metrics", + "version": "1.12.1", + "license": "MIT-0", "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@aws-lambda-powertools/commons": "^1.12.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "devDependencies": { + "@aws-lambda-powertools/testing-utils": "file:../testing", + "@aws-sdk/client-cloudwatch": "^3.360.0", + "@types/promise-retry": "^1.1.3", + "promise-retry": "^2.0.1" + } + }, + "packages/parameters": { + "name": "@aws-lambda-powertools/parameters", + "version": "1.12.1", + "license": "MIT-0", + "dependencies": { + "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-sdk/util-base64-node": "^3.209.0" + }, + "devDependencies": { + "@aws-sdk/client-appconfigdata": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.360.0", + "@aws-sdk/client-secrets-manager": "^3.360.0", + "@aws-sdk/client-ssm": "^3.360.0", + "@aws-sdk/util-dynamodb": "^3.360.0", + "aws-sdk-client-mock": "^2.2.0", + "aws-sdk-client-mock-jest": "^2.2.0" } }, "packages/testing": { diff --git a/packages/commons/tests/unit/userAgentMiddleware.test.ts b/packages/commons/tests/unit/userAgentMiddleware.test.ts index 3a7f4538ed..cb9bdd7812 100644 --- a/packages/commons/tests/unit/userAgentMiddleware.test.ts +++ b/packages/commons/tests/unit/userAgentMiddleware.test.ts @@ -1,7 +1,6 @@ import { addUserAgentMiddleware } from '../../src/userAgentMiddleware'; import { InvokeCommand, LambdaClient } from '@aws-sdk/client-lambda'; -import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; -import { ScanCommand } from '@aws-sdk/lib-dynamodb'; +import { DynamoDBClient, ScanCommand } from '@aws-sdk/client-dynamodb'; import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm'; import { PT_VERSION } from '../../src/version'; import { AppConfigDataClient } from '@aws-sdk/client-appconfigdata'; diff --git a/packages/idempotency/README.md b/packages/idempotency/README.md index a81abea428..27abb05d24 100644 --- a/packages/idempotency/README.md +++ b/packages/idempotency/README.md @@ -46,7 +46,7 @@ The current implementation provides a persistence layer for Amazon DynamoDB, whi To get started, install the library by running: ```sh -npm install @aws-lambda-powertools/idempotency +npm i @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb ``` Next, review the IAM permissions attached to your AWS Lambda function and make sure you allow the [actions detailed](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/#iam-permissions) in the documentation of the utility. diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 059588447d..51e286f15a 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -80,10 +80,25 @@ }, "dependencies": { "@aws-lambda-powertools/commons": "^1.12.1", - "@aws-sdk/lib-dynamodb": "^3.231.0", "@aws-sdk/util-base64-node": "^3.209.0", "jmespath": "^0.16.0" }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/lib-dynamodb": ">=3.x", + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/lib-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } + }, "keywords": [ "aws", "lambda", @@ -95,8 +110,9 @@ "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", "@aws-sdk/client-dynamodb": "^3.360.0", + "@aws-sdk/lib-dynamodb": "^3.360.0", "@types/jmespath": "^0.15.0", "aws-sdk-client-mock": "^2.2.0", "aws-sdk-client-mock-jest": "^2.2.0" } -} +} \ No newline at end of file diff --git a/packages/idempotency/src/IdempotencyHandler.ts b/packages/idempotency/src/IdempotencyHandler.ts index c8bd4c387f..7deb2c53f7 100644 --- a/packages/idempotency/src/IdempotencyHandler.ts +++ b/packages/idempotency/src/IdempotencyHandler.ts @@ -3,7 +3,6 @@ import type { MiddyLikeRequest, } from '@aws-lambda-powertools/commons'; import type { AnyFunction, IdempotencyHandlerOptions } from './types'; -import { IdempotencyRecordStatus } from './types'; import { IdempotencyAlreadyInProgressError, IdempotencyInconsistentStateError, @@ -12,7 +11,7 @@ import { } from './errors'; import { BasePersistenceLayer, IdempotencyRecord } from './persistence'; import { IdempotencyConfig } from './IdempotencyConfig'; -import { MAX_RETRIES } from './constants'; +import { MAX_RETRIES, IdempotencyRecordStatus } from './constants'; import { search } from 'jmespath'; /** diff --git a/packages/idempotency/src/constants.ts b/packages/idempotency/src/constants.ts index ed100116b2..da6efbf7a3 100644 --- a/packages/idempotency/src/constants.ts +++ b/packages/idempotency/src/constants.ts @@ -7,4 +7,17 @@ */ const MAX_RETRIES = 2; -export { MAX_RETRIES }; +/** + * Idempotency record status. + * + * A record is created when a request is received. The status is set to `INPROGRESS` and the request is processed. + * After the request is processed, the status is set to `COMPLETED`. If the request is not processed within the + * `inProgressExpiryTimestamp`, the status is set to `EXPIRED`. + */ +const IdempotencyRecordStatus = { + INPROGRESS: 'INPROGRESS', + COMPLETED: 'COMPLETED', + EXPIRED: 'EXPIRED', +} as const; + +export { IdempotencyRecordStatus, MAX_RETRIES }; diff --git a/packages/idempotency/src/index.ts b/packages/idempotency/src/index.ts index d7c77cc459..c8a20f002f 100644 --- a/packages/idempotency/src/index.ts +++ b/packages/idempotency/src/index.ts @@ -1,3 +1,4 @@ export * from './errors'; export * from './IdempotencyConfig'; export * from './makeIdempotent'; +export { IdempotencyRecordStatus } from './constants'; diff --git a/packages/idempotency/src/persistence/BasePersistenceLayer.ts b/packages/idempotency/src/persistence/BasePersistenceLayer.ts index 153f2b2471..e90118d042 100644 --- a/packages/idempotency/src/persistence/BasePersistenceLayer.ts +++ b/packages/idempotency/src/persistence/BasePersistenceLayer.ts @@ -1,7 +1,7 @@ import { createHash, Hash } from 'node:crypto'; import { search } from 'jmespath'; import type { BasePersistenceLayerOptions } from '../types'; -import { IdempotencyRecordStatus } from '../types'; +import { IdempotencyRecordStatus } from '../constants'; import { EnvironmentVariablesService } from '../config'; import { IdempotencyRecord } from './IdempotencyRecord'; import { BasePersistenceLayerInterface } from './BasePersistenceLayerInterface'; @@ -91,6 +91,13 @@ abstract class BasePersistenceLayer implements BasePersistenceLayerInterface { this.deleteFromCache(idempotencyRecord.idempotencyKey); } + /** + * Retrieve the number of seconds that records will be kept in the persistence store + */ + public getExpiresAfterSeconds(): number { + return this.expiresAfterSeconds; + } + /** * Retrieves idempotency key for the provided data and fetches data for that key from the persistence store * @@ -113,6 +120,9 @@ abstract class BasePersistenceLayer implements BasePersistenceLayerInterface { return record; } + /** + * Check whether payload validation is enabled or not + */ public isPayloadValidationEnabled(): boolean { return this.payloadValidationEnabled; } diff --git a/packages/idempotency/src/persistence/DynamoDBPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDBPersistenceLayer.ts index 2c6bf606d6..c544958e10 100644 --- a/packages/idempotency/src/persistence/DynamoDBPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDBPersistenceLayer.ts @@ -2,7 +2,7 @@ import { IdempotencyItemAlreadyExistsError, IdempotencyItemNotFoundError, } from '../errors'; -import { IdempotencyRecordStatus } from '../types'; +import { IdempotencyRecordStatus } from '../constants'; import type { DynamoDBPersistenceOptions } from '../types'; import { AttributeValue, diff --git a/packages/idempotency/src/persistence/IdempotencyRecord.ts b/packages/idempotency/src/persistence/IdempotencyRecord.ts index de1d2ddac0..7811bc7413 100644 --- a/packages/idempotency/src/persistence/IdempotencyRecord.ts +++ b/packages/idempotency/src/persistence/IdempotencyRecord.ts @@ -1,6 +1,9 @@ import type { JSONValue } from '@aws-lambda-powertools/commons'; -import type { IdempotencyRecordOptions } from '../types'; -import { IdempotencyRecordStatus } from '../types'; +import type { + IdempotencyRecordOptions, + IdempotencyRecordStatusValue, +} from '../types'; +import { IdempotencyRecordStatus } from '../constants'; import { IdempotencyInvalidStatusError } from '../errors'; /** @@ -31,10 +34,10 @@ class IdempotencyRecord { /** * The idempotency record status can be COMPLETED, IN_PROGRESS or EXPIRED. * We check the status during idempotency processing to make sure we don't process an expired record and handle concurrent requests. - * @link {IdempotencyRecordStatus} + * @link {IdempotencyRecordStatusValue} * @private */ - private status: IdempotencyRecordStatus; + private status: IdempotencyRecordStatusValue; public constructor(config: IdempotencyRecordOptions) { this.idempotencyKey = config.idempotencyKey; @@ -56,7 +59,7 @@ class IdempotencyRecord { * Get the status of the record. * @throws {IdempotencyInvalidStatusError} If the status is not a valid status. */ - public getStatus(): IdempotencyRecordStatus { + public getStatus(): IdempotencyRecordStatusValue { if (this.isExpired()) { return IdempotencyRecordStatus.EXPIRED; } else if (Object.values(IdempotencyRecordStatus).includes(this.status)) { diff --git a/packages/idempotency/src/types/IdempotencyRecord.ts b/packages/idempotency/src/types/IdempotencyRecord.ts index 14a93748f6..251d9c3c45 100644 --- a/packages/idempotency/src/types/IdempotencyRecord.ts +++ b/packages/idempotency/src/types/IdempotencyRecord.ts @@ -1,21 +1,16 @@ import type { JSONValue } from '@aws-lambda-powertools/commons'; +import { IdempotencyRecordStatus } from '../constants'; -const IdempotencyRecordStatus = { - INPROGRESS: 'INPROGRESS', - COMPLETED: 'COMPLETED', - EXPIRED: 'EXPIRED', -} as const; - -type IdempotencyRecordStatus = +type IdempotencyRecordStatusValue = (typeof IdempotencyRecordStatus)[keyof typeof IdempotencyRecordStatus]; type IdempotencyRecordOptions = { idempotencyKey: string; - status: IdempotencyRecordStatus; + status: IdempotencyRecordStatusValue; expiryTimestamp?: number; inProgressExpiryTimestamp?: number; responseData?: JSONValue; payloadHash?: string; }; -export { IdempotencyRecordStatus, IdempotencyRecordOptions }; +export { IdempotencyRecordStatusValue, IdempotencyRecordOptions }; diff --git a/packages/idempotency/tests/unit/IdempotencyHandler.test.ts b/packages/idempotency/tests/unit/IdempotencyHandler.test.ts index d9196169c4..deeccee875 100644 --- a/packages/idempotency/tests/unit/IdempotencyHandler.test.ts +++ b/packages/idempotency/tests/unit/IdempotencyHandler.test.ts @@ -9,11 +9,10 @@ import { IdempotencyItemAlreadyExistsError, IdempotencyPersistenceLayerError, } from '../../src/errors'; -import { IdempotencyRecordStatus } from '../../src/types'; import { IdempotencyRecord } from '../../src/persistence'; import { IdempotencyHandler } from '../../src/IdempotencyHandler'; import { IdempotencyConfig } from '../../src/'; -import { MAX_RETRIES } from '../../src/constants'; +import { MAX_RETRIES, IdempotencyRecordStatus } from '../../src/constants'; import { PersistenceLayerTestClass } from '../helpers/idempotencyUtils'; const mockFunctionToMakeIdempotent = jest.fn(); diff --git a/packages/idempotency/tests/unit/makeHandlerIdempotent.test.ts b/packages/idempotency/tests/unit/makeHandlerIdempotent.test.ts index bb5d890c59..db064e6f38 100644 --- a/packages/idempotency/tests/unit/makeHandlerIdempotent.test.ts +++ b/packages/idempotency/tests/unit/makeHandlerIdempotent.test.ts @@ -4,9 +4,8 @@ * @group unit/idempotency/makeHandlerIdempotent */ import { makeHandlerIdempotent } from '../../src/middleware'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; -import { Custom as dummyEvent } from '../../../commons/src/samples/resources/events'; -import { IdempotencyRecordStatus } from '../../src/types'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; +import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; import { IdempotencyRecord } from '../../src/persistence'; import { IdempotencyInconsistentStateError, @@ -15,7 +14,7 @@ import { } from '../../src/errors'; import { IdempotencyConfig } from '../../src/'; import middy from '@middy/core'; -import { MAX_RETRIES } from '../../src/constants'; +import { MAX_RETRIES, IdempotencyRecordStatus } from '../../src/constants'; import { PersistenceLayerTestClass } from '../helpers/idempotencyUtils'; import type { Context } from 'aws-lambda'; diff --git a/packages/idempotency/tests/unit/makeIdempotent.test.ts b/packages/idempotency/tests/unit/makeIdempotent.test.ts index 1fa880909e..d46bc7ad6b 100644 --- a/packages/idempotency/tests/unit/makeIdempotent.test.ts +++ b/packages/idempotency/tests/unit/makeIdempotent.test.ts @@ -5,16 +5,15 @@ */ import { IdempotencyRecord } from '../../src/persistence'; import { makeIdempotent } from '../../src'; -import { IdempotencyRecordStatus } from '../../src/types'; import { IdempotencyInconsistentStateError, IdempotencyItemAlreadyExistsError, IdempotencyPersistenceLayerError, } from '../../src/errors'; import { IdempotencyConfig } from '../../src'; -import { helloworldContext as dummyContext } from '../../../commons/src/samples/resources/contexts'; -import { Custom as dummyEvent } from '../../../commons/src/samples/resources/events'; -import { MAX_RETRIES } from '../../src/constants'; +import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; +import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; +import { MAX_RETRIES, IdempotencyRecordStatus } from '../../src/constants'; import { PersistenceLayerTestClass } from '../helpers/idempotencyUtils'; import type { Context } from 'aws-lambda'; diff --git a/packages/idempotency/tests/unit/persistence/BasePersistenceLayer.test.ts b/packages/idempotency/tests/unit/persistence/BasePersistenceLayer.test.ts index 848d3258a2..3224c0661b 100644 --- a/packages/idempotency/tests/unit/persistence/BasePersistenceLayer.test.ts +++ b/packages/idempotency/tests/unit/persistence/BasePersistenceLayer.test.ts @@ -4,7 +4,7 @@ * @group unit/idempotency/persistence/base */ import { ContextExamples as dummyContext } from '@aws-lambda-powertools/commons'; -import { IdempotencyConfig } from '../../../src'; +import { IdempotencyConfig, IdempotencyRecordStatus } from '../../../src'; import { BasePersistenceLayer, IdempotencyRecord, @@ -14,7 +14,6 @@ import { IdempotencyValidationError, } from '../../../src/errors'; import type { IdempotencyConfigOptions } from '../../../src/types'; -import { IdempotencyRecordStatus } from '../../../src/types'; jest.mock('node:crypto', () => ({ createHash: jest.fn().mockReturnValue({ @@ -462,4 +461,17 @@ describe('Class: BasePersistenceLayer', () => { ); }); }); + + describe('Method: getExpiresAfterSeconds', () => { + it('returns the configured value', () => { + // Prepare + const persistenceLayer = new PersistenceLayerTestClass(); + + // Act + const result = persistenceLayer.getExpiresAfterSeconds(); + + // Assess + expect(result).toBe(3600); + }); + }); }); diff --git a/packages/idempotency/tests/unit/persistence/DynamoDbPersistenceLayer.test.ts b/packages/idempotency/tests/unit/persistence/DynamoDbPersistenceLayer.test.ts index a37f74cdb4..d165af4b48 100644 --- a/packages/idempotency/tests/unit/persistence/DynamoDbPersistenceLayer.test.ts +++ b/packages/idempotency/tests/unit/persistence/DynamoDbPersistenceLayer.test.ts @@ -10,7 +10,7 @@ import { } from '../../../src/errors'; import { IdempotencyRecord } from '../../../src/persistence'; import type { DynamoDBPersistenceOptions } from '../../../src/types'; -import { IdempotencyRecordStatus } from '../../../src/types'; +import { IdempotencyRecordStatus } from '../../../src'; import { DynamoDBClient, DynamoDBServiceException, diff --git a/packages/idempotency/tests/unit/persistence/IdempotencyRecord.test.ts b/packages/idempotency/tests/unit/persistence/IdempotencyRecord.test.ts index c655696caf..00776ec246 100644 --- a/packages/idempotency/tests/unit/persistence/IdempotencyRecord.test.ts +++ b/packages/idempotency/tests/unit/persistence/IdempotencyRecord.test.ts @@ -5,7 +5,8 @@ */ import { IdempotencyInvalidStatusError } from '../../../src/errors'; import { IdempotencyRecord } from '../../../src/persistence'; -import { IdempotencyRecordStatus } from '../../../src/types'; +import { IdempotencyRecordStatus } from '../../../src'; +import type { IdempotencyRecordStatusValue } from '../../../src/types'; const mockIdempotencyKey = '123'; const mockData = undefined; @@ -28,7 +29,7 @@ describe('Given an INPROGRESS record that has already expired', () => { }); }); describe('When checking the status of the idempotency record', () => { - let resultingStatus: IdempotencyRecordStatus; + let resultingStatus: IdempotencyRecordStatusValue; beforeEach(() => { resultingStatus = idempotencyRecord.getStatus(); }); @@ -75,7 +76,7 @@ describe('Given an idempotency record that has a status not in the IdempotencyRe Date.now = jest.fn(() => mockNowBeforeExiryTime); idempotencyRecord = new IdempotencyRecord({ idempotencyKey: mockIdempotencyKey, - status: 'NOT_A_STATUS' as IdempotencyRecordStatus, + status: 'NOT_A_STATUS' as IdempotencyRecordStatusValue, expiryTimestamp: expiryTimeAfterNow, inProgressExpiryTimestamp: mockInProgressExpiry, responseData: mockData, diff --git a/packages/parameters/tests/unit/AppConfigProvider.test.ts b/packages/parameters/tests/unit/AppConfigProvider.test.ts index a333544eb8..e2844603d8 100644 --- a/packages/parameters/tests/unit/AppConfigProvider.test.ts +++ b/packages/parameters/tests/unit/AppConfigProvider.test.ts @@ -11,7 +11,7 @@ import { GetLatestConfigurationCommand, StartConfigurationSessionCommand, } from '@aws-sdk/client-appconfigdata'; -import { Uint8ArrayBlobAdapter } from '@aws-sdk/util-stream'; +import { Uint8ArrayBlobAdapter } from '@smithy/util-stream'; import { mockClient } from 'aws-sdk-client-mock'; import * as UserAgentMiddleware from '@aws-lambda-powertools/commons/lib/userAgentMiddleware'; import 'aws-sdk-client-mock-jest'; diff --git a/packages/parameters/tests/unit/SSMProvider.test.ts b/packages/parameters/tests/unit/SSMProvider.test.ts index 138f291156..cd48aada3f 100644 --- a/packages/parameters/tests/unit/SSMProvider.test.ts +++ b/packages/parameters/tests/unit/SSMProvider.test.ts @@ -21,7 +21,7 @@ import type { SSMGetParametersByNameOutputInterface, } from '../../src/types/SSMProvider'; import { ExpirableValue } from '../../src/base/ExpirableValue'; -import { toBase64 } from '@aws-sdk/util-base64'; +import { toBase64 } from '@aws-sdk/util-base64-node'; import * as UserAgentMiddleware from '@aws-lambda-powertools/commons/lib/userAgentMiddleware'; const encoder = new TextEncoder(); diff --git a/packages/parameters/tests/unit/getAppConfig.test.ts b/packages/parameters/tests/unit/getAppConfig.test.ts index 466454fbb1..5884a9e30e 100644 --- a/packages/parameters/tests/unit/getAppConfig.test.ts +++ b/packages/parameters/tests/unit/getAppConfig.test.ts @@ -17,7 +17,7 @@ import { import { mockClient } from 'aws-sdk-client-mock'; import 'aws-sdk-client-mock-jest'; import { toBase64 } from '@aws-sdk/util-base64-node'; -import { Uint8ArrayBlobAdapter } from '@aws-sdk/util-stream'; +import { Uint8ArrayBlobAdapter } from '@smithy/util-stream'; import { JSONValue } from '@aws-lambda-powertools/commons'; describe('Function: getAppConfig', () => { From 21d1a91c538e0ba5df9eb696e4b8b0a811aa6b0e Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Fri, 15 Sep 2023 12:18:50 +0200 Subject: [PATCH 25/28] docs(idempotency): bring your own persistent store (#1681) * docs(idempotency): bring your own persistent store * docs: moved all snippets to dedicated files * chore: fix non-null assertion * chore: remove redundant try/catch * chore: remove redundant try/catch * chore: refactor generic persistence layer * chore: refactor generic persistence layer * docs: added entry & handler to CDK sample --- .../advancedBringYourOwnPersistenceLayer.ts | 130 ++++++++++ ...cedBringYourOwnPersistenceLayerProvider.ts | 44 ++++ ...vancedBringYourOwnPersistenceLayerUsage.ts | 53 ++++ .../idempotency/makeIdempotentJmes.ts | 2 +- .../samples/makeIdempotentJmes.json | 30 +++ ...orkingWIthIdempotencyRequiredKeyError.json | 7 + ...kingWIthIdempotencyRequiredKeySuccess.json | 7 + .../idempotency/samples/workingWithBatch.json | 26 ++ .../idempotency/templates/tableCdk.ts | 30 +++ .../idempotency/templates/tableSam.yaml | 31 +++ .../idempotency/templates/tableTerraform.tf | 78 ++++++ docs/snippets/idempotency/types.ts | 22 +- docs/utilities/idempotency.md | 240 ++++-------------- package-lock.json | 18 +- 14 files changed, 524 insertions(+), 194 deletions(-) create mode 100644 docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts create mode 100644 docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts create mode 100644 docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts create mode 100644 docs/snippets/idempotency/samples/makeIdempotentJmes.json create mode 100644 docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json create mode 100644 docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json create mode 100644 docs/snippets/idempotency/samples/workingWithBatch.json create mode 100644 docs/snippets/idempotency/templates/tableCdk.ts create mode 100644 docs/snippets/idempotency/templates/tableSam.yaml create mode 100644 docs/snippets/idempotency/templates/tableTerraform.tf diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts new file mode 100644 index 0000000000..d65d2f5b8c --- /dev/null +++ b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts @@ -0,0 +1,130 @@ +import { + IdempotencyItemAlreadyExistsError, + IdempotencyItemNotFoundError, + IdempotencyRecordStatus, +} from '@aws-lambda-powertools/idempotency'; +import { IdempotencyRecordOptions } from '@aws-lambda-powertools/idempotency/types'; +import { + IdempotencyRecord, + BasePersistenceLayer, +} from '@aws-lambda-powertools/idempotency/persistence'; +import { getSecret } from '@aws-lambda-powertools/parameters/secrets'; +import { Transform } from '@aws-lambda-powertools/parameters'; +import { + ProviderClient, + ProviderItemAlreadyExists, +} from './advancedBringYourOwnPersistenceLayerProvider'; +import type { ApiSecret, ProviderItem } from './types'; + +class CustomPersistenceLayer extends BasePersistenceLayer { + #collectionName: string; + #client?: ProviderClient; + + public constructor(config: { collectionName: string }) { + super(); + this.#collectionName = config.collectionName; + } + + protected async _deleteRecord(record: IdempotencyRecord): Promise<void> { + await ( + await this.#getClient() + ).delete(this.#collectionName, record.idempotencyKey); + } + + protected async _getRecord( + idempotencyKey: string + ): Promise<IdempotencyRecord> { + try { + const item = await ( + await this.#getClient() + ).get(this.#collectionName, idempotencyKey); + + return new IdempotencyRecord({ + ...(item as unknown as IdempotencyRecordOptions), + }); + } catch (error) { + throw new IdempotencyItemNotFoundError(); + } + } + + protected async _putRecord(record: IdempotencyRecord): Promise<void> { + const item: Partial<ProviderItem> = { + status: record.getStatus(), + }; + + if (record.inProgressExpiryTimestamp !== undefined) { + item.in_progress_expiration = record.inProgressExpiryTimestamp; + } + + if (this.isPayloadValidationEnabled() && record.payloadHash !== undefined) { + item.validation = record.payloadHash; + } + + const ttl = record.expiryTimestamp + ? Math.floor(new Date(record.expiryTimestamp * 1000).getTime() / 1000) - + Math.floor(new Date().getTime() / 1000) + : this.getExpiresAfterSeconds(); + + let existingItem: ProviderItem | undefined; + try { + existingItem = await ( + await this.#getClient() + ).put(this.#collectionName, record.idempotencyKey, item, { + ttl, + }); + } catch (error) { + if (error instanceof ProviderItemAlreadyExists) { + if ( + existingItem && + existingItem.status !== IdempotencyRecordStatus.INPROGRESS && + (existingItem.in_progress_expiration || 0) < Date.now() + ) { + throw new IdempotencyItemAlreadyExistsError( + `Failed to put record for already existing idempotency key: ${record.idempotencyKey}` + ); + } + } + } + } + + protected async _updateRecord(record: IdempotencyRecord): Promise<void> { + const value: Partial<ProviderItem> = { + data: JSON.stringify(record.responseData), + status: record.getStatus(), + }; + + if (this.isPayloadValidationEnabled()) { + value.validation = record.payloadHash; + } + + await ( + await this.#getClient() + ).update(this.#collectionName, record.idempotencyKey, value); + } + + async #getClient(): Promise<ProviderClient> { + if (this.#client) return this.#client; + + const secretName = process.env.API_SECRET; + if (!secretName) { + throw new Error('API_SECRET environment variable is not set'); + } + + const apiSecret = await getSecret<ApiSecret>(secretName, { + transform: Transform.JSON, + }); + + if (!apiSecret) { + throw new Error(`Could not retrieve secret ${secretName}`); + } + + this.#client = new ProviderClient({ + apiKey: apiSecret.apiKey, + defaultTtlSeconds: this.getExpiresAfterSeconds(), + }); + + return this.#client; + } +} + +export { CustomPersistenceLayer }; diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts new file mode 100644 index 0000000000..3dedecf864 --- /dev/null +++ b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts @@ -0,0 +1,44 @@ +import type { ProviderItem } from './types'; + +/** + * This is a mock implementation of an SDK client for a generic key-value store. + */ +class ProviderClient { + public constructor(_config: { apiKey: string; defaultTtlSeconds: number }) { + // ... + } + + public async delete(_collectionName: string, _key: string): Promise<void> { + // ... + } + + public async get( + _collectionName: string, + _key: string + ): Promise<ProviderItem> { + // ... + return {} as ProviderItem; + } + + public async put( + _collectionName: string, + _key: string, + _value: Partial<ProviderItem>, + _options: { ttl: number } + ): Promise<ProviderItem> { + // ... + return {} as ProviderItem; + } + + public async update( + _collectionName: string, + _key: string, + _value: Partial<ProviderItem> + ): Promise<void> { + // ... + } +} + +class ProviderItemAlreadyExists extends Error {} + +export { ProviderClient, ProviderItemAlreadyExists }; diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts new file mode 100644 index 0000000000..2e8b5fa29e --- /dev/null +++ b/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts @@ -0,0 +1,53 @@ +import type { Context } from 'aws-lambda'; +import { randomUUID } from 'node:crypto'; +import { CustomPersistenceLayer } from './advancedBringYourOwnPersistenceLayer'; +import { + IdempotencyConfig, + makeIdempotent, +} from '@aws-lambda-powertools/idempotency'; +import type { Request, Response, SubscriptionResult } from './types'; + +const persistenceStore = new CustomPersistenceLayer({ + collectionName: 'powertools', +}); +const config = new IdempotencyConfig({ + expiresAfterSeconds: 60, +}); + +const createSubscriptionPayment = makeIdempotent( + async ( + _transactionId: string, + event: Request + ): Promise<SubscriptionResult> => { + // ... create payment + return { + id: randomUUID(), + productId: event.productId, + }; + }, + { + persistenceStore, + dataIndexArgument: 1, + config, + } +); + +export const handler = async ( + event: Request, + context: Context +): Promise<Response> => { + config.registerLambdaContext(context); + + try { + const transactionId = randomUUID(); + const payment = await createSubscriptionPayment(transactionId, event); + + return { + paymentId: payment.id, + message: 'success', + statusCode: 200, + }; + } catch (error) { + throw new Error('Error creating payment'); + } +}; diff --git a/docs/snippets/idempotency/makeIdempotentJmes.ts b/docs/snippets/idempotency/makeIdempotentJmes.ts index 32675c1687..b4d0d165d7 100644 --- a/docs/snippets/idempotency/makeIdempotentJmes.ts +++ b/docs/snippets/idempotency/makeIdempotentJmes.ts @@ -12,7 +12,7 @@ const persistenceStore = new DynamoDBPersistenceLayer({ }); const createSubscriptionPayment = async ( - user: string, + _user: string, productId: string ): Promise<SubscriptionResult> => { // ... create payment diff --git a/docs/snippets/idempotency/samples/makeIdempotentJmes.json b/docs/snippets/idempotency/samples/makeIdempotentJmes.json new file mode 100644 index 0000000000..9f608983da --- /dev/null +++ b/docs/snippets/idempotency/samples/makeIdempotentJmes.json @@ -0,0 +1,30 @@ +{ + "version": "2.0", + "routeKey": "ANY /createpayment", + "rawPath": "/createpayment", + "rawQueryString": "", + "headers": { + "Header1": "value1", + "X-Idempotency-Key": "abcdefg" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "api-id", + "domainName": "id.execute-api.us-east-1.amazonaws.com", + "domainPrefix": "id", + "http": { + "method": "POST", + "path": "/createpayment", + "protocol": "HTTP/1.1", + "sourceIp": "ip", + "userAgent": "agent" + }, + "requestId": "id", + "routeKey": "ANY /createpayment", + "stage": "$default", + "time": "10/Feb/2021:13:40:43 +0000", + "timeEpoch": 1612964443723 + }, + "body": "{\"user\":\"xyz\",\"productId\":\"123456789\"}", + "isBase64Encoded": false +} \ No newline at end of file diff --git a/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json b/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json new file mode 100644 index 0000000000..a905b83e7a --- /dev/null +++ b/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json @@ -0,0 +1,7 @@ +{ + "user": { + "uid": "BB0D045C-8878-40C8-889E-38B3CB0A61B1", + "name": "foo", + "productId": 10000 + } +} \ No newline at end of file diff --git a/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json b/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json new file mode 100644 index 0000000000..e721b2c24c --- /dev/null +++ b/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json @@ -0,0 +1,7 @@ +{ + "user": { + "uid": "BB0D045C-8878-40C8-889E-38B3CB0A61B1", + "name": "Foo" + }, + "productId": 10000 +} \ No newline at end of file diff --git a/docs/snippets/idempotency/samples/workingWithBatch.json b/docs/snippets/idempotency/samples/workingWithBatch.json new file mode 100644 index 0000000000..44bd07a141 --- /dev/null +++ b/docs/snippets/idempotency/samples/workingWithBatch.json @@ -0,0 +1,26 @@ +{ + "Records": [ + { + "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", + "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + "body": "Test message.", + "attributes": { + "ApproximateReceiveCount": "1", + "SentTimestamp": "1545082649183", + "SenderId": "AIDAIENQZJOLO23YVJ4VO", + "ApproximateFirstReceiveTimestamp": "1545082649185" + }, + "messageAttributes": { + "testAttr": { + "stringValue": "100", + "binaryValue": "base64Str", + "dataType": "Number" + } + }, + "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", + "eventSource": "aws:sqs", + "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "awsRegion": "us-east-2" + } + ] +} \ No newline at end of file diff --git a/docs/snippets/idempotency/templates/tableCdk.ts b/docs/snippets/idempotency/templates/tableCdk.ts new file mode 100644 index 0000000000..8a07d5dc3c --- /dev/null +++ b/docs/snippets/idempotency/templates/tableCdk.ts @@ -0,0 +1,30 @@ +import { Stack, type StackProps } from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; +import { Runtime } from 'aws-cdk-lib/aws-lambda'; +import { AttributeType, BillingMode, Table } from 'aws-cdk-lib/aws-dynamodb'; + +export class IdempotencyStack extends Stack { + public constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const table = new Table(this, 'idempotencyTable', { + partitionKey: { + name: 'id', + type: AttributeType.STRING, + }, + timeToLiveAttribute: 'expiration', + billingMode: BillingMode.PAY_PER_REQUEST, + }); + + const fnHandler = new NodejsFunction(this, 'helloWorldFunction', { + runtime: Runtime.NODEJS_18_X, + handler: 'handler', + entry: 'src/index.ts', + environment: { + IDEMPOTENCY_TABLE_NAME: table.tableName, + }, + }); + table.grantReadWriteData(fnHandler); + } +} diff --git a/docs/snippets/idempotency/templates/tableSam.yaml b/docs/snippets/idempotency/templates/tableSam.yaml new file mode 100644 index 0000000000..010ecc89ca --- /dev/null +++ b/docs/snippets/idempotency/templates/tableSam.yaml @@ -0,0 +1,31 @@ +Transform: AWS::Serverless-2016-10-31 +Resources: + IdempotencyTable: + Type: AWS::DynamoDB::Table + Properties: + AttributeDefinitions: + - AttributeName: id + AttributeType: S + KeySchema: + - AttributeName: id + KeyType: HASH + TimeToLiveSpecification: + AttributeName: expiration + Enabled: true + BillingMode: PAY_PER_REQUEST + + HelloWorldFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: python3.11 + Handler: app.py + Policies: + - Statement: + - Sid: AllowDynamodbReadWrite + Effect: Allow + Action: + - dynamodb:PutItem + - dynamodb:GetItem + - dynamodb:UpdateItem + - dynamodb:DeleteItem + Resource: !GetAtt IdempotencyTable.Arn diff --git a/docs/snippets/idempotency/templates/tableTerraform.tf b/docs/snippets/idempotency/templates/tableTerraform.tf new file mode 100644 index 0000000000..4856f2b0e6 --- /dev/null +++ b/docs/snippets/idempotency/templates/tableTerraform.tf @@ -0,0 +1,78 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 4.0" + } + } +} + +provider "aws" { + region = "us-east-1" # Replace with your desired AWS region +} + +resource "aws_dynamodb_table" "IdempotencyTable" { + name = "IdempotencyTable" + billing_mode = "PAY_PER_REQUEST" + hash_key = "id" + attribute { + name = "id" + type = "S" + } + ttl { + attribute_name = "expiration" + enabled = true + } +} + +resource "aws_lambda_function" "IdempotencyFunction" { + function_name = "IdempotencyFunction" + role = aws_iam_role.IdempotencyFunctionRole.arn + runtime = "nodejs18.x" + handler = "index.handler" + filename = "lambda.zip" +} + +resource "aws_iam_role" "IdempotencyFunctionRole" { + name = "IdempotencyFunctionRole" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Sid = "" + Effect = "Allow" + Principal = { + Service = "lambda.amazonaws.com" + } + Action = "sts:AssumeRole" + }, + ] + }) +} + +resource "aws_iam_policy" "LambdaDynamoDBPolicy" { + name = "LambdaDynamoDBPolicy" + description = "IAM policy for Lambda function to access DynamoDB" + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Sid = "AllowDynamodbReadWrite" + Effect = "Allow" + Action = [ + "dynamodb:PutItem", + "dynamodb:GetItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + ] + Resource = aws_dynamodb_table.IdempotencyTable.arn + }, + ] + }) +} + +resource "aws_iam_role_policy_attachment" "IdempotencyFunctionRoleAttachment" { + role = aws_iam_role.IdempotencyFunctionRole.name + policy_arn = aws_iam_policy.LambdaDynamoDBPolicy.arn +} \ No newline at end of file diff --git a/docs/snippets/idempotency/types.ts b/docs/snippets/idempotency/types.ts index 42d2cd63bd..e769dcf2dd 100644 --- a/docs/snippets/idempotency/types.ts +++ b/docs/snippets/idempotency/types.ts @@ -1,15 +1,29 @@ -type Request = { +import { IdempotencyRecordStatusValue } from '@aws-lambda-powertools/idempotency/types'; + +export type Request = { user: string; productId: string; }; -type Response = { +export type Response = { [key: string]: unknown; }; -type SubscriptionResult = { +export type SubscriptionResult = { id: string; productId: string; }; -export { Request, Response, SubscriptionResult }; +export type ApiSecret = { + apiKey: string; + refreshToken: string; + validUntil: number; + restEndpoint: string; +}; + +export type ProviderItem = { + validation?: string; + in_progress_expiration?: number; + status: IdempotencyRecordStatusValue; + data: string; +}; diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index c06f28a149..0bb45ac7b9 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -88,124 +88,22 @@ If you're not [changing the default configuration for the DynamoDB persistence l ???+ tip "Tip: You can share a single state table for all functions" You can reuse the same DynamoDB table to store idempotency state. We add the Lambda function name in addition to the idempotency key as a hash key. -<!-- TODO: review CDK template --> -=== "AWS Serverless Application Model (SAM) example" +=== "AWS Cloud Development Kit (CDK) example" - ```yaml hl_lines="6-14 24-31" - Transform: AWS::Serverless-2016-10-31 - Resources: - IdempotencyTable: - Type: AWS::DynamoDB::Table - Properties: - AttributeDefinitions: - - AttributeName: id - AttributeType: S - KeySchema: - - AttributeName: id - KeyType: HASH - TimeToLiveSpecification: - AttributeName: expiration - Enabled: true - BillingMode: PAY_PER_REQUEST - - HelloWorldFunction: - Type: AWS::Serverless::Function - Properties: - Runtime: nodejs18.x - Handler: index.handler - Policies: - - Statement: - - Sid: AllowDynamodbReadWrite - Effect: Allow - Action: - - dynamodb:PutItem - - dynamodb:GetItem - - dynamodb:UpdateItem - - dynamodb:DeleteItem - Resource: !GetAtt IdempotencyTable.Arn + ```typescript title="template.tf" hl_lines="11-18 26" + --8<-- "docs/snippets/idempotency/templates/tableCdk.ts" ``` -=== "Terraform" - - ```terraform hl_lines="14-26 64-70" - terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 4.0" - } - } - } - - provider "aws" { - region = "us-east-1" # Replace with your desired AWS region - } - - resource "aws_dynamodb_table" "IdempotencyTable" { - name = "IdempotencyTable" - billing_mode = "PAY_PER_REQUEST" - hash_key = "id" - attribute { - name = "id" - type = "S" - } - ttl { - attribute_name = "expiration" - enabled = true - } - } - - resource "aws_lambda_function" "IdempotencyFunction" { - function_name = "IdempotencyFunction" - role = aws_iam_role.IdempotencyFunctionRole.arn - runtime = "nodejs18.x" - handler = "index.handler" - filename = "lambda.zip" - } +=== "AWS Serverless Application Model (SAM) example" - resource "aws_iam_role" "IdempotencyFunctionRole" { - name = "IdempotencyFunctionRole" - - assume_role_policy = jsonencode({ - Version = "2012-10-17" - Statement = [ - { - Sid = "" - Effect = "Allow" - Principal = { - Service = "lambda.amazonaws.com" - } - Action = "sts:AssumeRole" - }, - ] - }) - } + ```yaml title="template.yaml" hl_lines="6-14 24-31" + --8<-- "docs/snippets/idempotency/templates/tableSam.yaml" + ``` - resource "aws_iam_policy" "LambdaDynamoDBPolicy" { - name = "LambdaDynamoDBPolicy" - description = "IAM policy for Lambda function to access DynamoDB" - policy = jsonencode({ - Version = "2012-10-17" - Statement = [ - { - Sid = "AllowDynamodbReadWrite" - Effect = "Allow" - Action = [ - "dynamodb:PutItem", - "dynamodb:GetItem", - "dynamodb:UpdateItem", - "dynamodb:DeleteItem", - ] - Resource = aws_dynamodb_table.IdempotencyTable.arn - }, - ] - }) - } +=== "Terraform example" - resource "aws_iam_role_policy_attachment" "IdempotencyFunctionRoleAttachment" { - role = aws_iam_role.IdempotencyFunctionRole.name - policy_arn = aws_iam_policy.LambdaDynamoDBPolicy.arn - } + ```terraform title="template.tf" hl_lines="14-26 64-70" + --8<-- "docs/snippets/idempotency/templates/tableTerraform.tf" ``` ???+ warning "Warning: Large responses with DynamoDB persistence layer" @@ -232,7 +130,7 @@ You can quickly start by initializing the `DynamoDBPersistenceLayer` class and u === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts::13" + --8<-- "docs/snippets/idempotency/types.ts:3:16" ``` After processing this request successfully, a second request containing the exact same payload above will now return the same response, ensuring our customer isn't charged twice. @@ -260,7 +158,7 @@ When using `makeIdempotent` on arbitrary functions, you can tell us which argume === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts::13" + --8<-- "docs/snippets/idempotency/types.ts:3:16" ``` The function this example has two arguments, note that while wrapping it with the `makeIdempotent` high-order function, we specify the `dataIndexArgument` as `1` to tell the decorator that the second argument is the one that contains the data we should use to make the function idempotent. Remember that arguments are zero-indexed, so the first argument is `0`, the second is `1`, and so on. @@ -283,7 +181,7 @@ If you are using [Middy](https://middy.js.org){target="_blank"} as your middlewa === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts::13" + --8<-- "docs/snippets/idempotency/types.ts:3:16" ``` ### Choosing a payload subset for idempotency @@ -310,42 +208,13 @@ Imagine the function executes successfully, but the client never receives the re === "Example event" ```json hl_lines="28" - { - "version":"2.0", - "routeKey":"ANY /createpayment", - "rawPath":"/createpayment", - "rawQueryString":"", - "headers": { - "Header1": "value1", - "X-Idempotency-Key": "abcdefg" - }, - "requestContext":{ - "accountId":"123456789012", - "apiId":"api-id", - "domainName":"id.execute-api.us-east-1.amazonaws.com", - "domainPrefix":"id", - "http":{ - "method":"POST", - "path":"/createpayment", - "protocol":"HTTP/1.1", - "sourceIp":"ip", - "userAgent":"agent" - }, - "requestId":"id", - "routeKey":"ANY /createpayment", - "stage":"$default", - "time":"10/Feb/2021:13:40:43 +0000", - "timeEpoch":1612964443723 - }, - "body":"{\"user\":\"xyz\",\"productId\":\"123456789\"}", - "isBase64Encoded":false - } + --8<-- "docs/snippets/idempotency/samples/makeIdempotentJmes.json" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts::13" + --8<-- "docs/snippets/idempotency/types.ts:3:16" ``` ### Lambda timeouts @@ -747,25 +616,13 @@ This means that we will raise **`IdempotencyKeyError`** if the evaluation of **` === "Success Event" ```json hl_lines="3 6" - { - "user": { - "uid": "BB0D045C-8878-40C8-889E-38B3CB0A61B1", - "name": "Foo" - }, - "productId": 10000 - } + --8<-- "docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json" ``` === "Failure Event" ```json hl_lines="3 5" - { - "user": { - "uid": "BB0D045C-8878-40C8-889E-38B3CB0A61B1", - "name": "foo", - "productId": 10000 - } - } + --8<-- "docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json" ``` ### Batch integration @@ -788,32 +645,7 @@ This ensures that you process each record in an idempotent manner, and guard aga === "Sample event" ```json hl_lines="4" - { - "Records": [ - { - "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", - "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", - "body": "Test message.", - "attributes": { - "ApproximateReceiveCount": "1", - "SentTimestamp": "1545082649183", - "SenderId": "AIDAIENQZJOLO23YVJ4VO", - "ApproximateFirstReceiveTimestamp": "1545082649185" - }, - "messageAttributes": { - "testAttr": { - "stringValue": "100", - "binaryValue": "base64Str", - "dataType": "Number" - } - }, - "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", - "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", - "awsRegion": "us-east-2" - } - ] - } + --8<-- "docs/snippets/idempotency/samples/workingWithBatch.json" ``` ### Customizing AWS SDK configuration @@ -854,6 +686,42 @@ The example function above would cause data to be stored in DynamoDB like this: | idempotency#MyLambdaFunction | 2b2cdb5f86361e97b4383087c1ffdf27 | 1636549571 | COMPLETED | {"paymentId": "527212", "message": "success", "statusCode": 200} | | idempotency#MyLambdaFunction | f091d2527ad1c78f05d54cc3f363be80 | 1636549585 | IN_PROGRESS | | +### Bring your own persistent store + +This utility provides an abstract base class (ABC), so that you can implement your choice of persistent storage layer. + +You can create your own persistent store from scratch by inheriting the `BasePersistenceLayer` class, and implementing `_getRecord()`, `_putRecord()`, `_updateRecord()` and `_deleteRecord()`. + +* `_getRecord()` – Retrieves an item from the persistence store using an idempotency key and returns it as a `IdempotencyRecord` instance. +* `_putRecord()` – Adds a `IdempotencyRecord` to the persistence store if it doesn't already exist with that key. Throws an `IdempotencyItemAlreadyExistsError` error if a non-expired entry already exists. +* `_updateRecord()` – Updates an item in the persistence store. +* `_deleteRecord()` – Removes an item from the persistence store. + +Below an example implementation of a custom persistence layer backed by a generic key-value store. + +=== "CustomPersistenceLayer" + + ```typescript hl_lines="9 19 28 34 50 90" + --8<-- "docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts" + ``` + +=== "index.ts" + + ```typescript hl_lines="10" + --8<-- "docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts" + ``` + +=== "types.ts" + + ```typescript + --8<-- "docs/snippets/idempotency/types.ts" + ``` + +???+ danger + Pay attention to the documentation for each - you may need to perform additional checks inside these methods to ensure the idempotency guarantees remain intact. + + For example, the `_putRecord()` method needs to throw an error if a non-expired record already exists in the data store with a matching key. + ## Extra resources If you're interested in a deep dive on how Amazon uses idempotency when building our APIs, check out diff --git a/package-lock.json b/package-lock.json index 1e9966a1b5..d3cbbe8aa6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5936,6 +5936,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "engines": { "node": ">= 4.0.0" } @@ -6728,7 +6729,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -6834,6 +6836,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7497,7 +7500,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -9517,6 +9521,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -10007,7 +10012,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -10273,6 +10279,7 @@ "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, "engines": { "node": ">= 4" } @@ -11740,6 +11747,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -13484,6 +13492,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15456,6 +15465,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "engines": { "node": ">=6" } @@ -17486,6 +17496,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -17936,6 +17947,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } From fa24180857d217c8ba04614a892d420c5afc29f7 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi <dreamorosi@gmail.com> Date: Fri, 15 Sep 2023 13:30:31 +0200 Subject: [PATCH 26/28] chore(maintenance): bump dependencies + apply `peerDependencies` (#1685) * chore: bump dependencies * chore: remove external deps from examples so they're bundled * chore: update build script to include peerDeps * chore: fix tsconfig examples * chore: downgrade lerna due to nodejs14x * chore: bump version number --- .github/scripts/release_patch_package_json.js | 9 +- docs/snippets/package.json | 20 +- examples/cdk/package.json | 16 +- examples/cdk/src/example-stack.ts | 5 +- examples/cdk/tests/tsconfig.json | 11 + examples/cdk/tsconfig.es.json | 40 - examples/sam/package.json | 12 +- examples/sam/template.yaml | 44 +- examples/sam/tests/tsconfig.json | 11 + examples/sam/tsconfig.es.json | 40 - layers/package.json | 6 +- package-lock.json | 1974 +++++++---------- packages/commons/package.json | 10 +- packages/commons/src/version.ts | 2 +- packages/idempotency/package.json | 8 +- packages/logger/package.json | 8 + packages/metrics/package.json | 10 +- packages/parameters/package.json | 42 +- packages/testing/package.json | 8 +- packages/tracer/package.json | 19 +- 20 files changed, 1012 insertions(+), 1283 deletions(-) create mode 100644 examples/cdk/tests/tsconfig.json delete mode 100644 examples/cdk/tsconfig.es.json create mode 100644 examples/sam/tests/tsconfig.json delete mode 100644 examples/sam/tsconfig.es.json diff --git a/.github/scripts/release_patch_package_json.js b/.github/scripts/release_patch_package_json.js index 73c1758246..626d4cc7d1 100644 --- a/.github/scripts/release_patch_package_json.js +++ b/.github/scripts/release_patch_package_json.js @@ -18,10 +18,7 @@ if (process.argv.length < 3) { const basePath = resolve(process.argv[2]); const packageJsonPath = join(basePath, 'package.json'); const alphaPackages = []; -const betaPackages = [ - '@aws-lambda-powertools/idempotency', - '@aws-lambda-powertools/batch', -]; +const betaPackages = []; (() => { try { @@ -39,6 +36,8 @@ const betaPackages = [ bugs, keywords, dependencies, + peerDependencies, + peerDependenciesMeta, exports, typesVersions, main, @@ -67,6 +66,8 @@ const betaPackages = [ bugs, keywords, dependencies, + peerDependencies, + peerDependenciesMeta, main, types, files, diff --git a/docs/snippets/package.json b/docs/snippets/package.json index 0258196766..8a44267483 100644 --- a/docs/snippets/package.json +++ b/docs/snippets/package.json @@ -28,15 +28,15 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-dynamodb": "^3.360.0", - "aws-sdk": "^2.1405.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0", - "axios": "^1.2.4", - "hashi-vault-js": "^0.4.13" + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/util-dynamodb": "^3.413.0", + "aws-sdk": "^2.1458.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0", + "axios": "^1.5.0", + "hashi-vault-js": "^0.4.14" } } diff --git a/examples/cdk/package.json b/examples/cdk/package.json index 34e9bbf1bf..9e58bb5cdf 100644 --- a/examples/cdk/package.json +++ b/examples/cdk/package.json @@ -30,13 +30,13 @@ "@aws-lambda-powertools/metrics": "^1.12.1", "@aws-lambda-powertools/parameters": "^1.12.1", "@aws-lambda-powertools/tracer": "^1.12.1", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", - "@types/aws-lambda": "^8.10.109", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", + "@types/aws-lambda": "^8.10.121", "@types/jest": "^29.5.4", - "@types/node": "18.11.17", - "aws-cdk": "^2.73.0", - "esbuild": "^0.19.2", + "@types/node": "20.6.1", + "aws-cdk": "^2.96.1", + "esbuild": "^0.19.3", "jest": "^29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -44,8 +44,8 @@ }, "dependencies": { "@middy/core": "^3.6.2", - "aws-cdk-lib": "^2.73.0", - "constructs": "^10.1.194", + "aws-cdk-lib": "^2.96.1", + "constructs": "^10.2.70", "phin": "^3.7.0", "source-map-support": "^0.5.21" } diff --git a/examples/cdk/src/example-stack.ts b/examples/cdk/src/example-stack.ts index 179f86149b..b7cfa0d9ed 100644 --- a/examples/cdk/src/example-stack.ts +++ b/examples/cdk/src/example-stack.ts @@ -23,12 +23,11 @@ const commonProps: Partial<NodejsFunctionProps> = { }, bundling: { externalModules: [ - '@aws-sdk/lib-dynamodb', - '@aws-sdk/client-dynamodb', '@aws-lambda-powertools/commons', '@aws-lambda-powertools/logger', '@aws-lambda-powertools/tracer', '@aws-lambda-powertools/metrics', + '@aws-lambda-powertools/parameters', ], }, layers: [], @@ -54,7 +53,7 @@ export class CdkAppStack extends Stack { 'powertools-layer', `arn:aws:lambda:${ Stack.of(this).region - }:094274105915:layer:AWSLambdaPowertoolsTypeScript:16` + }:094274105915:layer:AWSLambdaPowertoolsTypeScript:18` ) ); diff --git a/examples/cdk/tests/tsconfig.json b/examples/cdk/tests/tsconfig.json new file mode 100644 index 0000000000..03963f6b04 --- /dev/null +++ b/examples/cdk/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/examples/cdk/tsconfig.es.json b/examples/cdk/tsconfig.es.json deleted file mode 100644 index aef0f9473a..0000000000 --- a/examples/cdk/tsconfig.es.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ - "src/" - ] - }, - "include": [ - "src/**/*", - "tests/**/*" - ], - "exclude": [ - "./node_modules" - ], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ - "ES2020" - ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/examples/sam/package.json b/examples/sam/package.json index f594b74ef9..c19a3e80a7 100644 --- a/examples/sam/package.json +++ b/examples/sam/package.json @@ -21,9 +21,9 @@ "*.js": "npm run lint-fix" }, "devDependencies": { - "@types/aws-lambda": "^8.10.109", + "@types/aws-lambda": "^8.10.121", "@types/jest": "^29.5.4", - "@types/node": "18.11.17", + "@types/node": "20.6.1", "jest": "^29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -34,11 +34,11 @@ "@aws-lambda-powertools/metrics": "^1.12.1", "@aws-lambda-powertools/parameters": "^1.12.1", "@aws-lambda-powertools/tracer": "^1.12.1", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", "@middy/core": "^3.6.2", - "esbuild": "^0.19.2", + "esbuild": "^0.19.3", "phin": "^3.7.0" } } diff --git a/examples/sam/template.yaml b/examples/sam/template.yaml index 46e18f412e..3f19a4c5d3 100644 --- a/examples/sam/template.yaml +++ b/examples/sam/template.yaml @@ -31,11 +31,11 @@ Parameters: # https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy-globals.html Globals: Function: - Runtime: nodejs18.x - Architectures: - - x86_64 - MemorySize: 128 - Timeout: 100 + Runtime: nodejs18.x + Architectures: + - x86_64 + MemorySize: 128 + Timeout: 100 # Resources declares the AWS resources that you want to include in the stack # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html @@ -76,11 +76,8 @@ Resources: BuildMethod: esbuild BuildProperties: Minify: true - Target: "ES2020" + Target: 'ES2020' Sourcemap: true - External: - - "@aws-sdk/lib-dynamodb" - - "@aws-sdk/client-dynamodb" EntryPoints: - src/get-all-items.ts @@ -93,7 +90,8 @@ Resources: Policies: # Give Create/Read/Update/Delete Permissions to the SampleTable - DynamoDBReadPolicy: - TableName: !Ref SampleTable + TableName: + !Ref SampleTable # add ssm:getParameter permission to the function - SSMParameterWithSlashPrefixReadPolicy: ParameterName: !Ref uuidApiUrlParameter @@ -118,11 +116,8 @@ Resources: BuildMethod: esbuild BuildProperties: Minify: true - Target: "ES2020" + Target: 'ES2020' Sourcemap: true - External: - - "@aws-sdk/lib-dynamodb" - - "@aws-sdk/client-dynamodb" EntryPoints: - src/get-by-id.ts @@ -156,10 +151,8 @@ Resources: BuildMethod: esbuild BuildProperties: Minify: true - Target: "ES2020" + Target: 'ES2020' Sourcemap: true - External: - - "uuid" EntryPoints: - src/get-uuid.ts @@ -169,9 +162,8 @@ Resources: Properties: Name: /app/uuid-api-url Type: String - Description: "Example parameter for UUID API URL" - Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}/" - + Description: 'Example parameter for UUID API URL' + Value: !Sub 'https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}/' # This is a Lambda function config associated with the source code: put-item.js putItemFunction: @@ -206,11 +198,8 @@ Resources: BuildMethod: esbuild BuildProperties: Minify: true - Target: "ES2020" + Target: 'ES2020' Sourcemap: true - External: - - "@aws-sdk/lib-dynamodb" - - "@aws-sdk/client-dynamodb" EntryPoints: - src/put-item.ts @@ -226,7 +215,7 @@ Resources: Type: AWS::ApiGateway::RestApi Properties: Name: !Sub ${AWS::StackName}-uuid-api - Description: "Example API for UUID generation" + Description: 'Example API for UUID generation' apiGatewayDeployment: Type: AWS::ApiGateway::Deployment @@ -290,7 +279,6 @@ Resources: RetentionInDays: 1 Outputs: - UuidWebEndpoint: - Description: "API Gateway endpoint URL for UUID endpoint" - Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/dev/" \ No newline at end of file + Description: 'API Gateway endpoint URL for UUID endpoint' + Value: !Sub 'https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/dev/' diff --git a/examples/sam/tests/tsconfig.json b/examples/sam/tests/tsconfig.json new file mode 100644 index 0000000000..03963f6b04 --- /dev/null +++ b/examples/sam/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "../", + "noEmit": true + }, + "include": [ + "../src/**/*", + "./**/*", + ] +} \ No newline at end of file diff --git a/examples/sam/tsconfig.es.json b/examples/sam/tsconfig.es.json deleted file mode 100644 index aef0f9473a..0000000000 --- a/examples/sam/tsconfig.es.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2020", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "outDir": "lib", - "removeComments": false, - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ - "src/" - ] - }, - "include": [ - "src/**/*", - "tests/**/*" - ], - "exclude": [ - "./node_modules" - ], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ - "ES2020" - ], - "types": [ - "jest", - "node" - ] -} \ No newline at end of file diff --git a/layers/package.json b/layers/package.json index 80115a55cb..edef2aacb3 100644 --- a/layers/package.json +++ b/layers/package.json @@ -37,8 +37,8 @@ "source-map-support": "^0.5.21" }, "dependencies": { - "aws-cdk": "^2.88.0", - "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.18.17" + "aws-cdk": "^2.96.1", + "aws-cdk-lib": "^2.96.1", + "esbuild": "^0.19.3" } } diff --git a/package-lock.json b/package-lock.json index d3cbbe8aa6..a783f1779c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,16 +58,16 @@ "version": "1.9.0", "license": "MIT-0", "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-dynamodb": "^3.360.0", - "aws-sdk": "^2.1405.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0", - "axios": "^1.2.4", - "hashi-vault-js": "^0.4.13" + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/util-dynamodb": "^3.413.0", + "aws-sdk": "^2.1458.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0", + "axios": "^1.5.0", + "hashi-vault-js": "^0.4.14" } }, "examples/cdk": { @@ -76,8 +76,8 @@ "license": "MIT-0", "dependencies": { "@middy/core": "^3.6.2", - "aws-cdk-lib": "^2.73.0", - "constructs": "^10.1.194", + "aws-cdk-lib": "^2.96.1", + "constructs": "^10.2.70", "phin": "^3.7.0", "source-map-support": "^0.5.21" }, @@ -90,13 +90,13 @@ "@aws-lambda-powertools/metrics": "^1.12.1", "@aws-lambda-powertools/parameters": "^1.12.1", "@aws-lambda-powertools/tracer": "^1.12.1", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", - "@types/aws-lambda": "^8.10.109", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", + "@types/aws-lambda": "^8.10.121", "@types/jest": "^29.5.4", - "@types/node": "18.11.17", - "aws-cdk": "^2.73.0", - "esbuild": "^0.19.2", + "@types/node": "20.6.1", + "aws-cdk": "^2.96.1", + "esbuild": "^0.19.3", "jest": "^29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -104,9 +104,9 @@ } }, "examples/cdk/node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.1.tgz", + "integrity": "sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g==", "dev": true }, "examples/sam": { @@ -118,17 +118,17 @@ "@aws-lambda-powertools/metrics": "^1.12.1", "@aws-lambda-powertools/parameters": "^1.12.1", "@aws-lambda-powertools/tracer": "^1.12.1", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", "@middy/core": "^3.6.2", - "esbuild": "^0.19.2", + "esbuild": "^0.19.3", "phin": "^3.7.0" }, "devDependencies": { - "@types/aws-lambda": "^8.10.109", + "@types/aws-lambda": "^8.10.121", "@types/jest": "^29.5.4", - "@types/node": "18.11.17", + "@types/node": "20.6.1", "jest": "^29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -136,18 +136,18 @@ } }, "examples/sam/node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.1.tgz", + "integrity": "sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g==", "dev": true }, "layers": { "version": "1.12.1", "license": "MIT-0", "dependencies": { - "aws-cdk": "^2.88.0", - "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.18.17" + "aws-cdk": "^2.96.1", + "aws-cdk-lib": "^2.96.1", + "esbuild": "^0.19.3" }, "bin": { "layer": "bin/layers.js" @@ -157,42 +157,6 @@ "source-map-support": "^0.5.21" } }, - "layers/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -231,9 +195,9 @@ "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==" }, "node_modules/@aws-cdk/cli-lib-alpha": { - "version": "2.88.0-alpha.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.88.0-alpha.0.tgz", - "integrity": "sha512-UKYAwGcNxSlPLZHlLyf/JEziTt830xl5A2OFJ5R3D2vgpT3YuQb5lTz07Wzi8qacHjaSbHV5gAf5r73rBtYXeA==", + "version": "2.96.1-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.96.1-alpha.0.tgz", + "integrity": "sha512-KRPG90986E+TbC9VDHR01R5SUct+aM5CEal8fLEn5hYg79Rp8Haaa96OwPaX/aiZdo+sM0v4fCaLICxG5/QZPg==", "engines": { "node": ">= 14.15.0" } @@ -362,46 +326,46 @@ "link": true }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.410.0.tgz", - "integrity": "sha512-44Q+7do689TBuKLI6hgmbNvB10pORfiQ9fmv1bwAC2u9ofp7+6jGWJoB9NBpiMik07dKizEnVjG/h8s4Pj5EVQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.413.0.tgz", + "integrity": "sha512-Fb7No9yKoiN4YUmDfvdqW0UYAtso4cXdpzwBOhqclEK5kOhhK0Hbx6iJBJMF5Gp6M2ZhuMVMJKz6uyiD9eL/kQ==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", - "@smithy/util-stream": "^2.0.9", + "@smithy/util-stream": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, @@ -410,47 +374,47 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.410.0.tgz", - "integrity": "sha512-KDV95lC7GPsBgSDDmcGwzWV86cpz+64KVqpq+SVb6alxyKtbCrKxJmcg15eqvd8/ZchCqIKNr4/xZNjYuCd4YA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.413.0.tgz", + "integrity": "sha512-3LwR4J8GyQo1B9oeoqmLsPPIzoxu4HEqiw8nrEquvKv+cq6nPYVM8cjLbcSJD261iwoUp9Y2U6FBldaFEHUn4g==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.6", + "@smithy/util-waiter": "^2.0.7", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -459,47 +423,47 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.410.0.tgz", - "integrity": "sha512-Uq5+ePGx+SnUMuCKMqhZ8q6hSHiWoBNpJXYr9fpL9zcZQ63chCBIOqOYw71OqKH8D89aRa8Y6G6dlt7/tW8CXQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.413.0.tgz", + "integrity": "sha512-NtJdNE/m0yARJIG0HeMFrkQYdKxffnKMPvaRTlBy+bG6SOp1W5iwLj4jvjxa7eYMRMhcfQzS6LOkh+o6QaWuOQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-endpoint-discovery": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-endpoint-discovery": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.6", + "@smithy/util-waiter": "^2.0.7", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -508,51 +472,51 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.410.0.tgz", - "integrity": "sha512-zbcdA++4zE1ODRCmKkbZT4N0f4I5pVXLEP5uBtE0Bxgs1UyiHlqHFfjQprdW9CeaMmtTBHEBB6dDcKlGGOSU/w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.413.0.tgz", + "integrity": "sha512-hFkaHul+bpWjUOeBIh4uvMwkv1Tfeo3XXXSag5Kbkl3RNJxqfjCYjHl0MamczmknvNLskv0EZffvNlTyTa91sg==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/eventstream-serde-browser": "^2.0.6", - "@smithy/eventstream-serde-config-resolver": "^2.0.6", - "@smithy/eventstream-serde-node": "^2.0.6", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/eventstream-serde-browser": "^2.0.7", + "@smithy/eventstream-serde-config-resolver": "^2.0.7", + "@smithy/eventstream-serde-node": "^2.0.7", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", - "@smithy/util-stream": "^2.0.9", + "@smithy/util-stream": "^2.0.10", "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.6", + "@smithy/util-waiter": "^2.0.7", "tslib": "^2.5.0" }, "engines": { @@ -560,44 +524,44 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.410.0.tgz", - "integrity": "sha512-+h+33cU8JpOFp1tfY/oNh6nMzCq0/hUBw/HW1l6nrKQa66+xiGcqaZ6mq/2l/1Fzime0DQMidPy/75ApQRBg2w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.413.0.tgz", + "integrity": "sha512-nD0q6yUYmcR7LfAW91iNNpaUQCmXJ+3tqO+RdJKmRJxZ4iZPuy+EAwjNUXwIv58tyhmooYVZqNC5dCG6KTEhmw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0", @@ -608,46 +572,46 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.410.0.tgz", - "integrity": "sha512-SbnQxFHU/fm/kMN3/9hie1TKZoBUhwSRV8fMmIsTu0nztr5Kv5Xdi/SbBVA2uBc0VyBbED2nY2PMMh4IbHY37w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.413.0.tgz", + "integrity": "sha512-nXiyWFg65+0uJjYuSggBRqOkEfXhwnRsQeLaBice7Fydu6XIOh3ftHASuUiYYfj48ux6Mxfa9HOEyPuWmvdlaA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.6", + "@smithy/util-waiter": "^2.0.7", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -656,40 +620,40 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.410.0.tgz", - "integrity": "sha512-MC9GrgwtlOuSL2WS3DRM3dQ/5y+49KSMMJRH6JiEcU5vE0dX/OtEcX+VfEwpi73x5pSfIjm7xnzjzOFx+sQBIg==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.413.0.tgz", + "integrity": "sha512-mK+lygF85FzPAO+h9C0GZiFHxb9FguGVfpmovOTczjDE7LMp20D8kAk0hZGf/oshD+R/wdkmcmYugl/aBlvVZg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -699,43 +663,43 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.410.0.tgz", - "integrity": "sha512-e6VMrBJtnTxxUXwDmkADGIvyppmDMFf4+cGGA68tVCUm1cFNlCI6M/67bVSIPN/WVKAAfhEL5O2vVXCM7aatYg==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.413.0.tgz", + "integrity": "sha512-tNRK3qso5RQfbmMyr9dG79UDHyVKyNaJgytlhGcUkhcRGMlTFqoTW02C6poA5Hj9BEUQyKUJueOnWz4rVNQnEg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-sdk-sts": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "fast-xml-parser": "4.2.5", @@ -746,44 +710,44 @@ } }, "node_modules/@aws-sdk/client-xray": { - "version": "3.412.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.412.0.tgz", - "integrity": "sha512-bOHrCNLP2GzeB79xyOUoDjC/2+7iDVD7dgGuu0T5mDlDLEtcDvUDRZwDK8lqUItfdGJLcO32auC3dCNUEhQJ3g==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.413.0.tgz", + "integrity": "sha512-BQA2JgaQ341BwZJqsRk7WQ4pEHBS5TaLxEQ3tzjJAedw9gcnCcfWkFeD7hRcu3aAPzh+QGfCpsimgcCpjRhKMw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.410.0", - "@aws-sdk/credential-provider-node": "3.410.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/client-sts": "3.413.0", + "@aws-sdk/credential-provider-node": "3.413.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", - "@smithy/protocol-http": "^3.0.2", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -793,13 +757,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.410.0.tgz", - "integrity": "sha512-c7TB9LbN0PkFOsXI0lcRJnqPNOmc4VBvrHf8jP/BkTDg4YUoKQKOFd4d0SqzODmlZiAyoMQVZTR4ISZo95Zj4Q==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", "dependencies": { - "@aws-sdk/types": "3.410.0", + "@aws-sdk/types": "3.413.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -807,19 +771,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.410.0.tgz", - "integrity": "sha512-D8rcr5bRCFD0f42MPQ7K6TWZq5d3pfqrKINL1/bpfkK5BJbvq1BGYmR88UC6CLpTRtZ1LHY2HgYG0fp/2zjjww==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.410.0", - "@aws-sdk/credential-provider-process": "3.410.0", - "@aws-sdk/credential-provider-sso": "3.410.0", - "@aws-sdk/credential-provider-web-identity": "3.410.0", - "@aws-sdk/types": "3.410.0", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.413.0.tgz", + "integrity": "sha512-h5UUGBvDfBg9F1U6XbWquFMqbe8uqY/FNv4ngfxYaj8zSk2iTfJ9s918vmRlduiKFB0Z1GaaxNv20z6d/usVrA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.413.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.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.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -827,20 +791,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.410.0.tgz", - "integrity": "sha512-0wmVm33T/j1FS7MZ/j+WsPlgSc0YnCXnpbWSov1Mn6R86SHI2b2JhdIPRRE4XbGfyW2QGNUl2CwoZVaqhXeF5g==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.410.0", - "@aws-sdk/credential-provider-ini": "3.410.0", - "@aws-sdk/credential-provider-process": "3.410.0", - "@aws-sdk/credential-provider-sso": "3.410.0", - "@aws-sdk/credential-provider-web-identity": "3.410.0", - "@aws-sdk/types": "3.410.0", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.413.0.tgz", + "integrity": "sha512-kXfdZrOKN8KN9pjvppLhSHXVBDRCzhDQtTyJudx6UwENgp5x1ARBKFTTg4I7B1+SgMsmIH3GMA0K6woLVAIXoA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.413.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.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.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -848,14 +812,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.410.0.tgz", - "integrity": "sha512-BMju1hlDCDNkkSZpKF5SQ8G0WCLRj6/Jvw9QmudLHJuVwYJXEW1r2AsVMg98OZ3hB9G+MAvHruHZIbMiNmUMXQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", "dependencies": { - "@aws-sdk/types": "3.410.0", + "@aws-sdk/types": "3.413.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -863,16 +827,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.410.0.tgz", - "integrity": "sha512-zEaoY/sY+KYTlQUkp9dvveAHf175b8RIt0DsQkDrRPtrg/RBHR00r5rFvz9+nrwsR8546RaBU7h/zzTaQGhmcA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.413.0.tgz", + "integrity": "sha512-wLQYJ916imwUr+MdvAE1PGC4fQ6MBhnJeBxCjHjCYBFVYs69U3u6sYL4TT6BPsKtSo3k9gnjSkUvBa4OCerQ0w==", "dependencies": { - "@aws-sdk/client-sso": "3.410.0", - "@aws-sdk/token-providers": "3.410.0", - "@aws-sdk/types": "3.410.0", + "@aws-sdk/client-sso": "3.413.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -880,13 +844,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.410.0.tgz", - "integrity": "sha512-cE0l8LmEHdWbDkdPNgrfdYSgp4/cIVXrjUKI1QCATA729CrHZ/OQjB/maOBOrMHO9YTiggko887NkslVvwVB7w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", "dependencies": { - "@aws-sdk/types": "3.410.0", + "@aws-sdk/types": "3.413.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -917,11 +881,11 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.410.0.tgz", - "integrity": "sha512-YdGd8/DeN9zHXnvBh6zp+iZnFJtQ1JSTAye7OPPcno+xqW8KYoT+cn/vHzljtMoNEBhUE4udmaeqwYPOYSQCGA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.413.0.tgz", + "integrity": "sha512-6E04ZpdUNv1Q8DGVFWZxK8eny7cYhy/wZWoAU4jaA1Ui7Haqpv1ujVdkSK5JHaO6KTYNt7RFaF25NzI6eitnmA==", "dependencies": { - "@aws-sdk/util-dynamodb": "3.410.0", + "@aws-sdk/util-dynamodb": "3.413.0", "tslib": "^2.5.0" }, "engines": { @@ -932,14 +896,14 @@ } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.410.0.tgz", - "integrity": "sha512-XHX4IqsyF3yVmh7mgeq9HMg0bpUOMhO5659JF56MdyxZ8JPVZVsgWfJYmQ/hCMG850kvYXS2/8kxCjERrONQFA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.413.0.tgz", + "integrity": "sha512-guQwWLjeveLtLuoPRoX61mE00WI9VyOSiY8d2ofVWsywn92Xiq6zZG/sKhC6OzsAZXLpBY6aItVWvtQE4cr6gA==", "dependencies": { "@aws-sdk/endpoint-cache": "3.310.0", - "@aws-sdk/types": "3.410.0", - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -947,13 +911,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.410.0.tgz", - "integrity": "sha512-ED/OVcyITln5rrxnajZP+V0PN1nug+gSDHJDqdDo/oLy7eiDr/ZWn3nlWW7WcMplQ1/Jnb+hK0UetBp/25XooA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", "dependencies": { - "@aws-sdk/types": "3.410.0", - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -961,12 +925,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.410.0.tgz", - "integrity": "sha512-YtmKYCVtBfScq3/UFJk+aSZOktKJBNZL9DaSc2aPcy/goCVsYDOkGwtHk0jIkC1JRSNCkVTqL7ya60sSr8zaQQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", "dependencies": { - "@aws-sdk/types": "3.410.0", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -974,13 +938,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.410.0.tgz", - "integrity": "sha512-KWaes5FLzRqj28vaIEE4Bimpga2E596WdPF2HaH6zsVMJddoRDsc3ZX9ZhLOGrXzIO1RqBd0QxbLrM0S/B2aOQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", "dependencies": { - "@aws-sdk/types": "3.410.0", - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -988,13 +952,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.410.0.tgz", - "integrity": "sha512-YfBpctDocRR4CcROoDueJA7D+aMLBV8nTFfmVNdLLLgyuLZ/AUR11VQSu1lf9gQZKl8IpKE/BLf2fRE/qV1ZuA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", "dependencies": { - "@aws-sdk/middleware-signing": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@smithy/types": "^2.3.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -1002,15 +966,15 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.410.0.tgz", - "integrity": "sha512-KBAZ/eoAJUSJv5us2HsKwK2OszG2s9FEyKpEhgnHLcbbKzW873zHBH5GcOGEQu4AWArTy2ndzJu3FF+9/J9hJQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", "dependencies": { - "@aws-sdk/types": "3.410.0", + "@aws-sdk/types": "3.413.0", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.2", + "@smithy/protocol-http": "^3.0.3", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, @@ -1019,14 +983,14 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.410.0.tgz", - "integrity": "sha512-ZayDtLfvCZUohSxQc/49BfoU/y6bDHLfLdyyUJbJ54Sv8zQcrmdyKvCBFUZwE6tHQgAmv9/ZT18xECMl+xiONA==", - "dependencies": { - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@smithy/protocol-http": "^3.0.2", - "@smithy/types": "^2.3.0", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -1054,42 +1018,42 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.410.0.tgz", - "integrity": "sha512-d5Nc0xydkH/X0LA1HDyhGY5sEv4LuADFk+QpDtT8ogLilcre+b1jpdY8Sih/gd1KoGS1H+d1tz2hSGwUHAbUbw==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.410.0", - "@aws-sdk/middleware-logger": "3.410.0", - "@aws-sdk/middleware-recursion-detection": "3.410.0", - "@aws-sdk/middleware-user-agent": "3.410.0", - "@aws-sdk/types": "3.410.0", - "@aws-sdk/util-endpoints": "3.410.0", - "@aws-sdk/util-user-agent-browser": "3.410.0", - "@aws-sdk/util-user-agent-node": "3.410.0", - "@smithy/config-resolver": "^2.0.7", - "@smithy/fetch-http-handler": "^2.1.2", - "@smithy/hash-node": "^2.0.6", - "@smithy/invalid-dependency": "^2.0.6", - "@smithy/middleware-content-length": "^2.0.8", - "@smithy/middleware-endpoint": "^2.0.6", - "@smithy/middleware-retry": "^2.0.9", - "@smithy/middleware-serde": "^2.0.6", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/node-http-handler": "^2.1.2", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.2", + "@smithy/protocol-http": "^3.0.3", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.3", - "@smithy/types": "^2.3.0", - "@smithy/url-parser": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", "@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.7", - "@smithy/util-defaults-mode-node": "^2.0.9", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -1099,11 +1063,11 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.410.0.tgz", - "integrity": "sha512-D7iaUCszv/v04NDaZUmCmekamy6VD/lKozm/3gS9+dkfU6cC2CsNoUfPV8BlV6dPdw0oWgF91am3I1stdvfVrQ==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", "dependencies": { - "@smithy/types": "^2.3.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -1136,9 +1100,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.410.0.tgz", - "integrity": "sha512-BHsiggDcotKWUgbv/ZIYGNRzGzkDnek7IRjyZJc/Bl7uA6EnOKAWDS86z+CjnEI9H0vbDnvihLiANdjEcNOa0w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.413.0.tgz", + "integrity": "sha512-kL0nxI5tus1D6O6aUpx2MA3rW+5dT/XtLr5V6jdDTaOWnzbQsMqa3M3Wh9qb8JtuoRgbx4uAhWovrN4JzYR1Rg==", "dependencies": { "tslib": "^2.5.0" }, @@ -1147,11 +1111,11 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.410.0.tgz", - "integrity": "sha512-iNiqJyC7N3+8zFwnXUqcWSxrZecVZLToo1iTQQdeYL2af1IcOtRgb7n8jpAI/hmXhBSx2+3RI+Y7pxyFo1vu+w==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", "dependencies": { - "@aws-sdk/types": "3.410.0", + "@aws-sdk/types": "3.413.0", "tslib": "^2.5.0" }, "engines": { @@ -1170,24 +1134,24 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.410.0.tgz", - "integrity": "sha512-i1G/XGpXGMRT2zEiAhi1xucJsfCWk8nNYjk/LbC0sA+7B9Huri96YAzVib12wkHPsJQvZxZC6CpQDIHWm4lXMA==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", "dependencies": { - "@aws-sdk/types": "3.410.0", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.410.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.410.0.tgz", - "integrity": "sha512-bK70t1jHRl8HrJXd4hEIwc5PBZ7U0w+81AKFnanIVKZwZedd6nLibUXDTK14z/Jp2GFcBqd4zkt2YLGkRt/U4A==", + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", "dependencies": { - "@aws-sdk/types": "3.410.0", - "@smithy/node-config-provider": "^2.0.9", - "@smithy/types": "^2.3.0", + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "engines": { @@ -1317,21 +1281,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", - "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.19.tgz", + "integrity": "sha512-Q8Yj5X4LHVYTbLCKVz0//2D2aDmHF4xzCdEttYvKOnWvErGsa6geHXD6w46x64n5tP69VfeH+IfSrdyH3MLhwA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.22.15", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", + "@babel/helper-module-transforms": "^7.22.19", "@babel/helpers": "^7.22.15", "@babel/parser": "^7.22.16", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", + "@babel/traverse": "^7.22.19", + "@babel/types": "^7.22.19", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1448,16 +1412,16 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", - "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.19.tgz", + "integrity": "sha512-m6h1cJvn+OJ+R3jOHp30faq5xKJ7VbjwDj5RGgHuRlU9hrMeKsGC+JpihkR5w1g7IfseCPPtZ0r7/hB4UKaYlA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.15" + "@babel/helper-validator-identifier": "^7.22.19" }, "engines": { "node": ">=6.9.0" @@ -1509,9 +1473,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz", + "integrity": "sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1829,9 +1793,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.19.tgz", + "integrity": "sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", @@ -1841,7 +1805,7 @@ "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", + "@babel/types": "^7.22.19", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1859,13 +1823,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", + "@babel/helper-validator-identifier": "^7.22.19", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1901,9 +1865,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.3.tgz", + "integrity": "sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==", "cpu": [ "arm" ], @@ -1916,9 +1880,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.3.tgz", + "integrity": "sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==", "cpu": [ "arm64" ], @@ -1931,9 +1895,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.3.tgz", + "integrity": "sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==", "cpu": [ "x64" ], @@ -1946,9 +1910,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.3.tgz", + "integrity": "sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==", "cpu": [ "arm64" ], @@ -1961,9 +1925,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.3.tgz", + "integrity": "sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==", "cpu": [ "x64" ], @@ -1976,9 +1940,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.3.tgz", + "integrity": "sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==", "cpu": [ "arm64" ], @@ -1991,9 +1955,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.3.tgz", + "integrity": "sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==", "cpu": [ "x64" ], @@ -2006,9 +1970,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.3.tgz", + "integrity": "sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==", "cpu": [ "arm" ], @@ -2021,9 +1985,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.3.tgz", + "integrity": "sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==", "cpu": [ "arm64" ], @@ -2036,9 +2000,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.3.tgz", + "integrity": "sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==", "cpu": [ "ia32" ], @@ -2051,9 +2015,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.3.tgz", + "integrity": "sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==", "cpu": [ "loong64" ], @@ -2066,9 +2030,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.3.tgz", + "integrity": "sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==", "cpu": [ "mips64el" ], @@ -2081,9 +2045,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.3.tgz", + "integrity": "sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==", "cpu": [ "ppc64" ], @@ -2096,9 +2060,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.3.tgz", + "integrity": "sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==", "cpu": [ "riscv64" ], @@ -2111,9 +2075,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.3.tgz", + "integrity": "sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==", "cpu": [ "s390x" ], @@ -2126,9 +2090,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.3.tgz", + "integrity": "sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==", "cpu": [ "x64" ], @@ -2141,9 +2105,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.3.tgz", + "integrity": "sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==", "cpu": [ "x64" ], @@ -2156,9 +2120,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.3.tgz", + "integrity": "sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==", "cpu": [ "x64" ], @@ -2171,9 +2135,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.3.tgz", + "integrity": "sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==", "cpu": [ "x64" ], @@ -2186,9 +2150,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.3.tgz", + "integrity": "sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==", "cpu": [ "arm64" ], @@ -2201,9 +2165,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.3.tgz", + "integrity": "sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==", "cpu": [ "ia32" ], @@ -2216,9 +2180,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.3.tgz", + "integrity": "sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==", "cpu": [ "x64" ], @@ -3471,6 +3435,15 @@ "ieee754": "^1.2.1" } }, + "node_modules/@npmcli/arborist/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/@npmcli/arborist/node_modules/gauge": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", @@ -3490,6 +3463,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", @@ -3505,6 +3487,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@npmcli/arborist/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -3749,6 +3740,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/move-file": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", @@ -3844,6 +3844,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/package-json/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -3935,12 +3944,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "node_modules/@npmcli/run-script/node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", @@ -5228,9 +5231,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + "version": "18.17.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.16.tgz", + "integrity": "sha512-e0zgs7qe1XH/X3KEPnldfkD07LH9O1B9T31U8qoO7lqGSjj3/IrBuvqMeJ1aYejXRK3KOphIUDw6pLIplEW17A==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -5287,9 +5290,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.3.tgz", - "integrity": "sha512-taHQQH/3ZyI3zP8M/puluDEIEvtQHVYcC6y3N8ijFtAd28+Ey/G4sg1u2gB01S8MwybLOKAp9/yCMu/uR5l3Ug==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", "dev": true }, "node_modules/@types/yargs": { @@ -5959,9 +5962,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.96.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.96.0.tgz", - "integrity": "sha512-Zk/6q6taSqeKtWFmDqpdh9LQuB9ZKTLj7eiFCvUtGRP9Zo9Td13tj6Gxg6i/YDeeJT1oSIN3gD+0jQ4Yj5p/4A==", + "version": "2.96.1", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.96.1.tgz", + "integrity": "sha512-dCMriGZj2w6/B5+bu45knQM9QmPpDoUMiGCzsxALsOJVu/Fr5QwvmHxRBTc48uaVAOlYN2qQsAcG5H6TXtBJhg==", "bin": { "cdk": "bin/cdk" }, @@ -5973,9 +5976,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.96.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.96.0.tgz", - "integrity": "sha512-344rjcoVt9IXkQYJF6X+rpfiAaIX2PIWZtGJN4vE63VeCYEiEnzEQL4kNfET7xK5/+1kuRULQudjSwKoLQHAvQ==", + "version": "2.96.1", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.96.1.tgz", + "integrity": "sha512-7jo7btYghU0OCx9BUi/CmEL967Udc3PNm45uBxn6P2ipvhuYSLkJj0toNiln8uPmMKdTzZPH2r22kX+7N9NzQw==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -6313,9 +6316,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1457.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1457.0.tgz", - "integrity": "sha512-Gj6R/YISU9L8XzFWJgOW6dKDAZciiCvHs0CGb9GCHsxHO2vgQf2rVrvxV8kg/5ISypOCRtqT9J1xY7HK35fYOA==", + "version": "2.1458.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1458.0.tgz", + "integrity": "sha512-FpUjBpPzRm7l0kQeMAWD8VRySpAOO8WVY3pfOd74w7wKO/CZ7RVsiqM1aiw8ybiVZ3lFnCw84VtRvssYk865TA==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -6334,9 +6337,9 @@ } }, "node_modules/aws-sdk-client-mock": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-2.2.0.tgz", - "integrity": "sha512-Kq2N+6gHRDedbrgTA0NMMfyN1XDWEA5Kbpm9/M/cenSxoNjfvQBOtBawI1lQe5h4UziLl///E7u17K9PBoHEKA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aws-sdk-client-mock/-/aws-sdk-client-mock-3.0.0.tgz", + "integrity": "sha512-4mBiWhuLYLZe1+K/iB8eYy5SAZyW2se+Keyh5u9QouMt6/qJ5SRZhss68xvUX5g3ApzROJ06QPRziYHP6buuvQ==", "dev": true, "dependencies": { "@types/sinon": "^10.0.10", @@ -6345,16 +6348,16 @@ } }, "node_modules/aws-sdk-client-mock-jest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-2.2.0.tgz", - "integrity": "sha512-lpPapmCjTe70qhXYFIjUL9cdA75YmtC0surig3QSr2Y5doaG1e4fuXlgkNeH6V873rlwu9TWCG2MFOr4rHuMfg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-3.0.0.tgz", + "integrity": "sha512-oV1rBQZc4UumLbzZAhi8UAehUq+k75hkQYGLrVIP0iJj85Z9xw+EaSsmJke/KQ8Z3vng+Xv1xbounsxpvZpunQ==", "dev": true, "dependencies": { "@types/jest": "^28.1.3", "tslib": "^2.1.0" }, "peerDependencies": { - "aws-sdk-client-mock": "2.2.0" + "aws-sdk-client-mock": "3.0.0" } }, "node_modules/aws-sdk-client-mock-jest/node_modules/@jest/expect-utils": { @@ -6553,15 +6556,6 @@ "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", @@ -7032,6 +7026,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/cacache/node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -7749,12 +7752,21 @@ "node": ">=10" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", @@ -8135,9 +8147,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.520", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.520.tgz", - "integrity": "sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==", + "version": "1.4.522", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.522.tgz", + "integrity": "sha512-KGKjcafTpOxda0kqwQ72M0tDmX6RsGhUJTy0Hr7slt0+CgHh9Oex8JdjY9Og68dUkTLUlBOJC0A5W5Mw3QSGCg==", "dev": true }, "node_modules/emitter-listener": { @@ -8233,9 +8245,9 @@ } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -8260,18 +8272,18 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", @@ -8287,23 +8299,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -8313,409 +8325,79 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", - "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.3", - "@esbuild/android-arm64": "0.19.3", - "@esbuild/android-x64": "0.19.3", - "@esbuild/darwin-arm64": "0.19.3", - "@esbuild/darwin-x64": "0.19.3", - "@esbuild/freebsd-arm64": "0.19.3", - "@esbuild/freebsd-x64": "0.19.3", - "@esbuild/linux-arm": "0.19.3", - "@esbuild/linux-arm64": "0.19.3", - "@esbuild/linux-ia32": "0.19.3", - "@esbuild/linux-loong64": "0.19.3", - "@esbuild/linux-mips64el": "0.19.3", - "@esbuild/linux-ppc64": "0.19.3", - "@esbuild/linux-riscv64": "0.19.3", - "@esbuild/linux-s390x": "0.19.3", - "@esbuild/linux-x64": "0.19.3", - "@esbuild/netbsd-x64": "0.19.3", - "@esbuild/openbsd-x64": "0.19.3", - "@esbuild/sunos-x64": "0.19.3", - "@esbuild/win32-arm64": "0.19.3", - "@esbuild/win32-ia32": "0.19.3", - "@esbuild/win32-x64": "0.19.3" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.3.tgz", - "integrity": "sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.3.tgz", - "integrity": "sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.3.tgz", - "integrity": "sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.3.tgz", - "integrity": "sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.3.tgz", - "integrity": "sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.3.tgz", - "integrity": "sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.3.tgz", - "integrity": "sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.3.tgz", - "integrity": "sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.3.tgz", - "integrity": "sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.3.tgz", - "integrity": "sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.3.tgz", - "integrity": "sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.3.tgz", - "integrity": "sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.3.tgz", - "integrity": "sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.3.tgz", - "integrity": "sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.3.tgz", - "integrity": "sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.3.tgz", - "integrity": "sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.3.tgz", - "integrity": "sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.3.tgz", - "integrity": "sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.3.tgz", - "integrity": "sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.3.tgz", - "integrity": "sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.3.tgz", - "integrity": "sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "node_modules/esbuild": { "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.3.tgz", - "integrity": "sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", + "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.3", + "@esbuild/android-arm64": "0.19.3", + "@esbuild/android-x64": "0.19.3", + "@esbuild/darwin-arm64": "0.19.3", + "@esbuild/darwin-x64": "0.19.3", + "@esbuild/freebsd-arm64": "0.19.3", + "@esbuild/freebsd-x64": "0.19.3", + "@esbuild/linux-arm": "0.19.3", + "@esbuild/linux-arm64": "0.19.3", + "@esbuild/linux-ia32": "0.19.3", + "@esbuild/linux-loong64": "0.19.3", + "@esbuild/linux-mips64el": "0.19.3", + "@esbuild/linux-ppc64": "0.19.3", + "@esbuild/linux-riscv64": "0.19.3", + "@esbuild/linux-s390x": "0.19.3", + "@esbuild/linux-x64": "0.19.3", + "@esbuild/netbsd-x64": "0.19.3", + "@esbuild/openbsd-x64": "0.19.3", + "@esbuild/sunos-x64": "0.19.3", + "@esbuild/win32-arm64": "0.19.3", + "@esbuild/win32-ia32": "0.19.3", + "@esbuild/win32-x64": "0.19.3" } }, "node_modules/escalade": { @@ -9114,12 +8796,12 @@ "dev": true }, "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "dev": true, "engines": { - "node": ">=0.8.x" + "node": ">=0.4.x" } }, "node_modules/execa": { @@ -9544,6 +9226,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -11690,13 +11381,10 @@ "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -12517,6 +12205,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/libnpmpublish/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -12723,15 +12420,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/listr2": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", @@ -13147,15 +12835,6 @@ "node": ">=12" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/make-fetch-happen/node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -13524,12 +13203,12 @@ } }, "node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, "node_modules/minipass-collect": { @@ -13579,6 +13258,15 @@ "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -14234,15 +13922,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -14889,6 +14568,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/pacote/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -15029,6 +14717,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -15047,12 +14744,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -15590,6 +15281,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/read-package-json/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -15630,12 +15330,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "node_modules/read-package-json/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -15911,9 +15605,9 @@ } }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.5.tgz", + "integrity": "sha512-qWhv7PF1V95QPvRoUGHxOtnAlEvlXBylMZcjUR9pAumMmveFtcHJRXGIr+TkjfNJVQypqv2qcDiiars2y1PsSg==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -17944,12 +17638,12 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { @@ -18050,11 +17744,11 @@ "version": "1.12.1", "license": "MIT-0", "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-lambda": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-lambda": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/util-utf8-node": "^3.259.0" } }, @@ -18069,11 +17763,11 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", "@types/jmespath": "^0.15.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0" }, "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", @@ -18103,6 +17797,14 @@ "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", "@types/lodash.merge": "^4.6.7" + }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, "packages/metrics": { @@ -18114,9 +17816,17 @@ }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.360.0", + "@aws-sdk/client-cloudwatch": "^3.413.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" + }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } }, "packages/parameters": { @@ -18128,13 +17838,41 @@ "@aws-sdk/util-base64-node": "^3.209.0" }, "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-dynamodb": "^3.360.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/util-dynamodb": "^3.413.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-appconfigdata": ">=3.x", + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/client-secrets-manager": ">=3.x", + "@aws-sdk/client-ssm": ">=3.x", + "@aws-sdk/util-dynamodb": ">=3.x", + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-appconfigdata": { + "optional": true + }, + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/client-secrets-manager": { + "optional": true + }, + "@aws-sdk/client-ssm": { + "optional": true + }, + "@aws-sdk/util-dynamodb": { + "optional": true + }, + "@middy/core": { + "optional": true + } } }, "packages/testing": { @@ -18142,9 +17880,9 @@ "version": "1.12.1", "license": "MIT-0", "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", - "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.19.2" + "@aws-cdk/cli-lib-alpha": "^2.96.1-alpha.0", + "aws-cdk-lib": "^2.96.1", + "esbuild": "^0.19.3" } }, "packages/tracer": { @@ -18153,16 +17891,24 @@ "license": "MIT-0", "dependencies": { "@aws-lambda-powertools/commons": "^1.12.1", - "aws-xray-sdk-core": "^3.4.1" + "aws-xray-sdk-core": "^3.5.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-xray": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-xray": "^3.413.0", "@types/promise-retry": "^1.1.3", - "aws-sdk": "^2.1354.0", - "axios": "^1.2.1", + "aws-sdk": "^2.1458.0", + "axios": "^1.5.0", "promise-retry": "^2.0.1" + }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } } } } diff --git a/packages/commons/package.json b/packages/commons/package.json index a7bbde3aeb..f6e9df5ac1 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -46,11 +46,11 @@ "nodejs" ], "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-lambda": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-lambda": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/util-utf8-node": "^3.259.0" } } diff --git a/packages/commons/src/version.ts b/packages/commons/src/version.ts index 0c204b7732..f9f331fd56 100644 --- a/packages/commons/src/version.ts +++ b/packages/commons/src/version.ts @@ -1,2 +1,2 @@ // this file is auto generated, do not modify -export const PT_VERSION = '1.12.1'; +export const PT_VERSION = '1.12.2'; diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 51e286f15a..a86e461b14 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -109,10 +109,10 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/lib-dynamodb": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/lib-dynamodb": "^3.413.0", "@types/jmespath": "^0.15.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0" } } \ No newline at end of file diff --git a/packages/logger/package.json b/packages/logger/package.json index 0d2aceaa24..6b02abfe3c 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -34,6 +34,14 @@ "@aws-lambda-powertools/testing-utils": "file:../testing", "@types/lodash.merge": "^4.6.7" }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } + }, "files": [ "lib" ], diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 6215132367..4b07644c5d 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -32,10 +32,18 @@ "types": "./lib/index.d.ts", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.360.0", + "@aws-sdk/client-cloudwatch": "^3.413.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } + }, "files": [ "lib" ], diff --git a/packages/parameters/package.json b/packages/parameters/package.json index d39ac6599c..254259bf2b 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -137,16 +137,44 @@ "nodejs" ], "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.360.0", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-secrets-manager": "^3.360.0", - "@aws-sdk/client-ssm": "^3.360.0", - "@aws-sdk/util-dynamodb": "^3.360.0", - "aws-sdk-client-mock": "^2.2.0", - "aws-sdk-client-mock-jest": "^2.2.0" + "@aws-sdk/client-appconfigdata": "^3.413.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-secrets-manager": "^3.413.0", + "@aws-sdk/client-ssm": "^3.413.0", + "@aws-sdk/util-dynamodb": "^3.413.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0" }, "dependencies": { "@aws-lambda-powertools/commons": "^1.12.1", "@aws-sdk/util-base64-node": "^3.209.0" + }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x", + "@aws-sdk/client-appconfigdata": ">=3.x", + "@aws-sdk/client-dynamodb": ">=3.x", + "@aws-sdk/client-secrets-manager": ">=3.x", + "@aws-sdk/client-ssm": ">=3.x", + "@aws-sdk/util-dynamodb": ">=3.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + }, + "@aws-sdk/client-appconfigdata": { + "optional": true + }, + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/client-secrets-manager": { + "optional": true + }, + "@aws-sdk/client-ssm": { + "optional": true + }, + "@aws-sdk/util-dynamodb": { + "optional": true + } } } diff --git a/packages/testing/package.json b/packages/testing/package.json index 28814fd43e..21f59ed3fc 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -9,7 +9,7 @@ "private": true, "scripts": { "test": "npm run test:unit", - "test:unit": "jest --group=unit --detectOpenHandles --coverage --verbose", + "test:unit": "jest --group=unit --detectOpenHandles --verbose", "test:e2e": "echo 'Not implemented'", "watch": "jest --watch", "build": "tsc --build --force", @@ -43,8 +43,8 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { - "@aws-cdk/cli-lib-alpha": "^2.88.0-alpha.0", - "aws-cdk-lib": "^2.88.0", - "esbuild": "^0.19.2" + "@aws-cdk/cli-lib-alpha": "^2.96.1-alpha.0", + "aws-cdk-lib": "^2.96.1", + "esbuild": "^0.19.3" } } diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 6e9c6dae66..732f627073 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -32,13 +32,22 @@ "types": "./lib/index.d.ts", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.360.0", - "@aws-sdk/client-xray": "^3.360.0", + "@aws-sdk/client-dynamodb": "^3.413.0", + "@aws-sdk/client-xray": "^3.413.0", "@types/promise-retry": "^1.1.3", - "aws-sdk": "^2.1354.0", - "axios": "^1.2.1", + "aws-sdk": "^2.1458.0", + "axios": "^1.5.0", "promise-retry": "^2.0.1" }, + "peerDependencies": { + "@middy/core": ">=3.x <4.x" + }, + "peerDependenciesMeta": { + "@middy/core": { + "optional": true + } + }, + "files": [ "lib" ], @@ -51,7 +60,7 @@ }, "dependencies": { "@aws-lambda-powertools/commons": "^1.12.1", - "aws-xray-sdk-core": "^3.4.1" + "aws-xray-sdk-core": "^3.5.1" }, "keywords": [ "aws", From e253755d09f50a75cde805168845f52d8b85af28 Mon Sep 17 00:00:00 2001 From: Alexander Schueren <amelnyk@amazon.com> Date: Mon, 18 Sep 2023 13:46:01 +0200 Subject: [PATCH 27/28] feat(batch): rename AsyncBatchProcessor to default BatchProcessor (#1683) * docs: change async processing to default in the docs --- .../snippets/batch/accessProcessedMessages.ts | 2 +- .../batch/advancedTracingRecordHandler.ts | 2 +- docs/snippets/batch/customPartialProcessor.ts | 16 +- docs/snippets/batch/gettingStartedAsync.ts | 8 +- .../batch/gettingStartedDynamoDBStreams.ts | 2 +- .../batch/gettingStartedErrorHandling.ts | 2 +- docs/snippets/batch/gettingStartedKinesis.ts | 2 +- docs/snippets/batch/gettingStartedSQS.ts | 2 +- docs/snippets/batch/gettingStartedSQSFifo.ts | 4 +- docs/utilities/batch.md | 69 +++++---- packages/batch/README.md | 36 ++--- packages/batch/src/BasePartialProcessor.ts | 87 +++++------ packages/batch/src/BatchProcessor.ts | 28 ++-- ...atchProcessor.ts => BatchProcessorSync.ts} | 32 ++-- packages/batch/src/SqsFifoPartialProcessor.ts | 8 +- packages/batch/src/index.ts | 4 +- packages/batch/src/processPartialResponse.ts | 7 +- ...ponse.ts => processPartialResponseSync.ts} | 8 +- .../batch/tests/unit/BatchProcessor.test.ts | 111 +++++++------- ...sor.test.ts => BatchProcessorSync.test.ts} | 139 ++++++++---------- .../unit/SqsFifoPartialProcessor.test.ts | 14 +- .../tests/unit/processPartialResponse.test.ts | 95 +++++++----- ....ts => processPartialResponseSync.test.ts} | 107 ++++++-------- 23 files changed, 411 insertions(+), 374 deletions(-) rename packages/batch/src/{AsyncBatchProcessor.ts => BatchProcessorSync.ts} (66%) rename packages/batch/src/{asyncProcessPartialResponse.ts => processPartialResponseSync.ts} (84%) rename packages/batch/tests/unit/{AsyncBatchProcessor.test.ts => BatchProcessorSync.test.ts} (63%) rename packages/batch/tests/unit/{asyncProcessPartialResponse.test.ts => processPartialResponseSync.test.ts} (62%) diff --git a/docs/snippets/batch/accessProcessedMessages.ts b/docs/snippets/batch/accessProcessedMessages.ts index fe5d727ea0..ea99abeda7 100644 --- a/docs/snippets/batch/accessProcessedMessages.ts +++ b/docs/snippets/batch/accessProcessedMessages.ts @@ -25,7 +25,7 @@ export const handler = async ( const batch = event.Records; // (1)! processor.register(batch, recordHandler, { context }); // (2)! - const processedMessages = processor.process(); + const processedMessages = await processor.process(); for (const message of processedMessages) { const status: 'success' | 'fail' = message[0]; diff --git a/docs/snippets/batch/advancedTracingRecordHandler.ts b/docs/snippets/batch/advancedTracingRecordHandler.ts index 4de43b3198..a65c9f976d 100644 --- a/docs/snippets/batch/advancedTracingRecordHandler.ts +++ b/docs/snippets/batch/advancedTracingRecordHandler.ts @@ -15,7 +15,7 @@ import type { const processor = new BatchProcessor(EventType.SQS); const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const recordHandler = (record: SQSRecord): void => { +const recordHandler = async (record: SQSRecord): Promise<void> => { const subsegment = tracer.getSegment()?.addNewSubsegment('### recordHandler'); // (1)! subsegment?.addAnnotation('messageId', record.messageId); // (2)! diff --git a/docs/snippets/batch/customPartialProcessor.ts b/docs/snippets/batch/customPartialProcessor.ts index 6ebd113282..e634b74d53 100644 --- a/docs/snippets/batch/customPartialProcessor.ts +++ b/docs/snippets/batch/customPartialProcessor.ts @@ -27,12 +27,6 @@ class MyPartialProcessor extends BasePartialBatchProcessor { this.#tableName = tableName; } - public async asyncProcessRecord( - _record: BaseRecord - ): Promise<SuccessResponse | FailureResponse> { - throw new Error('Not implemented'); - } - /** * It's called once, **after** processing the batch. * @@ -64,13 +58,21 @@ class MyPartialProcessor extends BasePartialBatchProcessor { this.successMessages = []; } + public async processRecord( + _record: BaseRecord + ): Promise<SuccessResponse | FailureResponse> { + throw new Error('Not implemented'); + } + /** * It handles how your record is processed. * * Here we are keeping the status of each run, `this.handler` is * the function that is passed when calling `processor.register()`. */ - public processRecord(record: BaseRecord): SuccessResponse | FailureResponse { + public processRecordSync( + record: BaseRecord + ): SuccessResponse | FailureResponse { try { const result = this.handler(record); diff --git a/docs/snippets/batch/gettingStartedAsync.ts b/docs/snippets/batch/gettingStartedAsync.ts index 0080752026..1d41e06624 100644 --- a/docs/snippets/batch/gettingStartedAsync.ts +++ b/docs/snippets/batch/gettingStartedAsync.ts @@ -1,7 +1,7 @@ import { - AsyncBatchProcessor, + BatchProcessor, EventType, - asyncProcessPartialResponse, + processPartialResponse, } from '@aws-lambda-powertools/batch'; import axios from 'axios'; // axios is an external dependency import type { @@ -11,7 +11,7 @@ import type { SQSBatchResponse, } from 'aws-lambda'; -const processor = new AsyncBatchProcessor(EventType.SQS); +const processor = new BatchProcessor(EventType.SQS); const recordHandler = async (record: SQSRecord): Promise<number> => { const res = await axios.post('https://httpbin.org/anything', { @@ -25,7 +25,7 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise<SQSBatchResponse> => { - return await asyncProcessPartialResponse(event, recordHandler, processor, { + return await processPartialResponse(event, recordHandler, processor, { context, }); }; diff --git a/docs/snippets/batch/gettingStartedDynamoDBStreams.ts b/docs/snippets/batch/gettingStartedDynamoDBStreams.ts index 3304d31b95..8c4ee77e98 100644 --- a/docs/snippets/batch/gettingStartedDynamoDBStreams.ts +++ b/docs/snippets/batch/gettingStartedDynamoDBStreams.ts @@ -14,7 +14,7 @@ import type { const processor = new BatchProcessor(EventType.DynamoDBStreams); // (1)! const logger = new Logger(); -const recordHandler = (record: DynamoDBRecord): void => { +const recordHandler = async (record: DynamoDBRecord): Promise<void> => { if (record.dynamodb && record.dynamodb.NewImage) { logger.info('Processing record', { record: record.dynamodb.NewImage }); const message = record.dynamodb.NewImage.Message.S; diff --git a/docs/snippets/batch/gettingStartedErrorHandling.ts b/docs/snippets/batch/gettingStartedErrorHandling.ts index 08efa51732..20b2b32f60 100644 --- a/docs/snippets/batch/gettingStartedErrorHandling.ts +++ b/docs/snippets/batch/gettingStartedErrorHandling.ts @@ -21,7 +21,7 @@ class InvalidPayload extends Error { } } -const recordHandler = (record: SQSRecord): void => { +const recordHandler = async (record: SQSRecord): Promise<void> => { const payload = record.body; if (payload) { const item = JSON.parse(payload); diff --git a/docs/snippets/batch/gettingStartedKinesis.ts b/docs/snippets/batch/gettingStartedKinesis.ts index 2def6b2e55..b4f3e7403f 100644 --- a/docs/snippets/batch/gettingStartedKinesis.ts +++ b/docs/snippets/batch/gettingStartedKinesis.ts @@ -14,7 +14,7 @@ import type { const processor = new BatchProcessor(EventType.KinesisDataStreams); // (1)! const logger = new Logger(); -const recordHandler = (record: KinesisStreamRecord): void => { +const recordHandler = async (record: KinesisStreamRecord): Promise<void> => { logger.info('Processing record', { record: record.kinesis.data }); const payload = JSON.parse(record.kinesis.data); logger.info('Processed item', { item: payload }); diff --git a/docs/snippets/batch/gettingStartedSQS.ts b/docs/snippets/batch/gettingStartedSQS.ts index 9878b865e9..5d03281490 100644 --- a/docs/snippets/batch/gettingStartedSQS.ts +++ b/docs/snippets/batch/gettingStartedSQS.ts @@ -15,7 +15,7 @@ const processor = new BatchProcessor(EventType.SQS); // (1)! const logger = new Logger(); // prettier-ignore -const recordHandler = (record: SQSRecord): void => { // (2)! +const recordHandler = async (record: SQSRecord): Promise<void> => { // (2)! const payload = record.body; if (payload) { const item = JSON.parse(payload); diff --git a/docs/snippets/batch/gettingStartedSQSFifo.ts b/docs/snippets/batch/gettingStartedSQSFifo.ts index 5c63c1e0d7..3b7e03b3a6 100644 --- a/docs/snippets/batch/gettingStartedSQSFifo.ts +++ b/docs/snippets/batch/gettingStartedSQSFifo.ts @@ -1,6 +1,6 @@ import { SqsFifoPartialProcessor, - processPartialResponse, + processPartialResponseSync, } from '@aws-lambda-powertools/batch'; import { Logger } from '@aws-lambda-powertools/logger'; import type { @@ -25,7 +25,7 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise<SQSBatchResponse> => { - return processPartialResponse(event, recordHandler, processor, { + return processPartialResponseSync(event, recordHandler, processor, { context, }); }; diff --git a/docs/utilities/batch.md b/docs/utilities/batch.md index ac426546e5..47c14cad56 100644 --- a/docs/utilities/batch.md +++ b/docs/utilities/batch.md @@ -52,7 +52,7 @@ journey Records expired: 1: Failure ``` -This behavior changes when you enable Report Batch Item Failures feature in your Lambda function event source configuration: +This behavior changes when you enable [ReportBatchItemFailures feature](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting) in your Lambda function event source configuration: <!-- markdownlint-disable MD013 --> * [**SQS queues**](#sqs-standard). Only messages reported as failure will return to the queue for a retry, while successful ones will be deleted. @@ -69,11 +69,11 @@ This behavior changes when you enable Report Batch Item Failures feature in your For this feature to work, you need to **(1)** configure your Lambda function event source to use `ReportBatchItemFailures`, and **(2)** return [a specific response](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-batchfailurereporting){target="_blank" rel="nofollow"} to report which records failed to be processed. -You use your preferred deployment framework to set the correct configuration while this utility handles the correct response to be returned. +Use your preferred deployment framework to set the correct configuration while this utility handles the correct response to be returned. ### Required resources -The remaining sections of the documentation will rely on these samples. For completeness, this demonstrates IAM permissions and Dead Letter Queue where batch records will be sent after 2 retries were attempted. +The remaining sections of the documentation will rely on these samples. For completeness, this demonstrates IAM permissions and Dead Letter Queue where batch records will be sent after 2 retries. !!! note "You do not need any additional IAM permissions to use this utility, except for what each event source requires." @@ -137,7 +137,7 @@ Processing batches from SQS works in three stages: #### FIFO queues When using [SQS FIFO queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html){target="_blank"}, we will stop processing messages after the first failure, and return all failed and unprocessed messages in `batchItemFailures`. -This helps preserve the ordering of messages in your queue. +This helps preserve the ordering of messages in your queue. ```typescript hl_lines="1-4 13 28-30" --8<-- "docs/snippets/batch/gettingStartedSQSFifo.ts" @@ -145,6 +145,10 @@ This helps preserve the ordering of messages in your queue. 1. **Step 1**. Creates a partial failure batch processor for SQS FIFO queues. See [partial failure mechanics for details](#partial-failure-mechanics) +!!! Note + Note that SqsFifoPartialProcessor is synchronous using `processPartialResponseSync`. + This is because we need to preserve the order of messages in the queue. See [Async or sync processing section](#async-or-sync-processing) for more details. + ### Processing messages from Kinesis Processing batches from Kinesis works in three stages: @@ -225,7 +229,7 @@ By default, we catch any exception raised by your record handler function. This --8<-- ``` - 1. Any exception works here. See [extending BatchProcessor section, if you want to override this behavior.](#extending-batchprocessor) + 1. Any exception works here. See [extending BatchProcessorSync section, if you want to override this behavior.](#extending-batchprocessor) 2. Exceptions raised in `record_handler` will propagate to `process_partial_response`. <br/><br/> We catch them and include each failed batch item identifier in the response dictionary (see `Sample response` tab). @@ -356,21 +360,29 @@ sequenceDiagram <i>Kinesis and DynamoDB streams mechanism with multiple batch item failures</i> </center> -### Processing messages asynchronously +### Async or sync processing -You can use `AsyncBatchProcessor` class and `asyncProcessPartialResponse` function to process messages concurrently. +There are two processors you can use with this utility: -???+ question "When is this useful?" - Your use case might be able to process multiple records at the same time without conflicting with one another. +* **`BatchProcessor`** and **`processPartialResponse`** – Processes messages asynchronously +* **`BatchProcessorSync`** and **`processPartialResponseSync`** – Processes messages synchronously + +In most cases your function will be `async` returning a `Promise`. Therefore, the `BatchProcessor` is the default processor handling your batch records asynchronously. +There are use cases where you need to process the batch records synchronously. For example, when you need to process multiple records at the same time without conflicting with one another. +For such cases we recommend to use the `BatchProcessorSync` and `processPartialResponseSync` functions. + +!!! info "Note that you need match your processing function with the right batch processor" + * If your function is `async` returning a `Promise`, use `BatchProcessor` and `processPartialResponse` + * If your function is not `async`, use `BatchProcessorSync` and `processPartialResponseSync` +The difference between the two processors in implementation is that `BatchProcessor` uses `Promise.all()` while `BatchProcessorSync` loops through each record to preserve the order. + +???+ question "When is this useful?" + For example, imagine you need to process multiple loyalty points and incrementally save in a database. While you await the database to confirm your records are saved, you could start processing another request concurrently. The reason this is not the default behaviour is that not all use cases can handle concurrency safely (e.g., loyalty points must be updated in order). -```typescript hl_lines="1-5 14 28-30" title="High-concurrency with AsyncBatchProcessor" ---8<-- "docs/snippets/batch/gettingStartedAsync.ts" -``` - ## Advanced ### Accessing processed messages @@ -380,6 +392,7 @@ Use the `BatchProcessor` directly in your function to access a list of all retur * **When successful**. We will include a tuple with `success`, the result of `recordHandler`, and the batch record * **When failed**. We will include a tuple with `fail`, exception as a string, and the batch record + ```typescript hl_lines="25 27-28 30-33 38" title="Accessing processed messages" --8<-- "docs/snippets/batch/accessProcessedMessages.ts" ``` @@ -391,7 +404,7 @@ Use the `BatchProcessor` directly in your function to access a list of all retur Within your `recordHandler` function, you might need access to the Lambda context to determine how much time you have left before your function times out. -We can automatically inject the [Lambda context](https://docs.aws.amazon.com/lambda/latest/dg/typescript-context.html){target="_blank"} into your `recordHandler` as optional second argument if you register it when using `BatchProcessor` or the `processPartialResponse` function. +We can automatically inject the [Lambda context](https://docs.aws.amazon.com/lambda/latest/dg/typescript-context.html){target="_blank"} into your `recordHandler` as optional second argument if you register it when using `BatchProcessorSync` or the `processPartialResponseSync` function. ```typescript hl_lines="17 35" --8<-- "docs/snippets/batch/accessLambdaContext.ts" @@ -408,14 +421,14 @@ For these scenarios, you can subclass `BatchProcessor` and quickly override `suc ???+ example Let's suppose you'd like to add a metric named `BatchRecordFailures` for each batch record that failed processing - -```typescript hl_lines="17 21 25 31 35" title="Extending failure handling mechanism in BatchProcessor" ---8<-- "docs/snippets/batch/extendingFailure.ts" -``` + + ```typescript hl_lines="17 21 25 31 35" title="Extending failure handling mechanism in BatchProcessor" + --8<-- "docs/snippets/batch/extendingFailure.ts" + ``` ### Create your own partial processor -You can create your own partial batch processor from scratch by inheriting the `BasePartialProcessor` class, and implementing the `prepare()`, `clean()`, `processRecord()` and `asyncProcessRecord()` abstract methods. +You can create your own partial batch processor from scratch by inheriting the `BasePartialProcessor` class, and implementing the `prepare()`, `clean()`, `processRecord()` and `processRecordSync()` abstract methods. <center> ```mermaid @@ -426,28 +439,26 @@ classDiagram +prepare() +clean() +processRecord(record: BaseRecord) - +asyncProcessRecord(record: BaseRecord) + +processRecordSync(record: BaseRecord) } - class YourCustomProcessor { +prepare() +clean() +processRecord(record: BaseRecord) - +asyncProcessRecord(record: BaseRecord) + +processRecordSyc(record: BaseRecord) } - BasePartialProcessor <|-- YourCustomProcessor : extends ``` <i>Visual representation to bring your own processor</i> </center> -* **`processRecord()`** – handles all processing logic for each individual message of a batch, including calling the `recordHandler` (`this.handler`) * **`prepare()`** – called once as part of the processor initialization * **`clean()`** – teardown logic called once after `processRecord` completes -* **`asyncProcessRecord()`** – If you need to implement asynchronous logic, use this method, otherwise define it in your class with empty logic - -You can then use this class as a context manager, or pass it to `processPartialResponse` to process the records in your Lambda handler function. +* **`processRecord()`** – If you need to implement asynchronous logic, use this method, otherwise define it in your class with empty logic +* **`processRecordSync()`** – handles all processing logic for each individual message of a batch, including calling the `recordHandler` (`this.handler`) +You can then use this class as a context manager, or pass it to `processPartialResponseSync` to process the records in your Lambda handler function. + ```typescript hl_lines="21 30 41 62 73 84" title="Creating a custom batch processor" --8<-- "docs/snippets/batch/customPartialProcessor.ts" ``` @@ -456,7 +467,7 @@ You can then use this class as a context manager, or pass it to `processPartialR You can use Tracer to create subsegments for each batch record processed. To do so, you can open a new subsegment for each record, and close it when you're done processing it. When adding annotations and metadata to the subsegment, you can do so directly without calling `tracer.setSegment(subsegment)`. This allows you to work with the subsegment directly and avoid having to either pass the parent subsegment around or have to restore the parent subsegment at the end of the record processing. -```ts +```typescript --8<-- "docs/snippets/batch/advancedTracingRecordHandler.ts" ``` @@ -466,7 +477,7 @@ You can use Tracer to create subsegments for each batch record processed. To do ## Testing your code -As there is no external calls, you can unit test your code with `BatchProcessor` quite easily. +As there is no external calls, you can unit test your code with `BatchProcessorSync` quite easily. **Example**: diff --git a/packages/batch/README.md b/packages/batch/README.md index 4883d430f2..ff26800107 100644 --- a/packages/batch/README.md +++ b/packages/batch/README.md @@ -60,9 +60,9 @@ When using SQS as a Lambda event source, you can specify the `EventType.SQS` to ```ts import { - BatchProcessor, + BatchProcessorSync, EventType, - processPartialResponse, + processPartialResponseSync, } from '@aws-lambda-powertools/batch'; import { Logger } from '@aws-lambda-powertools/logger'; import type { @@ -72,7 +72,7 @@ import type { SQSBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.SQS); +const processor = new BatchProcessorSync(EventType.SQS); const logger = new Logger(); const recordHandler = (record: SQSRecord): void => { @@ -87,7 +87,7 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise<SQSBatchResponse> => { - return processPartialResponse(event, recordHandler, processor, { + return processPartialResponseSync(event, recordHandler, processor, { context, }); }; @@ -100,9 +100,9 @@ When using Kinesis Data Streams as a Lambda event source, you can specify the `E ```ts import { - BatchProcessor, + BatchProcessorSync, EventType, - processPartialResponse, + processPartialResponseSync, } from '@aws-lambda-powertools/batch'; import { Logger } from '@aws-lambda-powertools/logger'; import type { @@ -112,7 +112,7 @@ import type { KinesisStreamBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.KinesisDataStreams); +const processor = new BatchProcessorSync(EventType.KinesisDataStreams); const logger = new Logger(); const recordHandler = (record: KinesisStreamRecord): void => { @@ -125,7 +125,7 @@ export const handler = async ( event: KinesisStreamEvent, context: Context ): Promise<KinesisStreamBatchResponse> => { - return processPartialResponse(event, recordHandler, processor, { + return processPartialResponseSync(event, recordHandler, processor, { context, }); }; @@ -133,13 +133,13 @@ export const handler = async ( ### DynamoDB Streams Processor -When using DynamoDB Streams as a Lambda event source, you can use the `BatchProcessor` with the `EventType.DynamoDBStreams` to process the records. The response will be a `DynamoDBBatchResponse` which contains a list of items that failed to be processed. +When using DynamoDB Streams as a Lambda event source, you can use the `BatchProcessorSync` with the `EventType.DynamoDBStreams` to process the records. The response will be a `DynamoDBBatchResponse` which contains a list of items that failed to be processed. ```ts import { - BatchProcessor, + BatchProcessorSync, EventType, - processPartialResponse, + processPartialResponseSync, } from '@aws-lambda-powertools/batch'; import { Logger } from '@aws-lambda-powertools/logger'; import type { @@ -149,7 +149,7 @@ import type { DynamoDBBatchResponse, } from 'aws-lambda'; -const processor = new BatchProcessor(EventType.DynamoDBStreams); +const processor = new BatchProcessorSync(EventType.DynamoDBStreams); const logger = new Logger(); const recordHandler = (record: DynamoDBRecord): void => { @@ -167,7 +167,7 @@ export const handler = async ( event: DynamoDBStreamEvent, context: Context ): Promise<DynamoDBBatchResponse> => { - return processPartialResponse(event, recordHandler, processor, { + return processPartialResponseSync(event, recordHandler, processor, { context, }); }; @@ -175,13 +175,13 @@ export const handler = async ( ### Async processing -If your use case allows you to process multiple records at the same time without conflicting with each other, you can use the `AsyncBatchProcessor` to process records asynchronously. This will create an array of promises that will be resolved once all records have been processed. +If your use case allows you to process multiple records at the same time without conflicting with each other, you can use the `BatchProcessor` to process records asynchronously. This will create an array of promises that will be resolved once all records have been processed. ```ts import { - AsyncBatchProcessor, + BatchProcessor, EventType, - asyncProcessPartialResponse, + processPartialResponse, } from '@aws-lambda-powertools/batch'; import axios from 'axios'; // axios is an external dependency import type { @@ -191,7 +191,7 @@ import type { SQSBatchResponse, } from 'aws-lambda'; -const processor = new AsyncBatchProcessor(EventType.SQS); +const processor = new BatchProcessor(EventType.SQS); const recordHandler = async (record: SQSRecord): Promise<number> => { const res = await axios.post('https://httpbin.org/anything', { @@ -205,7 +205,7 @@ export const handler = async ( event: SQSEvent, context: Context ): Promise<SQSBatchResponse> => { - return await asyncProcessPartialResponse(event, recordHandler, processor, { + return await processPartialResponse(event, recordHandler, processor, { context, }); }; diff --git a/packages/batch/src/BasePartialProcessor.ts b/packages/batch/src/BasePartialProcessor.ts index a51400d4a5..9de6901394 100644 --- a/packages/batch/src/BasePartialProcessor.ts +++ b/packages/batch/src/BasePartialProcessor.ts @@ -34,40 +34,6 @@ abstract class BasePartialProcessor { this.handler = new Function(); } - /** - * Call instance's handler for each record - * @returns List of processed records - */ - public async asyncProcess(): Promise<(SuccessResponse | FailureResponse)[]> { - /** - * If this is an sync processor, user should have called process instead, - * so we call the method early to throw the error early thus failing fast. - */ - if (this.constructor.name === 'BatchProcessor') { - await this.asyncProcessRecord(this.records[0]); - } - this.prepare(); - - const processingPromises: Promise<SuccessResponse | FailureResponse>[] = - this.records.map((record) => this.asyncProcessRecord(record)); - - const processedRecords: (SuccessResponse | FailureResponse)[] = - await Promise.all(processingPromises); - - this.clean(); - - return processedRecords; - } - - /** - * Process a record with an asyncronous handler - * - * @param record Record to be processed - */ - public abstract asyncProcessRecord( - record: BaseRecord - ): Promise<SuccessResponse | FailureResponse>; - /** * Clean class instance after processing */ @@ -99,20 +65,21 @@ abstract class BasePartialProcessor { * Call instance's handler for each record * @returns List of processed records */ - public process(): (SuccessResponse | FailureResponse)[] { + public async process(): Promise<(SuccessResponse | FailureResponse)[]> { /** - * If this is an async processor, user should have called processAsync instead, + * If this is a sync processor, user should have called processSync instead, * so we call the method early to throw the error early thus failing fast. */ - if (this.constructor.name === 'AsyncBatchProcessor') { - this.processRecord(this.records[0]); + if (this.constructor.name === 'BatchProcessorSync') { + await this.processRecord(this.records[0]); } this.prepare(); - const processedRecords: (SuccessResponse | FailureResponse)[] = []; - for (const record of this.records) { - processedRecords.push(this.processRecord(record)); - } + const processingPromises: Promise<SuccessResponse | FailureResponse>[] = + this.records.map((record) => this.processRecord(record)); + + const processedRecords: (SuccessResponse | FailureResponse)[] = + await Promise.all(processingPromises); this.clean(); @@ -120,17 +87,51 @@ abstract class BasePartialProcessor { } /** - * Process a record with the handler + * Process a record with an asyncronous handler + * * @param record Record to be processed */ public abstract processRecord( record: BaseRecord + ): Promise<SuccessResponse | FailureResponse>; + + /** + * Process a record with the handler + * @param record Record to be processed + */ + public abstract processRecordSync( + record: BaseRecord ): SuccessResponse | FailureResponse; + /** + * Call instance's handler for each record + * @returns List of processed records + */ + public processSync(): (SuccessResponse | FailureResponse)[] { + /** + * If this is an async processor, user should have called process instead, + * so we call the method early to throw the error early thus failing fast. + */ + if (this.constructor.name === 'BatchProcessor') { + this.processRecordSync(this.records[0]); + } + this.prepare(); + + const processedRecords: (SuccessResponse | FailureResponse)[] = []; + for (const record of this.records) { + processedRecords.push(this.processRecordSync(record)); + } + + this.clean(); + + return processedRecords; + } + /** * Set class instance attributes before execution * @param records List of records to be processed * @param handler CallableFunction to process entries of "records" + * @param options Options to be used during processing * @returns this object */ public register( diff --git a/packages/batch/src/BatchProcessor.ts b/packages/batch/src/BatchProcessor.ts index 730b3e94ef..bbe9856f07 100644 --- a/packages/batch/src/BatchProcessor.ts +++ b/packages/batch/src/BatchProcessor.ts @@ -6,27 +6,31 @@ import type { BaseRecord, FailureResponse, SuccessResponse } from './types'; * Process native partial responses from SQS, Kinesis Data Streams, and DynamoDB */ class BatchProcessor extends BasePartialBatchProcessor { - public async asyncProcessRecord( - _record: BaseRecord + public async processRecord( + record: BaseRecord ): Promise<SuccessResponse | FailureResponse> { - throw new BatchProcessingError('Not implemented. Use process() instead.'); - } - - /** - * Process a record with instance's handler - * @param record Batch record to be processed - * @returns response of success or failure - */ - public processRecord(record: BaseRecord): SuccessResponse | FailureResponse { try { const data = this.toBatchType(record, this.eventType); - const result = this.handler(data, this.options?.context); + const result = await this.handler(data, this.options?.context); return this.successHandler(record, result); } catch (error) { return this.failureHandler(record, error as Error); } } + + /** + * Process a record with instance's handler + * @param _record Batch record to be processed + * @returns response of success or failure + */ + public processRecordSync( + _record: BaseRecord + ): SuccessResponse | FailureResponse { + throw new BatchProcessingError( + 'Not implemented. Use asyncProcess() instead.' + ); + } } export { BatchProcessor }; diff --git a/packages/batch/src/AsyncBatchProcessor.ts b/packages/batch/src/BatchProcessorSync.ts similarity index 66% rename from packages/batch/src/AsyncBatchProcessor.ts rename to packages/batch/src/BatchProcessorSync.ts index 10c404a323..5bb8ce1f12 100644 --- a/packages/batch/src/AsyncBatchProcessor.ts +++ b/packages/batch/src/BatchProcessorSync.ts @@ -5,18 +5,11 @@ import type { BaseRecord, FailureResponse, SuccessResponse } from './types'; /** * Process native partial responses from SQS, Kinesis Data Streams, and DynamoDB */ -class AsyncBatchProcessor extends BasePartialBatchProcessor { - public async asyncProcessRecord( - record: BaseRecord +class BatchProcessorSync extends BasePartialBatchProcessor { + public async processRecord( + _record: BaseRecord ): Promise<SuccessResponse | FailureResponse> { - try { - const data = this.toBatchType(record, this.eventType); - const result = await this.handler(data, this.options?.context); - - return this.successHandler(record, result); - } catch (error) { - return this.failureHandler(record, error as Error); - } + throw new BatchProcessingError('Not implemented. Use process() instead.'); } /** @@ -24,11 +17,18 @@ class AsyncBatchProcessor extends BasePartialBatchProcessor { * @param record Batch record to be processed * @returns response of success or failure */ - public processRecord(_record: BaseRecord): SuccessResponse | FailureResponse { - throw new BatchProcessingError( - 'Not implemented. Use asyncProcess() instead.' - ); + public processRecordSync( + record: BaseRecord + ): SuccessResponse | FailureResponse { + try { + const data = this.toBatchType(record, this.eventType); + const result = this.handler(data, this.options?.context); + + return this.successHandler(record, result); + } catch (error) { + return this.failureHandler(record, error as Error); + } } } -export { AsyncBatchProcessor }; +export { BatchProcessorSync }; diff --git a/packages/batch/src/SqsFifoPartialProcessor.ts b/packages/batch/src/SqsFifoPartialProcessor.ts index ebdd4d73e8..2aca4ed814 100644 --- a/packages/batch/src/SqsFifoPartialProcessor.ts +++ b/packages/batch/src/SqsFifoPartialProcessor.ts @@ -1,4 +1,4 @@ -import { BatchProcessor } from './BatchProcessor'; +import { BatchProcessorSync } from './BatchProcessorSync'; import { EventType } from './constants'; import { SqsFifoShortCircuitError } from './errors'; import type { FailureResponse, SuccessResponse } from './types'; @@ -8,7 +8,7 @@ import type { FailureResponse, SuccessResponse } from './types'; * Stops processing records when the first record fails * The remaining records are reported as failed items */ -class SqsFifoPartialProcessor extends BatchProcessor { +class SqsFifoPartialProcessor extends BatchProcessorSync { public constructor() { super(EventType.SQS); } @@ -18,7 +18,7 @@ class SqsFifoPartialProcessor extends BatchProcessor { * When the first failed message is detected, the process is short-circuited * And the remaining messages are reported as failed items */ - public process(): (SuccessResponse | FailureResponse)[] { + public processSync(): (SuccessResponse | FailureResponse)[] { this.prepare(); const processedRecords: (SuccessResponse | FailureResponse)[] = []; @@ -30,7 +30,7 @@ class SqsFifoPartialProcessor extends BatchProcessor { return this.shortCircuitProcessing(currentIndex, processedRecords); } - processedRecords.push(this.processRecord(record)); + processedRecords.push(this.processRecordSync(record)); currentIndex++; } diff --git a/packages/batch/src/index.ts b/packages/batch/src/index.ts index 96f931823d..b1b1069b26 100644 --- a/packages/batch/src/index.ts +++ b/packages/batch/src/index.ts @@ -3,8 +3,8 @@ export * from './errors'; export * from './types'; export * from './BasePartialProcessor'; export * from './BasePartialBatchProcessor'; +export * from './BatchProcessorSync'; export * from './BatchProcessor'; -export * from './AsyncBatchProcessor'; +export * from './processPartialResponseSync'; export * from './processPartialResponse'; -export * from './asyncProcessPartialResponse'; export * from './SqsFifoPartialProcessor'; diff --git a/packages/batch/src/processPartialResponse.ts b/packages/batch/src/processPartialResponse.ts index 2385f28666..947b4268b6 100644 --- a/packages/batch/src/processPartialResponse.ts +++ b/packages/batch/src/processPartialResponse.ts @@ -11,21 +11,22 @@ import type { * @param event Lambda's original event * @param recordHandler Callable function to process each record from the batch * @param processor Batch processor to handle partial failure cases + * @param options Batch processing options * @returns Lambda Partial Batch Response */ -const processPartialResponse = ( +const processPartialResponse = async ( event: { Records: BaseRecord[] }, recordHandler: CallableFunction, processor: BasePartialBatchProcessor, options?: BatchProcessingOptions -): PartialItemFailureResponse => { +): Promise<PartialItemFailureResponse> => { if (!event.Records || !Array.isArray(event.Records)) { throw new UnexpectedBatchTypeError(); } processor.register(event.Records, recordHandler, options); - processor.process(); + await processor.process(); return processor.response(); }; diff --git a/packages/batch/src/asyncProcessPartialResponse.ts b/packages/batch/src/processPartialResponseSync.ts similarity index 84% rename from packages/batch/src/asyncProcessPartialResponse.ts rename to packages/batch/src/processPartialResponseSync.ts index 5a33b5b534..474713e7d5 100644 --- a/packages/batch/src/asyncProcessPartialResponse.ts +++ b/packages/batch/src/processPartialResponseSync.ts @@ -13,21 +13,21 @@ import type { * @param processor Batch processor to handle partial failure cases * @returns Lambda Partial Batch Response */ -const asyncProcessPartialResponse = async ( +const processPartialResponseSync = ( event: { Records: BaseRecord[] }, recordHandler: CallableFunction, processor: BasePartialBatchProcessor, options?: BatchProcessingOptions -): Promise<PartialItemFailureResponse> => { +): PartialItemFailureResponse => { if (!event.Records || !Array.isArray(event.Records)) { throw new UnexpectedBatchTypeError(); } processor.register(event.Records, recordHandler, options); - await processor.asyncProcess(); + processor.processSync(); return processor.response(); }; -export { asyncProcessPartialResponse }; +export { processPartialResponseSync }; diff --git a/packages/batch/tests/unit/BatchProcessor.test.ts b/packages/batch/tests/unit/BatchProcessor.test.ts index 0f928b4bc7..99cb2245e5 100644 --- a/packages/batch/tests/unit/BatchProcessor.test.ts +++ b/packages/batch/tests/unit/BatchProcessor.test.ts @@ -1,7 +1,7 @@ /** - * Test BatchProcessor class + * Test AsyncBatchProcessor class * - * @group unit/batch/class/batchprocessor + * @group unit/batch/class/asyncBatchProcessor */ import type { Context } from 'aws-lambda'; import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; @@ -15,13 +15,13 @@ import { sqsRecordFactory, } from '../helpers/factories'; import { - dynamodbRecordHandler, - handlerWithContext, - kinesisRecordHandler, - sqsRecordHandler, + asyncDynamodbRecordHandler, + asyncKinesisRecordHandler, + asyncSqsRecordHandler, + asyncHandlerWithContext, } from '../helpers/handlers'; -describe('Class: BatchProcessor', () => { +describe('Class: AsyncBatchProcessor', () => { const ENVIRONMENT_VARIABLES = process.env; const options: BatchProcessingOptions = { context: dummyContext }; @@ -35,8 +35,8 @@ describe('Class: BatchProcessor', () => { process.env = ENVIRONMENT_VARIABLES; }); - describe('Synchronously processing SQS Records', () => { - test('Batch processing SQS records with no failures', () => { + describe('Asynchronously processing SQS Records', () => { + test('Batch processing SQS records with no failures', async () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); @@ -44,8 +44,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.SQS); // Act - processor.register(records, sqsRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncSqsRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages).toStrictEqual([ @@ -54,7 +54,7 @@ describe('Class: BatchProcessor', () => { ]); }); - test('Batch processing SQS records with some failures', () => { + test('Batch processing SQS records with some failures', async () => { // Prepare const firstRecord = sqsRecordFactory('failure'); const secondRecord = sqsRecordFactory('success'); @@ -63,8 +63,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.SQS); // Act - processor.register(records, sqsRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncSqsRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -81,7 +81,7 @@ describe('Class: BatchProcessor', () => { }); }); - test('Batch processing SQS records with all failures', () => { + test('Batch processing SQS records with all failures', async () => { // Prepare const firstRecord = sqsRecordFactory('failure'); const secondRecord = sqsRecordFactory('failure'); @@ -90,14 +90,18 @@ describe('Class: BatchProcessor', () => { const records = [firstRecord, secondRecord, thirdRecord]; const processor = new BatchProcessor(EventType.SQS); - // Act & Assess - processor.register(records, sqsRecordHandler); - expect(() => processor.process()).toThrowError(FullBatchFailureError); + // Act + processor.register(records, asyncSqsRecordHandler); + + // Assess + await expect(processor.process()).rejects.toThrowError( + FullBatchFailureError + ); }); }); - describe('Synchronously processing Kinesis Records', () => { - test('Batch processing Kinesis records with no failures', () => { + describe('Asynchronously processing Kinesis Records', () => { + test('Batch processing Kinesis records with no failures', async () => { // Prepare const firstRecord = kinesisRecordFactory('success'); const secondRecord = kinesisRecordFactory('success'); @@ -105,8 +109,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.KinesisDataStreams); // Act - processor.register(records, kinesisRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncKinesisRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages).toStrictEqual([ @@ -115,7 +119,7 @@ describe('Class: BatchProcessor', () => { ]); }); - test('Batch processing Kinesis records with some failures', () => { + test('Batch processing Kinesis records with some failures', async () => { // Prepare const firstRecord = kinesisRecordFactory('failure'); const secondRecord = kinesisRecordFactory('success'); @@ -124,8 +128,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.KinesisDataStreams); // Act - processor.register(records, kinesisRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncKinesisRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -142,7 +146,8 @@ describe('Class: BatchProcessor', () => { }); }); - test('Batch processing Kinesis records with all failures', () => { + test('Batch processing Kinesis records with all failures', async () => { + // Prepare const firstRecord = kinesisRecordFactory('failure'); const secondRecord = kinesisRecordFactory('failure'); const thirdRecord = kinesisRecordFactory('fail'); @@ -151,15 +156,17 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.KinesisDataStreams); // Act - processor.register(records, kinesisRecordHandler); + processor.register(records, asyncKinesisRecordHandler); // Assess - expect(() => processor.process()).toThrowError(FullBatchFailureError); + await expect(processor.process()).rejects.toThrowError( + FullBatchFailureError + ); }); }); - describe('Synchronously processing DynamoDB Records', () => { - test('Batch processing DynamoDB records with no failures', () => { + describe('Asynchronously processing DynamoDB Records', () => { + test('Batch processing DynamoDB records with no failures', async () => { // Prepare const firstRecord = dynamodbRecordFactory('success'); const secondRecord = dynamodbRecordFactory('success'); @@ -167,8 +174,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.DynamoDBStreams); // Act - processor.register(records, dynamodbRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncDynamodbRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages).toStrictEqual([ @@ -177,7 +184,7 @@ describe('Class: BatchProcessor', () => { ]); }); - test('Batch processing DynamoDB records with some failures', () => { + test('Batch processing DynamoDB records with some failures', async () => { // Prepare const firstRecord = dynamodbRecordFactory('failure'); const secondRecord = dynamodbRecordFactory('success'); @@ -186,8 +193,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.DynamoDBStreams); // Act - processor.register(records, dynamodbRecordHandler); - const processedMessages = processor.process(); + processor.register(records, asyncDynamodbRecordHandler); + const processedMessages = await processor.process(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -204,7 +211,7 @@ describe('Class: BatchProcessor', () => { }); }); - test('Batch processing DynamoDB records with all failures', () => { + test('Batch processing DynamoDB records with all failures', async () => { // Prepare const firstRecord = dynamodbRecordFactory('failure'); const secondRecord = dynamodbRecordFactory('failure'); @@ -214,15 +221,17 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.DynamoDBStreams); // Act - processor.register(records, dynamodbRecordHandler); + processor.register(records, asyncDynamodbRecordHandler); // Assess - expect(() => processor.process()).toThrowError(FullBatchFailureError); + await expect(processor.process()).rejects.toThrowError( + FullBatchFailureError + ); }); }); describe('Batch processing with Lambda context', () => { - test('Batch processing when context is provided and handler accepts', () => { + test('Batch processing when context is provided and handler accepts', async () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); @@ -230,8 +239,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.SQS); // Act - processor.register(records, handlerWithContext, options); - const processedMessages = processor.process(); + processor.register(records, asyncHandlerWithContext, options); + const processedMessages = await processor.process(); // Assess expect(processedMessages).toStrictEqual([ @@ -240,7 +249,7 @@ describe('Class: BatchProcessor', () => { ]); }); - test('Batch processing when context is provided and handler does not accept', () => { + test('Batch processing when context is provided and handler does not accept', async () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); @@ -248,8 +257,8 @@ describe('Class: BatchProcessor', () => { const processor = new BatchProcessor(EventType.SQS); // Act - processor.register(records, sqsRecordHandler, options); - const processedMessages = processor.process(); + processor.register(records, asyncSqsRecordHandler, options); + const processedMessages = await processor.process(); // Assess expect(processedMessages).toStrictEqual([ @@ -258,7 +267,7 @@ describe('Class: BatchProcessor', () => { ]); }); - test('Batch processing when malformed context is provided and handler attempts to use', () => { + test('Batch processing when malformed context is provided and handler attempts to use', async () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); @@ -268,18 +277,18 @@ describe('Class: BatchProcessor', () => { const badOptions = { context: badContext as unknown as Context }; // Act - processor.register(records, handlerWithContext, badOptions); - expect(() => processor.process()).toThrowError(FullBatchFailureError); + processor.register(records, asyncHandlerWithContext, badOptions); + await expect(() => processor.process()).rejects.toThrowError( + FullBatchFailureError + ); }); }); - test('When calling the async process method, it should throw an error', async () => { + test('When calling the sync process method, it should throw an error', () => { // Prepare const processor = new BatchProcessor(EventType.SQS); // Act & Assess - await expect(() => processor.asyncProcess()).rejects.toThrowError( - BatchProcessingError - ); + expect(() => processor.processSync()).toThrowError(BatchProcessingError); }); }); diff --git a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts b/packages/batch/tests/unit/BatchProcessorSync.test.ts similarity index 63% rename from packages/batch/tests/unit/AsyncBatchProcessor.test.ts rename to packages/batch/tests/unit/BatchProcessorSync.test.ts index 127bae2705..4f77d299cc 100644 --- a/packages/batch/tests/unit/AsyncBatchProcessor.test.ts +++ b/packages/batch/tests/unit/BatchProcessorSync.test.ts @@ -1,11 +1,11 @@ /** - * Test AsyncBatchProcessor class + * Test BatchProcessor class * - * @group unit/batch/class/asyncBatchProcessor + * @group unit/batch/class/batchprocessor */ import type { Context } from 'aws-lambda'; import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; -import { AsyncBatchProcessor } from '../../src/AsyncBatchProcessor'; +import { BatchProcessorSync } from '../../src/BatchProcessorSync'; import { EventType } from '../../src/constants'; import { BatchProcessingError, FullBatchFailureError } from '../../src/errors'; import type { BatchProcessingOptions } from '../../src/types'; @@ -15,13 +15,13 @@ import { sqsRecordFactory, } from '../helpers/factories'; import { - asyncDynamodbRecordHandler, - asyncKinesisRecordHandler, - asyncSqsRecordHandler, - asyncHandlerWithContext, + dynamodbRecordHandler, + handlerWithContext, + kinesisRecordHandler, + sqsRecordHandler, } from '../helpers/handlers'; -describe('Class: AsyncBatchProcessor', () => { +describe('Class: BatchProcessor', () => { const ENVIRONMENT_VARIABLES = process.env; const options: BatchProcessingOptions = { context: dummyContext }; @@ -35,17 +35,17 @@ describe('Class: AsyncBatchProcessor', () => { process.env = ENVIRONMENT_VARIABLES; }); - describe('Asynchronously processing SQS Records', () => { - test('Batch processing SQS records with no failures', async () => { + describe('Synchronously processing SQS Records', () => { + test('Batch processing SQS records with no failures', () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - processor.register(records, asyncSqsRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, sqsRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages).toStrictEqual([ @@ -54,17 +54,17 @@ describe('Class: AsyncBatchProcessor', () => { ]); }); - test('Batch processing SQS records with some failures', async () => { + test('Batch processing SQS records with some failures', () => { // Prepare const firstRecord = sqsRecordFactory('failure'); const secondRecord = sqsRecordFactory('success'); const thirdRecord = sqsRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - processor.register(records, asyncSqsRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, sqsRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -81,36 +81,32 @@ describe('Class: AsyncBatchProcessor', () => { }); }); - test('Batch processing SQS records with all failures', async () => { + test('Batch processing SQS records with all failures', () => { // Prepare const firstRecord = sqsRecordFactory('failure'); const secondRecord = sqsRecordFactory('failure'); const thirdRecord = sqsRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); - // Act - processor.register(records, asyncSqsRecordHandler); - - // Assess - await expect(processor.asyncProcess()).rejects.toThrowError( - FullBatchFailureError - ); + // Act & Assess + processor.register(records, sqsRecordHandler); + expect(() => processor.processSync()).toThrowError(FullBatchFailureError); }); }); - describe('Asynchronously processing Kinesis Records', () => { - test('Batch processing Kinesis records with no failures', async () => { + describe('Synchronously processing Kinesis Records', () => { + test('Batch processing Kinesis records with no failures', () => { // Prepare const firstRecord = kinesisRecordFactory('success'); const secondRecord = kinesisRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.KinesisDataStreams); + const processor = new BatchProcessorSync(EventType.KinesisDataStreams); // Act - processor.register(records, asyncKinesisRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, kinesisRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages).toStrictEqual([ @@ -119,17 +115,17 @@ describe('Class: AsyncBatchProcessor', () => { ]); }); - test('Batch processing Kinesis records with some failures', async () => { + test('Batch processing Kinesis records with some failures', () => { // Prepare const firstRecord = kinesisRecordFactory('failure'); const secondRecord = kinesisRecordFactory('success'); const thirdRecord = kinesisRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.KinesisDataStreams); + const processor = new BatchProcessorSync(EventType.KinesisDataStreams); // Act - processor.register(records, asyncKinesisRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, kinesisRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -146,36 +142,33 @@ describe('Class: AsyncBatchProcessor', () => { }); }); - test('Batch processing Kinesis records with all failures', async () => { - // Prepare + test('Batch processing Kinesis records with all failures', () => { const firstRecord = kinesisRecordFactory('failure'); const secondRecord = kinesisRecordFactory('failure'); const thirdRecord = kinesisRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.KinesisDataStreams); + const processor = new BatchProcessorSync(EventType.KinesisDataStreams); // Act - processor.register(records, asyncKinesisRecordHandler); + processor.register(records, kinesisRecordHandler); // Assess - await expect(processor.asyncProcess()).rejects.toThrowError( - FullBatchFailureError - ); + expect(() => processor.processSync()).toThrowError(FullBatchFailureError); }); }); - describe('Asynchronously processing DynamoDB Records', () => { - test('Batch processing DynamoDB records with no failures', async () => { + describe('Synchronously processing DynamoDB Records', () => { + test('Batch processing DynamoDB records with no failures', () => { // Prepare const firstRecord = dynamodbRecordFactory('success'); const secondRecord = dynamodbRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.DynamoDBStreams); + const processor = new BatchProcessorSync(EventType.DynamoDBStreams); // Act - processor.register(records, asyncDynamodbRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, dynamodbRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages).toStrictEqual([ @@ -184,17 +177,17 @@ describe('Class: AsyncBatchProcessor', () => { ]); }); - test('Batch processing DynamoDB records with some failures', async () => { + test('Batch processing DynamoDB records with some failures', () => { // Prepare const firstRecord = dynamodbRecordFactory('failure'); const secondRecord = dynamodbRecordFactory('success'); const thirdRecord = dynamodbRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.DynamoDBStreams); + const processor = new BatchProcessorSync(EventType.DynamoDBStreams); // Act - processor.register(records, asyncDynamodbRecordHandler); - const processedMessages = await processor.asyncProcess(); + processor.register(records, dynamodbRecordHandler); + const processedMessages = processor.processSync(); // Assess expect(processedMessages[1]).toStrictEqual([ @@ -211,36 +204,34 @@ describe('Class: AsyncBatchProcessor', () => { }); }); - test('Batch processing DynamoDB records with all failures', async () => { + test('Batch processing DynamoDB records with all failures', () => { // Prepare const firstRecord = dynamodbRecordFactory('failure'); const secondRecord = dynamodbRecordFactory('failure'); const thirdRecord = dynamodbRecordFactory('fail'); const records = [firstRecord, secondRecord, thirdRecord]; - const processor = new AsyncBatchProcessor(EventType.DynamoDBStreams); + const processor = new BatchProcessorSync(EventType.DynamoDBStreams); // Act - processor.register(records, asyncDynamodbRecordHandler); + processor.register(records, dynamodbRecordHandler); // Assess - await expect(processor.asyncProcess()).rejects.toThrowError( - FullBatchFailureError - ); + expect(() => processor.processSync()).toThrowError(FullBatchFailureError); }); }); describe('Batch processing with Lambda context', () => { - test('Batch processing when context is provided and handler accepts', async () => { + test('Batch processing when context is provided and handler accepts', () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - processor.register(records, asyncHandlerWithContext, options); - const processedMessages = await processor.asyncProcess(); + processor.register(records, handlerWithContext, options); + const processedMessages = processor.processSync(); // Assess expect(processedMessages).toStrictEqual([ @@ -249,16 +240,16 @@ describe('Class: AsyncBatchProcessor', () => { ]); }); - test('Batch processing when context is provided and handler does not accept', async () => { + test('Batch processing when context is provided and handler does not accept', () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - processor.register(records, asyncSqsRecordHandler, options); - const processedMessages = await processor.asyncProcess(); + processor.register(records, sqsRecordHandler, options); + const processedMessages = processor.processSync(); // Assess expect(processedMessages).toStrictEqual([ @@ -267,28 +258,28 @@ describe('Class: AsyncBatchProcessor', () => { ]); }); - test('Batch processing when malformed context is provided and handler attempts to use', async () => { + test('Batch processing when malformed context is provided and handler attempts to use', () => { // Prepare const firstRecord = sqsRecordFactory('success'); const secondRecord = sqsRecordFactory('success'); const records = [firstRecord, secondRecord]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); const badContext = { foo: 'bar' }; const badOptions = { context: badContext as unknown as Context }; // Act - processor.register(records, asyncHandlerWithContext, badOptions); - await expect(() => processor.asyncProcess()).rejects.toThrowError( - FullBatchFailureError - ); + processor.register(records, handlerWithContext, badOptions); + expect(() => processor.processSync()).toThrowError(FullBatchFailureError); }); }); - test('When calling the sync process method, it should throw an error', () => { + test('When calling the async process method, it should throw an error', async () => { // Prepare - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act & Assess - expect(() => processor.process()).toThrowError(BatchProcessingError); + await expect(() => processor.process()).rejects.toThrowError( + BatchProcessingError + ); }); }); diff --git a/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts b/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts index 127c87a0a2..5c7f6c5796 100644 --- a/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts +++ b/packages/batch/tests/unit/SqsFifoPartialProcessor.test.ts @@ -5,7 +5,7 @@ */ import { SqsFifoPartialProcessor, - processPartialResponse, + processPartialResponseSync, SqsFifoShortCircuitError, } from '../../src'; import { sqsRecordFactory } from '../helpers/factories'; @@ -33,7 +33,11 @@ describe('Class: SqsFifoBatchProcessor', () => { const processor = new SqsFifoPartialProcessor(); // Act - const result = processPartialResponse(event, sqsRecordHandler, processor); + const result = processPartialResponseSync( + event, + sqsRecordHandler, + processor + ); // Assess expect(result['batchItemFailures']).toStrictEqual([]); @@ -48,7 +52,11 @@ describe('Class: SqsFifoBatchProcessor', () => { const processor = new SqsFifoPartialProcessor(); // Act - const result = processPartialResponse(event, sqsRecordHandler, processor); + const result = processPartialResponseSync( + event, + sqsRecordHandler, + processor + ); // Assess expect(result['batchItemFailures'].length).toBe(2); diff --git a/packages/batch/tests/unit/processPartialResponse.test.ts b/packages/batch/tests/unit/processPartialResponse.test.ts index 5fba12f88e..2dbe585b45 100644 --- a/packages/batch/tests/unit/processPartialResponse.test.ts +++ b/packages/batch/tests/unit/processPartialResponse.test.ts @@ -1,7 +1,7 @@ /** - * Test processPartialResponse function + * Test asyncProcessPartialResponse function * - * @group unit/batch/function/processpartialresponse + * @group unit/batch/function/asyncProcesspartialresponse */ import type { Context, @@ -11,7 +11,8 @@ import type { } from 'aws-lambda'; import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; -import { BatchProcessor, processPartialResponse } from '../../src'; +import { BatchProcessor } from '../../src/BatchProcessor'; +import { processPartialResponse } from '../../src/processPartialResponse'; import { EventType } from '../../src/constants'; import type { BatchProcessingOptions, @@ -23,10 +24,10 @@ import { sqsRecordFactory, } from '../helpers/factories'; import { - dynamodbRecordHandler, - handlerWithContext, - kinesisRecordHandler, - sqsRecordHandler, + asyncDynamodbRecordHandler, + asyncHandlerWithContext, + asyncKinesisRecordHandler, + asyncSqsRecordHandler, } from '../helpers/handlers'; describe('Function: processPartialResponse()', () => { @@ -45,7 +46,7 @@ describe('Function: processPartialResponse()', () => { }); describe('Process partial response function call tests', () => { - test('Process partial response function call with synchronous handler', () => { + test('Process partial response function call with asynchronous handler', async () => { // Prepare const records = [ sqsRecordFactory('success'), @@ -55,13 +56,17 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.SQS); // Act - const ret = processPartialResponse(batch, sqsRecordHandler, processor); + const ret = await processPartialResponse( + batch, + asyncSqsRecordHandler, + processor + ); // Assess expect(ret).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response function call with context provided', () => { + test('Process partial response function call with context provided', async () => { // Prepare const records = [ sqsRecordFactory('success'), @@ -71,9 +76,9 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.SQS); // Act - const ret = processPartialResponse( + const ret = await processPartialResponse( batch, - handlerWithContext, + asyncHandlerWithContext, processor, options ); @@ -84,7 +89,7 @@ describe('Function: processPartialResponse()', () => { }); describe('Process partial response function call through handler', () => { - test('Process partial response through handler with SQS event', () => { + test('Process partial response through handler with SQS event', async () => { // Prepare const records = [ sqsRecordFactory('success'), @@ -93,21 +98,21 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.SQS); const event: SQSEvent = { Records: records }; - const handler = ( + const handler = async ( event: SQSEvent, _context: Context - ): PartialItemFailureResponse => { - return processPartialResponse(event, sqsRecordHandler, processor); + ): Promise<PartialItemFailureResponse> => { + return processPartialResponse(event, asyncSqsRecordHandler, processor); }; // Act - const result = handler(event, context); + const result = await handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler with Kinesis event', () => { + test('Process partial response through handler with Kinesis event', async () => { // Prepare const records = [ kinesisRecordFactory('success'), @@ -116,21 +121,25 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.KinesisDataStreams); const event: KinesisStreamEvent = { Records: records }; - const handler = ( + const handler = async ( event: KinesisStreamEvent, _context: Context - ): PartialItemFailureResponse => { - return processPartialResponse(event, kinesisRecordHandler, processor); + ): Promise<PartialItemFailureResponse> => { + return await processPartialResponse( + event, + asyncKinesisRecordHandler, + processor + ); }; // Act - const result = handler(event, context); + const result = await handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler with DynamoDB event', () => { + test('Process partial response through handler with DynamoDB event', async () => { // Prepare const records = [ dynamodbRecordFactory('success'), @@ -139,41 +148,51 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.DynamoDBStreams); const event: DynamoDBStreamEvent = { Records: records }; - const handler = ( + const handler = async ( event: DynamoDBStreamEvent, _context: Context - ): PartialItemFailureResponse => { - return processPartialResponse(event, dynamodbRecordHandler, processor); + ): Promise<PartialItemFailureResponse> => { + return await processPartialResponse( + event, + asyncDynamodbRecordHandler, + processor + ); }; // Act - const result = handler(event, context); + const result = await handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler for SQS records with incorrect event type', () => { + test('Process partial response through handler for SQS records with incorrect event type', async () => { // Prepare const processor = new BatchProcessor(EventType.SQS); const event = dummyEvent; - const handler = ( + const handler = async ( event: SQSEvent, _context: Context - ): PartialItemFailureResponse => { - return processPartialResponse(event, sqsRecordHandler, processor); + ): Promise<PartialItemFailureResponse> => { + return await processPartialResponse( + event, + asyncSqsRecordHandler, + processor + ); }; // Act & Assess - expect(() => handler(event as unknown as SQSEvent, context)).toThrowError( + await expect(() => + handler(event as unknown as SQSEvent, context) + ).rejects.toThrowError( `Unexpected batch type. Possible values are: ${Object.keys( EventType ).join(', ')}` ); }); - test('Process partial response through handler with context provided', () => { + test('Process partial response through handler with context provided', async () => { // Prepare const records = [ sqsRecordFactory('success'), @@ -182,22 +201,22 @@ describe('Function: processPartialResponse()', () => { const processor = new BatchProcessor(EventType.SQS); const event: SQSEvent = { Records: records }; - const handler = ( + const handler = async ( event: SQSEvent, context: Context - ): PartialItemFailureResponse => { + ): Promise<PartialItemFailureResponse> => { const options: BatchProcessingOptions = { context: context }; - return processPartialResponse( + return await processPartialResponse( event, - handlerWithContext, + asyncHandlerWithContext, processor, options ); }; // Act - const result = handler(event, context); + const result = await handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); diff --git a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts b/packages/batch/tests/unit/processPartialResponseSync.test.ts similarity index 62% rename from packages/batch/tests/unit/asyncProcessPartialResponse.test.ts rename to packages/batch/tests/unit/processPartialResponseSync.test.ts index c7e98edca4..4c3e9a47a5 100644 --- a/packages/batch/tests/unit/asyncProcessPartialResponse.test.ts +++ b/packages/batch/tests/unit/processPartialResponseSync.test.ts @@ -1,7 +1,7 @@ /** - * Test asyncProcessPartialResponse function + * Test processPartialResponse function * - * @group unit/batch/function/asyncProcesspartialresponse + * @group unit/batch/function/processpartialresponse */ import type { Context, @@ -11,7 +11,8 @@ import type { } from 'aws-lambda'; import { helloworldContext as dummyContext } from '@aws-lambda-powertools/commons/lib/samples/resources/contexts'; import { Custom as dummyEvent } from '@aws-lambda-powertools/commons/lib/samples/resources/events'; -import { AsyncBatchProcessor, asyncProcessPartialResponse } from '../../src'; +import { BatchProcessorSync } from '../../src/BatchProcessorSync'; +import { processPartialResponseSync } from '../../src/processPartialResponseSync'; import { EventType } from '../../src/constants'; import type { BatchProcessingOptions, @@ -23,10 +24,10 @@ import { sqsRecordFactory, } from '../helpers/factories'; import { - asyncDynamodbRecordHandler, - asyncHandlerWithContext, - asyncKinesisRecordHandler, - asyncSqsRecordHandler, + dynamodbRecordHandler, + handlerWithContext, + kinesisRecordHandler, + sqsRecordHandler, } from '../helpers/handlers'; describe('Function: processPartialResponse()', () => { @@ -45,19 +46,19 @@ describe('Function: processPartialResponse()', () => { }); describe('Process partial response function call tests', () => { - test('Process partial response function call with asynchronous handler', async () => { + test('Process partial response function call with synchronous handler', () => { // Prepare const records = [ sqsRecordFactory('success'), sqsRecordFactory('success'), ]; const batch = { Records: records }; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - const ret = await asyncProcessPartialResponse( + const ret = processPartialResponseSync( batch, - asyncSqsRecordHandler, + sqsRecordHandler, processor ); @@ -65,19 +66,19 @@ describe('Function: processPartialResponse()', () => { expect(ret).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response function call with context provided', async () => { + test('Process partial response function call with context provided', () => { // Prepare const records = [ sqsRecordFactory('success'), sqsRecordFactory('success'), ]; const batch = { Records: records }; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); // Act - const ret = await asyncProcessPartialResponse( + const ret = processPartialResponseSync( batch, - asyncHandlerWithContext, + handlerWithContext, processor, options ); @@ -88,138 +89,128 @@ describe('Function: processPartialResponse()', () => { }); describe('Process partial response function call through handler', () => { - test('Process partial response through handler with SQS event', async () => { + test('Process partial response through handler with SQS event', () => { // Prepare const records = [ sqsRecordFactory('success'), sqsRecordFactory('success'), ]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); const event: SQSEvent = { Records: records }; - const handler = async ( + const handler = ( event: SQSEvent, _context: Context - ): Promise<PartialItemFailureResponse> => { - return asyncProcessPartialResponse( - event, - asyncSqsRecordHandler, - processor - ); + ): PartialItemFailureResponse => { + return processPartialResponseSync(event, sqsRecordHandler, processor); }; // Act - const result = await handler(event, context); + const result = handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler with Kinesis event', async () => { + test('Process partial response through handler with Kinesis event', () => { // Prepare const records = [ kinesisRecordFactory('success'), kinesisRecordFactory('success'), ]; - const processor = new AsyncBatchProcessor(EventType.KinesisDataStreams); + const processor = new BatchProcessorSync(EventType.KinesisDataStreams); const event: KinesisStreamEvent = { Records: records }; - const handler = async ( + const handler = ( event: KinesisStreamEvent, _context: Context - ): Promise<PartialItemFailureResponse> => { - return await asyncProcessPartialResponse( + ): PartialItemFailureResponse => { + return processPartialResponseSync( event, - asyncKinesisRecordHandler, + kinesisRecordHandler, processor ); }; // Act - const result = await handler(event, context); + const result = handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler with DynamoDB event', async () => { + test('Process partial response through handler with DynamoDB event', () => { // Prepare const records = [ dynamodbRecordFactory('success'), dynamodbRecordFactory('success'), ]; - const processor = new AsyncBatchProcessor(EventType.DynamoDBStreams); + const processor = new BatchProcessorSync(EventType.DynamoDBStreams); const event: DynamoDBStreamEvent = { Records: records }; - const handler = async ( + const handler = ( event: DynamoDBStreamEvent, _context: Context - ): Promise<PartialItemFailureResponse> => { - return await asyncProcessPartialResponse( + ): PartialItemFailureResponse => { + return processPartialResponseSync( event, - asyncDynamodbRecordHandler, + dynamodbRecordHandler, processor ); }; // Act - const result = await handler(event, context); + const result = handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); }); - test('Process partial response through handler for SQS records with incorrect event type', async () => { + test('Process partial response through handler for SQS records with incorrect event type', () => { // Prepare - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); const event = dummyEvent; - const handler = async ( + const handler = ( event: SQSEvent, _context: Context - ): Promise<PartialItemFailureResponse> => { - return await asyncProcessPartialResponse( - event, - asyncSqsRecordHandler, - processor - ); + ): PartialItemFailureResponse => { + return processPartialResponseSync(event, sqsRecordHandler, processor); }; // Act & Assess - await expect(() => - handler(event as unknown as SQSEvent, context) - ).rejects.toThrowError( + expect(() => handler(event as unknown as SQSEvent, context)).toThrowError( `Unexpected batch type. Possible values are: ${Object.keys( EventType ).join(', ')}` ); }); - test('Process partial response through handler with context provided', async () => { + test('Process partial response through handler with context provided', () => { // Prepare const records = [ sqsRecordFactory('success'), sqsRecordFactory('success'), ]; - const processor = new AsyncBatchProcessor(EventType.SQS); + const processor = new BatchProcessorSync(EventType.SQS); const event: SQSEvent = { Records: records }; - const handler = async ( + const handler = ( event: SQSEvent, context: Context - ): Promise<PartialItemFailureResponse> => { + ): PartialItemFailureResponse => { const options: BatchProcessingOptions = { context: context }; - return await asyncProcessPartialResponse( + return processPartialResponseSync( event, - asyncHandlerWithContext, + handlerWithContext, processor, options ); }; // Act - const result = await handler(event, context); + const result = handler(event, context); // Assess expect(result).toStrictEqual({ batchItemFailures: [] }); From ed969f3f6582183f59413de4166ef3c702535e3d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 14:31:58 +0000 Subject: [PATCH 28/28] chore(release): v1.13.0 [skip ci] --- CHANGELOG.md | 12 ++++++++ examples/cdk/CHANGELOG.md | 4 +++ examples/cdk/package.json | 12 ++++---- examples/sam/CHANGELOG.md | 4 +++ examples/sam/package.json | 10 +++---- layers/CHANGELOG.md | 4 +++ layers/package.json | 2 +- lerna.json | 2 +- package-lock.json | 50 +++++++++++++++---------------- packages/batch/CHANGELOG.md | 10 +++++++ packages/batch/package.json | 2 +- packages/commons/CHANGELOG.md | 4 +++ packages/commons/package.json | 2 +- packages/idempotency/CHANGELOG.md | 4 +++ packages/idempotency/package.json | 6 ++-- packages/logger/CHANGELOG.md | 4 +++ packages/logger/package.json | 6 ++-- packages/metrics/CHANGELOG.md | 4 +++ packages/metrics/package.json | 6 ++-- packages/parameters/CHANGELOG.md | 6 ++++ packages/parameters/package.json | 8 ++--- packages/testing/CHANGELOG.md | 8 +++++ packages/testing/package.json | 2 +- packages/tracer/CHANGELOG.md | 4 +++ packages/tracer/package.json | 5 ++-- 25 files changed, 124 insertions(+), 57 deletions(-) create mode 100644 packages/testing/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 467d7c627d..78a04beeaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +### Bug Fixes + +- **batch:** Update processor to pass only context to handler ([#1637](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1637)) ([6fa09b2](https://github.com/aws-powertools/powertools-lambda-typescript/commit/6fa09b2638bf247fd595db51ac3d1aa1252d3379)) +- **docs:** update versions.json jq query ([4e6f662](https://github.com/aws-powertools/powertools-lambda-typescript/commit/4e6f662b244a941a911c1ed5973bef11d7610093)) +- **parameters:** return type when options without transform is used ([#1671](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1671)) ([b2fe341](https://github.com/aws-powertools/powertools-lambda-typescript/commit/b2fe34150a0d896f1755ca30cbe89175cdb66ff2)) + +### Features + +- **batch:** rename AsyncBatchProcessor to default BatchProcessor ([#1683](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1683)) ([e253755](https://github.com/aws-powertools/powertools-lambda-typescript/commit/e253755d09f50a75cde805168845f52d8b85af28)) + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package aws-lambda-powertools-typescript diff --git a/examples/cdk/CHANGELOG.md b/examples/cdk/CHANGELOG.md index b2a17226c1..b661e66ead 100644 --- a/examples/cdk/CHANGELOG.md +++ b/examples/cdk/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package cdk-sample + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package cdk-sample diff --git a/examples/cdk/package.json b/examples/cdk/package.json index 9e58bb5cdf..3ec5802d2c 100644 --- a/examples/cdk/package.json +++ b/examples/cdk/package.json @@ -1,6 +1,6 @@ { "name": "cdk-sample", - "version": "1.12.1", + "version": "1.13.0", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -25,11 +25,11 @@ "*.js": "npm run lint-fix" }, "devDependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", - "@aws-lambda-powertools/logger": "^1.12.1", - "@aws-lambda-powertools/metrics": "^1.12.1", - "@aws-lambda-powertools/parameters": "^1.12.1", - "@aws-lambda-powertools/tracer": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", + "@aws-lambda-powertools/logger": "^1.13.0", + "@aws-lambda-powertools/metrics": "^1.13.0", + "@aws-lambda-powertools/parameters": "^1.13.0", + "@aws-lambda-powertools/tracer": "^1.13.0", "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/lib-dynamodb": "^3.413.0", "@types/aws-lambda": "^8.10.121", diff --git a/examples/sam/CHANGELOG.md b/examples/sam/CHANGELOG.md index 857a0331e2..ff350d2658 100644 --- a/examples/sam/CHANGELOG.md +++ b/examples/sam/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package sam-example + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package sam-example diff --git a/examples/sam/package.json b/examples/sam/package.json index c19a3e80a7..1d3adc03f0 100644 --- a/examples/sam/package.json +++ b/examples/sam/package.json @@ -1,6 +1,6 @@ { "name": "sam-example", - "version": "1.12.1", + "version": "1.13.0", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -30,10 +30,10 @@ "typescript": "^5.2.2" }, "dependencies": { - "@aws-lambda-powertools/logger": "^1.12.1", - "@aws-lambda-powertools/metrics": "^1.12.1", - "@aws-lambda-powertools/parameters": "^1.12.1", - "@aws-lambda-powertools/tracer": "^1.12.1", + "@aws-lambda-powertools/logger": "^1.13.0", + "@aws-lambda-powertools/metrics": "^1.13.0", + "@aws-lambda-powertools/parameters": "^1.13.0", + "@aws-lambda-powertools/tracer": "^1.13.0", "@aws-sdk/client-dynamodb": "^3.413.0", "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/lib-dynamodb": "^3.413.0", diff --git a/layers/CHANGELOG.md b/layers/CHANGELOG.md index 6864c1c5a7..c45ccb00e5 100644 --- a/layers/CHANGELOG.md +++ b/layers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package layers + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package layers diff --git a/layers/package.json b/layers/package.json index edef2aacb3..fc43ed2665 100644 --- a/layers/package.json +++ b/layers/package.json @@ -1,6 +1,6 @@ { "name": "layers", - "version": "1.12.1", + "version": "1.13.0", "bin": { "layer": "bin/layers.js" }, diff --git a/lerna.json b/lerna.json index 863cd19258..3b62c8e546 100644 --- a/lerna.json +++ b/lerna.json @@ -12,7 +12,7 @@ "examples/sam", "layers" ], - "version": "1.12.1", + "version": "1.13.0", "npmClient": "npm", "message": "chore(release): %s [skip ci]" } diff --git a/package-lock.json b/package-lock.json index a783f1779c..1967e3ad40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ }, "examples/cdk": { "name": "cdk-sample", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { "@middy/core": "^3.6.2", @@ -85,11 +85,11 @@ "cdk-app": "bin/cdk-app.js" }, "devDependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", - "@aws-lambda-powertools/logger": "^1.12.1", - "@aws-lambda-powertools/metrics": "^1.12.1", - "@aws-lambda-powertools/parameters": "^1.12.1", - "@aws-lambda-powertools/tracer": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", + "@aws-lambda-powertools/logger": "^1.13.0", + "@aws-lambda-powertools/metrics": "^1.13.0", + "@aws-lambda-powertools/parameters": "^1.13.0", + "@aws-lambda-powertools/tracer": "^1.13.0", "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/lib-dynamodb": "^3.413.0", "@types/aws-lambda": "^8.10.121", @@ -111,13 +111,13 @@ }, "examples/sam": { "name": "sam-example", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/logger": "^1.12.1", - "@aws-lambda-powertools/metrics": "^1.12.1", - "@aws-lambda-powertools/parameters": "^1.12.1", - "@aws-lambda-powertools/tracer": "^1.12.1", + "@aws-lambda-powertools/logger": "^1.13.0", + "@aws-lambda-powertools/metrics": "^1.13.0", + "@aws-lambda-powertools/parameters": "^1.13.0", + "@aws-lambda-powertools/tracer": "^1.13.0", "@aws-sdk/client-dynamodb": "^3.413.0", "@aws-sdk/client-ssm": "^3.413.0", "@aws-sdk/lib-dynamodb": "^3.413.0", @@ -142,7 +142,7 @@ "dev": true }, "layers": { - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { "aws-cdk": "^2.96.1", @@ -17736,12 +17736,12 @@ }, "packages/batch": { "name": "@aws-lambda-powertools/batch", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0" }, "packages/commons": { "name": "@aws-lambda-powertools/commons", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "devDependencies": { "@aws-sdk/client-appconfigdata": "^3.413.0", @@ -17754,10 +17754,10 @@ }, "packages/idempotency": { "name": "@aws-lambda-powertools/idempotency", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "@aws-sdk/util-base64-node": "^3.209.0", "jmespath": "^0.16.0" }, @@ -17788,10 +17788,10 @@ }, "packages/logger": { "name": "@aws-lambda-powertools/logger", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "lodash.merge": "^4.6.2" }, "devDependencies": { @@ -17809,10 +17809,10 @@ }, "packages/metrics": { "name": "@aws-lambda-powertools/metrics", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1" + "@aws-lambda-powertools/commons": "^1.13.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", @@ -17831,10 +17831,10 @@ }, "packages/parameters": { "name": "@aws-lambda-powertools/parameters", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "@aws-sdk/util-base64-node": "^3.209.0" }, "devDependencies": { @@ -17877,7 +17877,7 @@ }, "packages/testing": { "name": "@aws-lambda-powertools/testing-utils", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.96.1-alpha.0", @@ -17887,10 +17887,10 @@ }, "packages/tracer": { "name": "@aws-lambda-powertools/tracer", - "version": "1.12.1", + "version": "1.13.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "aws-xray-sdk-core": "^3.5.1" }, "devDependencies": { diff --git a/packages/batch/CHANGELOG.md b/packages/batch/CHANGELOG.md index 283fb35bfc..8bf25d9d7b 100644 --- a/packages/batch/CHANGELOG.md +++ b/packages/batch/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +### Bug Fixes + +- **batch:** Update processor to pass only context to handler ([#1637](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1637)) ([6fa09b2](https://github.com/aws-powertools/powertools-lambda-typescript/commit/6fa09b2638bf247fd595db51ac3d1aa1252d3379)) + +### Features + +- **batch:** rename AsyncBatchProcessor to default BatchProcessor ([#1683](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1683)) ([e253755](https://github.com/aws-powertools/powertools-lambda-typescript/commit/e253755d09f50a75cde805168845f52d8b85af28)) + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/batch diff --git a/packages/batch/package.json b/packages/batch/package.json index 9e046c15bc..3e9f7482f1 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/batch", - "version": "1.12.1", + "version": "1.13.0", "description": "The batch processing package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index 4c8f3a0b7c..f017cc6fdd 100644 --- a/packages/commons/CHANGELOG.md +++ b/packages/commons/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/commons + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/commons diff --git a/packages/commons/package.json b/packages/commons/package.json index f6e9df5ac1..4f3bc52dfd 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/commons", - "version": "1.12.1", + "version": "1.13.0", "description": "A shared utility package for Powertools for AWS Lambda (TypeScript) libraries", "author": { "name": "Amazon Web Services", diff --git a/packages/idempotency/CHANGELOG.md b/packages/idempotency/CHANGELOG.md index 39f5aff9dd..6027a60597 100644 --- a/packages/idempotency/CHANGELOG.md +++ b/packages/idempotency/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/idempotency + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/idempotency diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index a86e461b14..3d189e9d54 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/idempotency", - "version": "1.12.1", + "version": "1.13.0", "description": "The idempotency package for the Powertools for AWS Lambda (TypeScript) library. It provides options to make your Lambda functions idempotent and safe to retry.", "author": { "name": "Amazon Web Services", @@ -79,7 +79,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "@aws-sdk/util-base64-node": "^3.209.0", "jmespath": "^0.16.0" }, @@ -115,4 +115,4 @@ "aws-sdk-client-mock": "^3.0.0", "aws-sdk-client-mock-jest": "^3.0.0" } -} \ No newline at end of file +} diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index 15c44742f8..2f2fea0a1d 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/logger + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/logger diff --git a/packages/logger/package.json b/packages/logger/package.json index 6b02abfe3c..49c7e93012 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/logger", - "version": "1.12.1", + "version": "1.13.0", "description": "The logging package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -53,7 +53,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "lodash.merge": "^4.6.2" }, "keywords": [ @@ -65,4 +65,4 @@ "serverless", "nodejs" ] -} \ No newline at end of file +} diff --git a/packages/metrics/CHANGELOG.md b/packages/metrics/CHANGELOG.md index 2f314aaefa..fac1d8d871 100644 --- a/packages/metrics/CHANGELOG.md +++ b/packages/metrics/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/metrics + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/metrics diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 4b07644c5d..4e8d2640cd 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/metrics", - "version": "1.12.1", + "version": "1.13.0", "description": "The metrics package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -55,7 +55,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1" + "@aws-lambda-powertools/commons": "^1.13.0" }, "keywords": [ "aws", @@ -65,4 +65,4 @@ "serverless", "nodejs" ] -} \ No newline at end of file +} diff --git a/packages/parameters/CHANGELOG.md b/packages/parameters/CHANGELOG.md index 96efff84d1..f9e0cd6b79 100644 --- a/packages/parameters/CHANGELOG.md +++ b/packages/parameters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +### Bug Fixes + +- **parameters:** return type when options without transform is used ([#1671](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1671)) ([b2fe341](https://github.com/aws-powertools/powertools-lambda-typescript/commit/b2fe34150a0d896f1755ca30cbe89175cdb66ff2)) + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/parameters diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 254259bf2b..fc20717084 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parameters", - "version": "1.12.1", + "version": "1.13.0", "description": "The parameters package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -146,16 +146,16 @@ "aws-sdk-client-mock-jest": "^3.0.0" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "@aws-sdk/util-base64-node": "^3.209.0" }, "peerDependencies": { - "@middy/core": ">=3.x <4.x", "@aws-sdk/client-appconfigdata": ">=3.x", "@aws-sdk/client-dynamodb": ">=3.x", "@aws-sdk/client-secrets-manager": ">=3.x", "@aws-sdk/client-ssm": ">=3.x", - "@aws-sdk/util-dynamodb": ">=3.x" + "@aws-sdk/util-dynamodb": ">=3.x", + "@middy/core": ">=3.x <4.x" }, "peerDependenciesMeta": { "@middy/core": { diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md new file mode 100644 index 0000000000..21a5ab58e5 --- /dev/null +++ b/packages/testing/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/testing-utils diff --git a/packages/testing/package.json b/packages/testing/package.json index 21f59ed3fc..da264a79c3 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/testing-utils", - "version": "1.12.1", + "version": "1.13.0", "description": "A package containing utilities to test your serverless workloads", "author": { "name": "Amazon Web Services", diff --git a/packages/tracer/CHANGELOG.md b/packages/tracer/CHANGELOG.md index 6426f76f90..407d7e739c 100644 --- a/packages/tracer/CHANGELOG.md +++ b/packages/tracer/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.13.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.1...v1.13.0) (2023-09-18) + +**Note:** Version bump only for package @aws-lambda-powertools/tracer + ## [1.12.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v1.12.0...v1.12.1) (2023-07-25) **Note:** Version bump only for package @aws-lambda-powertools/tracer diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 732f627073..0bce9f1ebf 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/tracer", - "version": "1.12.1", + "version": "1.13.0", "description": "The tracer package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -47,7 +47,6 @@ "optional": true } }, - "files": [ "lib" ], @@ -59,7 +58,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.12.1", + "@aws-lambda-powertools/commons": "^1.13.0", "aws-xray-sdk-core": "^3.5.1" }, "keywords": [