diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e95e3c41f8..c2006aac60 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,5 +1,5 @@ # See here for image contents: https://github.com/microsoft/vscode-dev-containers/blob/v0.212.0/containers/javascript-node/.devcontainer/base.Dockerfile -FROM mcr.microsoft.com/vscode/devcontainers/javascript-node@sha256:ec1e123dee944ce1e3b939b70bb9ab258458f6bf4028f8682e6690e22d9bb87f +FROM mcr.microsoft.com/vscode/devcontainers/javascript-node@sha256:bbd5e0faa919bfb7470e649c9f09a0c06546eb9a4c7f18322d35cd2dbfe4a69f # Install fnm to manage Node.js versions RUN curl -fsSL https://fnm.vercel.app/install -o /tmp/install \ diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 06af982ec3..063ccc76ab 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ name: Bug report description: Report a reproducible bug to help us improve title: "Bug: TITLE" -labels: ["type/bug", "triage"] +labels: ["bug", "triage"] projects: ["aws-powertools/7"] body: - type: markdown @@ -11,16 +11,16 @@ body: Please add as much information as possible to help us reproduce, and remove any potential sensitive data. - type: textarea - id: expected_behaviour + id: expected_behavior attributes: - label: Expected Behaviour - description: Please share details on the behaviour you expected + label: Expected Behavior + description: Please share details on the behavior you expected validations: required: true - type: textarea - id: current_behaviour + id: current_behavior attributes: - label: Current Behaviour + label: Current Behavior description: Please share details on the current issue validations: required: true @@ -58,7 +58,7 @@ body: id: version attributes: label: Powertools for AWS Lambda (TypeScript) version - placeholder: "latest, 1.3.0" + placeholder: "latest, 2.1.0" value: latest validations: required: true @@ -77,8 +77,8 @@ body: attributes: label: Packaging format used options: - - Lambda Layers - npm + - Lambda Layers multiple: true validations: required: true diff --git a/.github/ISSUE_TEMPLATE/documentation_improvements.yml b/.github/ISSUE_TEMPLATE/documentation_improvements.yml index 656a9f2e5a..7f86de4433 100644 --- a/.github/ISSUE_TEMPLATE/documentation_improvements.yml +++ b/.github/ISSUE_TEMPLATE/documentation_improvements.yml @@ -1,7 +1,7 @@ name: Documentation improvements description: Suggest a documentation update to improve everyone's experience title: "Docs: TITLE" -labels: ["area/documentation", "triage"] +labels: ["documentation", "triage"] projects: ["aws-powertools/7"] body: - type: markdown @@ -27,7 +27,6 @@ body: attributes: label: How can we improve? description: Please share your thoughts on how we can improve this experience - render: Markdown validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 5695c3fab6..b85c74e4ee 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ name: Feature request description: Suggest an idea for Lambda Powertools title: "Feature request: TITLE" -labels: ["type/feature-request", "triage"] +labels: ["feature-request", "triage"] projects: ["aws-powertools/7"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/maintenance.yml b/.github/ISSUE_TEMPLATE/maintenance.yml index 0d90071b7f..026e6b050e 100644 --- a/.github/ISSUE_TEMPLATE/maintenance.yml +++ b/.github/ISSUE_TEMPLATE/maintenance.yml @@ -1,7 +1,7 @@ name: Maintenance description: Suggest an activity to help address tech debt, governance, and anything internal title: "Maintenance: TITLE" -labels: ["type/internal", "triage"] +labels: ["internal", "triage"] projects: ["aws-powertools/7"] body: - type: markdown @@ -31,6 +31,9 @@ body: - Automation - Governance - Tests + - Commons + - Event Handler + - Parser - Tracer - Logger - Metrics @@ -39,7 +42,6 @@ body: - 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 a9111ee938..96b1a14871 100644 --- a/.github/ISSUE_TEMPLATE/rfc.yml +++ b/.github/ISSUE_TEMPLATE/rfc.yml @@ -1,7 +1,7 @@ name: Request for Comments (RFC) description: Feature design and detailed proposals title: "RFC: TITLE" -labels: ["type/RFC", "triage"] +labels: ["RFC", "triage"] projects: ["aws-powertools/7"] body: - type: markdown @@ -18,6 +18,12 @@ body: attributes: label: Which Powertools for AWS Lambda (TypeScript) utility does this relate to? options: + - Automation + - Governance + - Tests + - Batch + - Commons + - Event Handler - Tracer - Logger - Metrics diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b5a6252622..8b58b6a7bf 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,50 +1,28 @@ - +## Summary -## Description of your changes +### Changes - -Add any applicable code snippets, links, screenshots, or other resources -that can help us verify your changes. ---> +> Please add the issue number below, if no issue is present the PR might get blocked and not be reviewed -### Related issues, RFCs - - **Issue number:** -## Checklist - -- [ ] [My changes meet the tenets criteria](https://docs.powertools.aws.dev/lambda/typescript/#tenets) -- [ ] I have performed a *self-review* of my own code -- [ ] I have *commented* my code where necessary, particularly in areas that should be flagged with a TODO, or hard-to-understand areas -- [ ] I have made corresponding changes to the *documentation* -- [ ] My changes generate *no new warnings* -- [ ] I have *added tests* that prove my change is effective and works -- [ ] The PR title follows the [conventional commit semantics](https://github.com/aws-powertools/powertools-lambda-typescript/blob/main/.github/semantic.yml#L2) - -### Breaking change checklist - -***Is it a breaking change?:*** NO + --- By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. -**Disclaimer**: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. \ No newline at end of file +**Disclaimer**: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml index bdf30f990e..9dd0338d90 100644 --- a/.github/boring-cyborg.yml +++ b/.github/boring-cyborg.yml @@ -1,79 +1,78 @@ ##### Labeler ########################################################################################################## labelPRBasedOnFilePath: - area/logger: + logger: - packages/logger/src/* - packages/logger/src/**/* - area/tracer: + tracer: - packages/tracer/src/* - packages/tracer/src/**/* - area/metrics: + metrics: - packages/metrics/src/* - packages/metrics/src/**/* - area/idempotency: + idempotency: - packages/idempotency/src/* - packages/idempotency/src/**/* - area/parameters: + parameters: - packages/parameters/src/* - packages/parameters/src/**/* - area/parser: + parser: - packages/parser/src/* - packages/parser/src/**/* - area/validator: + validator: - packages/validator/src/* - packages/validator/src/**/* - area/batch: + batch: - packages/batch/src/* - packages/batch/src/**/* - area/commons: + commons: - packages/commons/src/* - packages/commons/src/**/* - area/layers: + layers: - layers/src/* - layers/src/**/* - layers/bin/* - layers/cdk.json - type/tests: + tests: - packages/logger/tests/* - packages/logger/tests/**/* - - packages/logger/jest.config.js + - packages/logger/jest.config.cjs - packages/tracer/tests/* - packages/tracer/tests/**/* - - packages/tracer/jest.config.js + - packages/tracer/jest.config.cjs - packages/metrics/tests/* - packages/metrics/tests/**/* - - packages/metrics/jest.config.js + - packages/metrics/jest.config.cjs - packages/idempotency/tests/* - packages/idempotency/tests/**/* - - packages/idempotency/jest.config.js + - packages/idempotency/jest.config.cjs - packages/parameters/tests/* - packages/parameters/tests/**/* - - packages/parameters/jest.config.js + - packages/parameters/jest.config.cjs - packages/parser/tests/* - packages/parser/tests/**/* - - packages/parser/jest.config.js + - packages/parser/jest.config.cjs - packages/validator/tests/* - packages/validator/tests/**/* - - packages/validator/jest.config.js + - packages/validator/jest.config.cjs - packages/batch/tests/* - packages/batch/tests/**/* - - packages/batch/jest.config.js + - packages/batch/jest.config.cjs - packages/commons/tests/* - packages/commons/tests/**/* - - packages/commons/jest.config.js - - layers/jest.config.js + - packages/commons/jest.config.cjs + - layers/jest.config.cjs - layers/tests/* - layers/tests/**/* - area/documentation: + documentation: - docs/* - docs/**/* - mkdocs.yml - - typedoc.js - examples/app/* - area/automation: + automation: - .github/scripts/* - .github/scripts/**/* - .github/workflows/* @@ -84,7 +83,7 @@ labelPRBasedOnFilePath: - .github/boring-cyborg.yml - .github/semantic.yml - type/internal: + internal: - .github/CODEOWNERS - .github/PULL_REQUEST_TEMPLATE.md - .github/ISSUE_TEMPLATE/* @@ -96,7 +95,7 @@ labelPRBasedOnFilePath: - LICENSE-THIRD-PARTY - lerna.json - .nvmrc - - .eslintrc.js + - .eslintrc.cjs - .eslintignore - .npmignore - .gitpod.yml @@ -124,7 +123,7 @@ labelPRBasedOnFilePath: - layers/README.md - examples/app/tsconfig*.json - type/dependencies: + dependencies: - package.json - package-lock.json - packages/tracer/package.json diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index a0ae73b1d8..4e97b0eb79 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -2,27 +2,27 @@ change-template: "* $TITLE (#$NUMBER) by @$AUTHOR" categories: - title: '⚑ Breaking Changes' labels: - - 'type/breaking-change' + - 'breaking-change' - title: '🌟New features and non-breaking changes' labels: - - 'type/feature' + - 'feature' - title: '🌟 Minor Changes' labels: - - 'type/enhancement' + - 'enhancement' - title: 'πŸ“œ Documentation updates' labels: - - 'area/documentation' + - 'documentation' - title: 'πŸ› Bug and hot fixes' labels: - - 'type/bug' - - 'type/fix' + - 'bug' + - 'fix' - title: 'πŸš’ Deprecations' labels: - - 'type/deprecation' + - 'deprecation' - title: 'πŸ”§ Maintenance' labels: - - 'type/internal' - - 'type/dependencies' + - 'internal' + - 'dependencies' exclude-labels: - 'skip-changelog' tag-template: 'v$NEXT_PATCH_VERSION' diff --git a/.github/scripts/constants.js b/.github/scripts/constants.js index ed26f41cca..1a3d2c0d14 100644 --- a/.github/scripts/constants.js +++ b/.github/scripts/constants.js @@ -25,10 +25,10 @@ module.exports = Object.freeze({ "LABEL_BLOCK_REASON": "need-issue", /** @type {string} */ - "LABEL_PENDING_RELEASE": "status/pending-release", + "LABEL_PENDING_RELEASE": "pending-release", /** @type {string} */ - "LABEL_RELEASED": "status/completed", + "LABEL_RELEASED": "completed", /** @type {string} */ "HANDLE_MAINTAINERS_TEAM": "@aws-powertools/lambda-typescript", diff --git a/.github/scripts/label_pr_based_on_title.js b/.github/scripts/label_pr_based_on_title.js index 859ec7e0c7..f3188c9532 100644 --- a/.github/scripts/label_pr_based_on_title.js +++ b/.github/scripts/label_pr_based_on_title.js @@ -1,4 +1,4 @@ -const { PR_NUMBER, PR_TITLE } = require("./constants"); +const { PR_NUMBER, PR_TITLE } = require('./constants'); module.exports = async ({ github, context, core }) => { const BUG_REGEX = /(fix|bug)(\((.+)\))?(:.+)/; @@ -7,10 +7,10 @@ module.exports = async ({ github, context, core }) => { const DEPRECATED_REGEX = /(deprecated)(\((.+)\))?(:.+)/; const labels = { - "type/feature": FEAT_REFACTOR_REGEX, - "type/bug": BUG_REGEX, - "type/deprecation": DEPRECATED_REGEX, - "type/enhancement": ENHANCEMENT_REGEX, + feature: FEAT_REFACTOR_REGEX, + bug: BUG_REGEX, + deprecation: DEPRECATED_REGEX, + enhancement: ENHANCEMENT_REGEX, }; // Maintenance: We should keep track of modified PRs in case their titles change diff --git a/.github/scripts/label_related_issue.js b/.github/scripts/label_related_issue.js index 57c938d8af..e353e923fe 100644 --- a/.github/scripts/label_related_issue.js +++ b/.github/scripts/label_related_issue.js @@ -59,11 +59,11 @@ module.exports = async ({ github, context, core }) => { } /** - * Keep all labels except those that start with 'status/' or 'need-' or equal to 'help-wanted' + * Keep all labels except any of the `status` ones, or 'need-' or equal to 'help-wanted' * as those are contextual to issues still in progress. * - * If the issue was already marked with the 'status/completed' label, then we'll keep that, otherwise - * we'll add the 'status/pending-release' label. + * If the issue was already marked with the 'completed' label, then we'll keep that, otherwise + * we'll add the 'pending-release' label. */ let hasCompletedLabel = false; const newLabels = currentLabels.data @@ -72,13 +72,22 @@ module.exports = async ({ github, context, core }) => { hasCompletedLabel = true; } return ( - !label.name.startsWith('status/') && + ![ + 'blocked', + 'confirmed', + 'discussing', + 'on-hold', + 'completed', + 'rejected', + 'pending-release', + 'pending-close-response-required', + ].includes(label.name) && !label.name.startsWith('need-') && label.name !== 'help-wanted' ); }) .map((label) => label.name); - // Add the status/pending-release or status/completed label + // Add the pending-release or completed label newLabels.push(hasCompletedLabel ? LABEL_RELEASED : LABEL_PENDING_RELEASE); try { diff --git a/.github/scripts/update_layer_arn.sh b/.github/scripts/update_layer_arn.sh index 3664259812..f5f1f10c36 100755 --- a/.github/scripts/update_layer_arn.sh +++ b/.github/scripts/update_layer_arn.sh @@ -56,7 +56,7 @@ for file in $files; do # arn:aws:lambda:{env.region}:094274105915:layer:AWSLambdaPowertoolsTypeScript:39 if [[ "$line" == *"eu-central-1"* ]]; then # These are all the framework pseudo parameters currently found in the docs - for pseudo_region in '{region}' '${AWS::Region}' '${aws:region}' '{aws::region}' '{env.region}' '${cdk.Stack.of(this).region}' '${aws.getRegionOutput().name}'; do + for pseudo_region in '{region}' '${AWS::Region}' '${aws:region}' '{aws::region}' '{env.region}' '${Stack.of(this).region}' '${aws.getRegionOutput().name}'; do prefix_pseudo_region=$(echo "$prefix" | sed "s/eu-central-1/${pseudo_region}/") # prefix_pseudo_region = arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScript diff --git a/.github/semantic.yml b/.github/semantic.yml index 26af1db418..3a2142bfc3 100644 --- a/.github/semantic.yml +++ b/.github/semantic.yml @@ -32,6 +32,7 @@ scopes: - maintenance - deps - deps-dev + - roadmap # Always validate the PR title # and ignore the commits to lower the entry bar for contribution diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 576234aa2c..029af7f859 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,6 +17,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: 'Dependency Review' - uses: actions/dependency-review-action@5bbc3ba658137598168acb2ab73b21c432dd411b # v4.2.5 + uses: actions/dependency-review-action@0c155c5e8556a497adf53f2c18edabf945ed8e70 # v4.3.2 diff --git a/.github/workflows/label_pr_on_title.yml b/.github/workflows/label_pr_on_title.yml index a191c823f4..dc60786c68 100644 --- a/.github/workflows/label_pr_on_title.yml +++ b/.github/workflows/label_pr_on_title.yml @@ -49,7 +49,7 @@ jobs: pull-requests: write # label respective PR steps: - name: Checkout repository - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Label PR based on title" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index 0f42160f29..f1332d204f 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -45,7 +45,7 @@ jobs: RELEASE_VERSION: ${{ steps.set-release-version.outputs.RELEASE_VERSION }} steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.sha }} - name: Setup NodeJS @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.sha }} - name: Git client setup diff --git a/.github/workflows/make-version.yml b/.github/workflows/make-version.yml index e61652cd03..724e222f0d 100644 --- a/.github/workflows/make-version.yml +++ b/.github/workflows/make-version.yml @@ -18,7 +18,7 @@ jobs: RELEASE_VERSION: ${{ steps.set-release-version.outputs.RELEASE_VERSION }} steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.ref }} fetch-depth: 0 # fetch all history, commits and tags, lerna scans it to the last tag and looks at commits, we need all of it to determine the next version diff --git a/.github/workflows/on_merged_pr.yml b/.github/workflows/on_merged_pr.yml index 8d536bc307..d92dfbc6a5 100644 --- a/.github/workflows/on_merged_pr.yml +++ b/.github/workflows/on_merged_pr.yml @@ -49,7 +49,7 @@ jobs: issues: write # label issue with pending-release if: needs.get_pr_details.outputs.prIsMerged == 'true' steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Label PR related issue for release" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/on_opened_pr.yml b/.github/workflows/on_opened_pr.yml index 25462721f6..f1a5091b35 100644 --- a/.github/workflows/on_opened_pr.yml +++ b/.github/workflows/on_opened_pr.yml @@ -47,7 +47,7 @@ jobs: needs: get_pr_details runs-on: ubuntu-latest steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Ensure related issue is present" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: @@ -66,7 +66,7 @@ jobs: permissions: pull-requests: write # label and comment on PR if missing acknowledge section (requirement) steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Ensure acknowledgement section is present" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/ossf_scorecard.yml b/.github/workflows/ossf_scorecard.yml index fcad19ea73..3be6d0ff14 100644 --- a/.github/workflows/ossf_scorecard.yml +++ b/.github/workflows/ossf_scorecard.yml @@ -22,12 +22,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3 with: results_file: results.sarif results_format: sarif @@ -35,7 +35,7 @@ jobs: # repo_token: ${{ secrets.SCORECARD_TOKEN }} # read-only fine-grained token to read branch protection settings - name: "Upload results" - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: SARIF file path: results.sarif @@ -43,6 +43,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@df5a14dc28094dc936e103b37d749c6628682b60 # v3.25.0 + uses: github/codeql-action/upload-sarif@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: sarif_file: results.sarif diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml index cadff1fdc0..866c618d97 100644 --- a/.github/workflows/post-release.yml +++ b/.github/workflows/post-release.yml @@ -26,7 +26,7 @@ jobs: env: RELEASE_VERSION: ${{ inputs.versionNumber }} steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Get release version run: | # The code below does the following: diff --git a/.github/workflows/publish_layer.yml b/.github/workflows/publish_layer.yml index 7dd30d8ff8..002e33a37b 100644 --- a/.github/workflows/publish_layer.yml +++ b/.github/workflows/publish_layer.yml @@ -31,7 +31,7 @@ jobs: if: ${{ (github.event.workflow_run.conclusion == 'success') || (github.event_name == 'workflow_dispatch') }} steps: - name: checkout - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.sha }} - name: Setup Node.js @@ -45,7 +45,7 @@ jobs: - name: Zip output run: zip -r cdk.out.zip layers/cdk.out - name: Archive CDK artifacts - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: cdk-layer-artifact path: cdk.out.zip @@ -93,11 +93,11 @@ jobs: id-token: none steps: - name: Checkout repository # reusable workflows start clean, so we need to checkout again - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.sha }} - name: Download CDK layer artifacts - uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 with: path: cdk-layer-stack pattern: cdk-layer-stack-* # merge all Layer artifacts created per region earlier (reusable_deploy_layer_stack.yml; step "Save Layer ARN artifact") diff --git a/.github/workflows/record_pr.yml b/.github/workflows/record_pr.yml index 9bd37995a6..f9026d1c97 100644 --- a/.github/workflows/record_pr.yml +++ b/.github/workflows/record_pr.yml @@ -46,14 +46,14 @@ jobs: permissions: contents: read # NOTE: treat as untrusted location steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Extract PR details" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | const script = require('.github/scripts/save_pr_details.js') await script({github, context, core}) - - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: pr path: pr.txt 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 b4936f91c3..eb18ecf245 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -44,7 +44,7 @@ jobs: working-directory: examples/${{ matrix.example }} steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -62,7 +62,7 @@ jobs: NODE_ENV: dev steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -80,7 +80,7 @@ jobs: NODE_ENV: dev steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -89,4 +89,20 @@ jobs: - name: Setup dependencies uses: ./.github/actions/cached-node-modules - name: Run linting - run: npm run lint -w docs/snippets + run: npm run lint -w examples/snippets + check-docs: + runs-on: ubuntu-latest + env: + NODE_ENV: dev + steps: + - name: Checkout code + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + - name: Setup NodeJS + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: 20 + cache: "npm" + - name: Setup dependencies + uses: ./.github/actions/cached-node-modules + - name: Run linting + run: npm run lint:markdown diff --git a/.github/workflows/reusable_deploy_layer_stack.yml b/.github/workflows/reusable_deploy_layer_stack.yml index 1248c89319..36a0a39701 100644 --- a/.github/workflows/reusable_deploy_layer_stack.yml +++ b/.github/workflows/reusable_deploy_layer_stack.yml @@ -62,7 +62,7 @@ jobs: ] steps: - name: checkout - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: aws credentials uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 with: @@ -76,7 +76,7 @@ jobs: - name: Setup dependencies uses: ./.github/actions/cached-node-modules - name: Download artifact - uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 with: name: ${{ inputs.artifact-name }} - name: Unzip artifact @@ -91,7 +91,7 @@ jobs: cat cdk-layer-stack/${{ matrix.region }}-layer-version.txt - name: Save Layer ARN artifact if: ${{ inputs.stage == 'PROD' }} - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: cdk-layer-stack-${{ matrix.region }} path: ./cdk-layer-stack/* # NOTE: upload-artifact does not inherit working-directory setting. diff --git a/.github/workflows/reusable_export_pr_details.yml b/.github/workflows/reusable_export_pr_details.yml index 016b78a06b..d43fe11245 100644 --- a/.github/workflows/reusable_export_pr_details.yml +++ b/.github/workflows/reusable_export_pr_details.yml @@ -75,7 +75,7 @@ jobs: prLabels: ${{ steps.prLabels.outputs.prLabels }} steps: - name: Checkout repository # in case caller workflow doesn't checkout thus failing with file not found - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: "Download previously saved PR" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/reusable_publish_docs.yml b/.github/workflows/reusable_publish_docs.yml index 14678521dc..a279266a01 100644 --- a/.github/workflows/reusable_publish_docs.yml +++ b/.github/workflows/reusable_publish_docs.yml @@ -50,7 +50,7 @@ jobs: id-token: write # trade JWT token for AWS credentials in AWS Docs account steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -96,7 +96,7 @@ jobs: run: | cp -r api site/ - name: Create Artifact (Site) - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: site path: site diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index e99b01260d..7faa7411f0 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -37,7 +37,7 @@ jobs: fail-fast: false steps: - name: Checkout Repo - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 # 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 @@ -51,7 +51,7 @@ jobs: # we checkout the PR at that point in time - name: Checkout PR code if: ${{ inputs.prNumber != '' }} - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ steps.extract_PR_details.outputs.headSHA }} - name: Setup NodeJS diff --git a/.github/workflows/secure-workflows.yml b/.github/workflows/secure-workflows.yml index 674e9e412b..c75b766072 100644 --- a/.github/workflows/secure-workflows.yml +++ b/.github/workflows/secure-workflows.yml @@ -30,8 +30,8 @@ jobs: contents: read # checkout code and subsequently GitHub action workflows steps: - name: Checkout code - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - name: Ensure 3rd party workflows have SHA pinned - uses: zgosalvez/github-actions-ensure-sha-pinned-actions@19ebcb0babbd282ae1822a0b9c28f3f1f25cea45 # v3.0.4 + uses: zgosalvez/github-actions-ensure-sha-pinned-actions@40e45e738b3cad2729f599d8afc6ed02184e1dbd # v3.0.5 with: allowlist: slsa-framework/slsa-github-generator \ No newline at end of file diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml index d21eda7853..0ac6baa12d 100644 --- a/.github/workflows/stale-issues.yml +++ b/.github/workflows/stale-issues.yml @@ -19,13 +19,13 @@ jobs: stale-issue-message: "This issue has not received a response in 2 weeks. If you still think there is a problem, please leave a comment to avoid the issue from automatically closing." close-issue-message: "Greetings! We are closing this issue because it has been open a long time and hasn’t been updated in a while and may not be getting the attention it deserves. We encourage you to check if this is still an issue in the latest release and if you find that this is still a problem, please feel free to comment or reopen the issue." # Label applied or removed when an issue becomes stale - stale-issue-label: status/pending-close-response-required + stale-issue-label: pending-close-response-required remove-stale-when-updated: true # Label and close type when a stale issue is finally closed - close-issue-label: status/rejected + close-issue-label: rejected close-issue-reason: not_planned # Exempt any issue that hasn't been triaged yet, or that is clearly labeled - exempt-issue-labels: triage,status/confirmed,status/blocked,status/on-hold,status/completed + exempt-issue-labels: triage,confirmed,blocked,on-hold,completed # Include only issues that were labeled as `need-response` (aka only issues that need a response from the customer) only-issue-labels: need-response # Settings specific to issues diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 0000000000..bf812e66ca --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,226 @@ +# Rules: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + +# Default state for all rules +default: true + +# Path to configuration file to extend +extends: null + +# MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time +MD001: true + +# MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading +# NOTE: We use h2 due to font size +MD002: false + +# MD003/heading-style/header-style - Heading style +MD003: + # Heading style + style: "consistent" + +# MD004/ul-style - Unordered list style +MD004: + # List style + style: "consistent" + +# MD005/list-indent - Inconsistent indentation for list items at the same level +MD005: true + +# MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line +MD006: true + +# MD007/ul-indent - Unordered list indentation +MD007: + # Spaces for indent + indent: 4 + # Whether to indent the first level of the list + start_indented: false + # Spaces for first level indent (when start_indented is set) + start_indent: 2 + +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +# NOTE: Mkdocs Material theme features like code annotations, tabbed content require it +MD010: false + +# MD011/no-reversed-links - Reversed link syntax +MD011: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: + # Consecutive blank lines + maximum: 1 + +# MD013/line-length - Line length +MD013: + # Number of characters + line_length: 380 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 265 + # Include code blocks + code_blocks: true + # Include tables + tables: false + # Include headings + headings: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD014/commands-show-output - Dollar signs used before commands without showing output +MD014: true + +# MD018/no-missing-space-atx - No space after hash on atx style heading +MD018: true + +# MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading +MD019: true + +# MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading +MD020: true + +# MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading +MD021: true + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line +MD023: true + +# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content +MD024: + # Only check sibling headings + siblings_only: false + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: + # Punctuation characters + punctuation: ".,;:!γ€‚οΌŒοΌ›οΌšοΌ" + +# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol +MD027: true + +# MD028/no-blanks-blockquote - Blank line inside blockquote +MD028: true + +# MD029/ol-prefix - Ordered list item prefix +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines +MD031: + # Include list items + list_items: true + +# MD032/blanks-around-lists - Lists should be surrounded by blank lines +MD032: true + +# MD033/no-inline-html - Inline HTML +# NOTE: Some content like Logger '' triggers false positives +MD033: false + +# MD034/no-bare-urls - Bare URL used +MD034: true + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: "consistent" + +# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading +# NOTE: We use **** instead of yet another sub-heading that might not appear in the navigation. +# this is a trade-off we make to not a gigantic right-navigation +MD036: false + +# MD037/no-space-in-emphasis - Spaces inside emphasis markers +MD037: true + +# MD038/no-space-in-code - Spaces inside code span elements +# mkdocs-material requires these in tab content +MD038: false + +# MD039/no-space-in-links - Spaces inside link text +MD039: true + +# MD040/fenced-code-language - Fenced code blocks should have a language specified +MD040: true + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD042/no-empty-links - No empty links +# NOTE: Clipboard links like Lambda Layers use empty links +MD042: false + +# MD043/required-headings/required-headers - Required heading structure +MD043: false + +# MD044/proper-names - Proper names should have the correct capitalization +MD044: + # List of proper names + names: [] + # Include code blocks + code_blocks: true + # Include HTML elements + html_elements: true + +# MD045/no-alt-text - Images should have alternate text (alt text) +MD045: true + +# MD046/code-block-style - Code block style +# Material theme tabbed content feature use indented and simple use fenced; can't support both +MD046: false + +# MD047/single-trailing-newline - Files should end with a single newline character +MD047: true + +# MD048/code-fence-style - Code fence style +MD048: false + +# MD051/link-fragments - Link fragments should be valid +MD051: true + +# MD052/reference-links-images - Reference links and images should use a label that is defined +MD052: true + +# MD053/link-image-reference-definitions - Link and image reference definitions should be needed +MD053: true \ No newline at end of file diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 0000000000..ef3b366abb --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,22 @@ +# built artifacts +site/** +api/** +# changelogs - these are not linted as they are auto-generated +CHANGELOG.md +packages/*/CHANGELOG.md +examples/*/CHANGELOG.md +layers/*/CHANGELOG.md +# other files +LICENSE +.github/** +**node_modules/** */ +# these will be removed from the ignore and linted in future PRs +packages/batch/README.md +packages/commons/README.md +packages/idempotency/README.md +packages/jmespath/README.md +packages/logger/README.md +packages/metrics/README.md +packages/parameters/README.md +packages/parser/README.md +packages/tracer/README.md \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 15e81b9a37..fbc9473987 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + + +### Bug Fixes + +* **parser:** lambda function url cognitoIdentity and principalOrgId nullable ([#2430](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2430)) ([3c3e393](https://github.com/aws-powertools/powertools-lambda-typescript/commit/3c3e393df47d28a6bddb2a9d01cd6fefea3db15e)) +* **parser:** set APIGatewayProxyEventSchema body and query string keys to be nullable ([#2465](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2465)) ([7ce5b3c](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7ce5b3cff88b6eadeda1041b4eb076af2ebd848d)) +* **parser:** set etag optional for delete object notifications ([#2429](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2429)) ([100e223](https://github.com/aws-powertools/powertools-lambda-typescript/commit/100e2238b45e224a369cc7a349f78cafda3f94b7)) + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5b627cfa60..240d2275c4 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,4 +1,5 @@ -## Code of Conduct +# Code of Conduct + This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact -opensource-codeofconduct@amazon.com with any additional questions or comments. + with any additional questions or comments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cedafa950d..b53bd99888 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,24 +1,26 @@ +# Contributing Guidelines + ## Table of contents - [Reporting Bugs/Feature Requests](#reporting-bugsfeature-requests) - [Contributing via Pull Requests](#contributing-via-pull-requests) - - [Dev setup](#dev-setup) - - [Gitpod](#gitpod) - - [GitHub Codespaces](#github-codespaces) - - [Local environment](#local-environment) - - [Sending a pull request](#sending-a-pull-request) - - [Local documentation](#local-documentation) + - [Dev setup](#dev-setup) + - [Gitpod](#gitpod) + - [GitHub Codespaces](#github-codespaces) + - [Local environment](#local-environment) + - [Sending a pull request](#sending-a-pull-request) + - [Local documentation](#local-documentation) - [Conventions](#conventions) - - [General terminology and practices](#general-terminology-and-practices) - - [Testing definition](#testing-definition) + - [General terminology and practices](#general-terminology-and-practices) + - [Testing definition](#testing-definition) - [Finding contributions to work on](#finding-contributions-to-work-on) - [Code of Conduct](#code-of-conduct) - [Security issue notifications](#security-issue-notifications) - [Licensing](#licensing) -# Contributing Guidelines - + Thank you for your interest in contributing to our project. Whether it's a [bug report](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=type%2Fbug%2Ctriage&projects=aws-powertools%2F7&template=bug_report.yml&title=Bug%3A+TITLE), [new feature](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=type%2Ffeature-request%2Ctriage&projects=aws-powertools%2F7&template=feature_request.yml&title=Feature+request%3A+TITLE), [correction](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose), or [additional documentation](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=area%2Fdocumentation%2Ctriage&projects=aws-powertools%2F7&template=documentation_improvements.yml&title=Docs%3A+TITLE), we greatly value feedback and contributions from our community. + Please read through this document before submitting any issues or pull requests to ensure we have all the necessary information to effectively respond to your bug report or contribution. @@ -26,7 +28,9 @@ Please read through this document before submitting any issues or pull requests We welcome you to use the GitHub issue tracker to report bugs, suggest features, or documentation improvements. + [When filing an issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose), please check [existing open](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc), or [recently closed](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aissue+sort%3Aupdated-desc+is%3Aclosed), issues to make sure somebody else hasn't already reported the issue. Please try to include as much information as you can. + ## Contributing via Pull Requests @@ -34,7 +38,7 @@ Contributions via pull requests are much appreciated. Before sending us a pull r 1. You are working against the latest source on the **main** branch, unless instructed otherwise. 2. You check existing open, and recently merged pull requests to make sure someone else hasn't addressed the problem already. -3. You discuss and agree your proposed changes under [an existing issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aopen+is%3Aupdated-desc) or a [new issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose){target="_blank" rel="nofollow"} before you begin any implementation. We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. +3. You discuss and agree the proposed changes under [an existing issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aopen+is%3Aupdated-desc) or a new one before you begin any implementation. We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. At a high level, these are the steps to get code merged in the repository - don't worry, nearly all of them are automated. @@ -49,6 +53,7 @@ timeline : Local tests Pre-commit checks
(git commit) : Code linting (standards) + : Markdown linting Pre-Pull Request
(git push) : Tests (unit) @@ -111,7 +116,7 @@ GitHub provides additional document on [forking a repository](https://help.githu You might find useful to run both the documentation website and the API reference locally while contributing: - **Docs website**: `npm run docs-runLocalDocker` - * If this is your first time running the docs, you need to build the image: `npm run docs-buildDockerImage` + - If this is your first time running the docs, you need to build the image: `npm run docs-buildDockerImage` - **API reference**: `npm run docs-api-build-run` ## Conventions diff --git a/MAINTAINERS.md b/MAINTAINERS.md index e9e6d1e941..068e42dfcd 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,2 +1,4 @@ + + > [!IMPORTANT] -> Maintainers' playbook moved: https://docs.powertools.aws.dev/lambda/typescript/latest/maintainers/ +> Maintainers' playbook moved: diff --git a/README.md b/README.md index b405d9d883..2edc7eb9a4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + # Powertools for AWS Lambda (TypeScript) ![NodeSupport](https://img.shields.io/static/v1?label=node&message=%2016|%2018|%2020&color=green?style=flat-square&logo=node) @@ -13,99 +14,42 @@ You can use the library in both TypeScript and JavaScript code bases. > Also available in [Python](https://github.com/aws-powertools/powertools-lambda-python), [Java](https://github.com/aws-powertools/powertools-lambda-java), and [.NET](https://github.com/aws-powertools/powertools-lambda-dotnet). -**[Documentation](https://docs.powertools.aws.dev/lambda/typescript/)** | **[npm](https://www.npmjs.com/org/aws-lambda-powertools)** | **[Roadmap](https://docs.powertools.aws.dev/lambda/typescript/latest/roadmap)** | **[Examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples)** | **[Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo)** - -## Table of contents - -- [Features](#features) -- [Getting started](#getting-started) - - [Installation](#installation) - - [Lambda layers](#lambda-layers) - - [NPM modules](#npm-modules) - - [Examples](#examples) - - [Demo applications](#demo-applications) -- [Contribute](#contribute) -- [Roadmap](#roadmap) -- [Connect](#connect) -- [How to support Powertools for AWS Lambda (TypeScript)?](#how-to-support-powertools-for-aws-lambda-typescript) - - [Becoming a reference customer](#becoming-a-reference-customer) - - [Sharing your work](#sharing-your-work) - - [Using Lambda Layer](#using-lambda-layer) -- [Credits](#credits) -- [License](#license) +**[Documentation](https://docs.powertools.aws.dev/lambda/typescript/latest)** | **[npmjs.com](https://www.npmjs.com/org/aws-lambda-powertools)** | **[Roadmap](https://docs.powertools.aws.dev/lambda/typescript/latest/roadmap)** | **[Examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples)** ## Features -* **[Tracer](https://docs.powertools.aws.dev/lambda/typescript/latest/core/tracer/)** - Utilities to trace Lambda function handlers, and both synchronous and asynchronous functions -* **[Logger](https://docs.powertools.aws.dev/lambda/typescript/latest/core/logger/)** - Structured logging made easier, and a middleware to enrich log items with key details of the Lambda context -* **[Metrics](https://docs.powertools.aws.dev/lambda/typescript/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF) -* **[Parameters](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/)** - High-level functions to retrieve one or more parameters from AWS SSM Parameter Store, AWS Secrets Manager, AWS AppConfig, and Amazon DynamoDB -* **[Idempotency](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/)** - Class method decorator, Middy middleware, and function wrapper to make your Lambda functions idempotent and prevent duplicate execution based on payload content -* **[Batch Processing](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/batch/)** - Utility to handle partial failures when processing batches from Amazon SQS, Amazon Kinesis Data Streams, and Amazon DynamoDB Streams. +Find the complete project's [documentation here](https://docs.powertools.aws.dev/lambda/typescript/latest). -## Getting started +- **[Tracer](https://docs.powertools.aws.dev/lambda/typescript/latest/core/tracer/)** - Utilities to trace Lambda function handlers, and both synchronous and asynchronous functions +- **[Logger](https://docs.powertools.aws.dev/lambda/typescript/latest/core/logger/)** - Structured logging made easier, and a middleware to enrich log items with key details of the Lambda context +- **[Metrics](https://docs.powertools.aws.dev/lambda/typescript/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF) +- **[Parameters](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/)** - High-level functions to retrieve one or more parameters from AWS SSM Parameter Store, AWS Secrets Manager, AWS AppConfig, and Amazon DynamoDB +- **[Idempotency](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/)** - Class method decorator, Middy middleware, and function wrapper to make your Lambda functions idempotent and prevent duplicate execution based on payload content +- **[Batch Processing](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/batch/)** - Utility to handle partial failures when processing batches from Amazon SQS, Amazon Kinesis Data Streams, and Amazon DynamoDB Streams. +- **[JMESPath Functions](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/jmespath/)** - Built-in JMESPath functions to easily deserialize common encoded JSON payloads in Lambda functions. +- **[Parser (Zod)](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/batch/)** - Utility that provides data validation and parsing using Zod, a TypeScript-first schema declaration and validation library. -Find the complete project's [documentation here](https://docs.powertools.aws.dev/lambda/typescript). +## Install -### Installation +You can use Powertools for AWS Lambda (TypeScript) by installing it with your favorite dependency management, or [via Lambda Layers](https://docs.powertools.aws.dev/lambda/typescript/latest/#lambda-layer_1). All features are available as individual packages, so you can install only the ones you need, for example: -You have 2 ways of consuming those utilities: -* NPM modules -* Lambda Layer - -#### Lambda layers - -The Powertools for AWS Lambda (TypeScript) utilities is packaged as a single [AWS Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer) - -πŸ‘‰ [Installation guide for the **Powertools for AWS Lambda (TypeScript)** layer](https://docs.powertools.aws.dev/lambda/typescript/latest/#lambda-layer) - -#### NPM modules - -The Powertools for AWS Lambda (TypeScript) utilities follow a modular approach, similar to the official [AWS SDK v3 for JavaScript](https://github.com/aws/aws-sdk-js-v3). -Each TypeScript utility is installed as standalone NPM package. - -Install all three core utilities at once with this single command: - -```shell -npm install @aws-lambda-powertools/logger @aws-lambda-powertools/tracer @aws-lambda-powertools/metrics -``` - -Or refer to the installation guide of each utility: - -πŸ‘‰ [Installation guide for the **Tracer** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/tracer#getting-started) - -πŸ‘‰ [Installation guide for the **Logger** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/logger#getting-started) - -πŸ‘‰ [Installation guide for the **Metrics** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/metrics#getting-started) - -πŸ‘‰ [Installation guide for the **Parameters** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/#getting-started) - -πŸ‘‰ [Installation guide for the **Idempotency** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/#getting-started) +- **Logger**: `npm install @aws-lambda-powertools/logger` +- **Metrics**: `npm install @aws-lambda-powertools/metrics` +- **Tracer**: `npm install @aws-lambda-powertools/tracer` +- **Parameters**: `npm install @aws-lambda-powertools/parameters @aws-sdk/client-ssm` see [documentation](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/#installation) for other providers +- **Idempotency**: `npm install @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb` +- **Batch**: `npm install @aws-lambda-powertools/batch` +- **JMESPath Functions**: `npm install @aws-lambda-powertools/jmespath` +- **Parser**: `npm install @aws-lambda-powertools/parser zod@~3` ### Examples -You can find examples of how to use Powertools for AWS Lambda (TypeScript) in the [examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples/app) directory. The application is a simple REST API that can be deployed via either AWS CDK or AWS SAM. +You can find examples of how to use Powertools for AWS Lambda (TypeScript) in the [examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples) directory. The directory contains code snippets around certain features as well as an is a simple REST API application that can be deployed via either AWS CDK or AWS SAM. -### Demo applications +Community-contributed examples: -The [Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo) shows how to use Powertools for AWS Lambda (TypeScript). -You can find instructions on how to deploy and load test this application in the [repository](https://github.com/aws-samples/serverless-typescript-demo). - -The [AWS Lambda performance tuning](https://github.com/aws-samples/optimizations-for-lambda-functions) repository also uses Powertools for AWS Lambda (TypeScript) as well as demonstrating other performance tuning techniques for Lambda functions written in TypeScript. - -## Contribute - -If you are interested in contributing to this project, please refer to our [Contributing Guidelines](https://github.com/aws-powertools/powertools-lambda-typescript/blob/main/CONTRIBUTING.md). - -## Roadmap - -The roadmap of Powertools for AWS Lambda (TypeScript) is driven by customers’ demand. -Help us prioritize upcoming functionalities or utilities by [upvoting existing RFCs and feature requests](https://github.com/aws-powertools/powertools-lambda-typescript/issues), or [creating new ones](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose), in this GitHub repository. - -## Connect - -* **Powertools for AWS Lambda on Discord**: `#typescript` - **[Invite link](https://discord.gg/B8zZKbbyET)** -* **Email**: aws-lambda-powertools-feedback@amazon.com +- [Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo) +- [AWS Lambda performance tuning](https://github.com/aws-samples/optimizations-for-lambda-functions) ## How to support Powertools for AWS Lambda (TypeScript)? @@ -115,17 +59,17 @@ Knowing which companies are using this library is important to help prioritize t The following companies, among others, use Powertools: -* [Hashnode](https://hashnode.com/) -* [Trek10](https://www.trek10.com/) -* [Elva](https://elva-group.com) -* [globaldatanet](https://globaldatanet.com/) -* [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/) -* [AppYourself](https://appyourself.net) -* [Alma Media](https://www.almamedia.fi) +- [Hashnode](https://hashnode.com/) +- [Trek10](https://www.trek10.com/) +- [Elva](https://elva-group.com) +- [globaldatanet](https://globaldatanet.com/) +- [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/) +- [AppYourself](https://appyourself.net) +- [Alma Media](https://www.almamedia.fi) ### Sharing your work @@ -133,11 +77,21 @@ Share what you did with Powertools for AWS Lambda (TypeScript) πŸ’žπŸ’ž. Blog po ### Using Lambda Layer -This helps us understand who uses Powertools for AWS Lambda (TypeScript) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](#lambda-layers), you can add Powertools for AWS Lambda (TypeScript) as a dev dependency (or as part of your virtual env) to not impact the development process. +This helps us understand who uses Powertools for AWS Lambda (Typescript) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](https://docs.powertools.aws.dev/lambda/typescript/latest/#lambda-layer), you can add Powertools for AWS Lambda as a dev dependency to not impact the development process. ## Credits -Credits for the Powertools for AWS Lambda (TypeScript) idea go to [DAZN](https://github.com/getndazn) and their [DAZN Lambda Powertools](https://github.com/getndazn/dazn-lambda-powertools/). +- Structured logging initial implementation from [aws-lambda-logging](https://gitlab.com/hadrien/aws_lambda_logging) +- Powertools for AWS Lambda idea [DAZN Powertools](https://github.com/getndazn/dazn-lambda-powertools/) + +## Connect + +- **Powertools for AWS Lambda on Discord**: `#typescript` - **[Invite link](https://discord.gg/B8zZKbbyET)** +- **Email**: + +## Security disclosures + +If you think you’ve found a potential security issue, please do not post it in the Issues. Instead, please follow the instructions [here](https://aws.amazon.com/security/vulnerability-reporting/) or [email AWS security directly](mailto:aws-security@amazon.com). ## License diff --git a/SECURITY.md b/SECURITY.md index 8db8c1dccb..9fb5d9cd38 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,5 @@ -## Reporting a Vulnerability +# Reporting a vulnerability -If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security -via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/) or directly via email to aws-security@amazon.com. -Please do **not** create a public GitHub issue. \ No newline at end of file +If you discover a potential security issue in this project, we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/) or directly via email to . + +Please do **not** create a public GitHub issue. diff --git a/docs/.markdownlint.yaml b/docs/.markdownlint.yaml new file mode 100644 index 0000000000..ac9ea50ab2 --- /dev/null +++ b/docs/.markdownlint.yaml @@ -0,0 +1,27 @@ +# Rules: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + +extends: ../.markdownlint.yaml + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +MD041: + # Heading level + level: 2 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD043/required-headings/required-headers - Required heading structure +# NOTE: Enforce our minimum headers across the docs +MD043: + # List of headings + headings: + [ + "*", + "## Key features", + "*", + "## Getting started", + "*", + "## Advanced", + "*", + "## Testing your code", + "*", + ] \ No newline at end of file diff --git a/docs/Dockerfile b/docs/Dockerfile index 01b7a9cc8f..50a63b458f 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,5 @@ # version 9.5.2 -FROM squidfunk/mkdocs-material@sha256:521644b58bc0c806083ef66e8b1027861bd3e98c433b251c436c5c0cc7733603 +FROM squidfunk/mkdocs-material@sha256:8ef47d7116605e6b09860263af7278461c8dfca5dd3995f823dc96ea98b3f06c ADD requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt \ No newline at end of file diff --git a/docs/contributing/conventions.md b/docs/contributing/conventions.md index 84efdc0dfc..cbac8d7aa5 100644 --- a/docs/contributing/conventions.md +++ b/docs/contributing/conventions.md @@ -3,6 +3,8 @@ title: Conventions description: General conventions and practices that are applicable throughout to Powertools for AWS Lambda (TypeScript) --- + + ## General terminology and practices These are common conventions we keep on building as the project gains new contributors and grows in complexity. @@ -26,11 +28,13 @@ The repository uses a monorepo structure managed using [npm workspaces](https:// The Powertools for AWS Lambda (TypeScript) repository utilities live under the `packages/` directory. Each utility is a separate package and has its own `package.json` file. For example, the `@aws-lambda-powertools/logger` source code can be found under the `packages/logger/src` directory. -Whenever possible, we use the same directory structure for all utilities. This makes it easier for contributors to navigate the repository and find what they need. Additionally, we try to share common runtime code between utilities to reduce maintenance overhead and runtime footprint. The shared runtime code lives under the `packages/commons/src` directory and is published to npm as the `@aws-lambda-powertools/commons` package. +Whenever possible, we use the same directory structure for all utilities. This makes it easier for contributors to navigate the repository and find what they need. + +Additionally, we try to share common runtime code between utilities to reduce maintenance overhead and runtime footprint. The shared runtime code lives under the `packages/commons/src` directory and is published to npm as the `@aws-lambda-powertools/commons` package. There are also a few other workspaces that are not utilities published to npm, but that still share dependencies and/or runtime code with the utilities. These workspaces are: -* `docs/snippets`: contains the documentation code snippets +* `examples/snippets`: contains the documentation code snippets * `examples/app`: contains an example project that can be deployed via AWS CDK or AWS SAM * `layers`: contains the code used to build and publish the [Lambda layers](../index.md#lambda-layer) @@ -42,4 +46,4 @@ We group tests in different categories | ----------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- | | Unit tests | Verify the smallest possible unit works. | Networking access is prohibited. Keep mocks and spies at minimum. | Fast (ms to few seconds at worst) | | End-to-end tests | Gain confidence that a Lambda function with our code operates as expected. Also referred to as integration tests. | It simulates how customers configure, deploy, and run their Lambda function - Event Source configuration, IAM permissions, etc. | Slow (minutes) | -| Performance tests | Ensure critical operations won't increase latency and costs to customers. | CI arbitrary hardware can make it flaky. We'll resume writing perf test after we revamp our unit/functional tests with internal utilities. | Fast to moderate (a few seconds to a few minutes) | \ No newline at end of file +| Performance tests | Ensure critical operations won't increase latency and costs to customers. | CI arbitrary hardware can make it flaky. We'll resume writing perf test after we revamp our unit/functional tests with internal utilities. | Fast to moderate (a few seconds to a few minutes) | diff --git a/docs/contributing/getting_started.md b/docs/contributing/getting_started.md index d2166b4af7..b007cf3616 100644 --- a/docs/contributing/getting_started.md +++ b/docs/contributing/getting_started.md @@ -3,6 +3,8 @@ title: Your first contribution description: All you need to know for your first contribution to Powertools for AWS Lambda (TypeScript) --- + + Thank you for your interest in contributing to our project - we couldn't be more excited!
@@ -61,7 +63,7 @@ Before sending us a pull request, please ensure that: * You are working against the latest source on the **main** branch, unless instructed otherwise. * You check existing [open, and recently merged](https://github.com/aws-powertools/powertools-lambda-typescript/pulls?q=is%3Apr+is%3Aopen%2Cmerged+sort%3Aupdated-desc){target="_blank" rel="nofollow"} pull requests to make sure someone else hasn't addressed the problem already. -* You discuss and agree your proposed changes under [an existing issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aopen+is%3Aupdated-desc) or a [new issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose){target="_blank" rel="nofollow"} before you begin any implementation. We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. +* You discuss and agree the proposed changes under [an existing issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aopen+is%3Aupdated-desc) or a new one before you begin any implementation. We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful. * Create a new branch named after the change you are contributing _e.g._ `feat/logger-debug-sampling` **Ready?** @@ -83,4 +85,4 @@ For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of ## Security issue notifications -If you discover a potential security issue in this project, we kindly ask you to notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. \ No newline at end of file +If you discover a potential security issue in this project, we kindly ask you to notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. diff --git a/docs/contributing/setup.md b/docs/contributing/setup.md index d105488b24..de4c8416d7 100644 --- a/docs/contributing/setup.md +++ b/docs/contributing/setup.md @@ -3,6 +3,8 @@ title: Development environment description: Setting up your development environment for contribution --- + + [![Join our Discord](https://dcbadge.vercel.app/api/server/B8zZKbbyET)](https://discord.gg/B8zZKbbyET){target="_blank" rel="nofollow"} This page describes how to setup your development environment (Cloud or locally) to contribute to Powertools for AWS Lambda (TypeScript). @@ -36,7 +38,7 @@ Unless you're using the pre-configured Cloud environment, you'll need the follow ## Cloud environment !!! warning "A word of caution" - Before using a Cloud environment, be mindful of the pricing structure. You can find more information about each service pricing respectively on [Gitpod](https://www.gitpod.io/pricing){target="_blank" rel="nofollow"} and [GitHub Codespaces](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces){target="_blank" rel="nofollow"} pages. When in doubt, use the local environment below. + Before using one of the services below check out their pricing. You can find more information about each service pricing respectively on [Gitpod](https://www.gitpod.io/pricing){target="_blank" rel="nofollow"} and [GitHub Codespaces](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces){target="_blank" rel="nofollow"} pages. Once provisioned, each Cloud environment will come with all development dependencies and tools you'll need to contribute already installed. @@ -69,4 +71,4 @@ You might find useful to run both the documentation website and the API referenc * **Docs website**: `npm run docs-runLocalDocker` * If this is your first time running the docs, you need to build the image: `npm run docs-buildDockerImage` -* **API reference**: `npm run docs-api-build-run` \ No newline at end of file +* **API reference**: `npm run docs-api-build-run` diff --git a/docs/contributing/testing.md b/docs/contributing/testing.md index 0184b095b0..8fd9c09ed3 100644 --- a/docs/contributing/testing.md +++ b/docs/contributing/testing.md @@ -3,6 +3,8 @@ title: Testing description: How to write tests for Powertools for AWS Lambda (TypeScript) --- + + ## General practices As discussed in the [conventions](./conventions.md) page, we have different types of tests that aim to verify different aspects of the code. @@ -67,7 +69,6 @@ To run unit tests, you can use of the following commands from the root folder: * `npm test -w packages/metrics` to run all the unit tests for the `metrics` module * `npm run jest -w packages/metrics -- --group=unit/metrics/middleware` to run all the unit tests for the `metrics` module that are tagged with the `unit/metrics/middleware` group - We enforce 100% code coverage for unit tests. The test command will fail if the coverage is not 100% both on your local machine and in CI. ## Integration tests @@ -77,14 +78,14 @@ Integration tests are used to verify that the code works as expected when deploy When writing integration tests, you should follow the same conventions used for existing tests. For example, each test file should correspond to an utility and a specific usage type. For example, the test for the middleware usage for the `@aws-lambda-powertools/logger` module has a single test file named `basicFeatures.middy.test.ts`. !!! warning "A word of caution" - Running integration tests will deploy AWS resources in your AWS account, which might incur costs. The cost from **some services** are covered by the [AWS Free Tier](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all) but not all of them. We recommend you to use a dedicated AWS account for testing purposes, and when in doubt, let the CI on our repository run the tests for you. + Running integration tests will deploy AWS resources in your AWS account, which might incur costs. The cost from **some services** are covered by the [AWS Free Tier](https://aws.amazon.com/free/) but not all of them. We recommend you to use a dedicated AWS account for testing purposes, and when in doubt, let the CI on our repository run the tests for you. To run integration tests you'll need to set up an AWS account and obtain credentials as described in the [prerequisites](./setup.md#requirements). Once ready, you can use of the following commands from the root folder: * `npm test:e2e -ws` to run all the integration tests for all the modules sequentially * `test:e2e:parallel` to run all the integration tests for all the modules in parallel * `npm test:e2e -w packages/metrics` to run all the integration tests for the `metrics` module -* `npm run test:e2e:nodejs20x -w packages/metrics` to run all the integration tests for the `metrics` module using the `nodejs20x` runtime +* `npm run test:e2e:nodejs20x -w packages/metrics` to run all the integration tests for the `metrics` module using the `nodejs20x` runtime The tests will deploy the necessary AWS resources using AWS CDK, and will run the Lambda functions using the AWS SDK. After that, the tests will verify the Lambda functions behave as expected by checking logs, metrics, traces, and other resources as needed. Finally, the tests will destroy all the AWS resources created at the beginning. @@ -100,4 +101,4 @@ sequenceDiagram Jest-->Jest: Assert logs/result Jest->>+AWS: Destroy Stack Jest->>+Dev Environment / CI: show test results -``` \ No newline at end of file +``` diff --git a/docs/core/logger.md b/docs/core/logger.md index 56aff581fc..c9b95b8b25 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -37,10 +37,11 @@ The `Logger` utility must always be instantiated outside the Lambda handler. By === "handler.ts" ```typescript hl_lines="1 3" - --8<-- "docs/snippets/logger/basicUsage.ts" + --8<-- "examples/snippets/logger/basicUsage.ts" ``` ### Utility settings + The library has three optional settings, which can be set via environment variables or passed in the constructor. These settings will be used across all logs emitted: @@ -59,7 +60,7 @@ Check API docs to learn more about [Logger constructor options](https://docs.pow === "handler.ts" ```typescript hl_lines="1 4" - --8<-- "docs/snippets/logger/sam.ts" + --8<-- "examples/snippets/logger/sam.ts" ``` === "template.yaml" @@ -114,17 +115,20 @@ This functionality will include the following keys in your structured logs: Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="2 14" - --8<-- "docs/snippets/logger/middy.ts" + --8<-- "examples/snippets/logger/middy.ts" ``` === "Decorator" !!! note - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. + If this is not the desired behavior, you can call the `logger.injectLambdaContext()` method directly in your handler. ```typescript hl_lines="8" - --8<-- "docs/snippets/logger/decorator.ts" + --8<-- "examples/snippets/logger/decorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. @@ -132,7 +136,7 @@ This functionality will include the following keys in your structured logs: === "Manual" ```typescript hl_lines="10" - --8<-- "docs/snippets/logger/manual.ts" + --8<-- "examples/snippets/logger/manual.ts" ``` In each case, the printed log will look like this: @@ -164,13 +168,13 @@ When debugging in non-production environments, you can instruct Logger to log th === "Middy Middleware" ```typescript hl_lines="15" - --8<-- "docs/snippets/logger/eventMiddy.ts" + --8<-- "examples/snippets/logger/eventMiddy.ts" ``` === "Decorator" ```typescript hl_lines="8" - --8<-- "docs/snippets/logger/eventDecorator.ts" + --8<-- "examples/snippets/logger/eventDecorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. @@ -186,11 +190,10 @@ You can append additional persistent keys and values in the logs generated durin To remove the keys you added, you can use the `removeKeys` method. - === "handler.ts" ```typescript hl_lines="5-13 17-25 32" - --8<-- "docs/snippets/logger/appendKeys.ts" + --8<-- "examples/snippets/logger/appendKeys.ts" ``` === "Example CloudWatch Logs excerpt" @@ -223,7 +226,6 @@ To remove the keys you added, you can use the `removeKeys` method. } ``` - !!! tip "Logger will automatically ignore any key with an `undefined` value" #### Clearing all state @@ -237,13 +239,13 @@ If you want to make sure that persistent attributes added **inside the handler f === "Middy Middleware" ```typescript hl_lines="31" - --8<-- "docs/snippets/logger/clearStateMiddy.ts" + --8<-- "examples/snippets/logger/clearStateMiddy.ts" ``` === "Decorator" ```typescript hl_lines="16" - --8<-- "docs/snippets/logger/clearStateDecorator.ts" + --8<-- "examples/snippets/logger/clearStateDecorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. @@ -290,7 +292,6 @@ In each case, the printed log will look like this: } ``` - ### Appending additional data to a single log item You can append additional data to a single log item by passing objects as additional parameters. @@ -302,7 +303,7 @@ You can append additional data to a single log item by passing objects as additi === "handler.ts" ```typescript hl_lines="16-18 23-25 37" - --8<-- "docs/snippets/logger/extraData.ts" + --8<-- "examples/snippets/logger/extraData.ts" ``` === "Example CloudWatch Logs excerpt" @@ -355,11 +356,11 @@ The error will be logged with default key name `error`, but you can also pass yo === "handler.ts" ```typescript hl_lines="13 20-22" - --8<-- "docs/snippets/logger/logError.ts" + --8<-- "examples/snippets/logger/logError.ts" ``` === "Example CloudWatch Logs excerpt" - + ```json hl_lines="7-12 20-25" { "level": "ERROR", @@ -374,7 +375,7 @@ The error will be logged with default key name `error`, but you can also pass yo "stack": "Error: Unexpected error #1 at lambdaHandler (/path/to/my/source-code/my-service/handler.ts:18:11) at Object. (/path/to/my/source-code/my-service/handler.ts:35:1) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Module.m._compile (/path/to/my/source-code/node_modules/ts-node/src/index.ts:1371:23) at Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Object.require.extensions. [as .ts] (/path/to/my/source-code/node_modules/ts-node/src/index.ts:1374:12) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12) at main (/path/to/my/source-code/node_modules/ts-node/src/bin.ts:331:12)" } } - { + { "level": "ERROR", "message": "This is the second error", "service": "serverlessAirline", @@ -388,6 +389,7 @@ The error will be logged with default key name `error`, but you can also pass yo } } ``` + !!! tip "Logging errors and log level" You can also log errors using the `warn`, `info`, and `debug` methods. Be aware of the log level though, you might miss those errors when analyzing the log later depending on the log level configuration. @@ -412,7 +414,7 @@ We support the following log levels: You can access the current log level by using the `getLevelName()` method. This method returns the name of the current log level as a string. If you want to change the log level at runtime, you can use the `setLogLevel()` method. This method accepts a string value that represents the log level you want to set, both lower and upper case values are supported. ```typescript ---8<-- "docs/snippets/logger/logLevel.ts" +--8<-- "examples/snippets/logger/logLevel.ts" ``` If you want to access the numeric value of the current log level, you can use the `level` property. For example, if the current log level is `INFO`, `logger.level` property will return `12`. @@ -430,7 +432,9 @@ By setting the log level to `SILENT`, which can be done either through the `logL #### AWS Lambda Advanced Logging Controls (ALC) -With [AWS Lambda Advanced Logging Controls (ALC)](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-advanced), you can control the output format of your logs as either `TEXT` or `JSON` and specify the minimum accepted log level for your application. Regardless of the output format setting in Lambda, we will always output JSON formatted logging messages. +With [AWS Lambda Advanced Logging Controls (ALC)](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-advanced), you can control the output format of your logs as either `TEXT` or `JSON` and specify the minimum accepted log level for your application. + +Regardless of the output format setting in Lambda, we will always output JSON formatted logging messages. When you have this feature enabled, log messages that don’t meet the configured log level are discarded by Lambda. For example, if you set the minimum log level to `WARN`, you will only receive `WARN` and `ERROR` messages in your AWS CloudWatch Logs, all other log levels will be discarded by Lambda. @@ -467,14 +471,16 @@ In the event you have set a log level in Powertools to a level that is lower tha ### Using multiple Logger instances across your code -The `createChild` method allows you to create a child instance of the Logger, which inherits all of the attributes from its parent. You have the option to override any of the settings and attributes from the parent logger, including [its settings](#utility-settings), any [persistent attributes](#appending-persistent-additional-log-keys-and-values), and [the log formatter](#custom-log-formatter-bring-your-own-formatter). Once a child logger is created, the logger and its parent will act as separate instances of the Logger class, and as such any change to one won't be applied to the other. +The `createChild` method allows you to create a child instance of the Logger, which inherits all of the attributes from its parent. You have the option to override any of the settings and attributes from the parent logger, including [its settings](#utility-settings), any [persistent attributes](#appending-persistent-additional-log-keys-and-values), and [the log formatter](#custom-log-formatter-bring-your-own-formatter). + +Once a child logger is created, the logger and its parent will act as separate instances of the Logger class, and as such any change to one won't be applied to the other. The following example shows how to create multiple Loggers that share service name and persistent attributes while specifying different logging levels within a single Lambda invocation. As the result, only ERROR logs with all the inherited attributes will be displayed in CloudWatch Logs from the child logger, but all logs emitted will have the same service name and persistent attributes. === "handler.ts" ```typescript hl_lines="16-18" - --8<-- "docs/snippets/logger/createChild.ts" + --8<-- "examples/snippets/logger/createChild.ts" ``` === "Example CloudWatch Logs excerpt" @@ -528,7 +534,7 @@ Sampling decision happens at the Logger initialization. This means sampling may === "handler.ts" ```typescript hl_lines="6" - --8<-- "docs/snippets/logger/logSampling.ts" + --8<-- "examples/snippets/logger/logSampling.ts" ``` === "Example CloudWatch Logs excerpt - Invocation #1" @@ -638,7 +644,7 @@ You can customize the structure (keys and values) of your log items by passing a === "handler.ts" ```typescript hl_lines="2 6" - --8<-- "docs/snippets/logger/bringYourOwnFormatterHandler.ts" + --8<-- "examples/snippets/logger/bringYourOwnFormatterHandler.ts" ``` This is how the `MyCompanyLogFormatter` (dummy name) would look like: @@ -646,7 +652,7 @@ This is how the `MyCompanyLogFormatter` (dummy name) would look like: === "utils/formatters/MyCompanyLogFormatter.ts" ```typescript - --8<-- "docs/snippets/logger/bringYourOwnFormatterClass.ts" + --8<-- "examples/snippets/logger/bringYourOwnFormatterClass.ts" ``` This is how the printed log would look: @@ -695,7 +701,7 @@ This is a Jest sample that provides the minimum information necessary for Logger === "handler.test.ts" ```typescript - --8<-- "docs/snippets/logger/unitTesting.ts" + --8<-- "examples/snippets/logger/unitTesting.ts" ``` ### Suppress logs with Jest diff --git a/docs/core/metrics.md b/docs/core/metrics.md index e4525d3c1a..5ac28ea501 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -32,11 +32,10 @@ If you're new to Amazon CloudWatch, there are two terminologies you must be awar * **Resolution**. It's a value representing the storage resolution for the corresponding metric. Metrics can be either Standard or High resolution. Read more [here](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Resolution_definition).
- + metrics terminology diagram
Metric terminology, visually explained
- ## Getting started ### Installation @@ -48,8 +47,8 @@ npm install @aws-lambda-powertools/metrics ``` !!! warning "Caution" - - Using the Lambda [Advanced Logging Controls](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-advanced) feature requires you to update your version of Powertools for AWS Lambda (TypeScript) to at least v1.15.0 to ensure metrics are reported correctly to Amazon CloudWatch Metrics. + + When using the Lambda [Advanced Logging Controls](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-advanced) feature you must install version of Powertools for AWS Lambda (TypeScript) v1.15.0 or newer. ### Usage @@ -58,7 +57,7 @@ The `Metrics` utility must always be instantiated outside of the Lambda handler. === "handler.ts" ```typescript hl_lines="1 3-6" - --8<-- "docs/snippets/metrics/basicUsage.ts" + --8<-- "examples/snippets/metrics/basicUsage.ts" ``` ### Utility settings @@ -82,7 +81,7 @@ The `Metrics` utility is instantiated outside of the Lambda handler. In doing th === "handler.ts" ```typescript hl_lines="1 4" - --8<-- "docs/snippets/metrics/sam.ts" + --8<-- "examples/snippets/metrics/sam.ts" ``` === "template.yml" @@ -108,13 +107,13 @@ You can create metrics using the `addMetric` method, and you can create dimensio === "Metrics" ```typescript hl_lines="12" - --8<-- "docs/snippets/metrics/createMetrics.ts" + --8<-- "examples/snippets/metrics/createMetrics.ts" ``` === "Metrics with custom dimensions" ```typescript hl_lines="12-13" - --8<-- "docs/snippets/metrics/customDimensions.ts" + --8<-- "examples/snippets/metrics/customDimensions.ts" ``` !!! tip "Autocomplete Metric Units" @@ -128,7 +127,7 @@ You can create metrics using the `addMetric` method, and you can create dimensio ### Adding high-resolution metrics -You can create [high-resolution metrics](https://aws.amazon.com/about-aws/whats-new/2023/02/amazon-cloudwatch-high-resolution-metric-extraction-structured-logs/) passing `resolution` as parameter to `addMetric`. +You can create [high-resolution metrics](https://aws.amazon.com/about-aws/whats-new/2023/02/amazon-cloudwatch-high-resolution-metric-extraction-structured-logs/) passing `resolution` as parameter to `addMetric`. !!! tip "When is it useful?" High-resolution metrics are data with a granularity of one second and are very useful in several situations such as telemetry, time series, real-time incident management, and others. @@ -136,7 +135,7 @@ You can create [high-resolution metrics](https://aws.amazon.com/about-aws/whats- === "Metrics with high resolution" ```typescript hl_lines="4 20" - --8<-- "docs/snippets/metrics/addHighResolutionMetric.ts" + --8<-- "examples/snippets/metrics/addHighResolutionMetric.ts" ``` !!! tip "Autocomplete Metric Resolutions" @@ -149,7 +148,7 @@ You can call `addMetric()` with the same name multiple times. The values will be === "addMetric() with the same name" ```typescript hl_lines="12 14" - --8<-- "docs/snippets/metrics/multiValueMetrics.ts" + --8<-- "examples/snippets/metrics/multiValueMetrics.ts" ``` === "Example CloudWatch Logs excerpt" @@ -194,7 +193,7 @@ You can add default dimensions to your metrics by passing them as parameters in === "constructor" ```typescript hl_lines="6" - --8<-- "docs/snippets/metrics/defaultDimensions.ts" + --8<-- "examples/snippets/metrics/defaultDimensions.ts" ``` === "Middy middleware" @@ -204,23 +203,26 @@ You can add default dimensions to your metrics by passing them as parameters in Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="24-26" - --8<-- "docs/snippets/metrics/defaultDimensionsMiddy.ts" + --8<-- "examples/snippets/metrics/defaultDimensionsMiddy.ts" ``` === "setDefaultDimensions method" ```typescript hl_lines="7" - --8<-- "docs/snippets/metrics/setDefaultDimensions.ts" + --8<-- "examples/snippets/metrics/setDefaultDimensions.ts" ``` === "with logMetrics decorator" !!! note - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. + If this is not the desired behavior, you can use the `logMetrics` middleware instead. ```typescript hl_lines="12" - --8<-- "docs/snippets/metrics/defaultDimensionsDecorator.ts" + --8<-- "examples/snippets/metrics/defaultDimensionsDecorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. @@ -254,7 +256,7 @@ See below an example of how to automatically flush metrics with the Middy-compat === "handler.ts" ```typescript hl_lines="2 17" - --8<-- "docs/snippets/metrics/middy.ts" + --8<-- "examples/snippets/metrics/middy.ts" ``` === "Example CloudWatch Logs excerpt" @@ -282,7 +284,10 @@ See below an example of how to automatically flush metrics with the Middy-compat #### Using the class decorator !!! note - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. + If this is not the desired behavior, you can use the `logMetrics` middleware instead. The `logMetrics` decorator of the metrics utility can be used when your Lambda handler function is implemented as method of a Class. @@ -290,7 +295,7 @@ The `logMetrics` decorator of the metrics utility can be used when your Lambda h === "handler.ts" ```typescript hl_lines="10" - --8<-- "docs/snippets/metrics/decorator.ts" + --8<-- "examples/snippets/metrics/decorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. @@ -327,7 +332,7 @@ You can manually flush the metrics with `publishStoredMetrics` as follows: === "handler.ts" ```typescript hl_lines="13" - --8<-- "docs/snippets/metrics/manual.ts" + --8<-- "examples/snippets/metrics/manual.ts" ``` === "Example CloudWatch Logs excerpt" @@ -359,7 +364,7 @@ If you want to ensure that at least one metric is emitted before you flush them, === "handler.ts" ```typescript hl_lines="21" - --8<-- "docs/snippets/metrics/throwOnEmptyMetrics.ts" + --8<-- "examples/snippets/metrics/throwOnEmptyMetrics.ts" ``` ### Capturing a cold start invocation as metric @@ -369,13 +374,13 @@ You can optionally capture cold start metrics with the `logMetrics` middleware o === "Middy Middleware" ```typescript hl_lines="18" - --8<-- "docs/snippets/metrics/captureColdStartMetricMiddy.ts" + --8<-- "examples/snippets/metrics/captureColdStartMetricMiddy.ts" ``` === "logMetrics decorator" ```typescript hl_lines="10" - --8<-- "docs/snippets/metrics/captureColdStartMetricDecorator.ts" + --8<-- "examples/snippets/metrics/captureColdStartMetricDecorator.ts" ``` If it's a cold start invocation, this feature will: @@ -399,7 +404,7 @@ You can add high-cardinality data as part of your Metrics log with the `addMetad === "handler.ts" ```typescript hl_lines="15" - --8<-- "docs/snippets/metrics/addMetadata.ts" + --8<-- "examples/snippets/metrics/addMetadata.ts" ``` === "Example CloudWatch Logs excerpt" @@ -443,13 +448,42 @@ CloudWatch EMF uses the same dimensions across all your metrics. Use `singleMetr === "Middy Middleware" ```typescript hl_lines="21 23-24" - --8<-- "docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts" + --8<-- "examples/snippets/metrics/singleMetricDifferentDimsMiddy.ts" ``` === "logMetrics decorator" ```typescript hl_lines="16 18-19" - --8<-- "docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts" + --8<-- "examples/snippets/metrics/singleMetricDifferentDimsDecorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. + +## Testing your code + +When unit testing your code that uses the `Metrics` utility, you may want to silence the logs emitted by the utility or assert that metrics are being emitted correctly. By default, the utility manages its own `console` instance, which means that you can't easily access or mock the logs emitted by the utility. + +To make it easier to test your code, you can set the `POWERTOOLS_DEV` environment variable to `true` to instruct the utility to use the global `console` object instead of its own. + +This allows you to spy on the logs emitted by the utility and assert that the metrics are being emitted correctly. + +```typescript title="Spying on emitted metrics" +describe('Metrics tests', () => { + beforeAll(() => { + process.env.POWERTOOLS_DEV = 'true'; + }) + + it('function metrics properly', async () => { + // Prepare + const metricsSpy = jest.spyOn(console, 'log').mockImplementation(); + + // Act & Assess + }); +}); +``` + +When running your tests with both [Jest](https://jestjs.io) and [Vitest](http://vitest.dev), you can use the `--silent` flag to silence the logs emitted by the utility. + +```bash title="Disabling logs while testing" +export POWERTOOLS_DEV=true && npx vitest --silent +``` diff --git a/docs/core/tracer.md b/docs/core/tracer.md index f3f4f5cc00..dbc24b8568 100644 --- a/docs/core/tracer.md +++ b/docs/core/tracer.md @@ -39,7 +39,7 @@ The `Tracer` utility must always be instantiated outside of the Lambda handler. === "handler.ts" ```typescript hl_lines="1 3" - --8<-- "docs/snippets/tracer/basicUsage.ts" + --8<-- "examples/snippets/tracer/basicUsage.ts" ``` ### Utility settings @@ -64,7 +64,7 @@ The `Tracer` utility is instantiated outside of the Lambda handler. In doing thi === "handler.ts" ```typescript hl_lines="1 4" - --8<-- "docs/snippets/tracer/sam.ts" + --8<-- "examples/snippets/tracer/sam.ts" ``` === "template.yml" @@ -92,17 +92,18 @@ You can quickly start by importing the `Tracer` class, initialize it outside the Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. ```typescript hl_lines="2 15 17" - --8<-- "docs/snippets/tracer/middy.ts" + --8<-- "examples/snippets/tracer/middy.ts" ``` === "Decorator" !!! note - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. - If this is not the desired behavior, you can use one of the other patterns instead. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. ```typescript hl_lines="8" - --8<-- "docs/snippets/tracer/decorator.ts" + --8<-- "examples/snippets/tracer/decorator.ts" ``` 1. Binding your handler method allows your handler to access `this`. @@ -110,10 +111,9 @@ You can quickly start by importing the `Tracer` class, initialize it outside the === "Manual" ```typescript hl_lines="9-15 18-19 23 26 29-34" - --8<-- "docs/snippets/tracer/manual.ts" + --8<-- "examples/snippets/tracer/manual.ts" ``` - When using the `captureLambdaHandler` decorator or middleware, Tracer performs these additional tasks to ease operations: * Handles the lifecycle of the subsegment @@ -131,19 +131,21 @@ When using the `captureLambdaHandler` decorator or middleware, Tracer performs t You can add annotations using `putAnnotation` method. ```typescript hl_lines="12" - --8<-- "docs/snippets/tracer/putAnnotation.ts" + --8<-- "examples/snippets/tracer/putAnnotation.ts" ``` - 1. When Lambda starts an invocation [the X-Ray SDk creates a segment called `facade`](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-subsegments.html#xray-sdk-nodejs-subsegments-lambda). This segment cannot be annotated or modified by your code, so you need to create a new subsegment. This is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler) + 1. When Lambda starts an invocation [the X-Ray SDk creates a segment called `facade`](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-subsegments.html#xray-sdk-nodejs-subsegments-lambda). + This segment cannot be annotated or modified by your code, so you need to create a new subsegment. This is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler) 2. To correctly trace the current and subsequent invocations you need to restore the original segment, this is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler). === "Metadata" You can add metadata using `putMetadata` method. ```typescript hl_lines="12-14" - --8<-- "docs/snippets/tracer/putMetadata.ts" + --8<-- "examples/snippets/tracer/putMetadata.ts" ``` - 1. When Lambda starts an invocation [the X-Ray SDk creates a segment called `facade`](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-subsegments.html#xray-sdk-nodejs-subsegments-lambda). This segment cannot be modified by your code, so you need to create a new subsegment. This is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler) + 1. When Lambda starts an invocation [the X-Ray SDk creates a segment called `facade`](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-subsegments.html#xray-sdk-nodejs-subsegments-lambda). + This segment cannot be modified by your code, so you need to create a new subsegment. This is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler) 2. To correctly trace the current and subsequent invocations you need to restore the original segment, this is done automatically by Tracer when using the [decorator or middleware patterns](./tracer.md/#lambda-handler).
@@ -158,11 +160,12 @@ You can trace other class methods using the `captureMethod` decorator or any arb === "Decorator" !!! note - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. - If this is not the desired behavior, you can use manual instrumentation instead. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. ```typescript hl_lines="8" - --8<-- "docs/snippets/tracer/captureMethodDecorator.ts" + --8<-- "examples/snippets/tracer/captureMethodDecorator.ts" ``` 1. You can set a custom name for the subsegment by passing `subSegmentName` to the decorator, like: `@tracer.captureMethod({ subSegmentName: '### myCustomMethod' })`. @@ -171,10 +174,9 @@ You can trace other class methods using the `captureMethod` decorator or any arb === "Manual" ```typescript hl_lines="6-12 18 21 25-30" - --8<-- "docs/snippets/tracer/captureMethodManual.ts" + --8<-- "examples/snippets/tracer/captureMethodManual.ts" ``` - ### Patching AWS SDK clients Tracer can patch any [AWS SDK clients](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-awssdkclients.html) and create traces when your application makes calls to AWS services. @@ -187,7 +189,7 @@ You can patch any AWS SDK clients by calling the `captureAWSv3Client` method: === "index.ts" ```typescript hl_lines="6" - --8<-- "docs/snippets/tracer/captureAWSv3.ts" + --8<-- "examples/snippets/tracer/captureAWSv3.ts" ``` !!! info @@ -198,7 +200,7 @@ You can patch all AWS SDK v2 clients by calling the `captureAWS` method: === "index.ts" ```typescript hl_lines="7" - --8<-- "docs/snippets/tracer/captureAWSAll.ts" + --8<-- "examples/snippets/tracer/captureAWSAll.ts" ``` If you're looking to shave a few microseconds, or milliseconds depending on your function memory configuration, you can patch only specific AWS SDK v2 clients using `captureAWSClient`: @@ -206,7 +208,7 @@ If you're looking to shave a few microseconds, or milliseconds depending on your === "index.ts" ```typescript hl_lines="6" - --8<-- "docs/snippets/tracer/captureAWS.ts" + --8<-- "examples/snippets/tracer/captureAWS.ts" ``` ### Tracing HTTP requests @@ -221,8 +223,8 @@ You can opt-out from this feature by setting the **`POWERTOOLS_TRACER_CAPTURE_HT === "index.ts" - ```typescript hl_lines="2" - --8<-- "docs/snippets/tracer/captureHTTP.ts" + ```typescript + --8<-- "examples/snippets/tracer/captureHTTP.ts" ``` ```json hl_lines="6 9 12-21" @@ -270,19 +272,19 @@ Alternatively, use the `captureResponse: false` option in both `tracer.captureLa === "method.ts" ```typescript hl_lines="7" - --8<-- "docs/snippets/tracer/disableCaptureResponseMethod.ts" + --8<-- "examples/snippets/tracer/disableCaptureResponseMethod.ts" ``` === "handler.ts" ```typescript hl_lines="7" - --8<-- "docs/snippets/tracer/disableCaptureResponseHandler.ts" + --8<-- "examples/snippets/tracer/disableCaptureResponseHandler.ts" ``` === "middy.ts" ```typescript hl_lines="18" - --8<-- "docs/snippets/tracer/disableCaptureResponseMiddy.ts" + --8<-- "examples/snippets/tracer/disableCaptureResponseMiddy.ts" ``` ### Disabling errors auto-capture @@ -304,8 +306,8 @@ Tracer exposes a `getRootXrayTraceId()` method that allows you to retrieve the [ === "index.ts" - ```typescript hl_lines="11" - --8<-- "docs/snippets/tracer/accessRootTraceId.ts" + ```typescript hl_lines="9" + --8<-- "examples/snippets/tracer/accessRootTraceId.ts" ``` ### Escape hatch mechanism @@ -317,7 +319,7 @@ This is useful when you need a feature available in X-Ray that is not available === "index.ts" ```typescript hl_lines="7" - --8<-- "docs/snippets/tracer/escapeHatch.ts" + --8<-- "examples/snippets/tracer/escapeHatch.ts" ``` ## Testing your code diff --git a/docs/index.md b/docs/index.md index a4ecfa7db8..a5538408b0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,6 +3,8 @@ title: Homepage description: Powertools for AWS Lambda (TypeScript) --- + + Powertools for AWS Lambda (TypeScript) is a developer toolkit to implement Serverless best practices and increase developer velocity. You can use Powertools for AWS Lambda in both TypeScript and JavaScript code bases. @@ -67,7 +69,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa For the latter, make sure to replace `{region}` with your AWS region, e.g., `eu-west-1`. - __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4__{: .copyMe}:clipboard: + __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5__{: .copyMe}:clipboard: ???+ note "Code snippets for popular infrastructure as code frameworks" @@ -87,7 +89,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const powertoolsLayer = LayerVersion.fromLayerVersionArn( this, 'PowertoolsLayer', - `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:3` + `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5` ); new Function(this, 'Function', { @@ -101,7 +103,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa } ``` - 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: + If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: ```typescript new NodejsFunction(this, 'Function', { @@ -124,10 +126,10 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa Type: AWS::Serverless::Function Properties: Layers: - - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4 + - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5 ``` - 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: + If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: ```yaml hl_lines="5-14" MyLambdaFunction: @@ -140,10 +142,8 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa BuildProperties: Minify: true External: - - '@aws-lambda-powertools/commons' - - '@aws-lambda-powertools/logger' - - '@aws-lambda-powertools/metrics' - - '@aws-lambda-powertools/tracer' + - '@aws-lambda-powertools/*' + - '@aws-sdk/*' ``` Check the [documentation](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-build-typescript.html) for more details. @@ -155,19 +155,17 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa hello: handler: lambda_function.lambda_handler layers: - - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4 + - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5 ``` - 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: + If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: ```yaml custom: esbuild: external: - - '@aws-lambda-powertools/commons' - - '@aws-lambda-powertools/logger' - - '@aws-lambda-powertools/metrics' - - '@aws-lambda-powertools/tracer' + - '@aws-lambda-powertools/*' + - '@aws-sdk/*' ``` Check the [documentation](https://floydspace.github.io/serverless-esbuild/) for more details. @@ -191,8 +189,8 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa function_name = "lambda_function_name" role = ... handler = "index.handler" - runtime = "nodejs16.x" - layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4"] + runtime = "nodejs20.x" + layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5"] source_code_hash = filebase64sha256("lambda_function_payload.zip") } ``` @@ -210,13 +208,13 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const lambdaFunction = new aws.lambda.Function('function', { layers: [ - pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4` + pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5` ], code: new pulumi.asset.FileArchive('lambda_function_payload.zip'), tracingConfig: { mode: 'Active' }, - runtime: aws.lambda.Runtime.NodeJS16dX, + runtime: aws.lambda.Runtime.NodeJS20dX, handler: 'index.handler', role: role.arn, architectures: ['x86_64'] @@ -234,7 +232,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa ? 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:AWSLambdaPowertoolsTypeScriptV2:4 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5 ❯ amplify push -y # Updating an existing function and add the layer @@ -244,12 +242,10 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa - 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:AWSLambdaPowertoolsTypeScriptV2:4 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5 ? Do you want to edit the local lambda function now? No ``` - - ### Lambda Layer [Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html){target="_blank"} is a `.zip` file archive that can contain additional code, pre-packaged dependencies, data, or configuration files. We compile and optimize [all dependencies](#install) to achieve an optimal build. @@ -259,34 +255,33 @@ You can use the Lambda Layer both with CommonJS and ESM (ECMAScript modules) for ??? note "Click to expand and copy any regional Lambda Layer ARN" | Region | Layer ARN | | ---------------- | ------------------------------------------------------------------------------------------------------------- | - | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4](#){: .copyMe}:clipboard: | - + | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | + | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5](#){: .copyMe}:clipboard: | **Want to inspect the contents of the Layer?** @@ -295,16 +290,16 @@ The pre-signed URL to download this Lambda Layer will be within `Location` key i Change `{aws::region}` to your AWS region, e.g. `eu-west-1`, and run the following command: ```bash title="AWS CLI command to download Lambda Layer content" -aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:4 --region {aws::region} +aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:5 --region {aws::region} ``` ## Instrumentation Many of the utilities provided by Powertools for AWS Lambda (TypeScript) can be used with different programming paradigms: -* **Middy** middleware. It is the best choice if your existing code base relies on the [Middy 4.x](https://middy.js.org/docs/) middleware engine. Powertools for AWS Lambda (TypeScript) offers compatible Middy middleware to make this integration seamless. -* **Method decorator**. Use [TypeScript method decorators](https://www.typescriptlang.org/docs/handbook/decorators.html#method-decorators) if you prefer writing your business logic using [TypeScript Classes](https://www.typescriptlang.org/docs/handbook/classes.html). If you aren’t using Classes, this requires the most significant refactoring. -* **Manually**. It provides the most granular control. It’s the most verbose approach, with the added benefit of no additional dependency and no refactoring to TypeScript Classes. +- **Middy** middleware. It is the best choice if your existing code base relies on the [Middy 4.x](https://middy.js.org/docs/) middleware engine. Powertools for AWS Lambda (TypeScript) offers compatible Middy middleware to make this integration seamless. +- **Method decorator**. Use [TypeScript method decorators](https://www.typescriptlang.org/docs/handbook/decorators.html#method-decorators) if you prefer writing your business logic using [TypeScript Classes](https://www.typescriptlang.org/docs/handbook/classes.html). If you aren’t using Classes, this requires the most significant refactoring. +- **Manually**. It provides the most granular control. It’s the most verbose approach, with the added benefit of no additional dependency and no refactoring to TypeScript Classes. The examples in this documentation will feature all the approaches described above wherever applicable. @@ -353,7 +348,6 @@ Each Utility page provides information on example values and allowed values. ## Support Powertools for AWS Lambda (TypeScript) - There are many ways you can help us gain future investments to improve everyone's experience:
diff --git a/docs/maintainers.md b/docs/maintainers.md index 672e93a92b..4eb19e2b14 100644 --- a/docs/maintainers.md +++ b/docs/maintainers.md @@ -3,6 +3,8 @@ title: Maintainers playbook description: Playbook for active maintainers in Powertools for AWS Lambda (TypeScript) --- + + ## Overview !!! note "Please treat this content as a living document." @@ -33,59 +35,60 @@ Previous active maintainers who contributed to this project. These are the most common labels used by maintainers to triage issues, pull requests (PR), and for project management: -| Label | Usage | Notes | -| -------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -| triage | New issues that require maintainers review | Issue template | -| area/documentation | Improvements or additions to documentation | Examples/Readme files; Doc additions, fixes, etc.; | -| area/logger | Items related to the Logger Utility | PR automation | -| area/metrics | Items related to the Metrics Utility | PR automation | -| area/tracer | Items related to the Tracer Utility | PR automation | -| 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 | -| size/S | PRs between 10-29 LOC | PR automation | -| size/M | PRs between 30-99 LOC | PR automation | -| size/L | PRs between 100-499 LOC | PR automation | -| size/XL | PRs between 500-999 LOC, often PRs that grown with feedback | PR automation | -| size/XXL | PRs with 1K+ LOC, largely documentation related | PR automation | -| customer-reference | Authorization to use company name in our documentation | Public Relations | -| community-content | Suggested content to feature in our documentation | Public Relations | -| do-not-merge | PRs that are blocked for varying reasons | Timeline is uncertain | -| type/bug | Unexpected, reproducible and unintended software behavior | PR/Release automation; Doc snippets are excluded; | -| type/bug-upstream | Bug caused by upstream dependency | | -| type/not-a-bug | New and existing bug reports incorrectly submitted as bug | Analytics | -| type/deprecation | This item contains code deprecation | | -| type/duplicate | This issue is a duplicate of an existing one | Analytics | -| type/feature-request | Issue requesting new or enhancements to existing features | Issue template | -| type/feature | PRs that introduce new features | PR automation | -| type/enhancement | PRs that introduce minor changes, usually to existing features | PR automation | -| type/RFC | Technical design documents related to a feature request | | -| type/internal | PRs that introduce changes in governance, tech debt and chores (linting setup, baseline, etc.) | PR automation | -| type/tests | PRs that add or change tests | PR automation | -| type/dependencies | Changes that touch dependencies, e.g. Dependabot, etc. | Issues/PR automation | -| type/breaking-change | Changes that will cause customer impact and need careful triage | | -| status/blocked | Items which progress is blocked by external dependency or reason | | -| status/confirmed | Items with clear scope and that are ready for implementation | | -| status/discussing | Items that need to be discussed, elaborated, or refined | | -| status/on-hold | Items that are on hold and will be revisited in the future | | -| status/pending-release | Merged changes that will be available soon | Release automation auto-closes/notifies it | -| status/completed | Items that are complete and have been merged and/or shipped | | -| status/rejected | This is something we will not be working on. At least, not in the measurable future | | -| status/pending-close-response-required | This issue will be closed soon unless the discussion moves forward | Stale Automation | -| revisit-in-3-months | Blocked issues/PRs that need to be revisited | Often related to `need-customer-feedback`, prioritization, etc. | -| good-first-issue | Something that is suitable for those who want to start contributing | | -| help-wanted | Tasks you want help from anyone to move forward | Bandwidth, complex topics, etc. | -| need-customer-feedback | Tasks that need more feedback before proceeding | 80/20% rule, uncertain, etc. | -| need-more-information | Missing information before making any calls | Signal that investigation or answers are needed | -| need-response | Requires a response from a customer and might be automatically closed if none is received | Marked as stale after 2 weeks, and closed after 3 | -| need-issue | PR is missing a related issue for tracking change | | +| Label | Usage | Notes | +| ------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | +| triage | New issues that require maintainers review | Issue template | +| documentation | Improvements or additions to documentation | Examples/Readme files; Doc additions, fixes, etc.; | +| logger | Items related to the Logger Utility | PR automation | +| metrics | Items related to the Metrics Utility | PR automation | +| tracer | Items related to the Tracer Utility | PR automation | +| idempotency | Items related to the Idempotency Utility | PR automation | +| parameters | Items related to the Parameters Utility | PR automation | +| commons | Items related to the Commons Utility | PR automation | +| jmespath | Items related to the JMESPath Utility | PR automation | +| validation | Items related to the Validation Utility | PR automation | +| batch | Items related to the Batch Processing Utility | PR automation | +| parser | Items related to the Parser Utility | PR automation | +| event-handler | Items related to the Event Handler Utility | PR automation | +| automation | Items related to automation like GitHub workflows or CI/CD | PR automation | +| layers | Items related to the Lambda Layers pipeline | PR automation | +| size/XS | PRs between 0-9 LOC | PR automation | +| size/S | PRs between 10-29 LOC | PR automation | +| size/M | PRs between 30-99 LOC | PR automation | +| size/L | PRs between 100-499 LOC | PR automation | +| size/XL | PRs between 500-999 LOC, often PRs that grown with feedback | PR automation | +| size/XXL | PRs with 1K+ LOC, largely documentation related | PR automation | +| customer-reference | Authorization to use company name in our documentation | Public Relations | +| community-content | Suggested content to feature in our documentation | Public Relations | +| do-not-merge | PRs that are blocked for varying reasons | Timeline is uncertain | +| bug | Unexpected, reproducible and unintended software behavior | PR/Release automation; Doc snippets are excluded; | +| bug-upstream | Bug caused by upstream dependency | | +| not-a-bug | New and existing bug reports incorrectly submitted as bug | Analytics | +| deprecation | This item contains code deprecation | | +| duplicate | This issue is a duplicate of an existing one | Analytics | +| feature-request | Issue requesting new or enhancements to existing features | Issue template | +| feature | PRs that introduce new features | PR automation | +| enhancement | PRs that introduce minor changes, usually to existing features | PR automation | +| RFC | Technical design documents related to a feature request | | +| internal | PRs that introduce changes in governance, tech debt and chores (linting setup, baseline, etc.) | PR automation | +| tests | PRs that add or change tests | PR automation | +| dependencies | Changes that touch dependencies, e.g. Dependabot, etc. | Issues/PR automation | +| breaking-change | Changes that will cause customer impact and need careful triage | | +| blocked | Items which progress is blocked by external dependency or reason | | +| confirmed | Items with clear scope and that are ready for implementation | | +| discussing | Items that need to be discussed, elaborated, or refined | | +| on-hold | Items that are on hold and will be revisited in the future | | +| pending-release | Merged changes that will be available soon | Release automation auto-closes/notifies it | +| completed | Items that are complete and have been merged and/or shipped | | +| rejected | This is something we will not be working on. At least, not in the measurable future | | +| pending-close-response-required | This issue will be closed soon unless the discussion moves forward | Stale Automation | +| revisit-in-3-months | Blocked issues/PRs that need to be revisited | Often related to `need-customer-feedback`, prioritization, etc. | +| good-first-issue | Something that is suitable for those who want to start contributing | | +| help-wanted | Tasks you want help from anyone to move forward | Bandwidth, complex topics, etc. | +| need-customer-feedback | Tasks that need more feedback before proceeding | 80/20% rule, uncertain, etc. | +| need-more-information | Missing information before making any calls | Signal that investigation or answers are needed | +| need-response | Requires a response from a customer and might be automatically closed if none is received | Marked as stale after 2 weeks, and closed after 3 | +| need-issue | PR is missing a related issue for tracking change | | ## Maintainer Responsibilities @@ -113,7 +116,7 @@ PRs are [labeled](#labels) based on file changes and semantic title. Pay attenti Use and enforce [semantic versioning](https://semver.org/) pull request titles, as these will be used for [CHANGELOG](./changelog.md) and [Release notes](https://github.com/aws-powertools/powertools-lambda-typescript/releases) - make sure they communicate their intent at the human level. -For issues linked to a PR, make sure `status/pending-release` label is applied to them when merging. [Upon release](#releasing-a-new-version), these issues will be notified which release version contains their change. +For issues linked to a PR, make sure `pending-release` label is applied to them when merging. [Upon release](#releasing-a-new-version), these issues will be notified which release version contains their change. See [Common scenarios](#common-scenarios) section for additional guidance. @@ -133,7 +136,7 @@ See [Common scenarios](#common-scenarios) section for additional guidance. Be familiar with [our definition of bug](#is-that-a-bug). If it's not a bug, you can close it or adjust its title and labels - always communicate the reason accordingly. -For bugs caused by upstream dependencies, replace `type/bug` with `type/bug-upstream` label. Ask the author whether they'd like to raise the issue upstream or if they prefer us to do so. +For bugs caused by upstream dependencies, replace `bug` with `bug-upstream` label. Ask the author whether they'd like to raise the issue upstream or if they prefer us to do so. Assess the impact and make the call on whether we need an emergency release. Contact other [maintainers](#current-maintainers) when in doubt. @@ -240,7 +243,7 @@ Visit the [Releases page](https://github.com/aws-powertools/powertools-lambda-ty Make sure the `tag` field reflects the new version you're releasing, the target branch field is set to `main`, and `release title` matches your tag e.g., `v1.14.1`. -You'll notice we group all changes based on their [labels](#labels) like `type/feature`, `type/bug`, `area/documentation`, etc. +You'll notice we group all changes based on their [labels](#labels) like `feature`, `bug`, `documentation`, etc. **I spotted a typo or incorrect grouping - how do I fix it?** @@ -263,7 +266,7 @@ These are some questions to keep in mind when drafting your first or future rele Once you're happy, hit `Publish release` πŸŽ‰πŸŽ‰πŸŽ‰. -This will kick off the [Post Release workflow](https://github.com/aws-powertools/powertools-lambda-typescript/actions/workflows/post-release.yml) and within a few minutes you should see all issues labeled as `status/pending-release` notified of the new release and labeled as `status/completed`. +This will kick off the [Post Release workflow](https://github.com/aws-powertools/powertools-lambda-typescript/actions/workflows/post-release.yml) and within a few minutes you should see all issues labeled as `pending-release` notified of the new release and labeled as `completed`. ### Run end to end tests @@ -306,7 +309,9 @@ Finally, add the new region to the [`region` matrix](https://github.com/aws-powe ### Negative Impact on the Project + Actions that negatively impact the project will be handled by the admins, in coordination with other maintainers, in balance with the urgency of the issue. Examples would be [Code of Conduct](https://github.com/aws-powertools/powertools-lambda-typescript/blob/develop/CODE_OF_CONDUCT.md){target="_blank"} violations, deliberate harmful or malicious actions, spam, monopolization, and security risks. + ### Becoming a maintainer @@ -352,4 +357,4 @@ Make use of `help-wanted` and `good-first-issue` to signal additional contributi Try offering a 1:1 call in the attempt to get to a mutual understanding and clarify areas that maintainers could help. -In the rare cases where both parties don't have the bandwidth or expertise to continue, it's best to use the `status/on-hold` or `revisit-in-3-months` labels. After some time has passed, see if it's possible to break the PR or issue in smaller chunks, and eventually close if there is no progress. \ No newline at end of file +In the rare cases where both parties don't have the bandwidth or expertise to continue, it's best to use the `on-hold` or `revisit-in-3-months` labels. After some time has passed, see if it's possible to break the PR or issue in smaller chunks, and eventually close if there is no progress. diff --git a/docs/overrides/main.html b/docs/overrides/main.html index 67010de9bc..55f86b6188 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -8,6 +8,6 @@ {% endblock %} {% block announce %} -Version 2 is generally available πŸ”₯ Check out the upgrade guide to see -what's new. +Starting from July 1, 2024 we will end support for Node.js 16. Learn more here. {% endblock %} \ No newline at end of file diff --git a/docs/requirements.in b/docs/requirements.in index 169f7d2969..4b6f32a5cd 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,4 +1,4 @@ mike==1.1.2 -mkdocs-material==9.5.18 +mkdocs-material==9.5.22 mkdocs-git-revision-date-plugin==0.3.2 mkdocs-exclude==1.0.2 \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index 2ec21c5375..d5b14ecec8 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -128,9 +128,9 @@ idna==3.7 \ --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests -jinja2==3.1.3 \ - --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ - --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 +jinja2==3.1.4 \ + --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ + --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d # via # mike # mkdocs @@ -210,14 +210,16 @@ markupsafe==2.1.3 \ mergedeep==1.3.4 \ --hash=sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8 \ --hash=sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307 - # via mkdocs + # via + # mkdocs + # mkdocs-get-deps mike==1.1.2 \ --hash=sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca \ --hash=sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b # via -r requirements.in -mkdocs==1.5.3 \ - --hash=sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1 \ - --hash=sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2 +mkdocs==1.6.0 \ + --hash=sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7 \ + --hash=sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512 # via # mike # mkdocs-exclude @@ -226,12 +228,16 @@ mkdocs==1.5.3 \ mkdocs-exclude==1.0.2 \ --hash=sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51 # via -r requirements.in +mkdocs-get-deps==0.2.0 \ + --hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \ + --hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134 + # via mkdocs mkdocs-git-revision-date-plugin==0.3.2 \ --hash=sha256:2e67956cb01823dd2418e2833f3623dee8604cdf223bddd005fe36226a56f6ef # via -r requirements.in -mkdocs-material==9.5.18 \ - --hash=sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4 \ - --hash=sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62 +mkdocs-material==9.5.22 \ + --hash=sha256:22a853a456ae8c581c4628159574d6fc7c71b2c7569dc9c3a82cc70432219599 \ + --hash=sha256:8c7a377d323567934e6cd46915e64dc209efceaec0dec1cf2202184f5649862c # via -r requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ @@ -251,7 +257,7 @@ pathspec==0.12.1 \ platformdirs==4.1.0 \ --hash=sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380 \ --hash=sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420 - # via mkdocs + # via mkdocs-get-deps pygments==2.17.2 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 @@ -318,6 +324,7 @@ pyyaml==6.0.1 \ # via # mike # mkdocs + # mkdocs-get-deps # pymdown-extensions # pyyaml-env-tag pyyaml-env-tag==0.1 \ diff --git a/docs/roadmap.md b/docs/roadmap.md index 05942052ca..3afdfbbd38 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,54 +1,51 @@ -## Overview - -Our public roadmap outlines the high level direction we are working towards, namely [Themes](#themes). We update this document when our priorities change: security and stability is our top priority. - -!!! info "For most up-to-date information, see our [board of activities](https://github.com/orgs/aws-powertools/projects/7/views/3?query=is%3Aopen+sort%3Aupdated-desc){target="_blank"}." - -## Themes - -Operational Excellence is priority number 1. This means bug fixing, stability, security, customer's support, and governance will take precedence above all else. - -**What are themes?** - -They are key activities maintainers are focusing on. These are updated periodically and you can find the latest [under Themes in our GitHub Milestones](https://github.com/aws-powertools/powertools-lambda-typescript/milestones){target="_blank"}. - -### Feature Parity +--- +title: Roadmap +description: Public roadmap for Powertools for AWS Lambda (TypeScript) +--- -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 2023 we have released three the utilities, first as public betas and then as generally available: +## Overview -- [x] [Parameters](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/) -- [x] [Idempotency](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/) -- [x] [Batch Processing](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/batch/) +Our public roadmap outlines the high level direction we are working towards. We update this document when our priorities change: security and stability are our top priority. -Over the next quarter, we are considering implementing one or more of the following utilities (in no particular order): +!!! info "For most up-to-date information, see our [board of activities](https://github.com/orgs/aws-powertools/projects/7/views/3?query=is%3Aopen+sort%3Aupdated-desc){target="_blank"}." -- [ ] Parser (Status: [RFC Finalized](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1334) - Implementation: [In Progress](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/15)) -- [ ] Validation (Status: [RFC In Progress](https://github.com/aws-powertools/powertools-lambda-typescript/issues/508)) -- [ ] Event Handler (Status: [RFC In Progress](https://github.com/aws-powertools/powertools-lambda-typescript/issues/413)) +### Key areas -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"}. +Security and operational excellence take precedence above all else. This means bug fixing, stability, customer's support, and internal compliance may delay one or more key areas below. -### Version 2 release +**Missing something or want us to prioritize an existing area?** -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 going to release our next major version (v2) by the end of 2023, which will include some of these changes: +You can help us prioritize by [upvoting existing feature requests](https://github.com/aws-powertools/powertools-lambda-typescript/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc++label%3Atype%2Ffeature-request+), leaving a comment on what use cases it could unblock for you, and by joining our discussions on Discord. -- [x] **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. -- [x] **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. -- [x] **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. +[![Join our Discord](https://dcbadge.vercel.app/api/server/B8zZKbbyET)](https://discord.gg/B8zZKbbyET){target="_blank"} -You can find the full list of changes in the [v2 RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1714) and follow the progress in the [v2 milestone](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/12). +#### Event Handler REST -Just like for the feature parity, if you have any feedback or would like to contribute to the discussion, please leave a comment in the RFC or join the discussion in our [Discord community](https://discord.gg/B8zZKbbyET){target="_blank"}. +- [ ] [RFC to discuss initial thoughts and feasibility for TS/JS ecosystem](https://github.com/aws-powertools/powertools-lambda-typescript/issues/413) +- [ ] Explore pros & cons of whether to build atop lean frameworks (e.g., Hono) or from scratch +- [ ] Support for API Gateway REST API resolver +- [ ] Support for API Gateway HTTP API resolver +- [ ] Support for Lambda Function URL resolver +- [ ] Support for Application Load Balancer resolver +- [ ] Support for VPC Lattice resolver +- [ ] Support for Data Validation _(e.g., `Zod`)_ +- [ ] Support for OpenAPI generation +- [ ] Support for Middlewares +- [ ] Support for Compression +- [ ] Support for Binary responses +- [ ] Support for custom serializer +- [ ] Support for injecting request details _(consider not doing globals like Python legacy)_ +- [ ] Support for Router _(multi-file routes)_ -### Improve operational excellence +#### Improve operational excellence We continue to work on increasing operational excellence to remove as much undifferentiated heavy lifting for maintainers, so that we can focus on delivering features that help you. This means improving our automation workflows, project management, and test coverage. -## Roadmap status definition +### Roadmap status definition
```mermaid @@ -68,7 +65,7 @@ Within our [public board](https://github.com/orgs/aws-powertools/projects/7/view > Tasks or issues with empty `Status` will be categorized in upcoming review cycles. -## Process +### Process
```mermaid @@ -86,7 +83,7 @@ graph LR Our end-to-end mechanism follows four major steps: -- **Feature Request**. Ideas start with a [feature request](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=type%2Ffeature-request%2Ctriage&projects=aws-powertools%2F7&template=feature_request.yml&title=Feature+request%3A+TITLE){target="_blank"} to outline their use case at a high level. For complex use cases, maintainers might ask for/write a RFC. +- **Feature Request**. Ideas start with a [feature request](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=type%2Ffeature-request%2Ctriage&template=feature_request.yml&title=Feature+request%3A+TITLE){target="_blank"} to outline their use case at a high level. For complex use cases, maintainers might ask for/write a RFC. - Maintainers review requests based on [project tenets](index.md#tenets){target="_blank"}, customers reaction (πŸ‘), and use cases. - **Request-for-comments (RFC)**. Design proposals use our [RFC issue template](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=type%2FRFC%2Ctriage&projects=aws-powertools%2F7&template=rfc.yml&title=RFC%3A+TITLE){target="_blank"} to describe its implementation, challenges, developer experience, dependencies, and alternative solutions. - This helps refine the initial idea with community feedback before a decision is made. @@ -95,13 +92,13 @@ Our end-to-end mechanism follows four major steps: ??? info "See [Maintainers](./maintainers.md){target="_blank"} document to understand how we triage issues and pull requests, labels and governance." -## Disclaimer +### Disclaimer The Powertools for AWS Lambda (TypeScript) team values feedback and guidance from its community of users, although final decisions on inclusion into the project will be made by AWS. We determine the high-level direction for our open roadmap based on customer feedback and popularity (πŸ‘πŸ½ and comments), security and operational impacts, and business value. Where features don’t meet our goals and longer-term strategy, we will communicate that clearly and openly as quickly as possible with an explanation of why the decision was made. -## FAQs +### FAQs **Q: Why did you build this?** @@ -113,4 +110,44 @@ A: Because job zero is security and operational stability, we can't provide spec **Q: How can I provide feedback or ask for more information?** -A: For existing features, you can directly comment on issues. For anything else, please open an issue. \ No newline at end of file +A: For existing features, you can directly comment on issues. For anything else, please open an issue. + +### Launched + +#### JMESPath Functions + +> [Docs](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/jmespath/) + +Feature parity on JMESPath Powertools Functions feature + +- [x] Support for extracting data +- [x] Support for envelopes (unwrap before data extraction) +- [x] Support for built-in `powertools_json` JMESPath function +- [x] Support for built-in `powertools_base64` JMESPath function +- [x] Support for built-in `powertools_base64_gzip` JMESPath function +- [x] Support for Bring Your Own JMESPath function + +#### Parser (Zod) + +> [Docs](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parser/) + +Feature parity on Parser feature + +- [x] Support for defining your own Zod schema +- [x] Support for popular Lambda Event Sources as built-in schemas +- [x] Support for envelope (wrapping before schema validation) +- [x] Support for user-defined envelopes + +#### Version 2 release + +> [Docs](https://docs.powertools.aws.dev/lambda/typescript/latest/upgrade/) + +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 going to release our next major version (v2) by the end of 2023, which will include some of these changes: + +- [x] **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. +- [x] **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. +- [x] **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. + +You can find the full list of changes in the [v2 RFC](https://github.com/aws-powertools/powertools-lambda-typescript/issues/1714) and follow the progress in the [v2 milestone](https://github.com/aws-powertools/powertools-lambda-typescript/milestone/12). + +Just like for the feature parity, if you have any feedback or would like to contribute to the discussion, please leave a comment in the RFC or join the discussion in our [Discord community](https://discord.gg/B8zZKbbyET){target="_blank"}. diff --git a/docs/snippets/tracer/captureHTTP.ts b/docs/snippets/tracer/captureHTTP.ts deleted file mode 100644 index 5c12693839..0000000000 --- a/docs/snippets/tracer/captureHTTP.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Tracer } from '@aws-lambda-powertools/tracer'; - -new Tracer({ serviceName: 'serverlessAirline' }); - -export const handler = async ( - _event: unknown, - _context: unknown -): Promise => { - await fetch('https://httpbin.org/status/200'); -}; diff --git a/docs/snippets/tsconfig.json b/docs/snippets/tsconfig.json deleted file mode 100644 index 7c921276c8..0000000000 --- a/docs/snippets/tsconfig.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "./", - "baseUrl": ".", - "noEmit": true, - "noUnusedLocals": false, - "allowUnusedLabels": true, - "paths": { - "@aws-lambda-powertools/parameters/ssm": [ - "../../packages/parameters/lib/ssm" - ], - "@aws-lambda-powertools/parameters/secrets": [ - "../../packages/parameters/lib/secrets" - ], - "@aws-lambda-powertools/parameters/appconfig": [ - "../../packages/parameters/lib/appconfig" - ], - "@aws-lambda-powertools/parameters/dynamodb": [ - "../../packages/parameters/lib/dynamodb" - ], - "@aws-lambda-powertools/idempotency/dynamodb": [ - "../../packages/idempotency/lib/persistence/DynamoDBPersistenceLayer" - ], - "@aws-lambda-powertools/idempotency/persistence": [ - "../../packages/idempotency/lib/persistence" - ], - "@aws-lambda-powertools/idempotency": ["../../packages/idempotency/lib"], - "@aws-lambda-powertools/idempotency/middleware": [ - "../../packages/idempotency/lib/middleware" - ], - "@aws-lambda-powertools/batch": ["../../packages/batch/lib"], - "@aws-lambda-powertools/jmespath": ["../../packages/jmespath/lib"], - "@aws-lambda-powertools/jmespath/envelopes": [ - "../../packages/jmespath/lib/envelopes" - ], - "@aws-lambda-powertools/parser": ["../../packages/parser/lib"], - "@aws-lambda-powertools/logger": ["../../packages/logger/lib"] - } - } -} diff --git a/docs/upgrade.md b/docs/upgrade.md index ab2d14be0c..af4485814e 100644 --- a/docs/upgrade.md +++ b/docs/upgrade.md @@ -3,6 +3,8 @@ title: Upgrade guide description: Guide to update between major Powertools for AWS Lambda (TypeScript) versions --- + + ## End of support v1 !!! warning "On March 13th, 2024, Powertools for AWS Lambda (TypeScript) v1 entered maintenance mode, and will reach end-of-life on September 1st, 2024. If you are still using v1, we strongly recommend you to read our upgrade guide and update to the latest version." @@ -25,7 +27,6 @@ V2 is focused on official support for ESM (ECMAScript modules). We've made other | **Logger** | Removed `ContextExamples` from `@aws-lambda-powertools/commons` package. | Yes | | **Logger and Tracer** | Removed deprecated `createLogger` and `createTracer` helper functions in favor of direct instantiation. | Yes | - ### First steps Before you start, we suggest making a copy of your current working project or create a new git branch. @@ -61,7 +62,7 @@ If you're unable to use ESM, you can still use the `require` syntax to import th You might still need the `require` syntax when using a dependency or a transitive dependency that doesn't support ESM. For example, Tracer _(`@aws-lambda-powertools/tracer`)_ relies on the AWS X-Ray SDK for Node.js which uses `require`. -When that happens, you can instruct your bundler to use the `require` syntax for specific dependencies while using ESM for everything else. This is commonly known as [polyfill](https://developer.mozilla.org/en-US/docs/Glossary/Polyfill){target="_blank"}. +When that happens, you can instruct your bundler to use the `require` syntax for specific dependencies while using ESM for everything else. This is commonly known as [polyfill](https://developer.mozilla.org/en-US/docs/Glossary/Polyfill){target="_blank"}. Here is an example using `esbuild` bundler. === "With AWS CDK" @@ -172,13 +173,34 @@ In v2, you can now directly import from the `types` subpath export, e.g., `@aws- import { LogAttributes, UnformattedAttributes } from '@aws-lambda-powertools/logger/types'; ``` +### Using eslint? + +When using `eslint`, you might need to use [`@typescript-eslint/parser`](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) and [`eslint-plugin-import`](https://www.npmjs.com/package/eslint-import-resolver-typescript) to resolve the new subpath imports. + +Below is an example of how to configure your `.eslintrc.json` file: + +```json +{ + "parser": "@typescript-eslint/parser", + "settings": { + "import/resolver": { + "node": {}, + "typescript": { + "project": "./tsconfig.json", + "alwaysTryTypes": true, + }, + }, + }, +} +``` + ## Logger ### Log sampling !!! note "Disregard if you are not using the [log sampling feature](./core/logger.md#sampling-logs)." -In v1, log sampling implementation was inconsistent from other Powertools for AWS Lambda languages _(Python, .NET, and Java)_. +In v1, log sampling implementation was inconsistent from other Powertools for AWS Lambda languages _(Python, .NET, and Java)_. In v2, we changed these behaviors for consistency across languages: @@ -291,7 +313,7 @@ In v2, you have more control over **standard** (`attributes`) and [**custom keys In v1, we have provided a `ContextExamples` object to help you with testing. -In v2, we have removed the `ContextExamples` from the `@aws-lambda-powertools/commons` package, so you need to create it in your tests: +In v2, we have removed the `ContextExamples` from the `@aws-lambda-powertools/commons` package, so you need to create it in your tests: === "Before" @@ -335,8 +357,6 @@ In v2, we have removed the `ContextExamples` from the `@aws-lambda-powertools/co }); ``` - - ## Helper functions We removed the deprecated `createLogger` and `createTracer` heper functions. diff --git a/docs/utilities/batch.md b/docs/utilities/batch.md index 0e3ef1ad3b..c8e253492a 100644 --- a/docs/utilities/batch.md +++ b/docs/utilities/batch.md @@ -67,6 +67,7 @@ This behavior changes when you enable [ReportBatchItemFailures feature](https:// ### Installation Install the library in your project + ```shell npm i @aws-lambda-powertools/batch ``` @@ -84,19 +85,19 @@ The remaining sections of the documentation will rely on these samples. For comp === "SQS" ```yaml title="template.yaml" hl_lines="30-31" - --8<-- "docs/snippets/batch/templates/sam/sqs.yaml" + --8<-- "examples/snippets/batch/templates/sam/sqs.yaml" ``` === "Kinesis Data Streams" ```yaml title="template.yaml" hl_lines="44-45" - --8<-- "docs/snippets/batch/templates/sam/kinesis.yaml" + --8<-- "examples/snippets/batch/templates/sam/kinesis.yaml" ``` === "DynamoDB Streams" ```yaml title="template.yaml" hl_lines="43-44" - --8<-- "docs/snippets/batch/templates/sam/dynamodb.yaml" + --8<-- "examples/snippets/batch/templates/sam/dynamodb.yaml" ``` ### Processing messages from SQS @@ -114,9 +115,9 @@ Processing batches from SQS works in three stages: ```typescript hl_lines="1-5 14 17 29-31" --8<-- - docs/snippets/batch/gettingStartedSQS.ts::16 - docs/snippets/batch/gettingStartedSQS.ts:18:29 - docs/snippets/batch/gettingStartedSQS.ts:31:34 + examples/snippets/batch/gettingStartedSQS.ts::16 + examples/snippets/batch/gettingStartedSQS.ts:18:29 + examples/snippets/batch/gettingStartedSQS.ts:31:34 --8<-- ``` @@ -129,27 +130,27 @@ Processing batches from SQS works in three stages: The second record failed to be processed, therefore the processor added its message ID in the response. ```json - --8<-- "docs/snippets/batch/samples/sampleSQSResponse.json" + --8<-- "examples/snippets/batch/samples/sampleSQSResponse.json" ``` === "Sample event" ```json - --8<-- "docs/snippets/batch/samples/sampleSQSEvent.json" + --8<-- "examples/snippets/batch/samples/sampleSQSEvent.json" ``` #### 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" +--8<-- "examples/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) +1. **Step 1**. Creates a partial failure batch processor for SQS FIFO queues. See [partial failure mechanics for details](#partial-failure-mechanics) -!!! Note +!!! 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. @@ -167,7 +168,7 @@ Processing batches from Kinesis works in three stages: === "index.ts" ```typescript hl_lines="1-5 14 17 27-29" - --8<-- "docs/snippets/batch/gettingStartedKinesis.ts" + --8<-- "examples/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) @@ -177,13 +178,13 @@ Processing batches from Kinesis works in three stages: The second record failed to be processed, therefore the processor added its sequence number in the response. ```json - --8<-- "docs/snippets/batch/samples/sampleKinesisEvent.json" + --8<-- "examples/snippets/batch/samples/sampleKinesisEvent.json" ``` === "Sample event" ```json - --8<-- "docs/snippets/batch/samples/sampleKinesisResponse.json" + --8<-- "examples/snippets/batch/samples/sampleKinesisResponse.json" ``` ### Processing messages from DynamoDB @@ -200,7 +201,7 @@ Processing batches from DynamoDB Streams works in three stages: === "index.ts" ```typescript hl_lines="1-5 14 17 32-34" - --8<-- "docs/snippets/batch/gettingStartedDynamoDBStreams.ts" + --8<-- "examples/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) @@ -210,13 +211,13 @@ Processing batches from DynamoDB Streams works in three stages: The second record failed to be processed, therefore the processor added its sequence number in the response. ```json - --8<-- "docs/snippets/batch/samples/sampleDynamoDBStreamsResponse.json" + --8<-- "examples/snippets/batch/samples/sampleDynamoDBStreamsResponse.json" ``` === "Sample event" ```json - --8<-- "docs/snippets/batch/samples/sampleDynamoDBStreamsEvent.json" + --8<-- "examples/snippets/batch/samples/sampleDynamoDBStreamsEvent.json" ``` ### Error handling @@ -227,9 +228,9 @@ By default, we catch any exception raised by your record handler function. This ```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 + examples/snippets/batch/gettingStartedErrorHandling.ts::29 + examples/snippets/batch/gettingStartedErrorHandling.ts:31:38 + examples/snippets/batch/gettingStartedErrorHandling.ts:40:43 --8<-- ``` @@ -240,7 +241,7 @@ By default, we catch any exception raised by your record handler function. This === "Sample response" ```json - --8<-- "docs/snippets/batch/samples/sampleSQSResponse.json" + --8<-- "examples/snippets/batch/samples/sampleSQSResponse.json" ``` ### Partial failure mechanics @@ -373,16 +374,16 @@ There are two processors you can use with this utility: 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. +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 `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. +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). @@ -396,13 +397,12 @@ 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" +--8<-- "examples/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. +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 @@ -411,7 +411,7 @@ Within your `recordHandler` function, you might need access to the Lambda contex 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" +--8<-- "examples/snippets/batch/accessLambdaContext.ts" ``` ### Extending BatchProcessor @@ -426,7 +426,7 @@ For these scenarios, you can subclass `BatchProcessor` and quickly override `suc Let's suppose you'd like to add a metric named `BatchRecordFailures` for each batch record that failed processing ```typescript hl_lines="3 20 24 31 37" title="Extending failure handling mechanism in BatchProcessor" ---8<-- "docs/snippets/batch/extendingFailure.ts" +--8<-- "examples/snippets/batch/extendingFailure.ts" ``` ### Create your own partial processor @@ -461,17 +461,17 @@ classDiagram * **`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 35 56 61 73 86" title="Creating a custom batch processor" ---8<-- "docs/snippets/batch/customPartialProcessor.ts" +--8<-- "examples/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. +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. ```typescript ---8<-- "docs/snippets/batch/advancedTracingRecordHandler.ts" +--8<-- "examples/snippets/batch/advancedTracingRecordHandler.ts" ``` 1. Retrieve the current segment, then create a subsegment for the record being processed @@ -489,17 +489,17 @@ Given a SQS batch where the first batch record succeeds and the second fails pro === "index.test.ts" ```typescript - --8<-- "docs/snippets/batch/testingYourCode.ts" + --8<-- "examples/snippets/batch/testingYourCode.ts" ``` === "index.ts" ```typescript - --8<-- "docs/snippets/batch/gettingStartedSQS.ts" + --8<-- "examples/snippets/batch/gettingStartedSQS.ts" ``` === "Sample SQS event" ```json title="events/sqs_event.json" - --8<-- "docs/snippets/batch/samples/sampleSQSEvent.json" - ``` \ No newline at end of file + --8<-- "examples/snippets/batch/samples/sampleSQSEvent.json" + ``` diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 273d7a551b..9053c0424d 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -3,6 +3,8 @@ title: Idempotency description: Utility --- + + The idempotency utility provides a simple solution to convert your Lambda functions into idempotent operations which are safe to retry. ## Key features @@ -52,17 +54,16 @@ classDiagram ### Installation Install the library in your project + ```shell npm i @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb ``` While we support Amazon DynamoDB as a persistence layer out of the box, you need to bring your own AWS SDK for JavaScript v3 DynamoDB client. - ???+ note 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 or newer, 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. @@ -87,20 +88,20 @@ If you're not [changing the default configuration for the DynamoDB persistence l === "AWS Cloud Development Kit (CDK) example" - ```typescript title="template.tf" hl_lines="11-18 26" - --8<-- "docs/snippets/idempotency/templates/tableCdk.ts" + ```typescript title="template.ts" hl_lines="11-18 25" + --8<-- "examples/snippets/idempotency/templates/tableCdk.ts" ``` === "AWS Serverless Application Model (SAM) example" - ```yaml title="template.yaml" hl_lines="6-14 24-31" - --8<-- "docs/snippets/idempotency/templates/tableSam.yaml" + ```yaml title="template.yaml" hl_lines="6-14" + --8<-- "examples/snippets/idempotency/templates/tableSam.yaml" ``` === "Terraform example" ```terraform title="template.tf" hl_lines="14-26 64-70" - --8<-- "docs/snippets/idempotency/templates/tableTerraform.tf" + --8<-- "examples/snippets/idempotency/templates/tableTerraform.tf" ``` ???+ warning "Warning: Large responses with DynamoDB persistence layer" @@ -109,10 +110,10 @@ If you're not [changing the default configuration for the DynamoDB persistence l Larger items cannot be written to DynamoDB and will cause exceptions. ???+ info "Info: DynamoDB" - Each function invocation will make only 1 request to DynamoDB by using DynamoDB's [conditional expressions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html){target="_blank"} to ensure that we don't overwrite existing records, + Each function invocation will make only 1 request to DynamoDB by using DynamoDB's [conditional expressions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html){target="_blank"} to ensure that we don't overwrite existing records, and [ReturnValuesOnConditionCheckFailure](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html#DDB-PutItem-request-ReturnValuesOnConditionCheckFailure){target="_blank"} to return the record if it exists. - See [AWS Blog post on handling conditional write errors](https://aws.amazon.com/blogs/database/handle-conditional-write-errors-in-high-concurrency-scenarios-with-amazon-dynamodb/) for more details. - For retried invocations, you will see 1WCU and 1RCU. + See [AWS Blog post on handling conditional write errors](https://aws.amazon.com/blogs/database/handle-conditional-write-errors-in-high-concurrency-scenarios-with-amazon-dynamodb/) for more details. + For retried invocations, you will see 1WCU and 1RCU. Review the [DynamoDB pricing documentation](https://aws.amazon.com/dynamodb/pricing/){target="_blank"} to estimate the cost. ### MakeIdempotent function wrapper @@ -122,23 +123,21 @@ You can quickly start by initializing the `DynamoDBPersistenceLayer` class and u === "index.ts" ```typescript hl_lines="2-3 21 35-38" - --8<-- "docs/snippets/idempotency/makeIdempotentBase.ts" + --8<-- "examples/snippets/idempotency/makeIdempotentBase.ts" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts:3:16" + --8<-- "examples/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. - ???+ 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. + 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 method 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. @@ -150,38 +149,40 @@ When using `makeIdempotent` on arbitrary functions, you can tell us which argume === "index.ts" ```typescript hl_lines="22 34-38" - --8<-- "docs/snippets/idempotency/makeIdempotentAnyFunction.ts" + --8<-- "examples/snippets/idempotency/makeIdempotentAnyFunction.ts" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts:3:16" + --8<-- "examples/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. +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 with 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`, etc. ### Idempotent Decorator You can also use the `@idempotent` decorator to make your Lambda handler idempotent, similar to the `makeIdempotent` function wrapper. !!! info - The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. Additionally, they are implemented in a way that fits asynchronous methods. When decorating a synchronous method, the decorator replaces its implementation with an asynchronous one causing the caller to have to `await` the now decorated method. + The class method decorators in this project follow the experimental implementation enabled via the [`experimentalDecorators` compiler option](https://www.typescriptlang.org/tsconfig#experimentalDecorators) in TypeScript. + + Additionally, they are implemented to decorate async methods. When decorating a synchronous one, the decorator replaces its implementation with an async one causing the caller to have to `await` the now decorated method. + If this is not the desired behavior, you can use one of the other patterns to make your logic idempotent. === "index.ts" ```typescript hl_lines="17" - --8<-- "docs/snippets/idempotency/idempotentDecoratorBase.ts" + --8<-- "examples/snippets/idempotency/idempotentDecoratorBase.ts" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts" + --8<-- "examples/snippets/idempotency/types.ts" ``` - You can use the decorator on your Lambda handler or 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. The configuration options for the `@idempotent` decorator are the same as the ones for the `makeIdempotent` function wrapper. @@ -191,18 +192,20 @@ The configuration options for the `@idempotent` decorator are the same as the on Currently we support Middy up to `v4.x` that you can install it by running `npm i @middy/core@~4`. Check their docs to learn more about [Middy and its middleware stack](https://middy.js.org/docs/intro/getting-started){target="_blank"} as well as [best practices when working with Powertools](https://middy.js.org/docs/integrations/lambda-powertools#best-practices){target="_blank"}. -If you are using [Middy](https://middy.js.org){target="_blank"} as your middleware engine, you can use the `makeHandlerIdempotent` middleware to make your Lambda handler idempotent. Similar to the `makeIdempotent` function wrapper, you can quickly make your Lambda handler idempotent by initializing the `DynamoDBPersistenceLayer` class and using it with the `makeHandlerIdempotent` middleware. +If you are using [Middy.js](https://middy.js.org){target="_blank"} as your middleware engine, you can use the `makeHandlerIdempotent` middleware to make your Lambda handler idempotent. + +Similar to the `makeIdempotent` function wrapper, you can quickly make your Lambda handler idempotent by initializing the `DynamoDBPersistenceLayer` class and using it with the `makeHandlerIdempotent` middleware. === "index.ts" ```typescript hl_lines="22 36-40" - --8<-- "docs/snippets/idempotency/makeHandlerIdempotent.ts" + --8<-- "examples/snippets/idempotency/makeHandlerIdempotent.ts" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts:3:16" + --8<-- "examples/snippets/idempotency/types.ts:3:16" ``` ### Choosing a payload subset for idempotency @@ -225,27 +228,25 @@ Imagine the function executes successfully, but the client never receives the re === "index.ts" ```typescript hl_lines="4 27 49" - --8<-- "docs/snippets/idempotency/makeIdempotentJmes.ts" + --8<-- "examples/snippets/idempotency/makeIdempotentJmes.ts" ``` === "Example event" ```json hl_lines="28" - --8<-- "docs/snippets/idempotency/samples/makeIdempotentJmes.json" + --8<-- "examples/snippets/idempotency/samples/makeIdempotentJmes.json" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts:3:16" + --8<-- "examples/snippets/idempotency/types.ts:3:16" ``` ### Lambda timeouts - - 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. +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). @@ -253,14 +254,14 @@ This is automatically done when you wrap your Lambda handler with the [makeIdemp 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 outside of your handler, 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: === "Registering Lambda Context" ```typescript hl_lines="13 38" - --8<-- "docs/snippets/idempotency/makeIdempotentLambdaContext.ts" + --8<-- "examples/snippets/idempotency/makeIdempotentLambdaContext.ts" ``` ### Handling exceptions @@ -294,7 +295,7 @@ If an error is thrown _outside_ the scope of the decorated function and after yo === "Handling exceptions" ```typescript hl_lines="39-40 47-48" - --8<-- "docs/snippets/idempotency/workingWithExceptions.ts" + --8<-- "examples/snippets/idempotency/workingWithExceptions.ts" ``` ???+ warning @@ -513,7 +514,7 @@ This persistence layer is built-in, and you can either use an existing DynamoDB === "Customizing DynamoDBPersistenceLayer to suit your table structure" ```typescript hl_lines="7-15" - --8<-- "docs/snippets/idempotency/customizePersistenceLayer.ts" + --8<-- "examples/snippets/idempotency/customizePersistenceLayer.ts" ``` When using DynamoDB as a persistence layer, you can alter the attribute names by passing these parameters when initializing the persistence layer: @@ -565,7 +566,7 @@ You can enable in-memory caching with the **`useLocalCache`** parameter: === "Caching idempotent transactions in-memory to prevent multiple calls to storage" ```typescript hl_lines="12-13" - --8<-- "docs/snippets/idempotency/workingWithLocalCache.ts" + --8<-- "examples/snippets/idempotency/workingWithLocalCache.ts" ``` When enabled, the default is to cache a maximum of 256 records in each Lambda execution environment - You can change it with the **`maxLocalCacheSize`** parameter. @@ -581,7 +582,7 @@ You can change this window with the **`expiresAfterSeconds`** parameter: === "Adjusting idempotency record expiration" ```typescript hl_lines="14" - --8<-- "docs/snippets/idempotency/workingWithRecordExpiration.ts" + --8<-- "examples/snippets/idempotency/workingWithRecordExpiration.ts" ``` This will mark any records older than 5 minutes as expired, and [your function will be executed as normal if it is invoked with a matching payload](#expired-idempotency-records). @@ -609,7 +610,7 @@ With **`payloadValidationJmesPath`**, you can provide an additional JMESPath exp === "Payload validation" ```typescript hl_lines="14-15" - --8<-- "docs/snippets/idempotency/workingWithPayloadValidation.ts" + --8<-- "examples/snippets/idempotency/workingWithPayloadValidation.ts" ``` In this example, the **`userId`** and **`productId`** keys are used as the payload to generate the idempotency key, as per **`eventKeyJmespath`** parameter. @@ -633,19 +634,19 @@ This means that we will raise **`IdempotencyKeyError`** if the evaluation of **` === "Idempotency key required" ```typescript hl_lines="14-15" - --8<-- "docs/snippets/idempotency/workingWithIdempotencyRequiredKey.ts" + --8<-- "examples/snippets/idempotency/workingWithIdempotencyRequiredKey.ts" ``` === "Success Event" ```json hl_lines="3 6" - --8<-- "docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json" + --8<-- "examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json" ``` === "Failure Event" ```json hl_lines="3 5" - --8<-- "docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json" + --8<-- "examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json" ``` ### Batch integration @@ -653,22 +654,20 @@ This means that we will raise **`IdempotencyKeyError`** if the evaluation of **` 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" +???+ "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" + --8<-- "examples/snippets/idempotency/workingWithBatch.ts" ``` === "Sample event" ```json hl_lines="4" - --8<-- "docs/snippets/idempotency/samples/workingWithBatch.json" + --8<-- "examples/snippets/idempotency/samples/workingWithBatch.json" ``` ### Customizing AWS SDK configuration @@ -678,13 +677,13 @@ The **`clientConfig`** and **`awsSdkV3Client`** parameters enable you to pass in === "Passing specific configuration" ```typescript hl_lines="8-10" - --8<-- "docs/snippets/idempotency/workingWithCustomConfig.ts" + --8<-- "examples/snippets/idempotency/workingWithCustomConfig.ts" ``` === "Passing custom DynamoDBClient" ```typescript hl_lines="7-9 12" - --8<-- "docs/snippets/idempotency/workingWithCustomClient.ts" + --8<-- "examples/snippets/idempotency/workingWithCustomClient.ts" ``` ### Using a DynamoDB table with a composite primary key @@ -698,7 +697,7 @@ You can optionally set a static value for the partition key using the `staticPkV === "Reusing a DynamoDB table that uses a composite primary key" ```typescript hl_lines="9" - --8<-- "docs/snippets/idempotency/workingWithCompositeKey.ts" + --8<-- "examples/snippets/idempotency/workingWithCompositeKey.ts" ``` The example function above would cause data to be stored in DynamoDB like this: @@ -725,24 +724,24 @@ Below an example implementation of a custom persistence layer backed by a generi === "CustomPersistenceLayer" ```typescript hl_lines="9 19 28 34 50 90" - --8<-- "docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts" + --8<-- "examples/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts" ``` === "index.ts" ```typescript hl_lines="10" - --8<-- "docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts" + --8<-- "examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts" ``` === "types.ts" ```typescript - --8<-- "docs/snippets/idempotency/types.ts" + --8<-- "examples/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 diff --git a/docs/utilities/jmespath.md b/docs/utilities/jmespath.md index cf6c94aac1..e7e0bc6316 100644 --- a/docs/utilities/jmespath.md +++ b/docs/utilities/jmespath.md @@ -3,6 +3,8 @@ title: JMESPath Functions description: Utility --- + + Built-in [JMESPath](https://jmespath.org/){target="_blank" rel="nofollow"} functions to easily deserialize common encoded JSON payloads in Lambda functions. ## Key features @@ -13,6 +15,14 @@ Built-in [JMESPath](https://jmespath.org/){target="_blank" rel="nofollow"} funct ## Getting started +### Installation + +Install the utility in your project: + +```sh +npm install @aws-lambda-powertools/jmespath +``` + You might have events that contain encoded JSON payloads as string, base64, or even in compressed format. It is a common use case to decode and extract them partially or fully as part of your Lambda function invocation. Powertools for AWS Lambda (TypeScript) also have utilities like [idempotency](idempotency.md){target="_blank"} where you might need to extract a portion of your data before using them. @@ -29,13 +39,13 @@ You can use the `extractDataFromEnvelope` function with any [JMESPath expression === "extractDataFromBuiltinEnvelope.ts" ```typescript hl_lines="1 13 17 20 22" - --8<-- "docs/snippets/jmespath/extractDataFromEnvelope.ts" + --8<-- "examples/snippets/jmespath/extractDataFromEnvelope.ts" ``` === "extractDataFromEnvelope.json" ```json - --8<-- "docs/snippets/jmespath/extractDataFromEnvelope.json" + --8<-- "examples/snippets/jmespath/extractDataFromEnvelope.json" ``` ### Built-in envelopes @@ -44,17 +54,18 @@ We provide built-in envelopes for popular AWS Lambda event sources to easily dec === "extractDataFromBuiltinEnvelope.ts" ```typescript hl_lines="2-3 15" - --8<-- "docs/snippets/jmespath/extractDataFromBuiltinEnvelope.ts" + --8<-- "examples/snippets/jmespath/extractDataFromBuiltinEnvelope.ts" ``` === "extractDataFromBuiltinEnvelope.json" ```json hl_lines="6 15" - --8<-- "docs/snippets/jmespath/extractDataFromBuiltinEnvelope.json" + --8<-- "examples/snippets/jmespath/extractDataFromBuiltinEnvelope.json" ``` These are all built-in envelopes you can use along with their expression as a reference: + | Envelope | JMESPath expression | | --------------------------------- | ----------------------------------------------------------------------------------------- | | **`API_GATEWAY_HTTP`** | `powertools_json(body)` | @@ -70,6 +81,7 @@ These are all built-in envelopes you can use along with their expression as a re | **`S3_SQS`** | `Records[*].powertools_json(body).Records[0]` | | **`SNS`** | `Records[0].Sns.Message | powertools_json(@)` | | **`SQS`** | `Records[*].powertools_json(body)` | + ???+ tip "Using SNS?" If you don't require SNS metadata, enable [raw message delivery](https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html). It will reduce multiple payload layers and size, when using SNS in combination with other services (_e.g., SQS, S3, etc_). @@ -91,13 +103,13 @@ This sample will deserialize the JSON string within the `body` key before [Idemp === "powertoolsJsonIdempotencyJmespath.ts" ```ts hl_lines="31" - --8<-- "docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts" + --8<-- "examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts" ``` === "powertoolsJsonIdempotencyJmespath.json" ```json hl_lines="28" - --8<-- "docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json" + --8<-- "examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json" ``` #### `powertools_base64` function @@ -109,7 +121,7 @@ This sample will decode the base64 value within the `data` key, and deserialize === "powertoolsBase64Jmespath.ts" ```ts hl_lines="9" - --8<-- "docs/snippets/jmespath/powertoolsBase64Jmespath.ts" + --8<-- "examples/snippets/jmespath/powertoolsBase64Jmespath.ts" ``` 1. The `data` variable contains the decoded object that looks like this: @@ -126,7 +138,7 @@ This sample will decode the base64 value within the `data` key, and deserialize === "powertoolsBase64JmespathPayload.json" ```json - --8<-- "docs/snippets/jmespath/powertoolsBase64JmespathPayload.json" + --8<-- "examples/snippets/jmespath/powertoolsBase64JmespathPayload.json" ``` #### `powertools_base64_gzip` function @@ -138,7 +150,7 @@ This sample will decompress and decode base64 data from Cloudwatch Logs, then us === "powertoolsBase64GzipJmespath.ts" ```ts hl_lines="9" - --8<-- "docs/snippets/jmespath/powertoolsBase64GzipJmespath.ts" + --8<-- "examples/snippets/jmespath/powertoolsBase64GzipJmespath.ts" ``` 1. The `payload` key contains a JSON object that once decompressed and decoded looks like this: @@ -174,7 +186,7 @@ This sample will decompress and decode base64 data from Cloudwatch Logs, then us === "powertoolsBase64GzipJmespathPayload.json" ```json - --8<-- "docs/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json" + --8<-- "examples/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json" ``` ### Bring your own JMESPath function @@ -190,8 +202,8 @@ Here is an example of how to decompress messages compressed using the [Brotli co ```ts hl_lines="3 9 25-26" --8<-- - docs/snippets/jmespath/powertoolsCustomFunction.ts::8 - docs/snippets/jmespath/powertoolsCustomFunction.ts:10: + examples/snippets/jmespath/powertoolsCustomFunction.ts::8 + examples/snippets/jmespath/powertoolsCustomFunction.ts:10: --8<-- ``` @@ -202,5 +214,5 @@ Here is an example of how to decompress messages compressed using the [Brotli co === "powertoolsCustomFunction.json" ```json - --8<-- "docs/snippets/jmespath/powertoolsCustomFunction.json" - ``` \ No newline at end of file + --8<-- "examples/snippets/jmespath/powertoolsCustomFunction.json" + ``` diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index df89ef8a62..3507c515f2 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -3,7 +3,9 @@ title: Parameters description: Utility --- + The Parameters utility provides high-level functions to retrieve one or multiple parameter values from [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html){target="_blank"}, [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html){target="_blank"}, [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html){target="_blank"}, [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html){target="_blank"}, or your own parameter store. + ## Key features @@ -69,7 +71,7 @@ This utility requires additional permissions to work as expected. You can retrieve a single parameter using the `getParameter` high-level function. ```typescript hl_lines="1 5" title="Fetching a single parameter from SSM" ---8<-- "docs/snippets/parameters/getParameter.ts" +--8<-- "examples/snippets/parameters/getParameter.ts" ``` For multiple parameters, you can use either: @@ -80,13 +82,13 @@ For multiple parameters, you can use either: === "getParameters" ```typescript hl_lines="1 8" title="Fetching multiple parameters by path from SSM" - --8<-- "docs/snippets/parameters/getParameters.ts" + --8<-- "examples/snippets/parameters/getParameters.ts" ``` === "getParametersByName" ```typescript hl_lines="1-2 4-11 15" title="Fetching multiple parameters by names from SSM" - --8<-- "docs/snippets/parameters/getParametersByName.ts" + --8<-- "examples/snippets/parameters/getParametersByName.ts" ``` ???+ tip "`getParametersByName` supports graceful error handling" @@ -99,7 +101,7 @@ For multiple parameters, you can use either: * Throw `GetParameterError` if any of your parameters is named `_errors` ```typescript hl_lines="9 13-15 18" ---8<-- "docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts" +--8<-- "examples/snippets/parameters/getParametersByNameGracefulErrorHandling.ts" ``` ### Fetching secrets @@ -107,7 +109,7 @@ For multiple parameters, you can use either: You can fetch secrets stored in Secrets Manager using `getSecret`. ```typescript hl_lines="1 5" title="Fetching secrets" ---8<-- "docs/snippets/parameters/getSecret.ts" +--8<-- "examples/snippets/parameters/getSecret.ts" ``` ### Fetching app configurations @@ -117,7 +119,7 @@ You can fetch application configurations in AWS AppConfig using `getAppConfig`. The following will retrieve the latest version and store it in the cache. ```typescript hl_lines="1 5-8" title="Fetching latest config from AppConfig" ---8<-- "docs/snippets/parameters/getAppConfig.ts" +--8<-- "examples/snippets/parameters/getAppConfig.ts" ``` ## Advanced @@ -132,10 +134,10 @@ You can adjust how long values should be kept in cache by using the param `maxAg If you want to set the same TTL for all parameters, you can set the `POWERTOOLS_PARAMETERS_MAX_AGE` environment variable. **This will override the default TTL of 5 seconds but can be overridden by the `maxAge` parameter**. ```typescript hl_lines="8 14" title="Caching parameters values in memory for longer than 5 seconds" ---8<-- "docs/snippets/parameters/adjustingCacheTTL.ts" +--8<-- "examples/snippets/parameters/adjustingCacheTTL.ts" ``` -1. Options passed to `get()`, `getMultiple()`, and `getParametersByName()` will override the values set in `POWERTOOLS_PARAMETERS_MAX_AGE` environment variable. +1. Options passed to `get()`, `getMultiple()`, and `getParametersByName()` will override the values set in `POWERTOOLS_PARAMETERS_MAX_AGE` environment variable. ???+ info The `maxAge` parameter is also available in high level functions like `getParameter`, `getSecret`, etc. @@ -145,7 +147,7 @@ You can adjust how long values should be kept in cache by using the param `maxAg If you'd like to always ensure you fetch the latest parameter from the store regardless if already available in cache, use the `forceFetch` parameter. ```typescript hl_lines="5" title="Forcefully fetching the latest parameter whether TTL has expired or not" ---8<-- "docs/snippets/parameters/forceFetch.ts" +--8<-- "examples/snippets/parameters/forceFetch.ts" ``` ### Built-in provider class @@ -158,7 +160,7 @@ For greater flexibility such as configuring the underlying SDK client used by bu #### SSMProvider ```typescript hl_lines="4-5" title="Example with SSMProvider for further extensibility" ---8<-- "docs/snippets/parameters/ssmProvider.ts" +--8<-- "examples/snippets/parameters/ssmProvider.ts" ``` The AWS Systems Manager Parameter Store provider supports two additional arguments for the `get()` and `getMultiple()` methods: @@ -172,15 +174,15 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen If you want to always decrypt parameters, you can set the `POWERTOOLS_PARAMETERS_SSM_DECRYPT=true` environment variable. **This will override the default value of `false` but can be overridden by the `decrypt` parameter**. ```typescript hl_lines="6 12" title="Example with get() and getMultiple()" ---8<-- "docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts" +--8<-- "examples/snippets/parameters/ssmProviderDecryptAndRecursive.ts" ``` -1. Options passed to `get()`, `getMultiple()`, and `getParametersByName()` will override the values set in `POWERTOOLS_PARAMETERS_SSM_DECRYPT` environment variable. +1. Options passed to `get()`, `getMultiple()`, and `getParametersByName()` will override the values set in `POWERTOOLS_PARAMETERS_SSM_DECRYPT` environment variable. #### SecretsProvider ```typescript hl_lines="4-5" title="Example with SecretsProvider for further extensibility" ---8<-- "docs/snippets/parameters/secretsProvider.ts" +--8<-- "examples/snippets/parameters/secretsProvider.ts" ``` #### AppConfigProvider @@ -193,7 +195,7 @@ The AWS AppConfig provider requires two arguments when initialized: | **environment** | Yes | _(N/A)_ | The environment that corresponds to your current config. | ```typescript hl_lines="4 8" title="Example with AppConfigProvider for further extensibility" ---8<-- "docs/snippets/parameters/appConfigProvider.ts" +--8<-- "examples/snippets/parameters/appConfigProvider.ts" ``` #### DynamoDBProvider @@ -216,14 +218,14 @@ With this table, `await dynamoDBProvider.get('my-param')` will return `my-value` === "handler.ts" ```typescript hl_lines="3 7" - --8<-- "docs/snippets/parameters/dynamoDBProvider.ts" + --8<-- "examples/snippets/parameters/dynamoDBProvider.ts" ``` === "DynamoDB Local example" You can initialize the DynamoDB provider pointing to [DynamoDB Local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) using the `endpoint` field in the `clientConfig` parameter: ```typescript hl_lines="5-7" - --8<-- "docs/snippets/parameters/dynamoDBProviderLocal.ts" + --8<-- "examples/snippets/parameters/dynamoDBProviderLocal.ts" ``` **DynamoDB table structure for multiple values parameters** @@ -244,7 +246,7 @@ With this table, `await dynamoDBProvider.getMultiple('my-hash-key')` will return === "handler.ts" ```typescript hl_lines="3 10" - --8<-- "docs/snippets/parameters/dynamoDBProviderMultiple.ts" + --8<-- "examples/snippets/parameters/dynamoDBProviderMultiple.ts" ``` === "values response object" @@ -263,13 +265,13 @@ DynamoDB provider can be customized at initialization to match your table struct | Parameter | Mandatory | Default | Description | | ------------- | --------- | ------- | --------------------------------------------------------------------------------------------------------- | -| **tableName** | **Yes** | *(N/A)* | Name of the DynamoDB table containing the parameter values. | +| **tableName** | **Yes** | _(N/A)_ | Name of the DynamoDB table containing the parameter values. | | **keyAttr** | No | `id` | Hash key for the DynamoDB table. | | **sortAttr** | No | `sk` | Range key for the DynamoDB table. You don't need to set this if you don't use the `getMultiple()` method. | | **valueAttr** | No | `value` | Name of the attribute containing the parameter value. | ```typescript hl_lines="3-8" title="Customizing DynamoDBProvider to suit your table design" ---8<-- "docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts" +--8<-- "examples/snippets/parameters/dynamoDBProviderCustomizeTable.ts" ``` ### Create your own provider @@ -282,17 +284,17 @@ Here's an example of implementing a custom parameter store using an external ser === "Provider implementation" ```typescript - --8<-- "docs/snippets/parameters/customProviderVault.ts" + --8<-- "examples/snippets/parameters/customProviderVault.ts" ``` === "Provider types" ```typescript - --8<-- "docs/snippets/parameters/customProviderVaultTypes.ts" + --8<-- "examples/snippets/parameters/customProviderVaultTypes.ts" ``` === "Provider usage" ```typescript - --8<-- "docs/snippets/parameters/customProviderVaultUsage.ts" + --8<-- "examples/snippets/parameters/customProviderVaultUsage.ts" ``` ### Deserializing values with transform parameter @@ -304,12 +306,12 @@ For parameters stored in JSON or Base64 format, you can use the `transform` argu === "High level functions" ```typescript hl_lines="4" - --8<-- "docs/snippets/parameters/transform.ts" + --8<-- "examples/snippets/parameters/transform.ts" ``` === "Providers" ```typescript hl_lines="7 10" - --8<-- "docs/snippets/parameters/transformProvider.ts" + --8<-- "examples/snippets/parameters/transformProvider.ts" ``` #### Partial transform failures with `getMultiple()` @@ -318,10 +320,10 @@ If you use `transform` with `getMultiple()`, you can have a single malformed par You can override this by setting the `throwOnTransformError` argument to `true`. If you do so, a single transform error will throw a **`TransformParameterError`** error. -For example, if you have three parameters, */param/a*, */param/b* and */param/c*, but */param/c* is malformed: +For example, if you have three parameters, _/param/a_, _/param/b_ and _/param/c_, but _/param/c_ is malformed: ```typescript hl_lines="23" title="Throwing TransformParameterError at first malformed parameter" ---8<-- "docs/snippets/parameters/transformPartialFailures.ts" +--8<-- "examples/snippets/parameters/transformPartialFailures.ts" ``` #### Auto-transform values on suffix @@ -334,7 +336,7 @@ You can do this with a single request by using `transform: 'auto'`. This will in `transform: 'auto'` feature is available across all providers, including the high level functions. ```typescript hl_lines="7" title="Deserializing parameter values based on their suffix" ---8<-- "docs/snippets/parameters/transformAuto.ts" +--8<-- "examples/snippets/parameters/transformAuto.ts" ``` For example, if you have three parameters: two with the following suffixes `.json` and `.binary` and one without any suffix: @@ -362,7 +364,7 @@ The two parameters with a suffix will be decoded, while the one without a suffix You can use a special `sdkOptions` object argument to pass any supported option directly to the underlying SDK method. ```typescript hl_lines="8 14" title="Specify a VersionId for a secret" ---8<-- "docs/snippets/parameters/sdkOptions.ts" +--8<-- "examples/snippets/parameters/sdkOptions.ts" ``` Here is the mapping between this utility's functions and methods and the underlying SDK: @@ -396,22 +398,22 @@ You can use the `awsSdkV3Client` parameter via any of the available [Provider Cl === "SSMProvider" ```typescript hl_lines="5 7" - --8<-- "docs/snippets/parameters/ssmProviderCustomClient.ts" + --8<-- "examples/snippets/parameters/ssmProviderCustomClient.ts" ``` === "SecretsProvider" ```typescript hl_lines="5 8" - --8<-- "docs/snippets/parameters/secretsProviderCustomClient.ts" + --8<-- "examples/snippets/parameters/secretsProviderCustomClient.ts" ``` === "AppConfigProvider" ```typescript hl_lines="5 8" - --8<-- "docs/snippets/parameters/appConfigProviderCustomClient.ts" + --8<-- "examples/snippets/parameters/appConfigProviderCustomClient.ts" ``` === "DynamoDBProvider" ```typescript hl_lines="5 7" - --8<-- "docs/snippets/parameters/dynamoDBProviderCustomClient.ts" + --8<-- "examples/snippets/parameters/dynamoDBProviderCustomClient.ts" ``` ### Customizing AWS SDK v3 configuration @@ -423,9 +425,8 @@ The **`clientConfig`** parameter enables you to pass in a custom [config object] When using VPC private endpoints, you can pass a custom client altogether. It's also useful for testing when injecting fake instances. - ```typescript hl_lines="2 4-5" ---8<-- "docs/snippets/parameters/clientConfig.ts" +--8<-- "examples/snippets/parameters/clientConfig.ts" ``` ## Testing your code @@ -436,12 +437,12 @@ For unit testing your applications, you can mock the calls to the parameters uti === "handler.test.ts" ```typescript hl_lines="2 4-9 13 18" - --8<-- "docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts" + --8<-- "examples/snippets/parameters/testingYourCodeFunctionsJestMock.ts" ``` === "handler.ts" ```typescript - --8<-- "docs/snippets/parameters/testingYourCodeFunctionsHandler.ts" + --8<-- "examples/snippets/parameters/testingYourCodeFunctionsHandler.ts" ``` With this pattern in place, you can customize the return values of the mocked function to test different scenarios without calling AWS APIs. @@ -450,24 +451,24 @@ A similar pattern can be applied also to any of the built-in provider classes - === "handler.test.ts" ```typescript hl_lines="2 5 8 19 26-27" - --8<-- "docs/snippets/parameters/testingYourCodeProvidersJestMock.ts" + --8<-- "examples/snippets/parameters/testingYourCodeProvidersJestMock.ts" ``` === "handler.ts" ```typescript - --8<-- "docs/snippets/parameters/testingYourCodeProvidersHandler.ts" + --8<-- "examples/snippets/parameters/testingYourCodeProvidersHandler.ts" ``` -In some other cases, you might want to mock the AWS SDK v3 client itself, in these cases we recommend using the [`aws-sdk-client-mock`](https://www.npmjs.com/package/aws-sdk-client-mock) and [`aws-sdk-client-mock-jest`](https://www.npmjs.com/package/aws-sdk-client-mock-jest) libraries. This is useful when you want to test how your code behaves when the AWS SDK v3 client throws an error or a specific response. +For when you want to mock the AWS SDK v3 client directly, we recommend using the [`aws-sdk-client-mock`](https://www.npmjs.com/package/aws-sdk-client-mock) and [`aws-sdk-client-mock-jest`](https://www.npmjs.com/package/aws-sdk-client-mock-jest) libraries. This is useful when you want to test how your code behaves when the AWS SDK v3 client throws an error or a specific response. === "handler.test.ts" ```typescript hl_lines="2-8 11 14 18 23-30" - --8<-- "docs/snippets/parameters/testingYourCodeClientJestMock.ts" + --8<-- "examples/snippets/parameters/testingYourCodeClientJestMock.ts" ``` === "handler.ts" ```typescript - --8<-- "docs/snippets/parameters/testingYourCodeClientHandler.ts" + --8<-- "examples/snippets/parameters/testingYourCodeClientHandler.ts" ``` ### Clearing cache @@ -478,5 +479,5 @@ Within your tests, you can use `clearCache` method available in [every provider] === "handler.test.ts" ```typescript hl_lines="1 9" - --8<-- "docs/snippets/parameters/testingYourCodeClearCache.ts" - ``` \ No newline at end of file + --8<-- "examples/snippets/parameters/testingYourCodeClearCache.ts" + ``` diff --git a/docs/utilities/parser.md b/docs/utilities/parser.md index 4947f86a2c..bc22b26932 100644 --- a/docs/utilities/parser.md +++ b/docs/utilities/parser.md @@ -4,9 +4,9 @@ descrition: Utility status: new --- -This utility provides data validation and parsing using [Zod](https://zod.dev){target="_blank"}. + -Zod is a TypeScript-first schema declaration and validation library. +This utility provides data validation and parsing using [Zod](https://zod.dev){target="_blank"}, a TypeScript-first schema declaration and validation library. ## Key features @@ -31,10 +31,10 @@ This utility supports Zod v3.x and above. You can define your schema using Zod: ```typescript title="schema.ts" ---8<-- "docs/snippets/parser/schema.ts" +--8<-- "examples/snippets/parser/schema.ts" ``` -This is a schema for `Order` object using Zod. +This is a schema for `Order` object using Zod. You can create complex schemas by using nested objects, arrays, unions, and other types, see [Zod documentation](https://zod.dev) for more details. ## Parse events @@ -43,22 +43,21 @@ You can parse inbound events using `parser` decorator, Middy.js middleware, or [ Both are also able to parse either an object or JSON string as an input. ???+ warning - The decorator and middleware will replace the event object with the parsed schema if successful. + The decorator and middleware will replace the event object with the parsed schema if successful. Be cautious when using multiple decorators that expect event to have a specific structure, the order of evaluation for decorators is from bottom to top. === "Middy middleware" ```typescript hl_lines="34" - --8<-- "docs/snippets/parser/middy.ts" - ``` + --8<-- "examples/snippets/parser/middy.ts" + ``` -=== "Decorator" +=== "Decorator" ```typescript hl_lines="25" - --8<-- "docs/snippets/parser/decorator.ts" + --8<-- "examples/snippets/parser/decorator.ts" ``` ## Built-in schemas - Parser comes with the following built-in schemas: | Model name | Description | @@ -94,18 +93,17 @@ You can extend every built-in schema to include your own schema, and yet have al === "handler.ts" ```typescript hl_lines="23-25 30 34" - --8<-- "docs/snippets/parser/extend.ts" + --8<-- "examples/snippets/parser/extend.ts" ``` 1. Extend built-in `EventBridgeSchema` with your own detail schema 2. Pass the extended schema to `parser` decorator or middy middleware 3. `event` is validated including your custom schema and now available in your handler - === "Example payload" ```json - --8<-- "docs/snippets/parser/examplePayload.json" + --8<-- "examples/snippets/parser/examplePayload.json" ``` ## Envelopes @@ -122,21 +120,19 @@ Here's an example of parsing a custom schema in an event coming from EventBridge === "Middy middleware" ```typescript hl_lines="5 36" - --8<-- "docs/snippets/parser/envelopeMiddy.ts" + --8<-- "examples/snippets/parser/envelopeMiddy.ts" ``` === "Decorator" ```typescript hl_lines="5 26 30" - --8<-- "docs/snippets/parser/envelopeDecorator.ts" + --8<-- "examples/snippets/parser/envelopeDecorator.ts" ``` 1. Pass `eventBridgeEnvelope` to `parser` decorator 2. `event` is parsed and replaced as `Order` object - - The envelopes are functions that take an event and the schema to parse, and return the result of the inner schema. -Depending on the envelope it can be something simple like extracting a key. +Depending on the envelope it can be something simple like extracting a key. We have also complex envelopes that parse the payload from a string, decode base64, uncompress gzip, etc. !!! tip "Envelopes vs schema extension" @@ -164,18 +160,17 @@ Parser comes with the following built-in envelopes: | **vpcLatticeEnvelope** | 1. Parses data using `VpcLatticeSchema`.
2. Parses `value` key using your schema and returns it. | | **vpcLatticeV2Envelope** | 1. Parses data using `VpcLatticeSchema`.
2. Parses `value` key using your schema and returns it. | - ## Safe parsing -If you want to parse the event without throwing an error, use the `safeParse` option. -The handler `event` object will be replaced with `ParsedResult`, for example `ParsedResult`, where `SqsEvent` is the original event and `Order` is the parsed schema. +If you want to parse the event without throwing an error, use the `safeParse` option. +The handler `event` object will be replaced with `ParsedResult`, for example `ParsedResult`, where `SqsEvent` is the original event and `Order` is the parsed schema. -The `ParsedResult` object will have `success`, `data`, or `error` and `originalEvent` fields, depending on the outcome. +The `ParsedResult` object will have `success`, `data`, or `error` and `originalEvent` fields, depending on the outcome. If the parsing is successful, the `data` field will contain the parsed event, otherwise you can access the `error` field and the `originalEvent` to handle the error and recover the original event. === "Middy middleware" ```typescript hl_lines="32 35 38 39 44" - --8<-- "docs/snippets/parser/safeParseMiddy.ts" + --8<-- "examples/snippets/parser/safeParseMiddy.ts" ``` 1. Use `safeParse` option to parse the event without throwing an error @@ -186,24 +181,22 @@ If the parsing is successful, the `data` field will contain the parsed event, ot === "Decorator" ```typescript hl_lines="29 35 37 40 41" - --8<-- "docs/snippets/parser/safeParseDecorator.ts" + --8<-- "examples/snippets/parser/safeParseDecorator.ts" ``` - + 1. Use `safeParse` option to parse the event without throwing an error 2. Check if the result is successful or not and handle the error accordingly 3. Use `data` to access the parsed event 4. Use `error` to handle the error message 5. Use `originalEvent` to get the original event and recover - ## Manual parsing You can use built-in envelopes and schemas to parse the incoming events manually, without using middy or decorator. - === "Manual parse" ```typescript hl_lines="28 31" - --8<-- "docs/snippets/parser/manual.ts" + --8<-- "examples/snippets/parser/manual.ts" ``` 1. Use `EventBridgeSchema` to parse the event, the `details` fields will be parsed as a generic record. @@ -211,7 +204,7 @@ You can use built-in envelopes and schemas to parse the incoming events manually === "Manual safeParse" ```typescript hl_lines="27 31" - --8<-- "docs/snippets/parser/manualSafeParse.ts" + --8<-- "examples/snippets/parser/manualSafeParse.ts" ``` 1. Use `safeParse` option to parse the event without throwing an error @@ -224,7 +217,7 @@ For example, you can use `refine` to validate a field or a combination of fields === "Custom validation" ```typescript hl_lines="13 18" - --8<-- "docs/snippets/parser/refine.ts" + --8<-- "examples/snippets/parser/refine.ts" ``` 1. validate a single field @@ -232,24 +225,24 @@ For example, you can use `refine` to validate a field or a combination of fields Zod provides a lot of other features and customization, see [Zod documentation](https://zod.dev) for more details. - ## Types ### Schema and Type inference + Use `z.infer` to extract the type of the schema, so you can use types during development and avoid type errors. === "Types" ```typescript hl_lines="22 25 30" - --8<-- "docs/snippets/parser/types.ts" + --8<-- "examples/snippets/parser/types.ts" ``` - + 1. Use `z.infer` to extract the type of the schema, also works for nested schemas 2. `event` is of type `Order` 3. infer types from deeply nested schemas -### Compatibility with @types/aws-lambda +### Compatibility with `@types/aws-lambda` -The package `@types/aws-lambda` is a popular project that contains type definitions for many AWS service event invocations. +The package `@types/aws-lambda` is a popular project that contains type definitions for many AWS service event invocations. Powertools parser utility also bring AWS Lambda event types based on the built-in schema definitions. -We recommend to use the types provided by the parser utility. If you encounter any issues or have any feedback, please [submit an issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose). +We recommend to use the types provided by the parser utility. If you encounter any issues or have any feedback, please [submit an issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose). diff --git a/docs/we_made_this.md b/docs/we_made_this.md index 2d2d9bc886..b3d8f6ee0f 100644 --- a/docs/we_made_this.md +++ b/docs/we_made_this.md @@ -3,6 +3,8 @@ title: We Made This (Community) description: Blog posts, tutorials, and videos about Powertools for AWS Lambda (TypeScript) created by the Powertools Community. --- + + This space is dedicated to highlight our awesome community content featuring Powertools πŸ™! !!! info "[Get your content featured here](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new?assignees=&labels=community-content&template=share_your_work.yml&title=%5BI+Made+This%5D%3A+%3CTITLE%3E){target="_blank"}!" @@ -15,7 +17,9 @@ Join us on [Discord](https://discord.gg/B8zZKbbyET){target="_blank"} to connect ## Blog posts + ### Lambda Powertools - great defaults for batteries that aren't quite (but should be) included + > **Author: [Mike Roberts](mailto:mike@symphonia.io) [:material-twitter:](https://twitter.com/mikebroberts){target="_blank"}** diff --git a/examples/app/CHANGELOG.md b/examples/app/CHANGELOG.md index 89123e041c..87536fa12a 100644 --- a/examples/app/CHANGELOG.md +++ b/examples/app/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package powertools-sample-app + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package powertools-sample-app diff --git a/examples/app/package.json b/examples/app/package.json index 2a42f380a0..e456e72a90 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -1,6 +1,6 @@ { "name": "powertools-sample-app", - "version": "2.1.0", + "version": "2.1.1", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -34,32 +34,32 @@ "devDependencies": { "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "20.12.7", - "aws-cdk": "^2.137.0", - "aws-cdk-lib": "^2.137.0", + "@types/node": "20.12.11", + "aws-cdk": "^2.141.0", + "aws-cdk-lib": "^2.141.0", "constructs": "^10.3.0", "jest": "^29.7.0", "source-map-support": "^0.5.21", "ts-jest": "^29.1.2", - "tsx": "^4.7.2", + "tsx": "^4.10.2", "typescript": "^5.4.5" }, "dependencies": { - "@aws-lambda-powertools/batch": "^2.1.0", - "@aws-lambda-powertools/idempotency": "^2.1.0", - "@aws-lambda-powertools/logger": "^2.1.0", - "@aws-lambda-powertools/metrics": "^2.1.0", - "@aws-lambda-powertools/parameters": "^2.1.0", - "@aws-lambda-powertools/tracer": "^2.1.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/lib-dynamodb": "^3.554.0", + "@aws-lambda-powertools/batch": "^2.1.1", + "@aws-lambda-powertools/idempotency": "^2.1.1", + "@aws-lambda-powertools/logger": "^2.1.1", + "@aws-lambda-powertools/metrics": "^2.1.1", + "@aws-lambda-powertools/parameters": "^2.1.1", + "@aws-lambda-powertools/tracer": "^2.1.1", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/lib-dynamodb": "^3.574.0", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "20.12.7", - "aws-cdk": "^2.137.0", + "@types/node": "20.12.11", + "aws-cdk": "^2.141.0", "constructs": "^10.3.0", - "esbuild": "^0.20.2", + "esbuild": "^0.21.1", "jest": "^29.7.0", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", diff --git a/docs/snippets/CHANGELOG.md b/examples/snippets/CHANGELOG.md similarity index 85% rename from docs/snippets/CHANGELOG.md rename to examples/snippets/CHANGELOG.md index 38c12e9452..af96d20d43 100644 --- a/docs/snippets/CHANGELOG.md +++ b/examples/snippets/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package code-snippets + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) diff --git a/docs/snippets/batch/accessLambdaContext.ts b/examples/snippets/batch/accessLambdaContext.ts similarity index 100% rename from docs/snippets/batch/accessLambdaContext.ts rename to examples/snippets/batch/accessLambdaContext.ts diff --git a/docs/snippets/batch/accessProcessedMessages.ts b/examples/snippets/batch/accessProcessedMessages.ts similarity index 100% rename from docs/snippets/batch/accessProcessedMessages.ts rename to examples/snippets/batch/accessProcessedMessages.ts diff --git a/docs/snippets/batch/advancedTracingRecordHandler.ts b/examples/snippets/batch/advancedTracingRecordHandler.ts similarity index 100% rename from docs/snippets/batch/advancedTracingRecordHandler.ts rename to examples/snippets/batch/advancedTracingRecordHandler.ts diff --git a/docs/snippets/batch/customPartialProcessor.ts b/examples/snippets/batch/customPartialProcessor.ts similarity index 100% rename from docs/snippets/batch/customPartialProcessor.ts rename to examples/snippets/batch/customPartialProcessor.ts diff --git a/docs/snippets/batch/extendingFailure.ts b/examples/snippets/batch/extendingFailure.ts similarity index 100% rename from docs/snippets/batch/extendingFailure.ts rename to examples/snippets/batch/extendingFailure.ts diff --git a/docs/snippets/batch/gettingStartedDynamoDBStreams.ts b/examples/snippets/batch/gettingStartedDynamoDBStreams.ts similarity index 100% rename from docs/snippets/batch/gettingStartedDynamoDBStreams.ts rename to examples/snippets/batch/gettingStartedDynamoDBStreams.ts diff --git a/docs/snippets/batch/gettingStartedErrorHandling.ts b/examples/snippets/batch/gettingStartedErrorHandling.ts similarity index 100% rename from docs/snippets/batch/gettingStartedErrorHandling.ts rename to examples/snippets/batch/gettingStartedErrorHandling.ts diff --git a/docs/snippets/batch/gettingStartedKinesis.ts b/examples/snippets/batch/gettingStartedKinesis.ts similarity index 100% rename from docs/snippets/batch/gettingStartedKinesis.ts rename to examples/snippets/batch/gettingStartedKinesis.ts diff --git a/docs/snippets/batch/gettingStartedSQS.ts b/examples/snippets/batch/gettingStartedSQS.ts similarity index 100% rename from docs/snippets/batch/gettingStartedSQS.ts rename to examples/snippets/batch/gettingStartedSQS.ts diff --git a/docs/snippets/batch/gettingStartedSQSFifo.ts b/examples/snippets/batch/gettingStartedSQSFifo.ts similarity index 100% rename from docs/snippets/batch/gettingStartedSQSFifo.ts rename to examples/snippets/batch/gettingStartedSQSFifo.ts diff --git a/docs/snippets/batch/samples/sampleDynamoDBStreamsEvent.json b/examples/snippets/batch/samples/sampleDynamoDBStreamsEvent.json similarity index 100% rename from docs/snippets/batch/samples/sampleDynamoDBStreamsEvent.json rename to examples/snippets/batch/samples/sampleDynamoDBStreamsEvent.json diff --git a/docs/snippets/batch/samples/sampleDynamoDBStreamsResponse.json b/examples/snippets/batch/samples/sampleDynamoDBStreamsResponse.json similarity index 100% rename from docs/snippets/batch/samples/sampleDynamoDBStreamsResponse.json rename to examples/snippets/batch/samples/sampleDynamoDBStreamsResponse.json diff --git a/docs/snippets/batch/samples/sampleKinesisEvent.json b/examples/snippets/batch/samples/sampleKinesisEvent.json similarity index 100% rename from docs/snippets/batch/samples/sampleKinesisEvent.json rename to examples/snippets/batch/samples/sampleKinesisEvent.json diff --git a/docs/snippets/batch/samples/sampleKinesisResponse.json b/examples/snippets/batch/samples/sampleKinesisResponse.json similarity index 100% rename from docs/snippets/batch/samples/sampleKinesisResponse.json rename to examples/snippets/batch/samples/sampleKinesisResponse.json diff --git a/docs/snippets/batch/samples/sampleSQSEvent.json b/examples/snippets/batch/samples/sampleSQSEvent.json similarity index 100% rename from docs/snippets/batch/samples/sampleSQSEvent.json rename to examples/snippets/batch/samples/sampleSQSEvent.json diff --git a/docs/snippets/batch/samples/sampleSQSResponse.json b/examples/snippets/batch/samples/sampleSQSResponse.json similarity index 100% rename from docs/snippets/batch/samples/sampleSQSResponse.json rename to examples/snippets/batch/samples/sampleSQSResponse.json diff --git a/docs/snippets/batch/templates/sam/dynamodb.yaml b/examples/snippets/batch/templates/sam/dynamodb.yaml similarity index 100% rename from docs/snippets/batch/templates/sam/dynamodb.yaml rename to examples/snippets/batch/templates/sam/dynamodb.yaml diff --git a/docs/snippets/batch/templates/sam/kinesis.yaml b/examples/snippets/batch/templates/sam/kinesis.yaml similarity index 100% rename from docs/snippets/batch/templates/sam/kinesis.yaml rename to examples/snippets/batch/templates/sam/kinesis.yaml diff --git a/docs/snippets/batch/templates/sam/sqs.yaml b/examples/snippets/batch/templates/sam/sqs.yaml similarity index 100% rename from docs/snippets/batch/templates/sam/sqs.yaml rename to examples/snippets/batch/templates/sam/sqs.yaml diff --git a/docs/snippets/batch/testingYourCode.ts b/examples/snippets/batch/testingYourCode.ts similarity index 100% rename from docs/snippets/batch/testingYourCode.ts rename to examples/snippets/batch/testingYourCode.ts diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts b/examples/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts similarity index 100% rename from docs/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts rename to examples/snippets/idempotency/advancedBringYourOwnPersistenceLayer.ts diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts b/examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts similarity index 94% rename from docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts rename to examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts index 3dedecf864..f639b63c3f 100644 --- a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts +++ b/examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerProvider.ts @@ -1,4 +1,4 @@ -import type { ProviderItem } from './types'; +import type { ProviderItem } from './types.js'; /** * This is a mock implementation of an SDK client for a generic key-value store. diff --git a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts b/examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts similarity index 99% rename from docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts rename to examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts index 2e8b5fa29e..59a5fa7a31 100644 --- a/docs/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts +++ b/examples/snippets/idempotency/advancedBringYourOwnPersistenceLayerUsage.ts @@ -5,7 +5,7 @@ import { IdempotencyConfig, makeIdempotent, } from '@aws-lambda-powertools/idempotency'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new CustomPersistenceLayer({ collectionName: 'powertools', diff --git a/docs/snippets/idempotency/customizePersistenceLayer.ts b/examples/snippets/idempotency/customizePersistenceLayer.ts similarity index 94% rename from docs/snippets/idempotency/customizePersistenceLayer.ts rename to examples/snippets/idempotency/customizePersistenceLayer.ts index 138da79b9c..658fd5e562 100644 --- a/docs/snippets/idempotency/customizePersistenceLayer.ts +++ b/examples/snippets/idempotency/customizePersistenceLayer.ts @@ -2,7 +2,7 @@ import { makeHandlerIdempotent } from '@aws-lambda-powertools/idempotency/middle import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import middy from '@middy/core'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/idempotentDecoratorBase.ts b/examples/snippets/idempotency/idempotentDecoratorBase.ts similarity index 94% rename from docs/snippets/idempotency/idempotentDecoratorBase.ts rename to examples/snippets/idempotency/idempotentDecoratorBase.ts index 409a34647f..b486fc6db7 100644 --- a/docs/snippets/idempotency/idempotentDecoratorBase.ts +++ b/examples/snippets/idempotency/idempotentDecoratorBase.ts @@ -5,7 +5,7 @@ import { idempotent, } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const dynamoDBPersistenceLayer = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/makeHandlerIdempotent.ts b/examples/snippets/idempotency/makeHandlerIdempotent.ts similarity index 99% rename from docs/snippets/idempotency/makeHandlerIdempotent.ts rename to examples/snippets/idempotency/makeHandlerIdempotent.ts index 3989b15cd6..3ec8f0ebfb 100644 --- a/docs/snippets/idempotency/makeHandlerIdempotent.ts +++ b/examples/snippets/idempotency/makeHandlerIdempotent.ts @@ -3,7 +3,7 @@ import { makeHandlerIdempotent } from '@aws-lambda-powertools/idempotency/middle import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import middy from '@middy/core'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/makeIdempotentAnyFunction.ts b/examples/snippets/idempotency/makeIdempotentAnyFunction.ts similarity index 99% rename from docs/snippets/idempotency/makeIdempotentAnyFunction.ts rename to examples/snippets/idempotency/makeIdempotentAnyFunction.ts index ead0ca408e..873952ea84 100644 --- a/docs/snippets/idempotency/makeIdempotentAnyFunction.ts +++ b/examples/snippets/idempotency/makeIdempotentAnyFunction.ts @@ -5,7 +5,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/makeIdempotentBase.ts b/examples/snippets/idempotency/makeIdempotentBase.ts similarity index 99% rename from docs/snippets/idempotency/makeIdempotentBase.ts rename to examples/snippets/idempotency/makeIdempotentBase.ts index 857fa8dfab..1aa8ae451a 100644 --- a/docs/snippets/idempotency/makeIdempotentBase.ts +++ b/examples/snippets/idempotency/makeIdempotentBase.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto'; import { makeIdempotent } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/makeIdempotentJmes.ts b/examples/snippets/idempotency/makeIdempotentJmes.ts similarity index 99% rename from docs/snippets/idempotency/makeIdempotentJmes.ts rename to examples/snippets/idempotency/makeIdempotentJmes.ts index ddad91ad45..9688bbf79a 100644 --- a/docs/snippets/idempotency/makeIdempotentJmes.ts +++ b/examples/snippets/idempotency/makeIdempotentJmes.ts @@ -5,7 +5,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/makeIdempotentLambdaContext.ts b/examples/snippets/idempotency/makeIdempotentLambdaContext.ts similarity index 99% rename from docs/snippets/idempotency/makeIdempotentLambdaContext.ts rename to examples/snippets/idempotency/makeIdempotentLambdaContext.ts index d90ee17eb1..da47482e22 100644 --- a/docs/snippets/idempotency/makeIdempotentLambdaContext.ts +++ b/examples/snippets/idempotency/makeIdempotentLambdaContext.ts @@ -5,7 +5,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/requiredIdempotencyKey.ts b/examples/snippets/idempotency/requiredIdempotencyKey.ts similarity index 100% rename from docs/snippets/idempotency/requiredIdempotencyKey.ts rename to examples/snippets/idempotency/requiredIdempotencyKey.ts diff --git a/docs/snippets/idempotency/samples/makeIdempotentJmes.json b/examples/snippets/idempotency/samples/makeIdempotentJmes.json similarity index 100% rename from docs/snippets/idempotency/samples/makeIdempotentJmes.json rename to examples/snippets/idempotency/samples/makeIdempotentJmes.json diff --git a/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json b/examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json similarity index 100% rename from docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json rename to examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeyError.json diff --git a/docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json b/examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json similarity index 100% rename from docs/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json rename to examples/snippets/idempotency/samples/workingWIthIdempotencyRequiredKeySuccess.json diff --git a/docs/snippets/idempotency/samples/workingWithBatch.json b/examples/snippets/idempotency/samples/workingWithBatch.json similarity index 100% rename from docs/snippets/idempotency/samples/workingWithBatch.json rename to examples/snippets/idempotency/samples/workingWithBatch.json diff --git a/docs/snippets/idempotency/templates/tableCdk.ts b/examples/snippets/idempotency/templates/tableCdk.ts similarity index 100% rename from docs/snippets/idempotency/templates/tableCdk.ts rename to examples/snippets/idempotency/templates/tableCdk.ts diff --git a/docs/snippets/idempotency/templates/tableSam.yaml b/examples/snippets/idempotency/templates/tableSam.yaml similarity index 100% rename from docs/snippets/idempotency/templates/tableSam.yaml rename to examples/snippets/idempotency/templates/tableSam.yaml diff --git a/docs/snippets/idempotency/templates/tableTerraform.tf b/examples/snippets/idempotency/templates/tableTerraform.tf similarity index 100% rename from docs/snippets/idempotency/templates/tableTerraform.tf rename to examples/snippets/idempotency/templates/tableTerraform.tf diff --git a/docs/snippets/idempotency/types.ts b/examples/snippets/idempotency/types.ts similarity index 100% rename from docs/snippets/idempotency/types.ts rename to examples/snippets/idempotency/types.ts diff --git a/docs/snippets/idempotency/workingWithBatch.ts b/examples/snippets/idempotency/workingWithBatch.ts similarity index 100% rename from docs/snippets/idempotency/workingWithBatch.ts rename to examples/snippets/idempotency/workingWithBatch.ts diff --git a/docs/snippets/idempotency/workingWithCompositeKey.ts b/examples/snippets/idempotency/workingWithCompositeKey.ts similarity index 93% rename from docs/snippets/idempotency/workingWithCompositeKey.ts rename to examples/snippets/idempotency/workingWithCompositeKey.ts index 8b13d122c7..d58c8689ca 100644 --- a/docs/snippets/idempotency/workingWithCompositeKey.ts +++ b/examples/snippets/idempotency/workingWithCompositeKey.ts @@ -2,7 +2,7 @@ import { makeHandlerIdempotent } from '@aws-lambda-powertools/idempotency/middle import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import middy from '@middy/core'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithCustomClient.ts b/examples/snippets/idempotency/workingWithCustomClient.ts similarity index 94% rename from docs/snippets/idempotency/workingWithCustomClient.ts rename to examples/snippets/idempotency/workingWithCustomClient.ts index 1577912f10..8f3720d46e 100644 --- a/docs/snippets/idempotency/workingWithCustomClient.ts +++ b/examples/snippets/idempotency/workingWithCustomClient.ts @@ -2,7 +2,7 @@ import { makeIdempotent } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const customDynamoDBClient = new DynamoDBClient({ endpoint: 'http://localhost:8000', diff --git a/docs/snippets/idempotency/workingWithCustomConfig.ts b/examples/snippets/idempotency/workingWithCustomConfig.ts similarity index 93% rename from docs/snippets/idempotency/workingWithCustomConfig.ts rename to examples/snippets/idempotency/workingWithCustomConfig.ts index 6507a1a32c..4138825d91 100644 --- a/docs/snippets/idempotency/workingWithCustomConfig.ts +++ b/examples/snippets/idempotency/workingWithCustomConfig.ts @@ -1,7 +1,7 @@ import { makeIdempotent } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithExceptions.ts b/examples/snippets/idempotency/workingWithExceptions.ts similarity index 99% rename from docs/snippets/idempotency/workingWithExceptions.ts rename to examples/snippets/idempotency/workingWithExceptions.ts index 60d957d893..badf618958 100644 --- a/docs/snippets/idempotency/workingWithExceptions.ts +++ b/examples/snippets/idempotency/workingWithExceptions.ts @@ -5,7 +5,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithIdempotencyRequiredKey.ts b/examples/snippets/idempotency/workingWithIdempotencyRequiredKey.ts similarity index 93% rename from docs/snippets/idempotency/workingWithIdempotencyRequiredKey.ts rename to examples/snippets/idempotency/workingWithIdempotencyRequiredKey.ts index 9642e6a630..ffdb58d7dd 100644 --- a/docs/snippets/idempotency/workingWithIdempotencyRequiredKey.ts +++ b/examples/snippets/idempotency/workingWithIdempotencyRequiredKey.ts @@ -4,7 +4,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithLocalCache.ts b/examples/snippets/idempotency/workingWithLocalCache.ts similarity index 94% rename from docs/snippets/idempotency/workingWithLocalCache.ts rename to examples/snippets/idempotency/workingWithLocalCache.ts index 8570f3f055..aa0cebd31c 100644 --- a/docs/snippets/idempotency/workingWithLocalCache.ts +++ b/examples/snippets/idempotency/workingWithLocalCache.ts @@ -3,7 +3,7 @@ import { makeHandlerIdempotent } from '@aws-lambda-powertools/idempotency/middle import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import middy from '@middy/core'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithPayloadValidation.ts b/examples/snippets/idempotency/workingWithPayloadValidation.ts similarity index 99% rename from docs/snippets/idempotency/workingWithPayloadValidation.ts rename to examples/snippets/idempotency/workingWithPayloadValidation.ts index eb582656a0..d253e5c5ee 100644 --- a/docs/snippets/idempotency/workingWithPayloadValidation.ts +++ b/examples/snippets/idempotency/workingWithPayloadValidation.ts @@ -5,7 +5,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response, SubscriptionResult } from './types'; +import type { Request, Response, SubscriptionResult } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/idempotency/workingWithRecordExpiration.ts b/examples/snippets/idempotency/workingWithRecordExpiration.ts similarity index 93% rename from docs/snippets/idempotency/workingWithRecordExpiration.ts rename to examples/snippets/idempotency/workingWithRecordExpiration.ts index 39fa7594eb..77e2296147 100644 --- a/docs/snippets/idempotency/workingWithRecordExpiration.ts +++ b/examples/snippets/idempotency/workingWithRecordExpiration.ts @@ -4,7 +4,7 @@ import { } from '@aws-lambda-powertools/idempotency'; import { DynamoDBPersistenceLayer } from '@aws-lambda-powertools/idempotency/dynamodb'; import type { Context } from 'aws-lambda'; -import type { Request, Response } from './types'; +import type { Request, Response } from './types.js'; const persistenceStore = new DynamoDBPersistenceLayer({ tableName: 'idempotencyTableName', diff --git a/docs/snippets/jmespath/extractDataFromBuiltinEnvelope.json b/examples/snippets/jmespath/extractDataFromBuiltinEnvelope.json similarity index 100% rename from docs/snippets/jmespath/extractDataFromBuiltinEnvelope.json rename to examples/snippets/jmespath/extractDataFromBuiltinEnvelope.json diff --git a/docs/snippets/jmespath/extractDataFromBuiltinEnvelope.ts b/examples/snippets/jmespath/extractDataFromBuiltinEnvelope.ts similarity index 100% rename from docs/snippets/jmespath/extractDataFromBuiltinEnvelope.ts rename to examples/snippets/jmespath/extractDataFromBuiltinEnvelope.ts diff --git a/docs/snippets/jmespath/extractDataFromEnvelope.json b/examples/snippets/jmespath/extractDataFromEnvelope.json similarity index 100% rename from docs/snippets/jmespath/extractDataFromEnvelope.json rename to examples/snippets/jmespath/extractDataFromEnvelope.json diff --git a/docs/snippets/jmespath/extractDataFromEnvelope.ts b/examples/snippets/jmespath/extractDataFromEnvelope.ts similarity index 100% rename from docs/snippets/jmespath/extractDataFromEnvelope.ts rename to examples/snippets/jmespath/extractDataFromEnvelope.ts diff --git a/docs/snippets/jmespath/powertoolsBase64GzipJmespath.ts b/examples/snippets/jmespath/powertoolsBase64GzipJmespath.ts similarity index 100% rename from docs/snippets/jmespath/powertoolsBase64GzipJmespath.ts rename to examples/snippets/jmespath/powertoolsBase64GzipJmespath.ts diff --git a/docs/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json b/examples/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json similarity index 100% rename from docs/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json rename to examples/snippets/jmespath/powertoolsBase64GzipJmespathPayload.json diff --git a/docs/snippets/jmespath/powertoolsBase64Jmespath.ts b/examples/snippets/jmespath/powertoolsBase64Jmespath.ts similarity index 100% rename from docs/snippets/jmespath/powertoolsBase64Jmespath.ts rename to examples/snippets/jmespath/powertoolsBase64Jmespath.ts diff --git a/docs/snippets/jmespath/powertoolsBase64JmespathPayload.json b/examples/snippets/jmespath/powertoolsBase64JmespathPayload.json similarity index 100% rename from docs/snippets/jmespath/powertoolsBase64JmespathPayload.json rename to examples/snippets/jmespath/powertoolsBase64JmespathPayload.json diff --git a/docs/snippets/jmespath/powertoolsCustomFunction.json b/examples/snippets/jmespath/powertoolsCustomFunction.json similarity index 100% rename from docs/snippets/jmespath/powertoolsCustomFunction.json rename to examples/snippets/jmespath/powertoolsCustomFunction.json diff --git a/docs/snippets/jmespath/powertoolsCustomFunction.ts b/examples/snippets/jmespath/powertoolsCustomFunction.ts similarity index 100% rename from docs/snippets/jmespath/powertoolsCustomFunction.ts rename to examples/snippets/jmespath/powertoolsCustomFunction.ts diff --git a/docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json b/examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json similarity index 100% rename from docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json rename to examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.json diff --git a/docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts b/examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts similarity index 100% rename from docs/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts rename to examples/snippets/jmespath/powertoolsJsonIdempotencyJmespath.ts diff --git a/docs/snippets/logger/appendKeys.ts b/examples/snippets/logger/appendKeys.ts similarity index 72% rename from docs/snippets/logger/appendKeys.ts rename to examples/snippets/logger/appendKeys.ts index ed779dab77..e99fc20cb2 100644 --- a/docs/snippets/logger/appendKeys.ts +++ b/examples/snippets/logger/appendKeys.ts @@ -13,17 +13,6 @@ const logger = new Logger({ }, }); -// OR add persistent log keys to an existing Logger instance with the appendKeys method: -// logger.appendKeys({ -// aws_account_id: '123456789012', -// aws_region: 'eu-west-1', -// logger: { -// name: '@aws-lambda-powertools/logger', -// version: '0.0.1', -// }, -// extra_key: "some-value" -// }); - export const handler = async ( _event: unknown, _context: unknown diff --git a/docs/snippets/logger/basicUsage.ts b/examples/snippets/logger/basicUsage.ts similarity index 100% rename from docs/snippets/logger/basicUsage.ts rename to examples/snippets/logger/basicUsage.ts diff --git a/docs/snippets/logger/bringYourOwnFormatterClass.ts b/examples/snippets/logger/bringYourOwnFormatterClass.ts similarity index 100% rename from docs/snippets/logger/bringYourOwnFormatterClass.ts rename to examples/snippets/logger/bringYourOwnFormatterClass.ts diff --git a/docs/snippets/logger/bringYourOwnFormatterHandler.ts b/examples/snippets/logger/bringYourOwnFormatterHandler.ts similarity index 100% rename from docs/snippets/logger/bringYourOwnFormatterHandler.ts rename to examples/snippets/logger/bringYourOwnFormatterHandler.ts diff --git a/docs/snippets/logger/clearStateDecorator.ts b/examples/snippets/logger/clearStateDecorator.ts similarity index 100% rename from docs/snippets/logger/clearStateDecorator.ts rename to examples/snippets/logger/clearStateDecorator.ts diff --git a/docs/snippets/logger/clearStateMiddy.ts b/examples/snippets/logger/clearStateMiddy.ts similarity index 100% rename from docs/snippets/logger/clearStateMiddy.ts rename to examples/snippets/logger/clearStateMiddy.ts diff --git a/docs/snippets/logger/createChild.ts b/examples/snippets/logger/createChild.ts similarity index 100% rename from docs/snippets/logger/createChild.ts rename to examples/snippets/logger/createChild.ts diff --git a/docs/snippets/logger/decorator.ts b/examples/snippets/logger/decorator.ts similarity index 100% rename from docs/snippets/logger/decorator.ts rename to examples/snippets/logger/decorator.ts diff --git a/docs/snippets/logger/eventDecorator.ts b/examples/snippets/logger/eventDecorator.ts similarity index 100% rename from docs/snippets/logger/eventDecorator.ts rename to examples/snippets/logger/eventDecorator.ts diff --git a/docs/snippets/logger/eventMiddy.ts b/examples/snippets/logger/eventMiddy.ts similarity index 100% rename from docs/snippets/logger/eventMiddy.ts rename to examples/snippets/logger/eventMiddy.ts diff --git a/docs/snippets/logger/extraData.ts b/examples/snippets/logger/extraData.ts similarity index 100% rename from docs/snippets/logger/extraData.ts rename to examples/snippets/logger/extraData.ts diff --git a/docs/snippets/logger/logError.ts b/examples/snippets/logger/logError.ts similarity index 100% rename from docs/snippets/logger/logError.ts rename to examples/snippets/logger/logError.ts diff --git a/docs/snippets/logger/logLevel.ts b/examples/snippets/logger/logLevel.ts similarity index 85% rename from docs/snippets/logger/logLevel.ts rename to examples/snippets/logger/logLevel.ts index 5a7ceacb65..7afbdb4e92 100644 --- a/docs/snippets/logger/logLevel.ts +++ b/examples/snippets/logger/logLevel.ts @@ -4,4 +4,3 @@ const logger = new Logger(); logger.getLevelName(); // returns "INFO" logger.setLogLevel('DEBUG'); -logger.level; // returns 8 diff --git a/docs/snippets/logger/logSampling.ts b/examples/snippets/logger/logSampling.ts similarity index 100% rename from docs/snippets/logger/logSampling.ts rename to examples/snippets/logger/logSampling.ts diff --git a/docs/snippets/logger/manual.ts b/examples/snippets/logger/manual.ts similarity index 100% rename from docs/snippets/logger/manual.ts rename to examples/snippets/logger/manual.ts diff --git a/docs/snippets/logger/middy.ts b/examples/snippets/logger/middy.ts similarity index 100% rename from docs/snippets/logger/middy.ts rename to examples/snippets/logger/middy.ts diff --git a/docs/snippets/logger/sam.ts b/examples/snippets/logger/sam.ts similarity index 100% rename from docs/snippets/logger/sam.ts rename to examples/snippets/logger/sam.ts diff --git a/docs/snippets/logger/unitTesting.ts b/examples/snippets/logger/unitTesting.ts similarity index 100% rename from docs/snippets/logger/unitTesting.ts rename to examples/snippets/logger/unitTesting.ts diff --git a/docs/snippets/metrics/addHighResolutionMetric.ts b/examples/snippets/metrics/addHighResolutionMetric.ts similarity index 100% rename from docs/snippets/metrics/addHighResolutionMetric.ts rename to examples/snippets/metrics/addHighResolutionMetric.ts diff --git a/docs/snippets/metrics/addMetadata.ts b/examples/snippets/metrics/addMetadata.ts similarity index 100% rename from docs/snippets/metrics/addMetadata.ts rename to examples/snippets/metrics/addMetadata.ts diff --git a/docs/snippets/metrics/basicUsage.ts b/examples/snippets/metrics/basicUsage.ts similarity index 100% rename from docs/snippets/metrics/basicUsage.ts rename to examples/snippets/metrics/basicUsage.ts diff --git a/docs/snippets/metrics/captureColdStartMetricDecorator.ts b/examples/snippets/metrics/captureColdStartMetricDecorator.ts similarity index 100% rename from docs/snippets/metrics/captureColdStartMetricDecorator.ts rename to examples/snippets/metrics/captureColdStartMetricDecorator.ts diff --git a/docs/snippets/metrics/captureColdStartMetricMiddy.ts b/examples/snippets/metrics/captureColdStartMetricMiddy.ts similarity index 100% rename from docs/snippets/metrics/captureColdStartMetricMiddy.ts rename to examples/snippets/metrics/captureColdStartMetricMiddy.ts diff --git a/docs/snippets/metrics/createMetrics.ts b/examples/snippets/metrics/createMetrics.ts similarity index 100% rename from docs/snippets/metrics/createMetrics.ts rename to examples/snippets/metrics/createMetrics.ts diff --git a/docs/snippets/metrics/customDimensions.ts b/examples/snippets/metrics/customDimensions.ts similarity index 100% rename from docs/snippets/metrics/customDimensions.ts rename to examples/snippets/metrics/customDimensions.ts diff --git a/docs/snippets/metrics/decorator.ts b/examples/snippets/metrics/decorator.ts similarity index 100% rename from docs/snippets/metrics/decorator.ts rename to examples/snippets/metrics/decorator.ts diff --git a/docs/snippets/metrics/defaultDimensions.ts b/examples/snippets/metrics/defaultDimensions.ts similarity index 100% rename from docs/snippets/metrics/defaultDimensions.ts rename to examples/snippets/metrics/defaultDimensions.ts diff --git a/docs/snippets/metrics/defaultDimensionsDecorator.ts b/examples/snippets/metrics/defaultDimensionsDecorator.ts similarity index 100% rename from docs/snippets/metrics/defaultDimensionsDecorator.ts rename to examples/snippets/metrics/defaultDimensionsDecorator.ts diff --git a/docs/snippets/metrics/defaultDimensionsMiddy.ts b/examples/snippets/metrics/defaultDimensionsMiddy.ts similarity index 100% rename from docs/snippets/metrics/defaultDimensionsMiddy.ts rename to examples/snippets/metrics/defaultDimensionsMiddy.ts diff --git a/docs/snippets/metrics/manual.ts b/examples/snippets/metrics/manual.ts similarity index 100% rename from docs/snippets/metrics/manual.ts rename to examples/snippets/metrics/manual.ts diff --git a/docs/snippets/metrics/middy.ts b/examples/snippets/metrics/middy.ts similarity index 100% rename from docs/snippets/metrics/middy.ts rename to examples/snippets/metrics/middy.ts diff --git a/docs/snippets/metrics/multiValueMetrics.ts b/examples/snippets/metrics/multiValueMetrics.ts similarity index 100% rename from docs/snippets/metrics/multiValueMetrics.ts rename to examples/snippets/metrics/multiValueMetrics.ts diff --git a/docs/snippets/metrics/sam.ts b/examples/snippets/metrics/sam.ts similarity index 100% rename from docs/snippets/metrics/sam.ts rename to examples/snippets/metrics/sam.ts diff --git a/docs/snippets/metrics/setDefaultDimensions.ts b/examples/snippets/metrics/setDefaultDimensions.ts similarity index 100% rename from docs/snippets/metrics/setDefaultDimensions.ts rename to examples/snippets/metrics/setDefaultDimensions.ts diff --git a/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts b/examples/snippets/metrics/singleMetricDifferentDimsDecorator.ts similarity index 100% rename from docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts rename to examples/snippets/metrics/singleMetricDifferentDimsDecorator.ts diff --git a/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts b/examples/snippets/metrics/singleMetricDifferentDimsMiddy.ts similarity index 100% rename from docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts rename to examples/snippets/metrics/singleMetricDifferentDimsMiddy.ts diff --git a/docs/snippets/metrics/throwOnEmptyMetrics.ts b/examples/snippets/metrics/throwOnEmptyMetrics.ts similarity index 100% rename from docs/snippets/metrics/throwOnEmptyMetrics.ts rename to examples/snippets/metrics/throwOnEmptyMetrics.ts diff --git a/docs/snippets/package.json b/examples/snippets/package.json similarity index 57% rename from docs/snippets/package.json rename to examples/snippets/package.json index 8fcd06e5ae..2051143c96 100644 --- a/docs/snippets/package.json +++ b/examples/snippets/package.json @@ -1,6 +1,6 @@ { - "name": "docs", - "version": "2.1.0", + "name": "code-snippets", + "version": "2.1.1", "description": "A collection code snippets for the Powertools for AWS Lambda (TypeScript) docs", "author": { "name": "Amazon Web Services", @@ -16,8 +16,8 @@ }, "lint-staged": { "*.{js,ts}": "npm run lint-fix", - "*.json": "prettier --write \"**/samples/*.json\" --single-quote false", - "*.yaml": "prettier --write \"**/templates/sam/*.yaml\"" + "*.json": "prettier --write --single-quote false", + "*.yaml": "prettier --write" }, "license": "MIT-0", "repository": { @@ -29,17 +29,24 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.554.0", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-secrets-manager": "^3.554.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/util-dynamodb": "^3.554.0", + "@aws-lambda-powertools/batch": "^2.1.1", + "@aws-lambda-powertools/idempotency": "^2.1.1", + "@aws-lambda-powertools/jmespath": "^2.1.1", + "@aws-lambda-powertools/logger": "^2.1.1", + "@aws-lambda-powertools/metrics": "^2.1.1", + "@aws-lambda-powertools/parameters": "^2.1.1", + "@aws-lambda-powertools/parser": "^2.1.1", + "@aws-lambda-powertools/tracer": "^2.1.1", + "@aws-sdk/client-appconfigdata": "^3.574.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-secrets-manager": "^3.574.0", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/util-dynamodb": "^3.574.0", "@middy/core": "^4.7.0", - "aws-sdk": "^2.1599.0", + "aws-sdk": "^2.1617.0", "aws-sdk-client-mock": "^4.0.0", "aws-sdk-client-mock-jest": "^4.0.0", - "axios": "^1.6.8", "hashi-vault-js": "^0.4.14", - "zod": "^3.22.4" + "zod": "^3.23.8" } } diff --git a/docs/snippets/parameters/adjustingCacheTTL.ts b/examples/snippets/parameters/adjustingCacheTTL.ts similarity index 100% rename from docs/snippets/parameters/adjustingCacheTTL.ts rename to examples/snippets/parameters/adjustingCacheTTL.ts diff --git a/docs/snippets/parameters/appConfigProvider.ts b/examples/snippets/parameters/appConfigProvider.ts similarity index 100% rename from docs/snippets/parameters/appConfigProvider.ts rename to examples/snippets/parameters/appConfigProvider.ts diff --git a/docs/snippets/parameters/appConfigProviderCustomClient.ts b/examples/snippets/parameters/appConfigProviderCustomClient.ts similarity index 100% rename from docs/snippets/parameters/appConfigProviderCustomClient.ts rename to examples/snippets/parameters/appConfigProviderCustomClient.ts diff --git a/docs/snippets/parameters/clientConfig.ts b/examples/snippets/parameters/clientConfig.ts similarity index 100% rename from docs/snippets/parameters/clientConfig.ts rename to examples/snippets/parameters/clientConfig.ts diff --git a/docs/snippets/parameters/customProviderVault.ts b/examples/snippets/parameters/customProviderVault.ts similarity index 98% rename from docs/snippets/parameters/customProviderVault.ts rename to examples/snippets/parameters/customProviderVault.ts index 91490f45a7..8e86c933dc 100644 --- a/docs/snippets/parameters/customProviderVault.ts +++ b/examples/snippets/parameters/customProviderVault.ts @@ -4,7 +4,7 @@ import Vault from 'hashi-vault-js'; import type { HashiCorpVaultProviderOptions, HashiCorpVaultGetOptions, -} from './customProviderVaultTypes'; +} from './customProviderVaultTypes.js'; class HashiCorpVaultProvider extends BaseProvider { public client: Vault; diff --git a/docs/snippets/parameters/customProviderVaultTypes.ts b/examples/snippets/parameters/customProviderVaultTypes.ts similarity index 100% rename from docs/snippets/parameters/customProviderVaultTypes.ts rename to examples/snippets/parameters/customProviderVaultTypes.ts diff --git a/docs/snippets/parameters/customProviderVaultUsage.ts b/examples/snippets/parameters/customProviderVaultUsage.ts similarity index 81% rename from docs/snippets/parameters/customProviderVaultUsage.ts rename to examples/snippets/parameters/customProviderVaultUsage.ts index 203724b69e..b86b51e2d8 100644 --- a/docs/snippets/parameters/customProviderVaultUsage.ts +++ b/examples/snippets/parameters/customProviderVaultUsage.ts @@ -1,4 +1,4 @@ -import { HashiCorpVaultProvider } from './customProviderVault'; +import { HashiCorpVaultProvider } from './customProviderVault.js'; const secretsProvider = new HashiCorpVaultProvider({ url: 'https://vault.example.com:8200/v1', diff --git a/docs/snippets/parameters/dynamoDBProvider.ts b/examples/snippets/parameters/dynamoDBProvider.ts similarity index 100% rename from docs/snippets/parameters/dynamoDBProvider.ts rename to examples/snippets/parameters/dynamoDBProvider.ts diff --git a/docs/snippets/parameters/dynamoDBProviderCustomClient.ts b/examples/snippets/parameters/dynamoDBProviderCustomClient.ts similarity index 100% rename from docs/snippets/parameters/dynamoDBProviderCustomClient.ts rename to examples/snippets/parameters/dynamoDBProviderCustomClient.ts diff --git a/docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts b/examples/snippets/parameters/dynamoDBProviderCustomizeTable.ts similarity index 100% rename from docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts rename to examples/snippets/parameters/dynamoDBProviderCustomizeTable.ts diff --git a/docs/snippets/parameters/dynamoDBProviderLocal.ts b/examples/snippets/parameters/dynamoDBProviderLocal.ts similarity index 100% rename from docs/snippets/parameters/dynamoDBProviderLocal.ts rename to examples/snippets/parameters/dynamoDBProviderLocal.ts diff --git a/docs/snippets/parameters/dynamoDBProviderMultiple.ts b/examples/snippets/parameters/dynamoDBProviderMultiple.ts similarity index 100% rename from docs/snippets/parameters/dynamoDBProviderMultiple.ts rename to examples/snippets/parameters/dynamoDBProviderMultiple.ts diff --git a/docs/snippets/parameters/forceFetch.ts b/examples/snippets/parameters/forceFetch.ts similarity index 100% rename from docs/snippets/parameters/forceFetch.ts rename to examples/snippets/parameters/forceFetch.ts diff --git a/docs/snippets/parameters/getAppConfig.ts b/examples/snippets/parameters/getAppConfig.ts similarity index 100% rename from docs/snippets/parameters/getAppConfig.ts rename to examples/snippets/parameters/getAppConfig.ts diff --git a/docs/snippets/parameters/getParameter.ts b/examples/snippets/parameters/getParameter.ts similarity index 100% rename from docs/snippets/parameters/getParameter.ts rename to examples/snippets/parameters/getParameter.ts diff --git a/docs/snippets/parameters/getParameters.ts b/examples/snippets/parameters/getParameters.ts similarity index 100% rename from docs/snippets/parameters/getParameters.ts rename to examples/snippets/parameters/getParameters.ts diff --git a/docs/snippets/parameters/getParametersByName.ts b/examples/snippets/parameters/getParametersByName.ts similarity index 100% rename from docs/snippets/parameters/getParametersByName.ts rename to examples/snippets/parameters/getParametersByName.ts diff --git a/docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts b/examples/snippets/parameters/getParametersByNameGracefulErrorHandling.ts similarity index 100% rename from docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts rename to examples/snippets/parameters/getParametersByNameGracefulErrorHandling.ts diff --git a/docs/snippets/parameters/getSecret.ts b/examples/snippets/parameters/getSecret.ts similarity index 100% rename from docs/snippets/parameters/getSecret.ts rename to examples/snippets/parameters/getSecret.ts diff --git a/docs/snippets/parameters/sdkOptions.ts b/examples/snippets/parameters/sdkOptions.ts similarity index 100% rename from docs/snippets/parameters/sdkOptions.ts rename to examples/snippets/parameters/sdkOptions.ts diff --git a/docs/snippets/parameters/secretsProvider.ts b/examples/snippets/parameters/secretsProvider.ts similarity index 100% rename from docs/snippets/parameters/secretsProvider.ts rename to examples/snippets/parameters/secretsProvider.ts diff --git a/docs/snippets/parameters/secretsProviderCustomClient.ts b/examples/snippets/parameters/secretsProviderCustomClient.ts similarity index 100% rename from docs/snippets/parameters/secretsProviderCustomClient.ts rename to examples/snippets/parameters/secretsProviderCustomClient.ts diff --git a/docs/snippets/parameters/ssmProvider.ts b/examples/snippets/parameters/ssmProvider.ts similarity index 100% rename from docs/snippets/parameters/ssmProvider.ts rename to examples/snippets/parameters/ssmProvider.ts diff --git a/docs/snippets/parameters/ssmProviderCustomClient.ts b/examples/snippets/parameters/ssmProviderCustomClient.ts similarity index 100% rename from docs/snippets/parameters/ssmProviderCustomClient.ts rename to examples/snippets/parameters/ssmProviderCustomClient.ts diff --git a/docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts b/examples/snippets/parameters/ssmProviderDecryptAndRecursive.ts similarity index 100% rename from docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts rename to examples/snippets/parameters/ssmProviderDecryptAndRecursive.ts diff --git a/docs/snippets/parameters/testingYourCodeClearCache.ts b/examples/snippets/parameters/testingYourCodeClearCache.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeClearCache.ts rename to examples/snippets/parameters/testingYourCodeClearCache.ts diff --git a/docs/snippets/parameters/testingYourCodeClientHandler.ts b/examples/snippets/parameters/testingYourCodeClientHandler.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeClientHandler.ts rename to examples/snippets/parameters/testingYourCodeClientHandler.ts diff --git a/docs/snippets/parameters/testingYourCodeClientJestMock.ts b/examples/snippets/parameters/testingYourCodeClientJestMock.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeClientJestMock.ts rename to examples/snippets/parameters/testingYourCodeClientJestMock.ts diff --git a/docs/snippets/parameters/testingYourCodeFunctionsHandler.ts b/examples/snippets/parameters/testingYourCodeFunctionsHandler.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeFunctionsHandler.ts rename to examples/snippets/parameters/testingYourCodeFunctionsHandler.ts diff --git a/docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts b/examples/snippets/parameters/testingYourCodeFunctionsJestMock.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts rename to examples/snippets/parameters/testingYourCodeFunctionsJestMock.ts diff --git a/docs/snippets/parameters/testingYourCodeProvidersHandler.ts b/examples/snippets/parameters/testingYourCodeProvidersHandler.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeProvidersHandler.ts rename to examples/snippets/parameters/testingYourCodeProvidersHandler.ts diff --git a/docs/snippets/parameters/testingYourCodeProvidersJestMock.ts b/examples/snippets/parameters/testingYourCodeProvidersJestMock.ts similarity index 100% rename from docs/snippets/parameters/testingYourCodeProvidersJestMock.ts rename to examples/snippets/parameters/testingYourCodeProvidersJestMock.ts diff --git a/docs/snippets/parameters/transform.ts b/examples/snippets/parameters/transform.ts similarity index 100% rename from docs/snippets/parameters/transform.ts rename to examples/snippets/parameters/transform.ts diff --git a/docs/snippets/parameters/transformAuto.ts b/examples/snippets/parameters/transformAuto.ts similarity index 100% rename from docs/snippets/parameters/transformAuto.ts rename to examples/snippets/parameters/transformAuto.ts diff --git a/docs/snippets/parameters/transformPartialFailures.ts b/examples/snippets/parameters/transformPartialFailures.ts similarity index 100% rename from docs/snippets/parameters/transformPartialFailures.ts rename to examples/snippets/parameters/transformPartialFailures.ts diff --git a/docs/snippets/parameters/transformProvider.ts b/examples/snippets/parameters/transformProvider.ts similarity index 100% rename from docs/snippets/parameters/transformProvider.ts rename to examples/snippets/parameters/transformProvider.ts diff --git a/docs/snippets/parser/decorator.ts b/examples/snippets/parser/decorator.ts similarity index 100% rename from docs/snippets/parser/decorator.ts rename to examples/snippets/parser/decorator.ts diff --git a/docs/snippets/parser/envelopeDecorator.ts b/examples/snippets/parser/envelopeDecorator.ts similarity index 100% rename from docs/snippets/parser/envelopeDecorator.ts rename to examples/snippets/parser/envelopeDecorator.ts diff --git a/docs/snippets/parser/envelopeMiddy.ts b/examples/snippets/parser/envelopeMiddy.ts similarity index 100% rename from docs/snippets/parser/envelopeMiddy.ts rename to examples/snippets/parser/envelopeMiddy.ts diff --git a/docs/snippets/parser/examplePayload.json b/examples/snippets/parser/examplePayload.json similarity index 100% rename from docs/snippets/parser/examplePayload.json rename to examples/snippets/parser/examplePayload.json diff --git a/docs/snippets/parser/extend.ts b/examples/snippets/parser/extend.ts similarity index 100% rename from docs/snippets/parser/extend.ts rename to examples/snippets/parser/extend.ts diff --git a/docs/snippets/parser/manual.ts b/examples/snippets/parser/manual.ts similarity index 100% rename from docs/snippets/parser/manual.ts rename to examples/snippets/parser/manual.ts diff --git a/docs/snippets/parser/manualSafeParse.ts b/examples/snippets/parser/manualSafeParse.ts similarity index 93% rename from docs/snippets/parser/manualSafeParse.ts rename to examples/snippets/parser/manualSafeParse.ts index 17106c1bda..ad371d3a4c 100644 --- a/docs/snippets/parser/manualSafeParse.ts +++ b/examples/snippets/parser/manualSafeParse.ts @@ -30,6 +30,6 @@ export const handler = async ( : logger.error('Event parsing failed', parsedEvent.error); const parsedEvenlope = EventBridgeEnvelope.safeParse(event, orderSchema); // (2)! parsedEvenlope.success - ? logger.info('Event envelope parsed successfully', parsedEvenlope.data) + ? logger.info('Event envelope parsed successfully') : logger.error('Event envelope parsing failed', parsedEvenlope.error); }; diff --git a/docs/snippets/parser/middy.ts b/examples/snippets/parser/middy.ts similarity index 100% rename from docs/snippets/parser/middy.ts rename to examples/snippets/parser/middy.ts diff --git a/docs/snippets/parser/refine.ts b/examples/snippets/parser/refine.ts similarity index 100% rename from docs/snippets/parser/refine.ts rename to examples/snippets/parser/refine.ts diff --git a/docs/snippets/parser/safeParseDecorator.ts b/examples/snippets/parser/safeParseDecorator.ts similarity index 100% rename from docs/snippets/parser/safeParseDecorator.ts rename to examples/snippets/parser/safeParseDecorator.ts diff --git a/docs/snippets/parser/safeParseMiddy.ts b/examples/snippets/parser/safeParseMiddy.ts similarity index 100% rename from docs/snippets/parser/safeParseMiddy.ts rename to examples/snippets/parser/safeParseMiddy.ts diff --git a/docs/snippets/parser/schema.ts b/examples/snippets/parser/schema.ts similarity index 100% rename from docs/snippets/parser/schema.ts rename to examples/snippets/parser/schema.ts diff --git a/docs/snippets/parser/types.ts b/examples/snippets/parser/types.ts similarity index 100% rename from docs/snippets/parser/types.ts rename to examples/snippets/parser/types.ts diff --git a/docs/snippets/tracer/accessRootTraceId.ts b/examples/snippets/tracer/accessRootTraceId.ts similarity index 81% rename from docs/snippets/tracer/accessRootTraceId.ts rename to examples/snippets/tracer/accessRootTraceId.ts index 2491f7530f..54139f8f1c 100644 --- a/docs/snippets/tracer/accessRootTraceId.ts +++ b/examples/snippets/tracer/accessRootTraceId.ts @@ -2,11 +2,9 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async ( - _event: unknown, - _context: unknown -): Promise => { +export const handler = async (): Promise => { try { + throw new Error('Something went wrong'); } catch (err) { const rootTraceId = tracer.getRootXrayTraceId(); diff --git a/docs/snippets/tracer/basicUsage.ts b/examples/snippets/tracer/basicUsage.ts similarity index 100% rename from docs/snippets/tracer/basicUsage.ts rename to examples/snippets/tracer/basicUsage.ts diff --git a/docs/snippets/tracer/captureAWS.ts b/examples/snippets/tracer/captureAWS.ts similarity index 100% rename from docs/snippets/tracer/captureAWS.ts rename to examples/snippets/tracer/captureAWS.ts diff --git a/docs/snippets/tracer/captureAWSAll.ts b/examples/snippets/tracer/captureAWSAll.ts similarity index 100% rename from docs/snippets/tracer/captureAWSAll.ts rename to examples/snippets/tracer/captureAWSAll.ts diff --git a/docs/snippets/tracer/captureAWSv3.ts b/examples/snippets/tracer/captureAWSv3.ts similarity index 100% rename from docs/snippets/tracer/captureAWSv3.ts rename to examples/snippets/tracer/captureAWSv3.ts diff --git a/examples/snippets/tracer/captureHTTP.ts b/examples/snippets/tracer/captureHTTP.ts new file mode 100644 index 0000000000..f0d3c93321 --- /dev/null +++ b/examples/snippets/tracer/captureHTTP.ts @@ -0,0 +1,11 @@ +import { Tracer } from '@aws-lambda-powertools/tracer'; +import { captureLambdaHandler } from '@aws-lambda-powertools/tracer/middleware'; +import middy from '@middy/core'; + +const tracer = new Tracer({ serviceName: 'serverlessAirline' }); + +export const handler = middy( + async (_event: unknown, _context: unknown): Promise => { + await fetch('https://httpbin.org/status/200'); + } +).use(captureLambdaHandler(tracer)); diff --git a/docs/snippets/tracer/captureMethodDecorator.ts b/examples/snippets/tracer/captureMethodDecorator.ts similarity index 100% rename from docs/snippets/tracer/captureMethodDecorator.ts rename to examples/snippets/tracer/captureMethodDecorator.ts diff --git a/docs/snippets/tracer/captureMethodManual.ts b/examples/snippets/tracer/captureMethodManual.ts similarity index 100% rename from docs/snippets/tracer/captureMethodManual.ts rename to examples/snippets/tracer/captureMethodManual.ts diff --git a/docs/snippets/tracer/decorator.ts b/examples/snippets/tracer/decorator.ts similarity index 100% rename from docs/snippets/tracer/decorator.ts rename to examples/snippets/tracer/decorator.ts diff --git a/docs/snippets/tracer/disableCaptureResponseHandler.ts b/examples/snippets/tracer/disableCaptureResponseHandler.ts similarity index 100% rename from docs/snippets/tracer/disableCaptureResponseHandler.ts rename to examples/snippets/tracer/disableCaptureResponseHandler.ts diff --git a/docs/snippets/tracer/disableCaptureResponseMethod.ts b/examples/snippets/tracer/disableCaptureResponseMethod.ts similarity index 100% rename from docs/snippets/tracer/disableCaptureResponseMethod.ts rename to examples/snippets/tracer/disableCaptureResponseMethod.ts diff --git a/docs/snippets/tracer/disableCaptureResponseMiddy.ts b/examples/snippets/tracer/disableCaptureResponseMiddy.ts similarity index 100% rename from docs/snippets/tracer/disableCaptureResponseMiddy.ts rename to examples/snippets/tracer/disableCaptureResponseMiddy.ts diff --git a/docs/snippets/tracer/escapeHatch.ts b/examples/snippets/tracer/escapeHatch.ts similarity index 100% rename from docs/snippets/tracer/escapeHatch.ts rename to examples/snippets/tracer/escapeHatch.ts diff --git a/docs/snippets/tracer/manual.ts b/examples/snippets/tracer/manual.ts similarity index 100% rename from docs/snippets/tracer/manual.ts rename to examples/snippets/tracer/manual.ts diff --git a/docs/snippets/tracer/middy.ts b/examples/snippets/tracer/middy.ts similarity index 100% rename from docs/snippets/tracer/middy.ts rename to examples/snippets/tracer/middy.ts diff --git a/docs/snippets/tracer/putAnnotation.ts b/examples/snippets/tracer/putAnnotation.ts similarity index 100% rename from docs/snippets/tracer/putAnnotation.ts rename to examples/snippets/tracer/putAnnotation.ts diff --git a/docs/snippets/tracer/putMetadata.ts b/examples/snippets/tracer/putMetadata.ts similarity index 100% rename from docs/snippets/tracer/putMetadata.ts rename to examples/snippets/tracer/putMetadata.ts diff --git a/docs/snippets/tracer/sam.ts b/examples/snippets/tracer/sam.ts similarity index 100% rename from docs/snippets/tracer/sam.ts rename to examples/snippets/tracer/sam.ts diff --git a/examples/snippets/tsconfig.json b/examples/snippets/tsconfig.json new file mode 100644 index 0000000000..f75f690f30 --- /dev/null +++ b/examples/snippets/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "noEmit": true + } +} diff --git a/layers/CHANGELOG.md b/layers/CHANGELOG.md index 68a75b0eb3..fbb005d80b 100644 --- a/layers/CHANGELOG.md +++ b/layers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package layers + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) diff --git a/layers/README.md b/layers/README.md index 128996a4d4..774fb4ff5e 100644 --- a/layers/README.md +++ b/layers/README.md @@ -2,7 +2,7 @@ This CDK app is meant to be used to publish Powertools for AWS Lambda (TypeScript) Lambda Layer. It is composed of a single stack deploying the Layer into the target account. -# Usage +## Usage ```sh npm ci @@ -10,19 +10,20 @@ npm run cdk deploy ``` By default it will package the layer with the latest version publicly available but you can force the public version to use with `PowerToolsPackageVersion` context variable: + ```sh npm run cdk deploy -- --context PowerToolsPackageVersion='0.9.0' ``` -# Tests +## Tests -## Units +### Units ```sh npm run test ``` -## E2E +### E2E This will deploy and destroy several stacks in your AWS Account @@ -30,24 +31,30 @@ This will deploy and destroy several stacks in your AWS Account npm run test:e2e ``` -PS: You can force +PS: You can force + * the lambda runtime to test with the RUNTIME env variable * the Powertools for AWS Lambda (TypeScript) version with VERSION env variable -```sh + +```sh RUNTIME=node12.x VERSION=0.9.0 npm run test:e2e ``` -# How to add new region +## How to add new region * Activate new region in your TEST and PROD accounts * Bootstrap a CDKToolkit stack in the new region + ```shell cdk bootstrap aws://AWS_ACCOUNT/NEW_REGION ``` + * Deploy the first layer version to the new region, make sure to set the NEW_REGION in your AWS CLI configuration correctly, otherwise you will deploy to the wrong region + ```shell npm run cdk -w layers -- deploy --app cdk.out --context region=NEW_REGION 'LayerPublisherStack' --require-approval never --verbose ``` + * Run the bumper script to bring all layers to the same version across all regions * Add new region to the worklflow in `./github/workflows/reusable_deploy_layer_stack.yml` -* Document new region in `docs/index.md` \ No newline at end of file +* Document new region in `docs/index.md` diff --git a/layers/package.json b/layers/package.json index 77b45b34f3..46d306e102 100644 --- a/layers/package.json +++ b/layers/package.json @@ -1,6 +1,6 @@ { "name": "layers", - "version": "2.1.0", + "version": "2.1.1", "bin": { "layer": "bin/layers.js" }, @@ -39,8 +39,8 @@ "source-map-support": "^0.5.21" }, "dependencies": { - "aws-cdk": "^2.137.0", - "aws-cdk-lib": "^2.137.0", - "esbuild": "^0.20.2" + "aws-cdk": "^2.141.0", + "aws-cdk-lib": "^2.141.0", + "esbuild": "^0.21.1" } } diff --git a/lerna.json b/lerna.json index 84424e6cab..1e44575869 100644 --- a/lerna.json +++ b/lerna.json @@ -12,9 +12,9 @@ "packages/parser", "examples/app", "layers", - "docs/snippets" + "examples/snippets" ], - "version": "2.1.0", + "version": "2.1.1", "npmClient": "npm", "message": "chore(release): %s [skip ci]" } diff --git a/mkdocs.yml b/mkdocs.yml index ebc9137256..132a730cc1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,6 +11,7 @@ nav: - API reference: api/" target="_blank - Upgrade guide: upgrade.md - We Made This (Community): we_made_this.md + - Workshop πŸ†•: https://s12d.com/powertools-for-aws-lambda-workshop" target="_blank - Roadmap: roadmap.md - Features: - core/tracer.md diff --git a/package-lock.json b/package-lock.json index 494a78121a..716af454e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "packages/batch", "packages/testing", "packages/parser", - "docs/snippets", + "examples/snippets", "layers", "examples/app" ], @@ -27,7 +27,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "^20.12.7", + "@types/node": "^20.12.11", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.57.0", @@ -39,8 +39,9 @@ "husky": "^9.0.11", "jest": "^29.7.0", "jest-runner-groups": "^2.2.0", - "lerna": "^8.1.2", + "lerna": "^8.1.3", "lint-staged": "^15.2.2", + "markdownlint-cli2": "^0.13.0", "prettier": "^3.2.5", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", @@ -52,45 +53,32 @@ "node": ">=16" } }, - "docs/snippets": { - "name": "docs", + "app/snippets": { + "name": "code-snippets", "version": "2.1.0", - "license": "MIT-0", - "devDependencies": { - "@aws-sdk/client-appconfigdata": "^3.554.0", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-secrets-manager": "^3.554.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/util-dynamodb": "^3.554.0", - "@middy/core": "^4.7.0", - "aws-sdk": "^2.1599.0", - "aws-sdk-client-mock": "^4.0.0", - "aws-sdk-client-mock-jest": "^4.0.0", - "axios": "^1.6.8", - "hashi-vault-js": "^0.4.14", - "zod": "^3.22.4" - } + "extraneous": true, + "license": "MIT-0" }, "examples/app": { "name": "powertools-sample-app", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/batch": "^2.1.0", - "@aws-lambda-powertools/idempotency": "^2.1.0", - "@aws-lambda-powertools/logger": "^2.1.0", - "@aws-lambda-powertools/metrics": "^2.1.0", - "@aws-lambda-powertools/parameters": "^2.1.0", - "@aws-lambda-powertools/tracer": "^2.1.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/lib-dynamodb": "^3.554.0", + "@aws-lambda-powertools/batch": "^2.1.1", + "@aws-lambda-powertools/idempotency": "^2.1.1", + "@aws-lambda-powertools/logger": "^2.1.1", + "@aws-lambda-powertools/metrics": "^2.1.1", + "@aws-lambda-powertools/parameters": "^2.1.1", + "@aws-lambda-powertools/tracer": "^2.1.1", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/lib-dynamodb": "^3.574.0", "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "20.12.7", - "aws-cdk": "^2.137.0", + "@types/node": "20.12.11", + "aws-cdk": "^2.141.0", "constructs": "^10.3.0", - "esbuild": "^0.20.2", + "esbuild": "^0.21.1", "jest": "^29.7.0", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", @@ -99,24 +87,50 @@ "devDependencies": { "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "20.12.7", - "aws-cdk": "^2.137.0", - "aws-cdk-lib": "^2.137.0", + "@types/node": "20.12.11", + "aws-cdk": "^2.141.0", + "aws-cdk-lib": "^2.141.0", "constructs": "^10.3.0", "jest": "^29.7.0", "source-map-support": "^0.5.21", "ts-jest": "^29.1.2", - "tsx": "^4.7.2", + "tsx": "^4.10.2", "typescript": "^5.4.5" } }, + "examples/snippets": { + "name": "code-snippets", + "version": "2.1.1", + "license": "MIT-0", + "devDependencies": { + "@aws-lambda-powertools/batch": "^2.1.1", + "@aws-lambda-powertools/idempotency": "^2.1.1", + "@aws-lambda-powertools/jmespath": "^2.1.1", + "@aws-lambda-powertools/logger": "^2.1.1", + "@aws-lambda-powertools/metrics": "^2.1.1", + "@aws-lambda-powertools/parameters": "^2.1.1", + "@aws-lambda-powertools/parser": "^2.1.1", + "@aws-lambda-powertools/tracer": "^2.1.1", + "@aws-sdk/client-appconfigdata": "^3.574.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-secrets-manager": "^3.574.0", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/util-dynamodb": "^3.574.0", + "@middy/core": "^4.7.0", + "aws-sdk": "^2.1617.0", + "aws-sdk-client-mock": "^4.0.0", + "aws-sdk-client-mock-jest": "^4.0.0", + "hashi-vault-js": "^0.4.14", + "zod": "^3.23.8" + } + }, "layers": { - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "aws-cdk": "^2.137.0", - "aws-cdk-lib": "^2.137.0", - "esbuild": "^0.20.2" + "aws-cdk": "^2.141.0", + "aws-cdk-lib": "^2.141.0", + "esbuild": "^0.21.1" }, "bin": { "layer": "bin/layers.js" @@ -172,9 +186,9 @@ "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" }, "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==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.3.tgz", + "integrity": "sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg==" }, "node_modules/@aws-cdk/cli-lib-alpha": { "version": "2.121.1-alpha.0", @@ -316,25 +330,26 @@ "link": true }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.554.0.tgz", - "integrity": "sha512-8EuPZ8r9eBfUv7NTE8c9e0MFfL49XY7sjd8hoFpxeDBdMcrYRbQRORiV36Hl8eh6nkeqebCQnbq5jvhglZ1KjA==", + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.574.0.tgz", + "integrity": "sha512-Q3btqlJRDFP4BbUed/uSMFs1VrFphctOcTfLyczo15QhMBW8dfto5E9FEqYZMJKUemZ0yMxfxGelEHywP20VTA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -364,35 +379,34 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.554.0.tgz", - "integrity": "sha512-8MqmsbR+UcF+qQQWFV/wCr1Q7YFg1r0v6rg5fxBRJigmc3Xp63m5L3zL3/+Cdf7qkDbXw6BGdk+yclfoPRN1RQ==", + "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-compression": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.1", "@smithy/middleware-retry": "^2.3.1", @@ -413,33 +427,32 @@ "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.554.0.tgz", - "integrity": "sha512-w1Bepf3r8tTSymBiXqDHfzDc7J9b0sRbQeRtFUmCI9HFiQkLhDigGBkorNkJohCzwO1Pxh6Z4/a0mWZ7d8f1Zw==", + "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-endpoint-discovery": "3.535.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -465,41 +478,66 @@ "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-appconfigdata/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-lambda": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.554.0.tgz", - "integrity": "sha512-KNUAAZKcsCdUOB2/rbWpc96jsSM/ahw3hK5/Ru4RTLfNP27GitxqF0v+mzrVk9lTuj2ChJ3JDV+UfdGsqvZgpw==", + "node_modules/@aws-sdk/client-appconfigdata/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.574.0.tgz", + "integrity": "sha512-yvwjsTNPZtZd/VEhvQdePsEydHtFKAuihVaS21T7Z8mJkVZFld1E0P9XRWmJBTrPu7DeGgNoBihsyhtPHnn2fA==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", - "@smithy/eventstream-serde-browser": "^2.2.0", - "@smithy/eventstream-serde-config-resolver": "^2.2.0", - "@smithy/eventstream-serde-node": "^2.2.0", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-compression": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.1", "@smithy/middleware-retry": "^2.3.1", @@ -519,35 +557,34 @@ "@smithy/util-endpoints": "^1.2.0", "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", - "@smithy/util-stream": "^2.2.0", "@smithy/util-utf8": "^2.3.0", "@smithy/util-waiter": "^2.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.554.0.tgz", - "integrity": "sha512-Uk9rdO6nP1Ayg6maOCD7ZI7QlRzDCGoFQtp/hxBt0uGro5C47Rpg5N6Wn3Lblk/rGnDcq+nuX24WXo83jOi/HQ==", + "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -573,32 +610,32 @@ "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.554.0.tgz", - "integrity": "sha512-zqc5Pyb0agJ3erp1x2ILoll7mG6atQTD2AFWA5UBFhNa7R0+w+TLvSNnX813X4bv4OySqBYYEtAokoTvV66UZw==", + "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -624,31 +661,60 @@ "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.554.0.tgz", - "integrity": "sha512-yj6CgIxCT3UwMumEO481KH4QvwArkAPzD7Xvwe1QKgJATc9bKNEo/FxV8LfnWIJ7nOtMDxbNxYLMXH/Fs1qGaQ==", + "node_modules/@aws-sdk/client-cloudwatch/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.574.0.tgz", + "integrity": "sha512-393wAq4qbMF4nBIav2FXkZF+X/6+TZrLBJrIlIiH1TrVAZkaQWzsqBjDRjYZISawOZ0Cuklm12CotIU/xNUaTQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-endpoint-discovery": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -674,30 +740,33 @@ "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" + "@smithy/util-waiter": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.554.0.tgz", - "integrity": "sha512-M86rkiRqbZBF5VyfTQ/vttry9VSoQkZ1oCqYF+SAGlXmD0Of8587yRSj2M4rYe0Uj7nRQIfSnhDYp1UzsZeRfQ==", + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -726,29 +795,28 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.554.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.554.0.tgz", - "integrity": "sha512-EhaA6T0M0DNg5M8TCF1a7XJI5D/ZxAF3dgVIchyF98iNzjYgl/7U8K6hJay2A11aFvVu70g46xYMpz3Meky4wQ==", + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", @@ -776,35 +844,60 @@ "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, "engines": { "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.554.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-xray": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.554.0.tgz", - "integrity": "sha512-9wtvYKS+5XCG6jHEGVNsDZzpmOBCiLj+scpblcywhcKooi6vFj4LafbM2SyAufTKhUKksio90Ka16yHQf2MX9g==", - "dev": true, + "node_modules/@aws-sdk/client-lambda": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.574.0.tgz", + "integrity": "sha512-l0+v9FxV9RAtN6vGfCRV6uq2dw46DN8hYudg/9sffPw5wPawfwGfg3iwxCp18lYn6Hddn5HEzaBVZW+fvDBcuw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/core": "3.554.0", - "@aws-sdk/credential-provider-node": "3.554.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", + "@smithy/eventstream-serde-browser": "^2.2.0", + "@smithy/eventstream-serde-config-resolver": "^2.2.0", + "@smithy/eventstream-serde-node": "^2.2.0", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", @@ -827,260 +920,1161 @@ "@smithy/util-endpoints": "^1.2.0", "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", + "@smithy/util-stream": "^2.2.0", "@smithy/util-utf8": "^2.3.0", + "@smithy/util-waiter": "^2.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/core": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.554.0.tgz", - "integrity": "sha512-JrG7ToTLeNf+/S3IiCUPVw9jEDB0DXl5ho8n/HwOa946mv+QyCepCuV2U/8f/1KAX0mD8Ufm/E4/cbCbFHgbSg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.2.1", "@smithy/smithy-client": "^2.5.1", "@smithy/types": "^2.12.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", - "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.552.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz", - "integrity": "sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", "@smithy/node-http-handler": "^2.5.0", - "@smithy/property-provider": "^2.2.0", "@smithy/protocol-http": "^3.3.0", "@smithy/smithy-client": "^2.5.1", "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.554.0.tgz", - "integrity": "sha512-BQenhg43S6TMJHxrdjDVdVF+HH5tA1op9ZYLyJrvV5nn7CCO4kyAkkOuSAv1NkL+RZsIkW0/vHTXwQOQw3cUsg==", - "dependencies": { - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.554.0", - "@aws-sdk/credential-provider-web-identity": "3.554.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.554.0.tgz", - "integrity": "sha512-poX/+2OE3oxqp4f5MiaJh251p8l+bzcFwgcDBwz0e2rcpvMSYl9jw4AvGnCiG2bmf9yhNJdftBiS1A+KjxV0qA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-http": "3.552.0", - "@aws-sdk/credential-provider-ini": "3.554.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.554.0", - "@aws-sdk/credential-provider-web-identity": "3.554.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", - "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.554.0.tgz", - "integrity": "sha512-8QPpwBA31i/fZ7lDZJC4FA9EdxLg5SJ8sPB2qLSjp5UTGTYL2HRl0Eznkb7DXyp/wImsR/HFR1NxuFCCVotLCg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "@aws-sdk/client-sso": "3.554.0", - "@aws-sdk/token-providers": "3.554.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.554.0.tgz", - "integrity": "sha512-HN54DzLjepw5ZWSF9ycGevhFTyg6pjLuLKy5Y8t/f1jFDComzYdGEDe0cdV9YO653W3+PQwZZGz09YVygGYBLg==", + "node_modules/@aws-sdk/client-secrets-manager": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.574.0.tgz", + "integrity": "sha512-EhHHUkG7WX1ltBgjwn4eV2BW/vDSDWbEvSkrTktEukXI59lMHD2nPOzdb9Q9/EutBGnOi4g2wEEmye1N0LWg+Q==", + "dev": true, "dependencies": { - "@aws-sdk/client-sts": "3.554.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.574.0.tgz", + "integrity": "sha512-OeAX7M5PScxkUfAVmCE5ji/EuVUxbPgupsSTSUmfUSzncRHI3pd2DtA1W6q9Z3RA9il5XAVSDzEzDDN6ZFCq/A==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "@smithy/util-waiter": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz", + "integrity": "sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.572.0.tgz", + "integrity": "sha512-S6C/S6xYesDakEuzYvlY1DMMKLtKQxdbbygq3hfeG2R0jUt9KpRLsQXK8qrBuVCKa3WcnjN/30hp4g/iUWFU/w==", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.572.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.572.0.tgz", + "integrity": "sha512-jCQuH2qkbWoSY4wckLSfzf3OPh7zc7ZckEbIGGVUQar/JVff6EIbpQ+uNG29DDEOpdPPd8rrJsVuUlA/nvJdXA==", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.572.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-xray": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.574.0.tgz", + "integrity": "sha512-UqDKM8C4GFgnp7DGtwau/+XvH7XoAiP1T8UAByKigBYc5ky7fg2Ga9r2I8ZqUXwQ1Uhy7bvq6JpHjijjnPdySA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz", + "integrity": "sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sts": { + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz", + "integrity": "sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@aws-sdk/core": "3.572.0", + "@aws-sdk/credential-provider-node": "3.572.0", + "@aws-sdk/middleware-host-header": "3.567.0", + "@aws-sdk/middleware-logger": "3.568.0", + "@aws-sdk/middleware-recursion-detection": "3.567.0", + "@aws-sdk/middleware-user-agent": "3.572.0", + "@aws-sdk/region-config-resolver": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", + "@aws-sdk/util-user-agent-browser": "3.567.0", + "@aws-sdk/util-user-agent-node": "3.568.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-xray/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-xray/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.572.0.tgz", + "integrity": "sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg==", + "dependencies": { + "@smithy/core": "^1.4.2", + "@smithy/protocol-http": "^3.3.0", + "@smithy/signature-v4": "^2.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz", + "integrity": "sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g==", + "dependencies": { + "@aws-sdk/types": "3.567.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz", + "integrity": "sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w==", + "dependencies": { + "@aws-sdk/types": "3.567.0", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz", + "integrity": "sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.568.0", + "@aws-sdk/credential-provider-process": "3.572.0", + "@aws-sdk/credential-provider-sso": "3.572.0", + "@aws-sdk/credential-provider-web-identity": "3.568.0", + "@aws-sdk/types": "3.567.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "3.572.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz", + "integrity": "sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.568.0", + "@aws-sdk/credential-provider-http": "3.568.0", + "@aws-sdk/credential-provider-ini": "3.572.0", + "@aws-sdk/credential-provider-process": "3.572.0", + "@aws-sdk/credential-provider-sso": "3.572.0", + "@aws-sdk/credential-provider-web-identity": "3.568.0", + "@aws-sdk/types": "3.567.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz", + "integrity": "sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw==", + "dependencies": { + "@aws-sdk/types": "3.567.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz", + "integrity": "sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow==", + "dependencies": { + "@aws-sdk/client-sso": "3.572.0", + "@aws-sdk/token-providers": "3.572.0", + "@aws-sdk/types": "3.567.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz", + "integrity": "sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw==", + "dependencies": { + "@aws-sdk/types": "3.567.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.568.0" + } }, "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.535.0.tgz", - "integrity": "sha512-sPG2l00iVuporK9AmPWq4UBcJURs2RN+vKA8QLRQANmQS3WFHWHamvGltxCjK79izkeqri882V4XlFpZfWhemA==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.572.0.tgz", + "integrity": "sha512-CzuRWMj/xtN9p9eP915nlPmlyniTzke732Ow/M60++gGgB3W+RtZyFftw3TEx+NzNhd1tH54dEcGiWdiNaBz3Q==", "dependencies": { "mnemonist": "0.38.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.554.0.tgz", - "integrity": "sha512-hbkKKkDf0lYB0lJi9at/iPI84X81vWz52YGl8ggEANksbFRTNgicxWPmiPw46T4E8FMKLTvEjPJU912xqgF0Eg==", + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.574.0.tgz", + "integrity": "sha512-ALjDGorytkmGLQ8IMG2hJMzKd0POXZAdrxqKVMcUk5PnxFd7+pVYQwd35lhFwU/82ZhmEozQbajHa6Lu1XoRTQ==", "dependencies": { - "@aws-sdk/util-dynamodb": "3.554.0", + "@aws-sdk/util-dynamodb": "3.574.0", "@smithy/smithy-client": "^2.5.1", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.0.0" + "@aws-sdk/client-dynamodb": "^3.574.0" } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.535.0.tgz", - "integrity": "sha512-+EsqJB5A15RoTf0HxUdknF3hp+2WDg0HWc+QERUctzzYXy9l5LIQjmhQ96cWDyFttKmHE+4h6fjMZjJEeWOeYQ==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.572.0.tgz", + "integrity": "sha512-kMgeCeY3V4wmUddzo/PWtkbHhppKHzc0KW9ZUIKKAEujzsSSETyj63ntAZB1u7Wa9ejcCVhVriUciD9DKXR8nQ==", "dependencies": { - "@aws-sdk/endpoint-cache": "3.535.0", - "@aws-sdk/types": "3.535.0", + "@aws-sdk/endpoint-cache": "3.572.0", + "@aws-sdk/types": "3.567.0", "@smithy/node-config-provider": "^2.3.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", - "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==", + "version": "3.567.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz", + "integrity": "sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", - "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz", + "integrity": "sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", - "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==", + "version": "3.567.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz", + "integrity": "sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", - "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz", + "integrity": "sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg==", "dependencies": { - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/types": "3.567.0", + "@aws-sdk/util-endpoints": "3.572.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", - "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz", + "integrity": "sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/node-config-provider": "^2.3.0", "@smithy/types": "^2.12.0", "@smithy/util-config-provider": "^2.3.0", @@ -1088,63 +2082,65 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.554.0.tgz", - "integrity": "sha512-KMMQ5Cw0FUPL9H8g69Lp08xtzRo7r/MK+lBV6LznWBbCP/NwtZ8awVHaPy2P31z00cWtu9MYkUTviWPqJTaBvg==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz", + "integrity": "sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.554.0", - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/property-provider": "^2.2.0", "@smithy/shared-ini-file-loader": "^2.4.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "3.572.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", - "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", + "version": "3.567.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.567.0.tgz", + "integrity": "sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A==", "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.554.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.554.0.tgz", - "integrity": "sha512-Q81Rj38Ban8iV0C1b0cOEHWVHveIW67zVyd2gJvn1xdeKz+N4zCCUviL9Dwfsi6YgOaP+eQaaCptsBA0Nrx7YA==", + "version": "3.574.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.574.0.tgz", + "integrity": "sha512-ryNcvWAfWryYqJYy4wCxfdzyuVuZLzzw2b4puJGuzPe4QNgHVo6m9lnIdjxWtSDpbQ+890oxgj3TRbxL5nqYHQ==", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.0.0" + "@aws-sdk/client-dynamodb": "^3.574.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", - "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz", + "integrity": "sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/types": "^2.12.0", "@smithy/util-endpoints": "^1.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { @@ -1159,28 +2155,28 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", - "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==", + "version": "3.567.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz", + "integrity": "sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/types": "^2.12.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", - "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz", + "integrity": "sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A==", "dependencies": { - "@aws-sdk/types": "3.535.0", + "@aws-sdk/types": "3.567.0", "@smithy/node-config-provider": "^2.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1869,9 +2865,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.1.tgz", + "integrity": "sha512-O7yppwipkXvnEPjzkSXJRk2g4bS8sUx9p9oXHq9MU/U7lxUzZVsnFZMDTmeeX9bfQxrFcvOacl/ENgOh0WP9pA==", "cpu": [ "ppc64" ], @@ -1884,9 +2880,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.1.tgz", + "integrity": "sha512-hh3jKWikdnTtHCglDAeVO3Oyh8MaH8xZUaWMiCCvJ9/c3NtPqZq+CACOlGTxhddypXhl+8B45SeceYBfB/e8Ow==", "cpu": [ "arm" ], @@ -1899,9 +2895,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.1.tgz", + "integrity": "sha512-jXhccq6es+onw7x8MxoFnm820mz7sGa9J14kLADclmiEUH4fyj+FjR6t0M93RgtlI/awHWhtF0Wgfhqgf9gDZA==", "cpu": [ "arm64" ], @@ -1914,9 +2910,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.1.tgz", + "integrity": "sha512-NPObtlBh4jQHE01gJeucqEhdoD/4ya2owSIS8lZYS58aR0x7oZo9lB2lVFxgTANSa5MGCBeoQtr+yA9oKCGPvA==", "cpu": [ "x64" ], @@ -1929,9 +2925,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.1.tgz", + "integrity": "sha512-BLT7TDzqsVlQRmJfO/FirzKlzmDpBWwmCUlyggfzUwg1cAxVxeA4O6b1XkMInlxISdfPAOunV9zXjvh5x99Heg==", "cpu": [ "arm64" ], @@ -1944,9 +2940,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.1.tgz", + "integrity": "sha512-D3h3wBQmeS/vp93O4B+SWsXB8HvRDwMyhTNhBd8yMbh5wN/2pPWRW5o/hM3EKgk9bdKd9594lMGoTCTiglQGRQ==", "cpu": [ "x64" ], @@ -1959,9 +2955,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.1.tgz", + "integrity": "sha512-/uVdqqpNKXIxT6TyS/oSK4XE4xWOqp6fh4B5tgAwozkyWdylcX+W4YF2v6SKsL4wCQ5h1bnaSNjWPXG/2hp8AQ==", "cpu": [ "arm64" ], @@ -1974,9 +2970,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.1.tgz", + "integrity": "sha512-paAkKN1n1jJitw+dAoR27TdCzxRl1FOEITx3h201R6NoXUojpMzgMLdkXVgCvaCSCqwYkeGLoe9UVNRDKSvQgw==", "cpu": [ "x64" ], @@ -1989,9 +2985,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.1.tgz", + "integrity": "sha512-tRHnxWJnvNnDpNVnsyDhr1DIQZUfCXlHSCDohbXFqmg9W4kKR7g8LmA3kzcwbuxbRMKeit8ladnCabU5f2traA==", "cpu": [ "arm" ], @@ -2004,9 +3000,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.1.tgz", + "integrity": "sha512-G65d08YoH00TL7Xg4LaL3gLV21bpoAhQ+r31NUu013YB7KK0fyXIt05VbsJtpqh/6wWxoLJZOvQHYnodRrnbUQ==", "cpu": [ "arm64" ], @@ -2019,9 +3015,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.1.tgz", + "integrity": "sha512-tt/54LqNNAqCz++QhxoqB9+XqdsaZOtFD/srEhHYwBd3ZUOepmR1Eeot8bS+Q7BiEvy9vvKbtpHf+r6q8hF5UA==", "cpu": [ "ia32" ], @@ -2034,9 +3030,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.1.tgz", + "integrity": "sha512-MhNalK6r0nZD0q8VzUBPwheHzXPr9wronqmZrewLfP7ui9Fv1tdPmg6e7A8lmg0ziQCziSDHxh3cyRt4YMhGnQ==", "cpu": [ "loong64" ], @@ -2049,9 +3045,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.1.tgz", + "integrity": "sha512-YCKVY7Zen5rwZV+nZczOhFmHaeIxR4Zn3jcmNH53LbgF6IKRwmrMywqDrg4SiSNApEefkAbPSIzN39FC8VsxPg==", "cpu": [ "mips64el" ], @@ -2064,9 +3060,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.1.tgz", + "integrity": "sha512-bw7bcQ+270IOzDV4mcsKAnDtAFqKO0jVv3IgRSd8iM0ac3L8amvCrujRVt1ajBTJcpDaFhIX+lCNRKteoDSLig==", "cpu": [ "ppc64" ], @@ -2079,9 +3075,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.1.tgz", + "integrity": "sha512-ARmDRNkcOGOm1AqUBSwRVDfDeD9hGYRfkudP2QdoonBz1ucWVnfBPfy7H4JPI14eYtZruRSczJxyu7SRYDVOcg==", "cpu": [ "riscv64" ], @@ -2094,9 +3090,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.1.tgz", + "integrity": "sha512-o73TcUNMuoTZlhwFdsgr8SfQtmMV58sbgq6gQq9G1xUiYnHMTmJbwq65RzMx89l0iya69lR4bxBgtWiiOyDQZA==", "cpu": [ "s390x" ], @@ -2109,9 +3105,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.1.tgz", + "integrity": "sha512-da4/1mBJwwgJkbj4fMH7SOXq2zapgTo0LKXX1VUZ0Dxr+e8N0WbS80nSZ5+zf3lvpf8qxrkZdqkOqFfm57gXwA==", "cpu": [ "x64" ], @@ -2124,9 +3120,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.1.tgz", + "integrity": "sha512-CPWs0HTFe5woTJN5eKPvgraUoRHrCtzlYIAv9wBC+FAyagBSaf+UdZrjwYyTGnwPGkThV4OCI7XibZOnPvONVw==", "cpu": [ "x64" ], @@ -2139,9 +3135,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.1.tgz", + "integrity": "sha512-xxhTm5QtzNLc24R0hEkcH+zCx/o49AsdFZ0Cy5zSd/5tOj4X2g3/2AJB625NoadUuc4A8B3TenLJoYdWYOYCew==", "cpu": [ "x64" ], @@ -2154,9 +3150,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.1.tgz", + "integrity": "sha512-CWibXszpWys1pYmbr9UiKAkX6x+Sxw8HWtw1dRESK1dLW5fFJ6rMDVw0o8MbadusvVQx1a8xuOxnHXT941Hp1A==", "cpu": [ "x64" ], @@ -2169,9 +3165,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.1.tgz", + "integrity": "sha512-jb5B4k+xkytGbGUS4T+Z89cQJ9DJ4lozGRSV+hhfmCPpfJ3880O31Q1srPCimm+V6UCbnigqD10EgDNgjvjerQ==", "cpu": [ "arm64" ], @@ -2184,9 +3180,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.1.tgz", + "integrity": "sha512-PgyFvjJhXqHn1uxPhyN1wZ6dIomKjiLUQh1LjFvjiV1JmnkZ/oMPrfeEAZg5R/1ftz4LZWZr02kefNIQ5SKREQ==", "cpu": [ "ia32" ], @@ -2199,9 +3195,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.1.tgz", + "integrity": "sha512-W9NttRZQR5ehAiqHGDnvfDaGmQOm6Fi4vSlce8mjM75x//XKuVAByohlEX6N17yZnVXxQFuh4fDRunP8ca6bfA==", "cpu": [ "x64" ], @@ -2900,13 +3896,13 @@ } }, "node_modules/@lerna/create": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.2.tgz", - "integrity": "sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.3.tgz", + "integrity": "sha512-JFvIYrlvR8Txa8h7VZx8VIQDltukEKOKaZL/muGO7Q/5aE2vjOKHsD/jkWYe/2uFy1xv37ubdx17O1UXQNadPg==", "dev": true, "dependencies": { "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 20", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -2943,7 +3939,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 20", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", @@ -2959,7 +3955,7 @@ "slash": "^3.0.0", "ssri": "^9.0.1", "strong-log-transformer": "2.1.0", - "tar": "6.1.11", + "tar": "6.2.1", "temp-dir": "1.0.0", "upath": "2.0.1", "uuid": "^9.0.0", @@ -3041,24 +4037,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@lerna/create/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -3071,30 +4049,6 @@ "node": ">= 6" } }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@lerna/create/node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -3116,15 +4070,6 @@ "node": "*" } }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@lerna/create/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3134,24 +4079,6 @@ "node": ">=8" } }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@lerna/create/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -3225,25 +4152,25 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -3253,9 +4180,9 @@ } }, "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -3266,9 +4193,9 @@ } }, "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -3279,21 +4206,21 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -3314,15 +4241,15 @@ } }, "node_modules/@npmcli/git": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", + "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -3342,14 +4269,23 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" } }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -3366,25 +4302,25 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "lib/index.js" + "installed-package-contents": "bin/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents/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==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, "dependencies": { "npm-normalize-package-bin": "^3.0.0" @@ -3412,9 +4348,9 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", - "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "dependencies": { "which": "^4.0.0" @@ -3447,6 +4383,15 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/@npmcli/run-script": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", @@ -3488,21 +4433,21 @@ } }, "node_modules/@nrwl/devkit": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.0.3.tgz", - "integrity": "sha512-ztDAaiEciEL4Gwq42m6+gz392QnBRBZoYwYUEXhLiOrPngAu2eGnkXrQlSvF54ISKLwzD7gnGAKRzpA6nw8u5w==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.0.2.tgz", + "integrity": "sha512-h/hBltFnJLrDVxVJYcU/qAba9NGfrSp1q4t9U9tl8B8InMtRRgjFKX/whRZd6PE7ZTN7kqr0+XRTETFKv5heDA==", "dev": true, "dependencies": { - "@nx/devkit": "18.0.3" + "@nx/devkit": "19.0.2" } }, "node_modules/@nrwl/tao": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.0.3.tgz", - "integrity": "sha512-9EIIkjvaXs7JM0shhZAQIblV3ym+wZyqxZ9nYc39OwPkII2xXtGhWPhd7SRj+If6lbVNpelIc/Xg5DpTMgu16g==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.0.2.tgz", + "integrity": "sha512-VLU0Ptqq9+R5Ugb4d7ANb/pzZ8Rh+ExNcyg5MVNNrrgrM8ghLOu2/qPoatWyXLZg+cfKr6bH7/c0rWBtPcc69Q==", "dev": true, "dependencies": { - "nx": "18.0.3", + "nx": "19.0.2", "tslib": "^2.3.0" }, "bin": { @@ -3510,28 +4455,29 @@ } }, "node_modules/@nx/devkit": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.0.3.tgz", - "integrity": "sha512-HiQq43YHfdjG5WnBxVNTlRm1IhnVaWoBLZrbkFItElX4SIhUqWQUp0gjtdTXy0do8Q2hkj8aITrC4Tm92KiyUw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.0.2.tgz", + "integrity": "sha512-qHBWQ3ZJ4vO8AVdSlz/u/GXDrDxVsBjC1/pY1ImycnUP4NfOtmBlYdhd5aB9XvWcujSmOap0ZJGr1iapYKoWxQ==", "dev": true, "dependencies": { - "@nrwl/devkit": "18.0.3", + "@nrwl/devkit": "19.0.2", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 18" + "nx": ">= 17 <= 20" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.3.tgz", - "integrity": "sha512-fsMzaX848KMNyF3+I5JjayHFKPsANsbr/++qTIc9skMLPYz1DQANcD6TSkc1tOWLSn4CV44cEAIwfAddPEBupw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.0.2.tgz", + "integrity": "sha512-JVOz6kNaypyK7Bi/l//BZ6F8i70UXlnQBdnacBM8nZH2oAQ7OIj1foZEw7ANnDvKpUJB2staJ9ZwPc/KzXwr5A==", "cpu": [ "arm64" ], @@ -3545,9 +4491,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.3.tgz", - "integrity": "sha512-W/FcvpQcBmsHuTcLQ2BwVjgARqTzGgLEqUGs6S/PnSEL+IgoBaWvQMavOoiisv8QY9GlLzX5Oq3rAkpJ1EmoNw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.0.2.tgz", + "integrity": "sha512-qfj3AJ/RCbEps+Evbycrf1qUQk/zkwX5NT80dgK/r9eGBbo3qOA3VLa1z0PtaaJaYhZxZkjhwXOqhqAjDNN8bw==", "cpu": [ "x64" ], @@ -3561,9 +4507,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.3.tgz", - "integrity": "sha512-Wx+nRQdQQsXd8DvAy426AtPoo80F3Loku+r8AKp1QBT24NCPzD/yjz6bGyNucGCrt+RKGPmaFHWBw+8qByMi6A==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.0.2.tgz", + "integrity": "sha512-Fe+SQ4ug2RbKQ6saLhntsaOhf0aeoLQ/nJCc6h0TYPIs43go5gFSLFa2xnCOIo90dSL6/0z1r8VsZGSQQHiXMg==", "cpu": [ "x64" ], @@ -3577,9 +4523,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.3.tgz", - "integrity": "sha512-oM2Yraf2JVaLyT8GLUnwGKiIyB5WIi07TbJs9kLiZz1HAoJs6pG9kwrilHoS8o1t1jNR87pYbyfO1nRpa8ZR0Q==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.0.2.tgz", + "integrity": "sha512-0IW/gYZo5toGjjrqKL4SqV2twfkVDfMpx6M4BxwJlYEzzl+gtF0VrWfhVU3r4p2YZV8yW3cmH9SNChB6YZgQmA==", "cpu": [ "arm" ], @@ -3593,9 +4539,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.3.tgz", - "integrity": "sha512-z5T32HcsoaTUazDiN0HSMSxnuw3W2GG1ASvqaWOn+LU7pCDasPFSVylJx68hNEjo9dYMBg9OCHyuhffwi8ZlOg==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.0.2.tgz", + "integrity": "sha512-+u5Y7XYf0M/KOnDz+iS6DnaGfwvEFsMJipzv337Mbc2qP2sxBR4pM8hEKcQeqII71as0Xo0sZzmyxXjJvG7bzw==", "cpu": [ "arm64" ], @@ -3609,9 +4555,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.3.tgz", - "integrity": "sha512-1t85YQEPsOSjEWGiho4zuQMH6Zb24yCbAVJJPZpKzASQzOvv+0ayITkY7P4OaJ84oZ9T/GojXmYnINAePTlrNQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.0.2.tgz", + "integrity": "sha512-hmQ6evq9S5a/svQOwpRF5Zcu114A9jpeDKEBysFmbdV1eTFkrxlnvSCs/xXOeYOe/QS8Ijl50d7+1zkOE2HVMA==", "cpu": [ "arm64" ], @@ -3625,9 +4571,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.3.tgz", - "integrity": "sha512-4sS6mnLt+PGG8oYmV91tvLuAu7jh1YrRuZQlv166nVS61TI0V0oaNREdxUZF92WpvavDA1ftXEImcASEex6n3Q==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.0.2.tgz", + "integrity": "sha512-zVcAotU7qlunsvg7I3oGp50f6ha44FeU6ITA+CHD0A/wqD11ZpVP0qsqMLawCGiKhNafQmUvkXMEFJ1dUX5aWw==", "cpu": [ "x64" ], @@ -3641,9 +4587,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.3.tgz", - "integrity": "sha512-VmiNOH4/dYOQ5X8DaHrmTZyzrIbCUgHE7oco1pRBPEHkid8E0WyvD9sZLCVEipV80Av9nhOaQ1srAtcfOxchVQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.0.2.tgz", + "integrity": "sha512-72hT2V9IQNMIrC7sBzllrHEnoJOhuPxKXJTUYzz4v/Y11t1ziTHflGXO9nJOpydh8vA+91dPVrDM5mWr6IEPzg==", "cpu": [ "x64" ], @@ -3657,9 +4603,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.3.tgz", - "integrity": "sha512-ymqpAyJ86I5LzFa4O7FByl770U3R//s1nFsrAz9mDm1AIq5uQyyW+EOMJzJwzm0JinRnwtxiK/GdjgWM6dNSDg==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.0.2.tgz", + "integrity": "sha512-aTxQBtUrusAm535DRnHxgM9AXnPYkhzr+eUSjrPUPTu2N3cuckq6JWfpxtjVCMcPfOR+pOC9luG3+bWmO32TQQ==", "cpu": [ "arm64" ], @@ -3673,9 +4619,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.3.tgz", - "integrity": "sha512-JkBx64Lg7Ezyr6RML/ajOdy9/NIbVO5dI5bG9ZmryeS5mnUPFBY0ExspL0t4X/ud+F4Sh7gN7uGanNd32wRD1Q==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.0.2.tgz", + "integrity": "sha512-lgxgj+ilhL9StCLzRxU+EB1n944bMjwbU3CxvYW2TYa+380UXVMUACjbLyzONQPeJPIm9azaVQNKnf5+c+nnBQ==", "cpu": [ "x64" ], @@ -3900,9 +4846,9 @@ } }, "node_modules/@sigstore/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", - "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -3955,9 +4901,9 @@ } }, "node_modules/@sigstore/sign/node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -3976,36 +4922,45 @@ } }, "node_modules/@sigstore/sign/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/@sigstore/sign/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@sigstore/sign/node_modules/glob/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@sigstore/sign/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -4051,9 +5006,9 @@ } }, "node_modules/@sigstore/sign/node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -4063,9 +5018,9 @@ } }, "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -4085,37 +5040,58 @@ } }, "node_modules/@sigstore/verify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.0.0.tgz", - "integrity": "sha512-sRU6nblDBQ4pVTWni019Kij+XQj4RP75WXN5z3qHk81dt/L8A7r3v8RgRInTup4/Jf90WNods9CcbnWj7zJ26w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.0.tgz", + "integrity": "sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==", "dev": true, "dependencies": { - "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sigstore/verify/node_modules/@sigstore/bundle": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.1.tgz", - "integrity": "sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sigstore/verify/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -4282,16 +5258,41 @@ "node": ">=14.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/@smithy/hash-node": { @@ -4308,6 +5309,18 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@smithy/invalid-dependency": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", @@ -4348,6 +5361,19 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/middleware-compression/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@smithy/middleware-content-length": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", @@ -4523,9 +5549,9 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.2.1.tgz", - "integrity": "sha512-j5fHgL1iqKTsKJ1mTcw88p0RUcidDu95AWSeZTgiYJb+QcfwWU/UpBnaqiB59FNH5MiAZuSbOBnZlwzeeY2tIw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "@smithy/types": "^2.12.0", @@ -4539,6 +5565,18 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@smithy/smithy-client": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", @@ -4577,16 +5615,42 @@ } }, "node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dev": true, "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dev": true, + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/util-body-length-browser": { @@ -4730,18 +5794,20 @@ "node": ">=14.0.0" } }, - "node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "node_modules/@smithy/util-stream/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@smithy/util-utf8": { + "node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", @@ -4753,6 +5819,52 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@smithy/util-waiter": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz", @@ -4955,9 +6067,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", "dependencies": { "undici-types": "~5.26.4" } @@ -5661,9 +6773,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.137.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.137.0.tgz", - "integrity": "sha512-3pf3SVDwNZvo3EfhO3yl1B+KbRHz7T4UmPifUEKfOwk7ABAFLRSNddZuUlF560XSBTFLkrZoeBDa0/MLJT6F4g==", + "version": "2.141.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.141.0.tgz", + "integrity": "sha512-RM9uDiETBEKCHemItaRGVjOLwoZ5iqXnejpyXY7+YF75c2c0Ui7HSZI8QD0stDg3S/2UbLcKv2RA9dBsjrWUGA==", "bin": { "cdk": "bin/cdk" }, @@ -5675,9 +6787,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.137.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.137.0.tgz", - "integrity": "sha512-pD3AGdKBa8q1+vVWRabiDHuecVMlP8ERGPHc9Pb0dVlpbC/ODC6XXC1S0TAMsr0JI5Lh6pk4vL5cC+spsMeotw==", + "version": "2.141.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.141.0.tgz", + "integrity": "sha512-xda56Lfwpdqg9MssnFdXrAKTmeeNjfrfFCaWwqGqToG6cfGY2W+6wyyoObX60/MeZGhhs3Lhdb/K94ulLJ4X/A==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -5694,7 +6806,7 @@ "dependencies": { "@aws-cdk/asset-awscli-v1": "^2.2.202", "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.3", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.2.0", @@ -5720,14 +6832,14 @@ "license": "Apache-2.0" }, "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.12.0", + "version": "8.13.0", "inBundle": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -6036,9 +7148,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1599.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1599.0.tgz", - "integrity": "sha512-jPb1LAN+s1TLTK+VR3TTJLr//sb3AhhT60Bm9jxB5G/fVeeRczXtBtixNpQ00gksQdkstILYLc9S6MuKMsksxA==", + "version": "2.1617.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1617.0.tgz", + "integrity": "sha512-lIZtMv/0H0OJG/0sMscXB8e96M03AcqpfIEyuuNES4ZkytjyiTaLYCfviYudrRn7gcLbX/b3/TPphymBng4tHw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -6427,9 +7539,9 @@ } }, "node_modules/cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", @@ -6462,40 +7574,40 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -6514,9 +7626,9 @@ } }, "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==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -6869,6 +7981,10 @@ "node": ">= 0.12.0" } }, + "node_modules/code-snippets": { + "resolved": "examples/snippets", + "link": true + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -7399,10 +8515,6 @@ "node": ">=8" } }, - "node_modules/docs": { - "resolved": "docs/snippets", - "link": true - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -7470,9 +8582,9 @@ "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==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -7573,6 +8685,18 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -7703,9 +8827,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.1.tgz", + "integrity": "sha512-GPqx+FX7mdqulCeQ4TsGZQ3djBJkx5k7zBGtqt9ycVlWNg8llJ4RO9n2vciu8BN2zAEs6lPbPl0asZsAh7oWzg==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -7714,29 +8838,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.1", + "@esbuild/android-arm": "0.21.1", + "@esbuild/android-arm64": "0.21.1", + "@esbuild/android-x64": "0.21.1", + "@esbuild/darwin-arm64": "0.21.1", + "@esbuild/darwin-x64": "0.21.1", + "@esbuild/freebsd-arm64": "0.21.1", + "@esbuild/freebsd-x64": "0.21.1", + "@esbuild/linux-arm": "0.21.1", + "@esbuild/linux-arm64": "0.21.1", + "@esbuild/linux-ia32": "0.21.1", + "@esbuild/linux-loong64": "0.21.1", + "@esbuild/linux-mips64el": "0.21.1", + "@esbuild/linux-ppc64": "0.21.1", + "@esbuild/linux-riscv64": "0.21.1", + "@esbuild/linux-s390x": "0.21.1", + "@esbuild/linux-x64": "0.21.1", + "@esbuild/netbsd-x64": "0.21.1", + "@esbuild/openbsd-x64": "0.21.1", + "@esbuild/sunos-x64": "0.21.1", + "@esbuild/win32-arm64": "0.21.1", + "@esbuild/win32-ia32": "0.21.1", + "@esbuild/win32-x64": "0.21.1" } }, "node_modules/escalade": { @@ -8799,9 +9923,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -10027,9 +11151,9 @@ } }, "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", "dev": true, "dependencies": { "async": "^3.2.3", @@ -10818,14 +11942,14 @@ "link": true }, "node_modules/lerna": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.2.tgz", - "integrity": "sha512-RCyBAn3XsqqvHbz3TxLfD7ylqzCi1A2UJnFEZmhURgx589vM3qYWQa/uOMeEEf565q6cAdtmulITciX1wgkAtw==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.3.tgz", + "integrity": "sha512-Dg/r1dGnRCXKsOUC3lol7o6ggYTA6WWiPQzZJNKqyygn4fzYGuA3Dro2d5677pajaqFnFA72mdCjzSyF16Vi2Q==", "dev": true, "dependencies": { - "@lerna/create": "8.1.2", + "@lerna/create": "8.1.3", "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 20", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -10868,7 +11992,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 20", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", @@ -10886,7 +12010,7 @@ "slash": "3.0.0", "ssri": "^9.0.1", "strong-log-transformer": "2.1.0", - "tar": "6.1.11", + "tar": "6.2.1", "temp-dir": "1.0.0", "typescript": ">=3 < 6", "upath": "2.0.1", @@ -10972,24 +12096,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/lerna/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -11002,30 +12108,6 @@ "node": ">= 6" } }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/lerna/node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -11047,15 +12129,6 @@ "node": "*" } }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lerna/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -11065,24 +12138,6 @@ "node": ">=8" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/lerna/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -11220,9 +12275,9 @@ } }, "node_modules/libnpmpublish/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -11259,9 +12314,9 @@ } }, "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==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -11288,6 +12343,15 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lint-staged": { "version": "15.2.2", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", @@ -11864,9 +12928,9 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "dependencies": { "@npmcli/agent": "^2.0.0", @@ -11878,6 +12942,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -11885,19 +12950,28 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "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==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -11927,6 +13001,133 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", + "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", + "dev": true, + "dependencies": { + "markdown-it": "14.1.0", + "markdownlint-micromark": "0.1.9" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.13.0.tgz", + "integrity": "sha512-Pg4nF7HlopU97ZXtrcVISWp3bdsuc5M0zXyLp2/sJv2zEMlInrau0ZKK482fQURzVezJzWBpNmu4u6vGAhij+g==", + "dev": true, + "dependencies": { + "globby": "14.0.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.1", + "markdownlint": "0.34.0", + "markdownlint-cli2-formatter-default": "0.0.4", + "micromatch": "4.0.5" + }, + "bin": { + "markdownlint-cli2": "markdownlint-cli2.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2-formatter-default": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.4.tgz", + "integrity": "sha512-xm2rM0E+sWgjpPn1EesPXx5hIyrN2ddUnUwnbCsD/ONxYtw3PX6LydvdH6dciWAoFDpwzbHM1TO7uHfcMd6IYg==", + "dev": true, + "peerDependencies": { + "markdownlint-cli2": ">=0.0.4" + } + }, + "node_modules/markdownlint-cli2/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdownlint-cli2/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/markdownlint-cli2/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdownlint-cli2/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", + "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -11939,6 +13140,12 @@ "node": ">= 12" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -12495,9 +13702,9 @@ } }, "node_modules/node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -12519,22 +13726,22 @@ } }, "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -12550,9 +13757,9 @@ } }, "node_modules/node-gyp/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -12592,9 +13799,9 @@ "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==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "dependencies": { "abbrev": "^2.0.0" @@ -12766,9 +13973,9 @@ } }, "node_modules/npm-pick-manifest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", + "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", "dev": true, "dependencies": { "npm-install-checks": "^6.0.0", @@ -12781,9 +13988,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "dependencies": { "lru-cache": "^10.0.1" @@ -12793,9 +14000,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -12811,13 +14018,13 @@ } }, "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -12825,6 +14032,15 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm-pick-manifest/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm-registry-fetch": { "version": "14.0.5", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", @@ -13038,13 +14254,13 @@ } }, "node_modules/nx": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-18.0.3.tgz", - "integrity": "sha512-Lvkd+er641xrBqA7kdEnzf7zvLIEmqLouzONByVZtRrk1BbgEjapUj9r+QLBxXTvmhS7tHFLNiMh1KgpDOWsLQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.0.2.tgz", + "integrity": "sha512-59BSYa/Qp8nA764T7Cg7tSisFYBws9zSAMPm0YspCSPndoUy86Mjtg62bEqkHN0MWo6W4MxwOHuB0XSBvQ5DdA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "18.0.3", + "@nrwl/tao": "19.0.2", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", @@ -13084,19 +14300,19 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "18.0.3", - "@nx/nx-darwin-x64": "18.0.3", - "@nx/nx-freebsd-x64": "18.0.3", - "@nx/nx-linux-arm-gnueabihf": "18.0.3", - "@nx/nx-linux-arm64-gnu": "18.0.3", - "@nx/nx-linux-arm64-musl": "18.0.3", - "@nx/nx-linux-x64-gnu": "18.0.3", - "@nx/nx-linux-x64-musl": "18.0.3", - "@nx/nx-win32-arm64-msvc": "18.0.3", - "@nx/nx-win32-x64-msvc": "18.0.3" + "@nx/nx-darwin-arm64": "19.0.2", + "@nx/nx-darwin-x64": "19.0.2", + "@nx/nx-freebsd-x64": "19.0.2", + "@nx/nx-linux-arm-gnueabihf": "19.0.2", + "@nx/nx-linux-arm64-gnu": "19.0.2", + "@nx/nx-linux-arm64-musl": "19.0.2", + "@nx/nx-linux-x64-gnu": "19.0.2", + "@nx/nx-linux-x64-musl": "19.0.2", + "@nx/nx-win32-arm64-msvc": "19.0.2", + "@nx/nx-win32-x64-msvc": "19.0.2" }, "peerDependencies": { - "@swc-node/register": "^1.6.7", + "@swc-node/register": "^1.8.0", "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { @@ -13473,9 +14689,9 @@ } }, "node_modules/pacote": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.7.tgz", + "integrity": "sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==", "dev": true, "dependencies": { "@npmcli/git": "^5.0.0", @@ -13489,7 +14705,7 @@ "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", @@ -13505,40 +14721,51 @@ } }, "node_modules/pacote/node_modules/@sigstore/bundle": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.1.tgz", - "integrity": "sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/pacote/node_modules/@sigstore/sign": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.2.tgz", - "integrity": "sha512-mAifqvvGOCkb5BJ5d/SRrVP5+kKCGxtcHuti6lgqZalIfNxikxlJMMptOqFp9+xV5LAnJMSaMWtzvcgNZ3PlPA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.1.tgz", + "integrity": "sha512-YZ71wKIOweC8ViUeZXboz0iPLqMkskxuoeN/D1CEpAyZvEepbX9oRMIoO6a/DxUqO1VEaqmcmmqzSiqtOsvSmw==", "dev": true, "dependencies": { - "@sigstore/bundle": "^2.1.1", + "@sigstore/bundle": "^2.3.0", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.1", - "make-fetch-happen": "^13.0.0" + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/@sigstore/tuf": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.0.tgz", - "integrity": "sha512-S98jo9cpJwO1mtQ+2zY7bOdcYyfVYCUaofCG6wWRzk3pxKHVAkSfshkfecto2+LKsx7Ovtqbgb2LS8zTRhxJ9Q==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.3.tgz", + "integrity": "sha512-agQhHNkIddXFslkudjV88vTXiAMEyUtso3at6ZHUNJ1agZb7Ze6VW/PddHipdWBu1t+8OWLW5X5yZOPiOnaWJQ==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1", - "tuf-js": "^2.2.0" + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -13554,13 +14781,13 @@ } }, "node_modules/pacote/node_modules/@tufjs/models": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", - "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.4" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -13579,31 +14806,31 @@ } }, "node_modules/pacote/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/pacote/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "dependencies": { "lru-cache": "^10.0.1" @@ -13613,9 +14840,9 @@ } }, "node_modules/pacote/node_modules/ignore-walk": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", - "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, "dependencies": { "minimatch": "^9.0.0" @@ -13625,36 +14852,51 @@ } }, "node_modules/pacote/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" } }, + "node_modules/pacote/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/pacote/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/pacote/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", + "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", "dev": true, "dependencies": { "hosted-git-info": "^7.0.0", @@ -13676,13 +14918,13 @@ } }, "node_modules/pacote/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -13703,27 +14945,37 @@ } }, "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", - "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", "dev": true, "dependencies": { + "@npmcli/redact": "^1.1.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "proc-log": "^4.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/pacote/node_modules/read-package-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", - "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.1.tgz", + "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", "dev": true, "dependencies": { "glob": "^10.2.2", @@ -13736,26 +14988,26 @@ } }, "node_modules/pacote/node_modules/sigstore": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.1.tgz", - "integrity": "sha512-OBBSKvmjr4DCyUb+IC2p7wooOCsCNwaqvCilTJVNPo0y8lJl+LsCrfz4LtMwnw3Gn+8frt816wi1+DWZTUCpBQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.0.tgz", + "integrity": "sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==", "dev": true, "dependencies": { - "@sigstore/bundle": "^2.1.1", + "@sigstore/bundle": "^2.3.1", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.2.2", - "@sigstore/tuf": "^2.3.0", - "@sigstore/verify": "^1.0.0" + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "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==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -13765,14 +15017,14 @@ } }, "node_modules/pacote/node_modules/tuf-js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", - "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, "dependencies": { - "@tufjs/models": "2.0.0", + "@tufjs/models": "2.0.1", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "make-fetch-happen": "^13.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -13866,25 +15118,25 @@ "dev": true }, "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==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -14143,12 +15395,33 @@ } }, "node_modules/promzard": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", + "dev": true, + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz", - "integrity": "sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/read": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", "dev": true, "dependencies": { - "read": "^2.0.0" + "mute-stream": "^1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -14175,6 +15448,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pure-rand": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", @@ -14299,9 +15581,9 @@ } }, "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -14317,22 +15599,22 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -14351,9 +15633,9 @@ } }, "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -14369,9 +15651,9 @@ } }, "node_modules/read-package-json/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -14726,34 +16008,94 @@ "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "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, + "engines": { + "node": ">= 4" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/rimraf/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", - "dev": true - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -15041,9 +16383,9 @@ } }, "node_modules/sigstore/node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -15062,36 +16404,45 @@ } }, "node_modules/sigstore/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/sigstore/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sigstore/node_modules/glob/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/sigstore/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -15137,9 +16488,9 @@ } }, "node_modules/sigstore/node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -15149,9 +16500,9 @@ } }, "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -15307,9 +16658,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -15323,9 +16674,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split": { @@ -15655,20 +17006,20 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar-stream": { @@ -15687,6 +17038,15 @@ "node": ">=6" } }, + "node_modules/tar/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/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -15806,30 +17166,12 @@ } }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" - } - }, - "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": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14.14" } }, "node_modules/tmpl": { @@ -16010,13 +17352,13 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsx": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz", - "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.10.2.tgz", + "integrity": "sha512-gOfACgv1ElsIjvt7Fp0rMJKGnMGjox0JfGOfX3kmZCV/yZumaNqtHGKBXt1KgaYS9KjDOmqGeI8gHk/W7kWVZg==", "dev": true, "dependencies": { - "esbuild": "~0.19.10", - "get-tsconfig": "^4.7.2" + "esbuild": "~0.20.2", + "get-tsconfig": "^4.7.3" }, "bin": { "tsx": "dist/cli.mjs" @@ -16029,9 +17371,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -16045,9 +17387,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -16061,9 +17403,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -16077,9 +17419,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -16093,9 +17435,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -16109,9 +17451,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -16125,9 +17467,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -16141,9 +17483,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -16157,9 +17499,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -16173,9 +17515,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -16189,9 +17531,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -16205,9 +17547,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -16221,9 +17563,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -16237,9 +17579,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -16253,9 +17595,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -16269,9 +17611,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -16285,9 +17627,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -16301,9 +17643,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -16317,9 +17659,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -16333,9 +17675,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -16349,9 +17691,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -16365,9 +17707,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -16381,9 +17723,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -16397,9 +17739,9 @@ } }, "node_modules/tsx/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -16409,29 +17751,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/tsx/node_modules/fsevents": { @@ -16486,9 +17828,9 @@ } }, "node_modules/tuf-js/node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -16507,36 +17849,45 @@ } }, "node_modules/tuf-js/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/tuf-js/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tuf-js/node_modules/glob/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/tuf-js/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -16582,9 +17933,9 @@ } }, "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { "minipass": "^7.0.3" @@ -16594,9 +17945,9 @@ } }, "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -16748,6 +18099,12 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -16781,6 +18138,18 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", @@ -17304,16 +18673,16 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "packages/batch": { "name": "@aws-lambda-powertools/batch", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -17321,7 +18690,7 @@ }, "packages/commons": { "name": "@aws-lambda-powertools/commons", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -17329,16 +18698,16 @@ }, "packages/idempotency": { "name": "@aws-lambda-powertools/idempotency", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", - "@aws-lambda-powertools/jmespath": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1", + "@aws-lambda-powertools/jmespath": "^2.1.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/lib-dynamodb": "^3.554.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/lib-dynamodb": "^3.574.0", "aws-sdk-client-mock": "^4.0.0", "aws-sdk-client-mock-jest": "^4.0.0" }, @@ -17361,18 +18730,18 @@ }, "packages/jmespath": { "name": "@aws-lambda-powertools/jmespath", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" } }, "packages/logger": { "name": "@aws-lambda-powertools/logger", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", + "@aws-lambda-powertools/commons": "^2.1.1", "lodash.merge": "^4.6.2" }, "devDependencies": { @@ -17390,14 +18759,14 @@ }, "packages/metrics": { "name": "@aws-lambda-powertools/metrics", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.554.0", + "@aws-sdk/client-cloudwatch": "^3.574.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, @@ -17412,19 +18781,19 @@ }, "packages/parameters": { "name": "@aws-lambda-powertools/parameters", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.554.0", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-secrets-manager": "^3.554.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/util-dynamodb": "^3.554.0", - "@smithy/util-base64": "^2.3.0", + "@aws-sdk/client-appconfigdata": "^3.574.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-secrets-manager": "^3.574.0", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/util-dynamodb": "^3.574.0", + "@smithy/util-base64": "^3.0.0", "aws-sdk-client-mock": "^4.0.0", "aws-sdk-client-mock-jest": "^4.0.0" }, @@ -17459,7 +18828,7 @@ }, "packages/parser": { "name": "@aws-lambda-powertools/parser", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "devDependencies": { "@anatine/zod-mock": "^3.13.3", @@ -17471,30 +18840,30 @@ }, "packages/testing": { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.121.1-alpha.0", - "@aws-sdk/client-lambda": "^3.554.0", - "@smithy/util-utf8": "^2.3.0", - "aws-cdk-lib": "^2.137.0", - "esbuild": "^0.20.2" + "@aws-sdk/client-lambda": "^3.574.0", + "@smithy/util-utf8": "^3.0.0", + "aws-cdk-lib": "^2.141.0", + "esbuild": "^0.21.1" } }, "packages/tracer": { "name": "@aws-lambda-powertools/tracer", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", + "@aws-lambda-powertools/commons": "^2.1.1", "aws-xray-sdk-core": "^3.6.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-xray": "^3.554.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-xray": "^3.574.0", "@types/promise-retry": "^1.1.6", - "aws-sdk": "^2.1599.0", + "aws-sdk": "^2.1617.0", "axios": "^1.6.8", "promise-retry": "^2.0.1" }, diff --git a/package.json b/package.json index ea87efdd6d..891cd8449f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "packages/batch", "packages/testing", "packages/parser", - "docs/snippets", + "examples/snippets", "layers", "examples/app" ], @@ -31,7 +31,8 @@ "docs-api-build-run": "npm run docs-generateApiDoc && npx live-server api", "docs-generateApiDoc": "typedoc .", "docs-runLocalApiDoc": "npx live-server api", - "postpublish": "git restore ." + "postpublish": "git restore .", + "lint:markdown": "markdownlint-cli2 '**/*.md' '#node_modules' '#**/*/node_modules' '#docs/changelog.md' '#LICENSE.md' '#.github' '#**/*/CHANGELOG.md' '#examples/app/README.md' '#packages/batch/README.md' '#packages/commons/README.md' '#packages/idempotency/README.md' '#packages/jmespath/README.md' '#packages/logger/README.md' '#packages/metrics/README.md' '#packages/parameters/README.md' '#packages/parser/README.md' '#packages/tracer/README.md'" }, "repository": { "type": "git", @@ -51,7 +52,7 @@ "@middy/core": "^4.7.0", "@types/aws-lambda": "^8.10.137", "@types/jest": "^29.5.12", - "@types/node": "^20.12.7", + "@types/node": "^20.12.11", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.57.0", @@ -63,8 +64,9 @@ "husky": "^9.0.11", "jest": "^29.7.0", "jest-runner-groups": "^2.2.0", - "lerna": "^8.1.2", + "lerna": "^8.1.3", "lint-staged": "^15.2.2", + "markdownlint-cli2": "^0.13.0", "prettier": "^3.2.5", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", @@ -72,7 +74,10 @@ "typedoc-plugin-missing-exports": "^2.2.0", "typescript": "^5.4.5" }, + "lint-staged": { + "*.md": "markdownlint-cli2 --fix" + }, "engines": { "node": ">=16" } -} +} \ No newline at end of file diff --git a/packages/batch/CHANGELOG.md b/packages/batch/CHANGELOG.md index b06eb267f6..3a2d8f44d1 100644 --- a/packages/batch/CHANGELOG.md +++ b/packages/batch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/batch + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/batch diff --git a/packages/batch/package.json b/packages/batch/package.json index 1dea56f509..d21f05d535 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/batch", - "version": "2.1.0", + "version": "2.1.1", "description": "The batch processing package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index 8639ebc249..47f9302b23 100644 --- a/packages/commons/CHANGELOG.md +++ b/packages/commons/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/commons + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/commons diff --git a/packages/commons/README.md b/packages/commons/README.md index c60e624068..d563bf5a18 100644 --- a/packages/commons/README.md +++ b/packages/commons/README.md @@ -4,73 +4,96 @@ Powertools for AWS Lambda (TypeScript) is a developer toolkit to implement Serve You can use the library in both TypeScript and JavaScript code bases. -> Also available in [Python](https://github.com/aws-powertools/powertools-lambda-python), [Java](https://github.com/aws-powertools/powertools-lambda-java), and [.NET](https://github.com/aws-powertools/powertools-lambda-dotnet). +## Intro -**[Documentation](https://docs.powertools.aws.dev/lambda/typescript/)** | **[npm](https://www.npmjs.com/org/aws-lambda-powertools)** | **[Roadmap](https://docs.powertools.aws.dev/lambda/typescript/latest/roadmap)** | **[Examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples)** +The Commons package contains a set of utilities that are shared across one or more Powertools for AWS Lambda (TypeScript) utilities. Some of these utilities can also be used independently in your AWS Lambda functions. -## Table of contents +## Usage -- [Table of contents ](#table-of-contents-) -- [Features](#features) -- [Getting started](#getting-started) - - [Installation](#installation) - - [Examples](#examples) - - [Demo applications](#demo-applications) -- [Contribute](#contribute) -- [Roadmap](#roadmap) -- [Connect](#connect) -- [How to support Powertools for AWS Lambda (TypeScript)?](#how-to-support-powertools-for-aws-lambda-typescript) - - [Becoming a reference customer](#becoming-a-reference-customer) - - [Sharing your work](#sharing-your-work) - - [Using Lambda Layer](#using-lambda-layer) -- [Credits](#credits) -- [License](#license) +To get started, install the utility by running: -## Features - -* **[Tracer](https://docs.powertools.aws.dev/lambda/typescript/latest/core/tracer/)** - Utilities to trace Lambda function handlers, and both synchronous and asynchronous functions -* **[Logger](https://docs.powertools.aws.dev/lambda/typescript/latest/core/logger/)** - Structured logging made easier, and a middleware to enrich log items with key details of the Lambda context -* **[Metrics](https://docs.powertools.aws.dev/lambda/typescript/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF) -* **[Parameters](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/)** - High-level functions to retrieve one or more parameters from AWS SSM, Secrets Manager, AppConfig, and DynamoDB -* **[Idempotency](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/idempotency/)** - Class method decorator, Middy middleware, and function wrapper to make your Lambda functions idempotent and prevent duplicate execution based on payload content -* **[Batch processing](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/batch/)** - Utility to handle partial failures when processing batches from Amazon SQS, Amazon Kinesis Data Streams, and Amazon DynamoDB Streams. +```sh +npm i @aws-lambda-powertools/commons +``` -## Getting started +### Type utils -Find the complete project's [documentation here](https://docs.powertools.aws.dev/lambda/typescript). +When working with different objects and values, you may want to do runtime type checks. The utility comes with a set of type utilities that you can use to check the type of an object or value. -### Installation +```typescript +import { isRecord } from '@aws-lambda-powertools/commons/typeUtils'; +import { isString } from '@aws-lambda-powertools/commons/typeUtils'; +import { isTruthy } from '@aws-lambda-powertools/commons/typeUtils'; -The Powertools for AWS Lambda (TypeScript) utilities follow a modular approach, similar to the official [AWS SDK v3 for JavaScript](https://github.com/aws/aws-sdk-js-v3). -Each TypeScript utility is installed as standalone npm package. +const value = { key: 'value' }; +if (isRecord(value)) { + // value is a record +} -Install all three core utilities at once with this single command: +const stringValue = 'string'; +if (isString(stringValue)) { + // stringValue is a string +} -```shell -npm install @aws-lambda-powertools/logger @aws-lambda-powertools/tracer @aws-lambda-powertools/metrics +const truthyValue = 'true'; +if (isTruthy(truthyValue)) { + // truthyValue is truthy +} ``` -Or refer to the installation guide of each utility: +Here's a full list of type utilities available in the package: + +- [`isInteger`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isIntegerNumber.html) +- [`isNull`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isNull.html) +- [`isNullOrUndefined`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isNullOrUndefined.html) +- [`isNumber`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isNumber.html) +- [`isRecord`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isRecord.html) +- [`isStrictEqual`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isStrictEqual.html) +- [`isString`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isString.html) +- [`isTruthy`](https://docs.powertools.aws.dev/lambda/typescript/latest/api/functions/_aws_lambda_powertools_commons.isTruthy.html) + +Many of these utilities also double as type guards, which you can use to narrow down the type of an object or value. + +### Base64 utils + +When working with Base64-encoded data, you can use the `fromBase64` utilities to quickly decode data and convert it to a `Uint8Array`. + +```typescript -πŸ‘‰ [Installation guide for the **Tracer** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/tracer#getting-started) +import { fromBase64 } from '@aws-lambda-powertools/commons/utils/base64'; -πŸ‘‰ [Installation guide for the **Logger** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/logger#getting-started) +const encodedValue = 'aGVsbG8gd29ybGQ='; -πŸ‘‰ [Installation guide for the **Metrics** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/core/metrics#getting-started) +const decoded = fromBase64(encodedValue); +// new Uint8Array([ 97, 71, 86, 115, 98, 71, 56, 103, 100, 50, 57, 121, 98, 71, 81, 61 ]); +``` + +### JSON type utils -πŸ‘‰ [Installation guide for the **Parameters** utility](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/#getting-started) +In some cases, you may want to define a type for a JSON object or value. The utility comes with a set of types that you can use to define your JSON objects. -### Examples +```typescript +import type { JSONValue, JSONObject, JSONArray } from '@aws-lambda-powertools/commons'; +``` -You can find examples of how to use Powertools for AWS Lambda (TypeScript) in the [examples](https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/examples/app) directory. The application is a simple REST API that can be deployed via either AWS CDK or AWS SAM. +### Lambda interface -### Demo applications +When using object-oriented patterns to define your Lambda handlers, you can use the `LambdaHandler` interface to define the shape of your handler methods. -The [Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo) shows how to use Powertools for AWS Lambda (TypeScript). -You can find instructions on how to deploy and load test this application in the [repository](https://github.com/aws-samples/serverless-typescript-demo). +```typescript +import type { Context } from 'aws-lambda'; +import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; -The [AWS Lambda performance tuning](https://github.com/aws-samples/optimizations-for-lambda-functions) repository also uses Powertools for AWS Lambda (TypeScript) as well as demonstrating other performance tuning techniques for Lambda functions written in TypeScript. +class Lambda implements LambdaInterface { + public handler = async (event: unknown, context: Context) => { + // Your handler code here + } +} + +const handlerClass = new Lambda(); +export const handler = lambda.handler.bind(lambda); +``` ## Contribute @@ -83,8 +106,8 @@ Help us prioritize upcoming functionalities or utilities by [upvoting existing R ## Connect -* **Powertools for AWS Lambda on Discord**: `#typescript` - **[Invite link](https://discord.gg/B8zZKbbyET)** -* **Email**: aws-lambda-powertools-feedback@amazon.com +- **Powertools for AWS Lambda on Discord**: `#typescript` - **[Invite link](https://discord.gg/B8zZKbbyET)** +- **Email**: ## How to support Powertools for AWS Lambda (TypeScript)? @@ -94,17 +117,17 @@ Knowing which companies are using this library is important to help prioritize t The following companies, among others, use Powertools: -* [Hashnode](https://hashnode.com/) -* [Trek10](https://www.trek10.com/) -* [Elva](https://elva-group.com) -* [globaldatanet](https://globaldatanet.com/) -* [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/) -* [AppYourself](https://appyourself.net) -* [Alma Media](https://www.almamedia.fi) +- [Hashnode](https://hashnode.com/) +- [Trek10](https://www.trek10.com/) +- [Elva](https://elva-group.com) +- [globaldatanet](https://globaldatanet.com/) +- [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/) +- [AppYourself](https://appyourself.net) +- [Alma Media](https://www.almamedia.fi) ### Sharing your work @@ -112,11 +135,7 @@ Share what you did with Powertools for AWS Lambda (TypeScript) πŸ’žπŸ’ž. Blog po ### Using Lambda Layer -This helps us understand who uses Powertools for AWS Lambda (TypeScript) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](#lambda-layers), you can add Powertools for AWS Lambda (TypeScript) as a dev dependency (or as part of your virtual env) to not impact the development process. - -## Credits - -Credits for the Lambda Powertools for AWS Lambda (TypeScript) idea go to [DAZN](https://github.com/getndazn) and their [DAZN Lambda Powertools](https://github.com/getndazn/dazn-lambda-powertools/). +This helps us understand who uses Powertools for AWS Lambda (TypeScript) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](https://docs.powertools.aws.dev/lambda/typescript/latest/#lambda-layer), you can add Powertools as a dev dependency to not impact the development process. ## License diff --git a/packages/commons/package.json b/packages/commons/package.json index bbe5ab032f..04f7752b02 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/commons", - "version": "2.1.0", + "version": "2.1.1", "description": "A shared utility package for Powertools for AWS Lambda (TypeScript) libraries", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/src/Utility.ts b/packages/commons/src/Utility.ts index 23aacedad1..4a79cc82dc 100644 --- a/packages/commons/src/Utility.ts +++ b/packages/commons/src/Utility.ts @@ -1,16 +1,11 @@ /** - * ## Intro - * Utility is a base class that other Powertools for AWS Lambda (TypeScript) utilites can extend to inherit shared logic. + * `Utility` is a base class that other Powertools for AWS Lambda (TypeScript) utilites can extend to inherit shared logic. * + * Its main purpose is to encapsulate the cold start heuristic logic. Cold start is a term commonly used to describe the `Init` phase of a Lambda function. + * In this phase, Lambda creates or unfreezes an execution environment with the configured resources, downloads the code for the function and all layers, + * initializes any extensions, initializes the runtime, and then runs the function’s initialization code (the code outside the main handler). * - * ## Key features - * * Cold Start heuristic to determine if the current - * - * ## Usage - * - * ### Cold Start - * - * Cold start is a term commonly used to describe the `Init` phase of a Lambda function. In this phase, Lambda creates or unfreezes an execution environment with the configured resources, downloads the code for the function and all layers, initializes any extensions, initializes the runtime, and then runs the function’s initialization code (the code outside the main handler). The Init phase happens either during the first invocation, or in advance of function invocations if you have enabled provisioned concurrency. + * The Init phase happens either during the first invocation, or in advance of function invocations if you have enabled provisioned concurrency. * * To learn more about the Lambda execution environment lifecycle, see the [Execution environment section](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html) of the AWS Lambda documentation. * @@ -21,7 +16,7 @@ * * If you want to use this logic in your own utilities, `Utility` provides two methods: * - * #### `getColdStart()` + * `Utility.getColdStart()` * * Since the `Utility` class is instantiated outside of the Lambda handler it will persist across invocations of the same execution environment. This means that if you call `getColdStart()` multiple times, it will return `true` during the first invocation, and `false` afterwards. * @@ -36,7 +31,7 @@ * }; * ``` * - * #### `isColdStart()` + * `Utility.isColdStart()` * * This method is an alias of `getColdStart()` and is exposed for convenience and better readability in certain usages. * @@ -59,6 +54,20 @@ export class Utility { private coldStart = true; private readonly defaultServiceName: string = 'service_undefined'; + /** + * Get the cold start status of the current execution environment. + * + * @example + * ```typescript + * import { Utility } from '@aws-lambda-powertools/commons'; + * + * const utility = new Utility(); + * utility.isColdStart(); // true + * utility.isColdStart(); // false + * ``` + * + * The method also flips the cold start status to `false` after the first invocation. + */ public getColdStart(): boolean { if (this.coldStart) { this.coldStart = false; @@ -69,10 +78,27 @@ export class Utility { return false; } + /** + * Get the cold start status of the current execution environment. + * + * @example + * ```typescript + * import { Utility } from '@aws-lambda-powertools/commons'; + * + * const utility = new Utility(); + * utility.isColdStart(); // true + * utility.isColdStart(); // false + * ``` + * + * @see {@link getColdStart} + */ public isColdStart(): boolean { return this.getColdStart(); } + /** + * Get the default service name. + */ protected getDefaultServiceName(): string { return this.defaultServiceName; } @@ -81,7 +107,7 @@ export class Utility { * Validate that the service name provided is valid. * Used internally during initialization. * - * @param serviceName - Service name to validate + * @param serviceName Service name to validate */ protected isValidServiceName(serviceName?: string): boolean { return typeof serviceName === 'string' && serviceName.trim().length > 0; diff --git a/packages/commons/src/awsSdkUtils.ts b/packages/commons/src/awsSdkUtils.ts index 29095c3d37..451661b007 100644 --- a/packages/commons/src/awsSdkUtils.ts +++ b/packages/commons/src/awsSdkUtils.ts @@ -1,9 +1,6 @@ import { PT_VERSION } from './version.js'; import type { MiddlewareArgsLike, SdkClient } from './types/awsSdk.js'; -/** - * @internal - */ const EXEC_ENV = process.env.AWS_EXECUTION_ENV || 'NA'; const middlewareOptions = { relation: 'after', @@ -13,8 +10,9 @@ const middlewareOptions = { }; /** + * Type guard to check if the client provided is a valid AWS SDK v3 client. + * * @internal - * Type guard to check if the client provided is a valid AWS SDK v3 client */ const isSdkClient = (client: unknown): client is SdkClient => typeof client === 'object' && @@ -35,9 +33,16 @@ const isSdkClient = (client: unknown): client is SdkClient => typeof client.middlewareStack.addRelativeTo === 'function'; /** + * Helper function to create a custom user agent middleware for the AWS SDK v3 clients. + * + * The middleware will append the provided feature name and the current version of + * the Powertools for AWS Lambda library to the user agent string. + * + * @example "PT/Tracer/2.1.0 PTEnv/nodejs20x" + * + * @param feature The feature name to be added to the user agent + * * @internal - * returns a middleware function for the MiddlewareStack, that can be used for the SDK clients - * @param feature */ const customUserAgentMiddleware = (feature: string) => { return (next: (arg0: T) => Promise) => @@ -51,8 +56,12 @@ const customUserAgentMiddleware = (feature: string) => { }; /** + * Check if the provided middleware stack already has the Powertools for AWS Lambda + * user agent middleware. + * + * @param middlewareStack The middleware stack to check + * * @internal - * Checks if the middleware stack already has the Powertools UA middleware */ const hasPowertools = (middlewareStack: string[]): boolean => { let found = false; @@ -65,6 +74,16 @@ const hasPowertools = (middlewareStack: string[]): boolean => { return found; }; +/** + * Add the Powertools for AWS Lambda user agent middleware to the + * AWS SDK v3 client provided. + * + * We use this middleware to unbotrusively track the usage of the library + * and secure continued investment in the project. + * + * @param client The AWS SDK v3 client to add the middleware to + * @param feature The feature name to be added to the user agent + */ const addUserAgentMiddleware = (client: unknown, feature: string): void => { try { if (isSdkClient(client)) { diff --git a/packages/commons/src/config/EnvironmentVariablesService.ts b/packages/commons/src/config/EnvironmentVariablesService.ts index 599f4c88d1..f9b2003a44 100644 --- a/packages/commons/src/config/EnvironmentVariablesService.ts +++ b/packages/commons/src/config/EnvironmentVariablesService.ts @@ -1,56 +1,62 @@ import type { ConfigServiceInterface } from '../types/ConfigServiceInterface.js'; /** - * Class EnvironmentVariablesService + * This class is used to fetch environment variables that are available in the execution environment. * - * This class is used to return environment variables that are available in the runtime of - * the current Lambda invocation. * These variables can be a mix of runtime environment variables set by AWS and - * variables that can be set by the developer additionally. + * other environment variables that are set by the developer to configure Powertools for AWS Lambda. + * + * @example + * ```typescript + * import { EnvironmentVariablesService } from '@aws-lambda-powertools/commons/'; + * + * const config = new EnvironmentVariablesService(); + * const serviceName = config.getServiceName(); + * ``` * - * @class - * @extends {ConfigService} - * @see https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime * @see https://docs.powertools.aws.dev/lambda/typescript/latest/#environment-variables + * + * @class + * @implements {ConfigServiceInterface} */ class EnvironmentVariablesService implements ConfigServiceInterface { /** - * @see https://docs.powertools.aws.dev/lambda/typescript/latest/#environment-variables - * @protected + * Increase JSON indentation for Logger to ease debugging when running functions locally or in a non-production environment */ protected devModeVariable = 'POWERTOOLS_DEV'; + /** + * Set service name used for tracing namespace, metrics dimension and structured logging + */ protected serviceNameVariable = 'POWERTOOLS_SERVICE_NAME'; - // Reserved environment variables + /** + * AWS X-Ray Trace ID environment variable + * @private + */ private xRayTraceIdVariable = '_X_AMZN_TRACE_ID'; /** - * It returns the value of an environment variable that has given name. + * Get the value of an environment variable by name. * - * @param {string} name - * @returns {string} + * @param {string} name The name of the environment variable to fetch. */ public get(name: string): string { return process.env[name]?.trim() || ''; } /** - * It returns the value of the POWERTOOLS_SERVICE_NAME environment variable. - * - * @returns {string} + * Get the value of the `POWERTOOLS_SERVICE_NAME` environment variable. */ public getServiceName(): string { return this.get(this.serviceNameVariable); } /** - * It returns the value of the _X_AMZN_TRACE_ID environment variable. + * Get the value of the `_X_AMZN_TRACE_ID` environment variable. * * The AWS X-Ray Trace data available in the environment variable has this format: * `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=557abcec3ee5a047;Sampled=1`, * * The actual Trace ID is: `1-5759e988-bd862e3fe1be46a994272793`. - * - * @returns {string} */ public getXrayTraceId(): string | undefined { const xRayTraceData = this.getXrayTraceData(); @@ -59,12 +65,10 @@ class EnvironmentVariablesService implements ConfigServiceInterface { } /** - * It returns true if the Sampled flag is set in the _X_AMZN_TRACE_ID environment variable. + * Determine if the current invocation is part of a sampled X-Ray trace. * * The AWS X-Ray Trace data available in the environment variable has this format: * `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=557abcec3ee5a047;Sampled=1`, - * - * @returns {boolean} */ public getXrayTraceSampled(): boolean { const xRayTraceData = this.getXrayTraceData(); @@ -73,19 +77,16 @@ class EnvironmentVariablesService implements ConfigServiceInterface { } /** - * It returns true if the `POWERTOOLS_DEV` environment variable is set to truthy value. - * - * @returns {boolean} + * Determine if the current invocation is running in a development environment. */ public isDevMode(): boolean { return this.isValueTrue(this.get(this.devModeVariable)); } /** - * It returns true if the string value represents a boolean true value. + * Helper function to determine if a value is considered thruthy. * - * @param {string} value - * @returns boolean + * @param value The value to check for truthiness. */ public isValueTrue(value: string): boolean { const truthyValues: string[] = ['1', 'y', 'yes', 't', 'true', 'on']; @@ -94,8 +95,9 @@ class EnvironmentVariablesService implements ConfigServiceInterface { } /** - * It parses the key/value data present in the _X_AMZN_TRACE_ID environment variable - * and returns it as an object when available. + * Get the AWS X-Ray Trace data from the environment variable. + * + * The method parses the environment variable `_X_AMZN_TRACE_ID` and returns an object with the key-value pairs. */ private getXrayTraceData(): Record | undefined { const xRayTraceEnv = this.get(this.xRayTraceIdVariable); diff --git a/packages/commons/src/middleware/cleanupMiddlewares.ts b/packages/commons/src/middleware/cleanupMiddlewares.ts index 4f1046e6f1..231a7ff4c1 100644 --- a/packages/commons/src/middleware/cleanupMiddlewares.ts +++ b/packages/commons/src/middleware/cleanupMiddlewares.ts @@ -6,7 +6,11 @@ import { } from './constants.js'; import type { MiddyLikeRequest, CleanupFunction } from '../types/middy.js'; -// Typeguard to assert that an object is of Function type +/** + * Typeguard to assert that an object is of Function type. + * + * @param obj The object to check + */ const isFunction = (obj: unknown): obj is CleanupFunction => { return typeof obj === 'function'; }; @@ -54,8 +58,8 @@ const isFunction = (obj: unknown): obj is CleanupFunction => { * }; * ``` * - * @param request - The Middy request object - * @param options - An optional object that can be used to pass options to the function + * @param request The Middy request object + * @param options An optional object that can be used to pass options to the function */ const cleanupMiddlewares = async (request: MiddyLikeRequest): Promise => { const cleanupFunctionNames = [ diff --git a/packages/commons/src/middleware/constants.ts b/packages/commons/src/middleware/constants.ts index cf38261995..07ee21df1a 100644 --- a/packages/commons/src/middleware/constants.ts +++ b/packages/commons/src/middleware/constants.ts @@ -4,9 +4,29 @@ * is present and execute it. */ const PREFIX = 'powertools-for-aws'; +/** + * Key to store the tracer instance in the `request.internal` object. + * + * @see {@link cleanupMiddlewares} + */ const TRACER_KEY = `${PREFIX}.tracer`; +/** + * Key to store the metrics instance in the `request.internal` object. + * + * @see {@link cleanupMiddlewares} + */ const METRICS_KEY = `${PREFIX}.metrics`; +/** + * Key to store the logger instance in the `request.internal` object. + * + * @see {@link cleanupMiddlewares} + */ const LOGGER_KEY = `${PREFIX}.logger`; +/** + * Key to store the idempotency instance in the `request.internal` object. + * + * @see {@link cleanupMiddlewares} + */ const IDEMPOTENCY_KEY = `${PREFIX}.idempotency`; export { PREFIX, TRACER_KEY, METRICS_KEY, LOGGER_KEY, IDEMPOTENCY_KEY }; diff --git a/packages/commons/src/typeUtils.ts b/packages/commons/src/typeUtils.ts index 6611aea46c..3cd53b81fc 100644 --- a/packages/commons/src/typeUtils.ts +++ b/packages/commons/src/typeUtils.ts @@ -1,5 +1,15 @@ /** - * Returns true if the passed value is a record (object). + * Check if a value is a record. + * + * @example + * ```typescript + * import { isRecord } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = { key: 'value' }; + * if (isRecord(value)) { + * // value is a record + * } + * ``` * * @param value The value to check */ @@ -15,6 +25,16 @@ const isRecord = ( /** * Check if a value is a string. * + * @example + * ```typescript + * import { isString } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = 'foo'; + * if (isString(value)) { + * // value is a string + * } + * ``` + * * @param value The value to check */ const isString = (value: unknown): value is string => { @@ -24,6 +44,16 @@ const isString = (value: unknown): value is string => { /** * Check if a value is a number. * + * @example + * ```typescript + * import { isNumber } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = 42; + * if (isNumber(value)) { + * // value is a number + * } + * ``` + * * @param value The value to check */ const isNumber = (value: unknown): value is number => { @@ -33,6 +63,16 @@ const isNumber = (value: unknown): value is number => { /** * Check if a value is an integer number. * + * @example + * ```typescript + * import { isIntegerNumber } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = 42; + * if (isIntegerNumber(value)) { + * // value is an integer number + * } + * ``` + * * @param value The value to check */ const isIntegerNumber = (value: unknown): value is number => { @@ -42,6 +82,18 @@ const isIntegerNumber = (value: unknown): value is number => { /** * Check if a value is truthy. * + * @example + * ```typescript + * import { isTruthy } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = 'yes'; + * if (isTruthy(value)) { + * // value is truthy + * } + * ``` + * + * @see https://github.com/getify/You-Dont-Know-JS/blob/2nd-ed/types-grammar/ch4.md#toboolean + * * @param value The value to check */ const isTruthy = (value: unknown): boolean => { @@ -61,7 +113,17 @@ const isTruthy = (value: unknown): boolean => { }; /** - * Check if a value is null. + * Check if a value is `null`. + * + * @example + * ```typescript + * import { isNull } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = null; + * if (isNull(value)) { + * // value is null + * } + * ``` * * @param value The value to check */ @@ -70,7 +132,17 @@ const isNull = (value: unknown): value is null => { }; /** - * Check if a value is null or undefined. + * Check if a value is `null` or `undefined`. + * + * @example + * ```typescript + * import { isNullOrUndefined } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const value = null; + * if (isNullOrUndefined(value)) { + * // value is null or undefined + * } + * ``` * * @param value The value to check */ @@ -81,6 +153,16 @@ const isNullOrUndefined = (value: unknown): value is null | undefined => { /** * Get the type of a value as a string. * + * @example + * ```typescript + * import { getType } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const type = getType('foo'); // 'string' + * const otherType = getType(42); // 'number' + * const anotherType = getType({ key: 'value' }); // 'object' + * const unknownType = getType(Symbol('foo')); // 'unknown' + * ``` + * * @param value The value to check */ const getType = (value: unknown): string => { @@ -104,6 +186,21 @@ const getType = (value: unknown): string => { /** * Compare two arrays for strict equality. * + * This function compares each element in the arrays, regardless of order. + * + * @example + * ```typescript + * import { areArraysEqual } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const left = [1, 2, 3]; + * const right = [3, 2, 1]; + * const equal = areArraysEqual(left, right); // true + * + * const otherLeft = [1, 2, 3]; + * const otherRight = [1, 2, 4]; + * const otherEqual = areArraysEqual(otherLeft, otherRight); // false + * ``` + * * @param left The left array to compare * @param right The right array to compare */ @@ -118,6 +215,19 @@ const areArraysEqual = (left: unknown[], right: unknown[]): boolean => { /** * Compare two records for strict equality. * + * @example + * ```typescript + * import { areRecordsEqual } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const left = { key: 'value' }; + * const right = { key: 'value' }; + * const equal = areRecordsEqual(left, right); // true + * + * const otherLeft = { key: 'value' }; + * const otherRight = { key: 'other value' }; + * const otherEqual = areRecordsEqual(otherLeft, otherRight); // false + * ``` + * * @param left The left record to compare * @param right The right record to compare */ @@ -143,6 +253,27 @@ const areRecordsEqual = ( * is compared to the corresponding key and value from right. If the * values are primitives, then they are compared using strict equality. * + * @example + * ```typescript + * import { isStrictEqual } from '@aws-lambda-powertools/commons/typeUtils'; + * + * const left = { key: 'value' }; + * const right = { key: 'value' }; + * const equal = isStrictEqual(left, right); // true + * + * const otherLeft = [1, 2, 3]; + * const otherRight = [3, 2, 1]; + * const otherEqual = isStrictEqual(otherLeft, otherRight); // true + * + * const anotherLeft = 'foo'; + * const anotherRight = 'bar'; + * const anotherEqual = isStrictEqual(anotherLeft, anotherRight); // false + * + * const yetAnotherLeft = 42; + * const yetAnotherRight = 42; + * const yetAnotherEqual = isStrictEqual(yetAnotherLeft, yetAnotherRight); // true + * ``` + * * @param left Left side of strict equality comparison * @param right Right side of strict equality comparison */ diff --git a/packages/commons/src/types/ConfigServiceInterface.ts b/packages/commons/src/types/ConfigServiceInterface.ts index 1e249f9373..2c9e5b2d4f 100644 --- a/packages/commons/src/types/ConfigServiceInterface.ts +++ b/packages/commons/src/types/ConfigServiceInterface.ts @@ -1,49 +1,49 @@ /** - * Abstract class ConfigService + * @abstract ConfigServiceInterface * * This class defines common methods and variables that can be set by the developer * in the runtime. */ interface ConfigServiceInterface { /** - * It returns the value of an environment variable that has given name. + * Get the value of an environment variable by name. * - * @param {string} name - * @returns {string} + * @param {string} name The name of the environment variable to fetch. */ get(name: string): string; /** - * It returns the value of the POWERTOOLS_SERVICE_NAME environment variable. - * - * @returns {string} + * Get the value of the `POWERTOOLS_SERVICE_NAME` environment variable. */ getServiceName(): string; /** - * It returns the value of the _X_AMZN_TRACE_ID environment variable. + * Get the value of the `_X_AMZN_TRACE_ID` environment variable. * * The AWS X-Ray Trace data available in the environment variable has this format: * `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=557abcec3ee5a047;Sampled=1`, * * The actual Trace ID is: `1-5759e988-bd862e3fe1be46a994272793`. - * - * @returns {string|undefined} */ getXrayTraceId(): string | undefined; /** - * It returns true if the `POWERTOOLS_DEV` environment variable is set to truthy value. + * Determine if the current invocation is part of a sampled X-Ray trace. * - * @returns {boolean} + * The AWS X-Ray Trace data available in the environment variable has this format: + * `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=557abcec3ee5a047;Sampled=1`, + */ + getXrayTraceSampled(): boolean; + + /** + * Determine if the current invocation is running in a development environment. */ isDevMode(): boolean; /** - * It returns true if the string value represents a boolean true value. + * Helper function to determine if a value is considered thruthy. * - * @param {string} value - * @returns boolean + * @param value The value to check for truthiness. */ isValueTrue(value: string): boolean; } diff --git a/packages/commons/src/types/LambdaInterface.ts b/packages/commons/src/types/LambdaInterface.ts index 7eb6609487..c92d58249c 100644 --- a/packages/commons/src/types/LambdaInterface.ts +++ b/packages/commons/src/types/LambdaInterface.ts @@ -1,20 +1,49 @@ import type { Handler } from 'aws-lambda'; +/** + * A type that represents a synchronous Lambda handler. + * + * @deprecated Use {@link AsyncHandler} instead. + */ type SyncHandler = ( event: Parameters[0], context: Parameters[1], callback: Parameters[2] ) => void; +/** + * A type that represents an asynchronous Lambda handler. + */ type AsyncHandler = ( event: Parameters[0], context: Parameters[1] ) => Promise[2]>[1]>>; +/** + * An interface that represents an object-oriented Lambda handler. + * + * @example + * ```typescript + * import type { Context } from 'aws-lambda'; + * import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; + * + * class Lambda implements LambdaInterface { + * public handler = async (event: unknown, context: Context) => { + * // Your handler code here + * } + * } + * + * const handlerClass = new Lambda(); + * export const handler = lambda.handler.bind(lambda); + * ``` + */ interface LambdaInterface { handler: SyncHandler | AsyncHandler; } +/** + * A decorator function that can be used to decorate a method in a class that implements the `LambdaInterface`. + */ type HandlerMethodDecorator = ( target: LambdaInterface, propertyKey: string | symbol, diff --git a/packages/commons/src/types/awsSdk.ts b/packages/commons/src/types/awsSdk.ts index f29d1bc8ff..6fb385a97a 100644 --- a/packages/commons/src/types/awsSdk.ts +++ b/packages/commons/src/types/awsSdk.ts @@ -1,6 +1,7 @@ /** + * Minimal interface for an AWS SDK v3 client. + * * @internal - * Minimal interface for an AWS SDK v3 client */ interface SdkClient { send: (args: unknown) => Promise; @@ -14,8 +15,9 @@ interface SdkClient { } /** - * @internal * Minimal type for the arguments passed to a middleware function + * + * @internal */ type MiddlewareArgsLike = { request: { headers: { [key: string]: string } } }; diff --git a/packages/commons/src/types/index.ts b/packages/commons/src/types/index.ts index b57b2dfec4..24fb3b8032 100644 --- a/packages/commons/src/types/index.ts +++ b/packages/commons/src/types/index.ts @@ -1,6 +1,8 @@ export type { + Request, MiddlewareLikeObj, MiddyLikeRequest, + MiddlewareFn, CleanupFunction, } from './middy.js'; export type { SdkClient, MiddlewareArgsLike } from './awsSdk.js'; diff --git a/packages/commons/src/types/json.ts b/packages/commons/src/types/json.ts index 765491c699..2e04a0cdca 100644 --- a/packages/commons/src/types/json.ts +++ b/packages/commons/src/types/json.ts @@ -1,6 +1,18 @@ +/** + * A type that represents base JSON primitives. + */ type JSONPrimitive = string | number | boolean | null | undefined; +/** + * A type that represents a JSON value. + */ type JSONValue = JSONPrimitive | JSONObject | JSONArray; +/** + * A type that represents a JSON object. + */ type JSONObject = { [key: number | string]: JSONValue }; +/** + * A type that represents a JSON array. + */ type JSONArray = Array; export type { JSONPrimitive, JSONValue, JSONObject, JSONArray }; diff --git a/packages/commons/src/types/middy.ts b/packages/commons/src/types/middy.ts index 92c94a0ba5..ab48fcbf6e 100644 --- a/packages/commons/src/types/middy.ts +++ b/packages/commons/src/types/middy.ts @@ -1,11 +1,17 @@ import type { Context } from 'aws-lambda'; /** - * We need to define these types and interfaces here because we can't import them from @middy/core. - * Importing them from @middy/core would introduce a dependency on @middy/core, which we don't want - * because we want to keep it as an optional dependency. Those users who don't use the Powertools for AWS Lambda (TypeScript) middleware - * and use `tsc` to compile their code will get an error if we import from @middy/core, see #1068. - * Given that we use a subset of the @middy/core types, we can define them here and avoid the dependency. + * This type represents the shape of a Middy.js request object. + * + * @note We need to define these types and interfaces here because we can't import them from Middy.js. + * + * Importing them from Middy.js would introduce a dependency on it, which we don't want + * because we want to keep it as an optional dependency. + * + * Those users who don't use the Powertools for AWS Lambda (TypeScript) middleware + * and use `tsc` to compile their code will get an error if we import them directly, see #1068. + * + * Given that we use a subset of Middy.js types, we can define them here and avoid the dependency. */ type Request< TEvent = unknown, @@ -22,6 +28,11 @@ type Request< }; }; +/** + * This type represents the shape of a middleware function that makes up a middleware object. + * + * @see {@link MiddlewareLikeObj} + */ type MiddlewareFn< TEvent = unknown, TResult = unknown, @@ -29,6 +40,9 @@ type MiddlewareFn< TContext extends Context = Context, > = (request: Request) => unknown; +/** + * This type represents the shape of a middleware object that can be passed to the `use` method of a Middy-like middleware. + */ type MiddlewareLikeObj< TEvent = unknown, TResult = unknown, @@ -40,6 +54,9 @@ type MiddlewareLikeObj< onError?: MiddlewareFn; }; +/** + * This type represents the `request` object that is passed to each middleware in the middleware chain. + */ type MiddyLikeRequest = { event: unknown; context: Context; @@ -54,7 +71,15 @@ type MiddyLikeRequest = { * Cleanup function that is used to cleanup resources when a middleware returns early. * Each Powertools for AWS middleware that needs to perform cleanup operations will * store a cleanup function with this signature in the `request.internal` object. + * + * @see {@link cleanupMiddlewares} */ type CleanupFunction = (request: MiddyLikeRequest) => Promise; -export type { MiddlewareLikeObj, MiddyLikeRequest, CleanupFunction }; +export type { + Request, + MiddlewareFn, + MiddlewareLikeObj, + MiddyLikeRequest, + CleanupFunction, +}; diff --git a/packages/commons/src/version.ts b/packages/commons/src/version.ts index 504dfc4fc1..e70a23da4b 100644 --- a/packages/commons/src/version.ts +++ b/packages/commons/src/version.ts @@ -1,2 +1,2 @@ // this file is auto generated, do not modify -export const PT_VERSION = '2.1.0'; +export const PT_VERSION = '2.1.1'; diff --git a/packages/commons/typedoc.json b/packages/commons/typedoc.json index 879b1d55e7..d3799003ef 100644 --- a/packages/commons/typedoc.json +++ b/packages/commons/typedoc.json @@ -1,7 +1,10 @@ { - "extends": ["../../typedoc.base.json"], + "extends": [ + "../../typedoc.base.json" + ], "entryPoints": [ - "./src/index.ts" + "./src/index.ts", + "./src/types/index.ts" ], - "readme": "README.md" + "readme": "./README.md" } \ No newline at end of file diff --git a/packages/idempotency/CHANGELOG.md b/packages/idempotency/CHANGELOG.md index aa264f4aa1..f567aae99c 100644 --- a/packages/idempotency/CHANGELOG.md +++ b/packages/idempotency/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/idempotency + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index fd2dd2ab4c..95138b1bde 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/idempotency", - "version": "2.1.0", + "version": "2.1.1", "description": "The idempotency package for the Powertools for AWS Lambda (TypeScript) library. It provides options to make your Lambda functions idempotent and safe to retry.", "author": { "name": "Amazon Web Services", @@ -100,8 +100,8 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", - "@aws-lambda-powertools/jmespath": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1", + "@aws-lambda-powertools/jmespath": "^2.1.1" }, "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", @@ -129,8 +129,8 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/lib-dynamodb": "^3.554.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/lib-dynamodb": "^3.574.0", "aws-sdk-client-mock": "^4.0.0", "aws-sdk-client-mock-jest": "^4.0.0" } diff --git a/packages/jmespath/CHANGELOG.md b/packages/jmespath/CHANGELOG.md index ee58a16690..9fae502a58 100644 --- a/packages/jmespath/CHANGELOG.md +++ b/packages/jmespath/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/jmespath + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) diff --git a/packages/jmespath/package.json b/packages/jmespath/package.json index 8f02821021..683c17577b 100644 --- a/packages/jmespath/package.json +++ b/packages/jmespath/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/jmespath", - "version": "2.1.0", + "version": "2.1.1", "description": "A type safe and modern jmespath module to parse and extract data from JSON documents using JMESPath", "author": { "name": "Amazon Web Services", @@ -74,7 +74,7 @@ "lib" ], "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" }, "repository": { "type": "git", diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index 7ad2b20095..8d786ee69c 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/logger + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/logger diff --git a/packages/logger/package.json b/packages/logger/package.json index 7499ee4787..8bcd89ab00 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/logger", - "version": "2.1.0", + "version": "2.1.1", "description": "The logging package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -88,7 +88,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", + "@aws-lambda-powertools/commons": "^2.1.1", "lodash.merge": "^4.6.2" }, "keywords": [ diff --git a/packages/logger/tests/unit/Logger.test.ts b/packages/logger/tests/unit/Logger.test.ts index 0d79edd22a..e9e34beace 100644 --- a/packages/logger/tests/unit/Logger.test.ts +++ b/packages/logger/tests/unit/Logger.test.ts @@ -375,6 +375,9 @@ describe('Class: Logger', () => { getXrayTraceId(): string | undefined { return undefined; }, + getXrayTraceSampled() { + return true; + }, isDevMode(): boolean { return false; }, diff --git a/packages/logger/tests/unit/middleware/middy.test.ts b/packages/logger/tests/unit/middleware/middy.test.ts index 532b923c03..5cc612f5eb 100644 --- a/packages/logger/tests/unit/middleware/middy.test.ts +++ b/packages/logger/tests/unit/middleware/middy.test.ts @@ -295,6 +295,9 @@ describe('Middy middleware', () => { getXrayTraceId(): string | undefined { return undefined; }, + getXrayTraceSampled(): boolean { + return false; + }, isDevMode(): boolean { return false; }, diff --git a/packages/metrics/CHANGELOG.md b/packages/metrics/CHANGELOG.md index 840853630c..5f514138ae 100644 --- a/packages/metrics/CHANGELOG.md +++ b/packages/metrics/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/metrics + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/metrics diff --git a/packages/metrics/package.json b/packages/metrics/package.json index bdfc48b56b..64df02b435 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/metrics", - "version": "2.1.0", + "version": "2.1.1", "description": "The metrics package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -66,7 +66,7 @@ "main": "./lib/cjs/index.js", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.554.0", + "@aws-sdk/client-cloudwatch": "^3.574.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, @@ -89,7 +89,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" }, "keywords": [ "aws", diff --git a/packages/metrics/tests/unit/Metrics.test.ts b/packages/metrics/tests/unit/Metrics.test.ts index a1ee97ac4a..54af8ddfb7 100644 --- a/packages/metrics/tests/unit/Metrics.test.ts +++ b/packages/metrics/tests/unit/Metrics.test.ts @@ -245,6 +245,9 @@ describe('Class: Metrics', () => { getXrayTraceId(): string | undefined { return 'test-trace-id'; }, + getXrayTraceSampled(): boolean { + return true; + }, isDevMode(): boolean { return false; }, diff --git a/packages/parameters/CHANGELOG.md b/packages/parameters/CHANGELOG.md index ae100b877c..572c301582 100644 --- a/packages/parameters/CHANGELOG.md +++ b/packages/parameters/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/parameters + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/parameters diff --git a/packages/parameters/package.json b/packages/parameters/package.json index e515c8c07c..2cde347273 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parameters", - "version": "2.1.0", + "version": "2.1.1", "description": "The parameters package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -158,17 +158,17 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.554.0", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-secrets-manager": "^3.554.0", - "@aws-sdk/client-ssm": "^3.554.0", - "@aws-sdk/util-dynamodb": "^3.554.0", - "@smithy/util-base64": "^2.3.0", + "@aws-sdk/client-appconfigdata": "^3.574.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-secrets-manager": "^3.574.0", + "@aws-sdk/client-ssm": "^3.574.0", + "@aws-sdk/util-dynamodb": "^3.574.0", + "@smithy/util-base64": "^3.0.0", "aws-sdk-client-mock": "^4.0.0", "aws-sdk-client-mock-jest": "^4.0.0" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0" + "@aws-lambda-powertools/commons": "^2.1.1" }, "peerDependencies": { "@aws-sdk/client-appconfigdata": ">=3.x", diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index 46ab4f0191..611393dad6 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + + +### Bug Fixes + +* **parser:** lambda function url cognitoIdentity and principalOrgId nullable ([#2430](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2430)) ([3c3e393](https://github.com/aws-powertools/powertools-lambda-typescript/commit/3c3e393df47d28a6bddb2a9d01cd6fefea3db15e)) +* **parser:** set APIGatewayProxyEventSchema body and query string keys to be nullable ([#2465](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2465)) ([7ce5b3c](https://github.com/aws-powertools/powertools-lambda-typescript/commit/7ce5b3cff88b6eadeda1041b4eb076af2ebd848d)) +* **parser:** set etag optional for delete object notifications ([#2429](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2429)) ([100e223](https://github.com/aws-powertools/powertools-lambda-typescript/commit/100e2238b45e224a369cc7a349f78cafda3f94b7)) + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/parser diff --git a/packages/parser/package.json b/packages/parser/package.json index 52f6fc96fd..814bdcd815 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parser", - "version": "2.1.0", + "version": "2.1.1", "description": "The parser package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", diff --git a/packages/parser/src/schemas/apigw.ts b/packages/parser/src/schemas/apigw.ts index 72878de03a..6369385e69 100644 --- a/packages/parser/src/schemas/apigw.ts +++ b/packages/parser/src/schemas/apigw.ts @@ -97,14 +97,14 @@ const APIGatewayProxyEventSchema = z.object({ 'OPTIONS', ]), headers: z.record(z.string()).optional(), - queryStringParameters: z.record(z.string()).optional(), + queryStringParameters: z.record(z.string()).nullable(), multiValueHeaders: z.record(z.array(z.string())).optional(), - multiValueQueryStringParameters: z.record(z.array(z.string())).optional(), + multiValueQueryStringParameters: z.record(z.array(z.string())).nullable(), requestContext: APIGatewayEventRequestContext, pathParameters: z.record(z.string()).optional().nullish(), stageVariables: z.record(z.string()).optional().nullish(), isBase64Encoded: z.boolean().optional(), - body: z.string().optional(), + body: z.string().nullable(), }); export { APIGatewayProxyEventSchema, APIGatewayCert }; diff --git a/packages/parser/src/schemas/apigwv2.ts b/packages/parser/src/schemas/apigwv2.ts index ec5cfb6156..77491d4864 100644 --- a/packages/parser/src/schemas/apigwv2.ts +++ b/packages/parser/src/schemas/apigwv2.ts @@ -13,14 +13,16 @@ const RequestContextV2Authorizer = z.object({ accessKey: z.string().optional(), accountId: z.string().optional(), callerId: z.string().optional(), - principalOrgId: z.string().optional(), + principalOrgId: z.string().nullish(), userArn: z.string().optional(), userId: z.string().optional(), - cognitoIdentity: z.object({ - amr: z.array(z.string()), - identityId: z.string(), - identityPoolId: z.string(), - }), + cognitoIdentity: z + .object({ + amr: z.array(z.string()), + identityId: z.string(), + identityPoolId: z.string(), + }) + .nullish(), }) .optional(), lambda: z.record(z.string(), z.any()).optional(), @@ -42,7 +44,7 @@ const RequestContextV2 = z.object({ .object({ clientCert: APIGatewayCert.optional(), }) - .optional(), + .nullish(), domainName: z.string(), domainPrefix: z.string(), http: RequestContextV2Http, diff --git a/packages/parser/src/schemas/s3.ts b/packages/parser/src/schemas/s3.ts index 558776ffa5..ccc8fca155 100644 --- a/packages/parser/src/schemas/s3.ts +++ b/packages/parser/src/schemas/s3.ts @@ -72,8 +72,8 @@ const S3EventNotificationEventBridgeDetailSchema = z.object({ }), object: z.object({ key: z.string(), - size: z.number().nonnegative().optional(), - etag: z.string(), + size: z.number().nonnegative().optional(), // not present in DeleteObject events + etag: z.string().optional(), // not present in DeleteObject events 'version-id': z.string().optional(), sequencer: z.string().optional(), }), diff --git a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json b/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json index 6a80fff823..3177f389b4 100644 --- a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json +++ b/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json @@ -20,6 +20,9 @@ "queryStringParameters": { "QueryString1": "queryValue1" }, + "multiValueQueryStringParameters": { + "QueryString1": ["queryValue1"] + }, "pathParameters": {}, "stageVariables": { "StageVar1": "stageValue1" @@ -64,5 +67,6 @@ "resourceId": "ANY /request", "resourcePath": "/request", "stage": "test" - } + }, + "body": null } diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json b/packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json index af52ee2fef..8006b93e40 100644 --- a/packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json +++ b/packages/parser/tests/events/s3EventBridgeNotificationObjectDeletedEvent.json @@ -16,8 +16,6 @@ }, "object": { "key": "IMG_m7fzo3.jpg", - "size": 184662, - "etag": "4e68adba0abe2dc8653dc3354e14c01d", "sequencer": "006408CAD69598B05E" }, "request-id": "0BH729840619AG5K", diff --git a/packages/parser/tests/unit/envelopes/apigwt.test.ts b/packages/parser/tests/unit/envelopes/apigwt.test.ts index 0a1e675ae4..1055e15f43 100644 --- a/packages/parser/tests/unit/envelopes/apigwt.test.ts +++ b/packages/parser/tests/unit/envelopes/apigwt.test.ts @@ -24,7 +24,7 @@ describe('ApigwEnvelope ', () => { it('should throw no body provided', () => { const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = undefined; + testEvent.body = null; expect(() => ApiGatewayEnvelope.parse(testEvent, TestSchema)).toThrow( ParseError @@ -56,7 +56,7 @@ describe('ApigwEnvelope ', () => { it('should return success false with original body if no body provided', () => { const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = undefined; + testEvent.body = null; const resp = ApiGatewayEnvelope.safeParse(testEvent, TestSchema); expect(resp).toEqual({ diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index cfef867657..e9b0a3449b 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -15,4 +15,10 @@ describe('Lambda ', () => { lambdaFunctionUrlEvent ); }); + + it('should parse url IAM event', () => { + const urlIAMEvent = TestEvents.lambdaFunctionUrlIAMEvent; + + expect(LambdaFunctionUrlSchema.parse(urlIAMEvent)).toEqual(urlIAMEvent); + }); }); diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index ee9d3fff25..58905a4660 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/testing-utils + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/testing-utils diff --git a/packages/testing/package.json b/packages/testing/package.json index 4d95ed6156..3e54972069 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.1.0", + "version": "2.1.1", "description": "A package containing utilities to test your serverless workloads", "author": { "name": "Amazon Web Services", @@ -95,9 +95,9 @@ "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.121.1-alpha.0", - "@aws-sdk/client-lambda": "^3.554.0", - "@smithy/util-utf8": "^2.3.0", - "aws-cdk-lib": "^2.137.0", - "esbuild": "^0.20.2" + "@aws-sdk/client-lambda": "^3.574.0", + "@smithy/util-utf8": "^3.0.0", + "aws-cdk-lib": "^2.141.0", + "esbuild": "^0.21.1" } } diff --git a/packages/tracer/CHANGELOG.md b/packages/tracer/CHANGELOG.md index d36e2bb6e7..bb42a95d99 100644 --- a/packages/tracer/CHANGELOG.md +++ b/packages/tracer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.1](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.0...v2.1.1) (2024-05-14) + +**Note:** Version bump only for package @aws-lambda-powertools/tracer + + + + + # [2.1.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.0.4...v2.1.0) (2024-04-17) **Note:** Version bump only for package @aws-lambda-powertools/tracer diff --git a/packages/tracer/package.json b/packages/tracer/package.json index a248ea8f4f..47cc3f23e3 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/tracer", - "version": "2.1.0", + "version": "2.1.1", "description": "The tracer package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -32,10 +32,10 @@ "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.554.0", - "@aws-sdk/client-xray": "^3.554.0", + "@aws-sdk/client-dynamodb": "^3.574.0", + "@aws-sdk/client-xray": "^3.574.0", "@types/promise-retry": "^1.1.6", - "aws-sdk": "^2.1599.0", + "aws-sdk": "^2.1617.0", "axios": "^1.6.8", "promise-retry": "^2.0.1" }, @@ -93,7 +93,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.1.0", + "@aws-lambda-powertools/commons": "^2.1.1", "aws-xray-sdk-core": "^3.6.0" }, "keywords": [ diff --git a/packages/tracer/src/Tracer.ts b/packages/tracer/src/Tracer.ts index 7be6674705..e16840af40 100644 --- a/packages/tracer/src/Tracer.ts +++ b/packages/tracer/src/Tracer.ts @@ -253,6 +253,7 @@ class Tracer extends Utility implements TracerInterface { * } * ``` * + * @deprecated Use {@link captureAWSv3Client} instead. * @param aws - AWS SDK v2 import * @returns AWS - Instrumented AWS SDK */ @@ -281,7 +282,7 @@ class Tracer extends Utility implements TracerInterface { * ... * } * ``` - * + * @deprecated Use {@link captureAWSv3Client} instead. * @param service - AWS SDK v2 client * @returns service - Instrumented AWS SDK v2 client */ diff --git a/packages/tracer/src/provider/ProviderService.ts b/packages/tracer/src/provider/ProviderService.ts index dd5de88c26..65ae0798bc 100644 --- a/packages/tracer/src/provider/ProviderService.ts +++ b/packages/tracer/src/provider/ProviderService.ts @@ -31,10 +31,16 @@ import { import type { DiagnosticsChannel } from 'undici-types'; class ProviderService implements ProviderServiceInterface { + /** + * @deprecated + */ public captureAWS(awssdk: T): T { return captureAWS(awssdk); } + /** + * @deprecated + */ public captureAWSClient(service: T): T { return captureAWSClient(service); } diff --git a/packages/tracer/tests/unit/Tracer.test.ts b/packages/tracer/tests/unit/Tracer.test.ts index f293717c58..c958d3d0ad 100644 --- a/packages/tracer/tests/unit/Tracer.test.ts +++ b/packages/tracer/tests/unit/Tracer.test.ts @@ -154,6 +154,9 @@ describe('Class: Tracer', () => { getXrayTraceId() { return '1-abcdef12-3456abcdef123456abcdef12'; }, + getXrayTraceSampled() { + return false; + }, }; // Act diff --git a/typedoc.base.json b/typedoc.base.json index ce978059e9..6ee9d0352c 100644 --- a/typedoc.base.json +++ b/typedoc.base.json @@ -6,6 +6,6 @@ "**/node_modules/**", "**/*.test.ts", "**/*.json", - "docs/snippets" + "examples/snippets" ] } \ No newline at end of file diff --git a/typedoc.json b/typedoc.json index c277d0cc80..daadd7bc2e 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,5 +1,7 @@ { - "entryPoints": ["packages/*"], + "entryPoints": [ + "packages/*" + ], "entryPointStrategy": "packages", "name": "Powertools for AWS Lambda (Typescript) API Reference", "readme": "README.md", @@ -8,7 +10,6 @@ "**/node_modules/**", "**/*.test.ts", "**/*.json", - "docs/snippets", "layers", "examples/**" ],