diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 44dba616348f75..157c7d74948eb6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:12.0.0 +FROM ghcr.io/containerbase/devcontainer:12.0.1 diff --git a/.github/actions/calculate-prefetch-matrix/action.yml b/.github/actions/calculate-prefetch-matrix/action.yml index c895efeaef0cce..9e9c3db11f22cb 100644 --- a/.github/actions/calculate-prefetch-matrix/action.yml +++ b/.github/actions/calculate-prefetch-matrix/action.yml @@ -34,7 +34,7 @@ runs: - name: Check cache miss for MacOS id: macos-cache - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: node_modules key: ${{ env.MACOS_KEY }} @@ -43,7 +43,7 @@ runs: - name: Check cache miss for Windows id: windows-cache - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: node_modules key: ${{ env.WINDOWS_KEY }} diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index a1fb66fa64c406..2b764695b007c7 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -34,7 +34,7 @@ runs: - name: Restore `node_modules` id: node-modules-restore - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: node_modules key: ${{ env.CACHE_KEY }} @@ -64,7 +64,7 @@ runs: - name: Cache and restore `pnpm store` if: env.CACHE_HIT != 'true' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: ${{ env.PNPM_STORE }} key: | @@ -87,7 +87,7 @@ runs: - name: Write `node_modules` cache if: inputs.save-cache == 'true' && env.CACHE_HIT != 'true' - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: node_modules key: ${{ env.CACHE_KEY }} diff --git a/.github/label-actions.yml b/.github/label-actions.yml index 56de4ca48ad858..ebf7aa9e8997ed 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -313,7 +313,7 @@ Thanks, the Renovate team. close: true - close-reason: 'not planned' + close-reason: 'outdated' 'auto:bad-vibes': comment: > @@ -410,6 +410,8 @@ Thanks, the Renovate team + close: true + close-reason: 'outdated' 'auto:bug-converted': comment: > diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 493dcc1e68d936..88c54ea55ef3a7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ concurrency: env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} NODE_VERSION: 20 - PDM_VERSION: 2.19.1 # renovate: datasource=pypi depName=pdm + PDM_VERSION: 2.19.2 # renovate: datasource=pypi depName=pdm DRY_RUN: true TEST_LEGACY_DECRYPTION: true SPARSE_CHECKOUT: |- @@ -94,7 +94,7 @@ jobs: run: gh api ${{ env.PR_URL }} | jq -rc '${{ env.JQ_FILTER }}' >> "$GITHUB_OUTPUT" - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -133,7 +133,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -172,7 +172,7 @@ jobs: steps: - name: Checkout code if: needs.setup.outputs.os-matrix-is-full && runner.os != 'Linux' - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -197,7 +197,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -208,7 +208,7 @@ jobs: os: ${{ runner.os }} - name: Restore eslint cache - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .cache/eslint key: eslint-main-cache @@ -227,7 +227,7 @@ jobs: - name: Save eslint cache if: github.event_name == 'push' - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .cache/eslint key: eslint-main-cache @@ -243,7 +243,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -254,7 +254,7 @@ jobs: os: ${{ runner.os }} - name: Restore prettier cache - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .cache/prettier key: prettier-main-cache @@ -279,7 +279,7 @@ jobs: - name: Save prettier cache if: github.event_name == 'push' - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .cache/prettier key: prettier-main-cache @@ -292,7 +292,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -322,7 +322,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -361,7 +361,7 @@ jobs: include: ${{ fromJSON(needs.setup.outputs.test-shard-matrix) }} steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -372,7 +372,7 @@ jobs: os: ${{ runner.os }} - name: Cache jest - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .cache/jest key: | @@ -410,7 +410,7 @@ jobs: - name: Save coverage artifacts if: (success() || failure()) && github.event.pull_request.draft != true && matrix.coverage - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: ${{ matrix.upload-artifact-name }} path: | @@ -424,7 +424,7 @@ jobs: if: (success() || failure()) && github.event_name != 'merge_group' && github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: filter: blob:none # we don't need all blobs show-progress: false @@ -453,7 +453,7 @@ jobs: if: (success() || failure()) && github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: filter: blob:none # we don't need all blobs sparse-checkout: ${{ env.SPARSE_CHECKOUT }} @@ -544,7 +544,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -566,7 +566,7 @@ jobs: run: pnpm test-e2e:pack - name: Upload - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: renovate-package path: renovate-0.0.0-semantic-release.tgz @@ -580,7 +580,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -604,13 +604,13 @@ jobs: run: pnpm build:docs env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SKIP_GITHUB_ISSUES: ${{ github.event_name == 'pull_request' && 'true' || '' }} + SKIP_GITHUB_ISSUES: ${{ (github.event_name == 'pull_request' || github.event_name == 'merge_group') && 'true' || '' }} - name: Test docs run: pnpm test:docs - name: Upload - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: docs path: tmp/docs/ @@ -627,7 +627,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -676,14 +676,14 @@ jobs: packages: write steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 # zero stands for full checkout, which is required for semantic-release filter: blob:none # we don't need all blobs, only the full tree show-progress: false - name: docker-config - uses: containerbase/internal-tools@0843383b5e53e235aeac40facdf523fe51b8ddb3 # v3.4.23 + uses: containerbase/internal-tools@8d6d9564612c4027a8da337b31baea2fa8cd14f7 # v3.4.27 with: command: docker-config @@ -693,7 +693,7 @@ jobs: node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - - uses: sigstore/cosign-installer@4959ce089c160fddf62f7b42464195ba1a56d382 # v3.6.0 + - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 - name: Docker registry login run: | diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index cfb8a20191c47a..990538cefdd254 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -41,7 +41,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 + uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: languages: javascript @@ -51,7 +51,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 + uses: github/codeql-action/autobuild@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -65,4 +65,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 + uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 960ec77d6c408d..79d6e1c7766401 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index 63682f28fa956a..cfed85e68c51cd 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -18,7 +18,7 @@ jobs: if: github.event.pull_request.draft != true steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 496538ac2851c6..2a4602fdc66508 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -20,7 +20,7 @@ jobs: steps: - name: 'Checkout code' - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: persist-credentials: false show-progress: false @@ -43,7 +43,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: 'Upload artifact' - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: SARIF file path: results.sarif @@ -51,6 +51,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 + uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: sarif_file: results.sarif diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 501e3fc68bef7f..2b5f7c6a79bb7a 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -21,7 +21,7 @@ jobs: - full steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false @@ -31,7 +31,7 @@ jobs: format: 'sarif' output: 'trivy-results.sarif' - - uses: github/codeql-action/upload-sarif@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 + - uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: sarif_file: trivy-results.sarif category: 'docker-image-${{ matrix.tag }}' diff --git a/.github/workflows/undesirable-test-additions.yaml b/.github/workflows/undesirable-test-additions.yaml new file mode 100644 index 00000000000000..54f1748ec472ff --- /dev/null +++ b/.github/workflows/undesirable-test-additions.yaml @@ -0,0 +1,109 @@ +name: Check for Undesirable Code + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + check_undesirable_code: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + with: + fetch-depth: 0 # Fetch all history for comparison + sparse-checkout: true + ref: ${{ github.event.pull_request.head.ref }} + - name: Check for undesirable code + run: | + #!/bin/bash + set -e + + echo "### Fetching base branch for comparison..." + git fetch origin ${{ github.event.pull_request.base.ref }} + + BASE_BRANCH=origin/${{ github.event.pull_request.base.ref }} + echo "Base branch is: $BASE_BRANCH" + echo "Current HEAD is: $(git rev-parse HEAD)" + BASE_BRANCH_REF=${{ github.event.pull_request.base.sha }} + echo "Base branch ref for this PR is: $BASE_BRANCH_REF" + + echo "### Calculating diff for '*.spec.ts' files..." + git diff $BASE_BRANCH_REF -- '*.spec.ts' > diff_spec_ts.txt + + echo "### Counting additions and deletions of snapshots..." + ADDED=$(grep '^+' diff_spec_ts.txt | grep -v '^+++' | grep -E '\.toMatch(Snapshot|InlineSnapshot)\(' | wc -l || true) + DELETED=$(grep '^-' diff_spec_ts.txt | grep -v '^---' | grep -E '\.toMatch(Snapshot|InlineSnapshot)\(' | wc -l || true) + + if [ "$ADDED" -gt "$DELETED" ]; then + echo "❌ Error: Snapshots have been added in this PR. Use toMatch instead." + exit 1 + else + echo "✅ Snapshot code check passed." + fi + + echo "### Calculating file changes in '__fixtures__' directories..." + git diff --name-status $BASE_BRANCH..HEAD > diff_name_status.txt + + echo "### Processing added files in '__fixtures__' directories..." + ADDED_FIXTURES=$(grep '^A' diff_name_status.txt | awk '{print $2}' | grep '/__fixtures__/' || true) + NUM_ADDED_FIXTURES=$(echo "$ADDED_FIXTURES" | grep -c . || true) + echo "Added files in '__fixtures__':" + echo "$ADDED_FIXTURES" + echo "Total number of added files in '__fixtures__': $NUM_ADDED_FIXTURES" + + echo "### Processing deleted files in '__fixtures__' directories..." + DELETED_FIXTURES=$(grep '^D' diff_name_status.txt | awk '{print $2}' | grep '/__fixtures__/' || true) + NUM_DELETED_FIXTURES=$(echo "$DELETED_FIXTURES" | grep -c . || true) + echo "Deleted files in '__fixtures__':" + echo "$DELETED_FIXTURES" + echo "Total number of deleted files in '__fixtures__': $NUM_DELETED_FIXTURES" + + echo "### Processing renamed files involving '__fixtures__' directories..." + RENAME_ENTRIES=$(grep '^R' diff_name_status.txt || true) + echo "$RENAME_ENTRIES" + + while read -r line; do + if [ -z "$line" ]; then + continue + fi + STATUS=$(echo "$line" | awk '{print $1}') + OLD_PATH=$(echo "$line" | awk '{print $2}') + NEW_PATH=$(echo "$line" | awk '{print $3}') + + echo "Processing rename: $OLD_PATH -> $NEW_PATH" + + OLD_IN_FIXTURES=0 + NEW_IN_FIXTURES=0 + + if echo "$OLD_PATH" | grep -q '/__fixtures__/'; then + OLD_IN_FIXTURES=1 + fi + + if echo "$NEW_PATH" | grep -q '/__fixtures__/'; then + NEW_IN_FIXTURES=1 + fi + + if [ "$OLD_IN_FIXTURES" -eq 1 ] && [ "$NEW_IN_FIXTURES" -eq 0 ]; then + NUM_DELETED_FIXTURES=$((NUM_DELETED_FIXTURES + 1)) + echo "File moved out of '__fixtures__': $OLD_PATH -> $NEW_PATH" + elif [ "$OLD_IN_FIXTURES" -eq 0 ] && [ "$NEW_IN_FIXTURES" -eq 1 ]; then + NUM_ADDED_FIXTURES=$((NUM_ADDED_FIXTURES + 1)) + echo "File moved into '__fixtures__': $OLD_PATH -> $NEW_PATH" + else + echo "File renamed within the same directory: $OLD_PATH -> $NEW_PATH" + fi + done <<< "$RENAME_ENTRIES" + + echo "Updated total number of added files in '__fixtures__': $NUM_ADDED_FIXTURES" + echo "Updated total number of deleted files in '__fixtures__': $NUM_DELETED_FIXTURES" + + if [ "$NUM_ADDED_FIXTURES" -gt "$NUM_DELETED_FIXTURES" ]; then + echo "❌ Error: More files have been added to '__fixtures__' directories than deleted." + exit 1 + else + echo "✅ Fixtures files check passed." + fi + + echo "🎉 All checks passed successfully." diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index fe13effd0cf18f..9abdf9985637c9 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -17,7 +17,7 @@ jobs: contents: write pull-requests: write steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false diff --git a/.github/workflows/ws_scan.yaml b/.github/workflows/ws_scan.yaml index d1ee721b46d39e..6198b3da1deb01 100644 --- a/.github/workflows/ws_scan.yaml +++ b/.github/workflows/ws_scan.yaml @@ -11,7 +11,7 @@ jobs: WS_SCAN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: show-progress: false diff --git a/.nvmrc b/.nvmrc index 3516580bbbc04b..2a393af592b8cd 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.17.0 +20.18.0 diff --git a/.prettierrc.json b/.prettierrc.json index a20502b7f06d84..544138be45652a 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,4 +1,3 @@ { - "singleQuote": true, - "trailingComma": "all" + "singleQuote": true } diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d65612c092e351..279c61f0adb5e5 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2123,6 +2123,7 @@ Beware: configuring Renovate to automerge without any tests can lead to broken b By default, Renovate won't update any package versions to unstable versions (e.g. `4.0.0-rc3`) unless the current version has the same `major.minor.patch` and was _already_ unstable (e.g. it was already on `4.0.0-rc2`). Renovate will also not "jump" unstable versions automatically, e.g. if you are on `4.0.0-rc2` and newer versions `4.0.0` and `4.1.0-alpha.1` exist then Renovate will update you to `4.0.0` only. If you need to force permanent unstable updates for a package, you can add a package rule setting `ignoreUnstable` to `false`. +In that case you will usually also want to set `respectLatest` to `false` so that Renovate considers versions ahead of `latest`. Also check out the `followTag` configuration option above if you wish Renovate to keep you pinned to a particular release tag. @@ -2855,6 +2856,24 @@ The following example matches any file in directories starting with `app/`: It is recommended that you avoid using "negative" globs, like `**/!(package.json)`, because such patterns might still return true if they match against the lock file name (e.g. `package-lock.json`). +### matchJsonata + +Use the `matchJsonata` field to define custom matching logic using [JSONata](https://jsonata.org/) query logic. +Renovate will evaluate the provided JSONata expressions against the passed values (`manager`, `packageName`, etc.). + +See [the JSONata docs](https://docs.jsonata.org/) for more details on JSONata syntax. + +Here are some example `matchJsonata` strings for inspiration: + +``` +$exists(deprecationMessage) +$exists(vulnerabilityFixVersion) +manager = 'dockerfile' and depType = 'final' +updateType = 'major' and newVersionAgeInDays < 7 +``` + +`matchJsonata` accepts an array of strings, and will return `true` if any of those JSONata expressions evaluate to `true`. + ### matchManagers Use this field to restrict rules to a particular package manager. e.g. @@ -3494,8 +3513,19 @@ Set `pruneBranchAfterAutomerge` to `false` to keep the branch after automerging. ## pruneStaleBranches -Configure to `false` to disable deleting orphan branches and autoclosing PRs. -Defaults to `true`. +By default, Renovate will "prune" any of its own branches/PRs which it thinks are no longer needed. +Such branches are referred to as "stale", and may be the result of Open, Merged, or Closed/Ignored PRs. +It usually doesn't _know_ why they're there, instead it simply knows that it has no need for them. + +If a branch appears stale but has been modified by a different git author, then Renovate won't delete the branch or autoclose any associated PR. +Instead, it will update the title to append " - abandoned" plus add a comment noting that autoclosing is skipped. + +If a branch appears stale and hasn't been modified, then: + +- If an Open PR exist for the branch, then Renovate will rename the PR to append " - autoclosed" before closing/abandoning it +- Renovate will delete the branch + +You can configure `pruneStaleBranches=false` to disable deleting orphan branches and autoclosing PRs, but then you will be responsible for such branch/PR "cleanup" so it is not recommended. ## rangeStrategy diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 8c09f106f5d0e1..7d87fbae155ef3 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -307,7 +307,7 @@ Renovate will get the credentials with the [`google-auth-library`](https://www.n service_account: ${{ env.SERVICE_ACCOUNT }} - name: renovate - uses: renovatebot/github-action@v40.3.1 + uses: renovatebot/github-action@v40.3.2 env: RENOVATE_HOST_RULES: | [ @@ -478,7 +478,7 @@ Make sure to install the Google Cloud SDK into the custom image, as you need the For example: ```Dockerfile -FROM renovate/renovate:38.101.1 +FROM renovate/renovate:38.110.2 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... diff --git a/docs/usage/examples/opentelemetry.md b/docs/usage/examples/opentelemetry.md index b5dd4d05db112b..d6d553f241ac1d 100644 --- a/docs/usage/examples/opentelemetry.md +++ b/docs/usage/examples/opentelemetry.md @@ -13,13 +13,13 @@ version: '3' services: # Jaeger jaeger: - image: jaegertracing/all-in-one:1.61.0 + image: jaegertracing/all-in-one:1.62.0 ports: - '16686:16686' - '4317' otel-collector: - image: otel/opentelemetry-collector-contrib:0.110.0 + image: otel/opentelemetry-collector-contrib:0.111.0 command: ['--config=/etc/otel-collector-config.yml'] volumes: - ./otel-collector-config.yml:/etc/otel-collector-config.yml diff --git a/docs/usage/examples/self-hosting.md b/docs/usage/examples/self-hosting.md index 87c4e8b797f26f..13738a9c6af557 100644 --- a/docs/usage/examples/self-hosting.md +++ b/docs/usage/examples/self-hosting.md @@ -25,8 +25,8 @@ It builds `latest` based on the `main` branch and all SemVer tags are published ```sh title="Example of valid tags" docker run --rm renovate/renovate docker run --rm renovate/renovate:38 -docker run --rm renovate/renovate:38.101 -docker run --rm renovate/renovate:38.101.1 +docker run --rm renovate/renovate:38.110 +docker run --rm renovate/renovate:38.110.2 ``` @@ -62,7 +62,7 @@ spec: - name: renovate # Update this to the latest available and then enable Renovate on # the manifest - image: renovate/renovate:38.101.1 + image: renovate/renovate:38.110.2 args: - user/repo # Environment Variables @@ -121,7 +121,7 @@ spec: template: spec: containers: - - image: renovate/renovate:38.101.1 + - image: renovate/renovate:38.110.2 name: renovate-bot env: # For illustration purposes, please use secrets. - name: RENOVATE_PLATFORM @@ -367,7 +367,7 @@ spec: containers: - name: renovate # Update this to the latest available and then enable Renovate on the manifest - image: renovate/renovate:38.101.1 + image: renovate/renovate:38.110.2 volumeMounts: - name: ssh-key-volume readOnly: true diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 95b3b68a623568..21900eb2e3adf1 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -515,7 +515,7 @@ const options: RenovateOptions[] = [ description: 'Change this value to override the default Renovate sidecar image.', type: 'string', - default: 'ghcr.io/containerbase/sidecar:11.11.29', + default: 'ghcr.io/containerbase/sidecar:11.11.30', globalOnly: true, }, { @@ -1513,6 +1513,18 @@ const options: RenovateOptions[] = [ cli: false, env: false, }, + { + name: 'matchJsonata', + description: + 'A JSONata expression to match against the full config object. Valid only within a `packageRules` object.', + type: 'array', + subType: 'string', + stage: 'package', + parents: ['packageRules'], + mergeable: true, + cli: false, + env: false, + }, // Version behavior { name: 'allowedVersions', diff --git a/lib/config/presets/internal/group.ts b/lib/config/presets/internal/group.ts index d171a8a801880f..e3db5f98e77335 100644 --- a/lib/config/presets/internal/group.ts +++ b/lib/config/presets/internal/group.ts @@ -54,6 +54,15 @@ const staticGroups = { }, ], }, + atlaskit: { + description: 'Group all Atlassian `@atlaskit` packages together.', + packageRules: [ + { + extends: ['packages:atlaskit'], + groupName: 'Atlassian Atlaskit packages', + }, + ], + }, codemirror: { description: 'Group CodeMirror packages together.', packageRules: [ diff --git a/lib/config/presets/internal/packages.ts b/lib/config/presets/internal/packages.ts index 2cf62a5ced6fe7..461f48302b91d2 100644 --- a/lib/config/presets/internal/packages.ts +++ b/lib/config/presets/internal/packages.ts @@ -16,6 +16,10 @@ export const presets: Record = { description: 'All packages published by Apollo GraphQL.', matchSourceUrls: ['https://github.com/apollographql/**'], }, + atlaskit: { + description: 'All @atlaskit packages published by Atlassian.', + matchPackageNames: ['@atlaskit/**'], + }, emberTemplateLint: { description: 'All ember-template-lint packages.', matchPackageNames: ['ember-template-lint**'], diff --git a/lib/config/types.ts b/lib/config/types.ts index d92dc7886c5bfd..4b7169d16869dc 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -381,6 +381,7 @@ export interface PackageRule matchRepositories?: string[]; matchSourceUrls?: string[]; matchUpdateTypes?: UpdateType[]; + matchJsonata?: string[]; registryUrls?: string[] | null; vulnerabilitySeverity?: string; vulnerabilityFixVersion?: string; @@ -547,6 +548,7 @@ export interface PackageRuleInputConfig extends Record { packageRules?: (PackageRule & PackageRuleInputConfig)[]; releaseTimestamp?: string | null; repository?: string; + currentVersionAgeInDays?: number; currentVersionTimestamp?: string; enabled?: boolean; skipReason?: SkipReason; diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index 4eb07aa8cafb15..a49e75c0de319e 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -129,6 +129,20 @@ describe('config/validation', () => { expect(errors).toMatchSnapshot(); }); + it('catches invalid jsonata expressions', async () => { + const config = { + packageRules: [ + { + matchJsonata: ['packageName = "foo"', '{{{something wrong}'], + enabled: true, + }, + ], + }; + const { errors } = await configValidation.validateConfig('repo', config); + expect(errors).toHaveLength(1); + expect(errors[0].message).toContain('Invalid JSONata expression'); + }); + it('catches invalid allowedVersions regex', async () => { const config = { packageRules: [ @@ -306,6 +320,11 @@ describe('config/validation', () => { defaultRegistryUrlTemplate: [], transformTemplates: [{}], }, + bar: { + description: 'foo', + defaultRegistryUrlTemplate: 'bar', + transformTemplates: ['foo = "bar"', 'bar[0'], + }, }, } as any; const { errors } = await configValidation.validateConfig('repo', config); diff --git a/lib/config/validation.ts b/lib/config/validation.ts index fdcf487a20a52f..d139cb42c10436 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -8,6 +8,7 @@ import type { } from '../modules/manager/custom/regex/types'; import type { CustomManager } from '../modules/manager/custom/types'; import type { HostRule } from '../types'; +import { getExpression } from '../util/jsonata'; import { regEx } from '../util/regex'; import { getRegexPredicate, @@ -442,6 +443,7 @@ export async function validateConfig( 'matchCurrentAge', 'matchRepositories', 'matchNewValue', + 'matchJsonata', ]; if (key === 'packageRules') { for (const [subIndex, packageRule] of val.entries()) { @@ -835,6 +837,18 @@ export async function validateConfig( } } } + + if (key === 'matchJsonata' && is.array(val, is.string)) { + for (const expression of val) { + const res = getExpression(expression); + if (res instanceof Error) { + errors.push({ + topic: 'Configuration Error', + message: `Invalid JSONata expression for ${currentPath}: ${res.message}`, + }); + } + } + } } function sortAll(a: ValidationMessage, b: ValidationMessage): number { diff --git a/lib/data/monorepo.json b/lib/data/monorepo.json index c6bcdffc871ef2..1ebc7878cdb444 100644 --- a/lib/data/monorepo.json +++ b/lib/data/monorepo.json @@ -285,6 +285,7 @@ "feign": "https://github.com/OpenFeign/feign", "fela": "https://github.com/robinweser/fela", "fimbullinter": "https://github.com/fimbullinter/wotan", + "flipper": "https://github.com/flippercloud/flipper", "flopflip": "https://github.com/tdeekens/flopflip", "fontsource": [ "https://github.com/fontsource/fontsource", @@ -321,7 +322,8 @@ "https://github.com/FasterXML/jackson", "https://github.com/FasterXML/jackson-databind", "https://github.com/FasterXML/jackson-dataformats-binary", - "https://github.com/FasterXML/jackson-dataformats-text" + "https://github.com/FasterXML/jackson-dataformats-text", + "https://github.com/FasterXML/jackson-module-kotlin" ], "jasmine": "https://github.com/jasmine/jasmine", "javahamcrest": "https://github.com/hamcrest/JavaHamcrest", diff --git a/lib/logger/utils.spec.ts b/lib/logger/utils.spec.ts index 3d36dc577e00ab..df0fb726fed246 100644 --- a/lib/logger/utils.spec.ts +++ b/lib/logger/utils.spec.ts @@ -48,6 +48,7 @@ describe('logger/utils', () => { ${'redis://:somepw@172.32.11.71:6379/0'} | ${'redis://**redacted**@172.32.11.71:6379/0'} ${'some text with\r\n url: https://somepw@domain.com\nand some more'} | ${'some text with\r\n url: https://**redacted**@domain.com\nand some more'} ${'[git://domain.com](git://pw@domain.com)'} | ${'[git://domain.com](git://**redacted**@domain.com)'} + ${'data:text/vnd-example;foo=bar;base64,R0lGODdh'} | ${'data:text/vnd-example;**redacted**'} ${'user@domain.com'} | ${'user@domain.com'} `('sanitizeValue("$input") == "$output"', ({ input, output }) => { expect(sanitizeValue(input)).toBe(output); diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index ac2f5ec5f28b12..f04c0f8132ad9e 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -324,9 +324,12 @@ export function validateLogLevel( // Can't use `util/regex` because of circular reference to logger const urlRe = /[a-z]{3,9}:\/\/[^@/]+@[a-z0-9.-]+/gi; const urlCredRe = /\/\/[^@]+@/g; +const dataUriCredRe = /^(data:[0-9a-z-]+\/[0-9a-z-]+;).+/i; export function sanitizeUrls(text: string): string { - return text.replace(urlRe, (url) => { - return url.replace(urlCredRe, '//**redacted**@'); - }); + return text + .replace(urlRe, (url) => { + return url.replace(urlCredRe, '//**redacted**@'); + }) + .replace(dataUriCredRe, '$1**redacted**'); } diff --git a/lib/modules/datasource/custom/index.spec.ts b/lib/modules/datasource/custom/index.spec.ts index 2eb0f46212fa22..62574bdf774c59 100644 --- a/lib/modules/datasource/custom/index.spec.ts +++ b/lib/modules/datasource/custom/index.spec.ts @@ -229,7 +229,7 @@ describe('modules/datasource/custom/index', () => { expect(result).toEqual(expected); }); - it('returns null if transformation using jsonata rules fail', async () => { + it('returns null if transformation compilation using jsonata fails', async () => { httpMock .scope('https://example.com') .get('/v1') @@ -248,9 +248,34 @@ describe('modules/datasource/custom/index', () => { }, }); expect(result).toBeNull(); - expect(logger.debug).toHaveBeenCalledWith( - { err: expect.any(Object), transformTemplate: '$[.name = "Alice" and' }, - 'Error while transforming response', + expect(logger.once.warn).toHaveBeenCalledWith( + { errorMessage: 'The symbol "." cannot be used as a unary operator' }, + 'Invalid JSONata expression: $[.name = "Alice" and', + ); + }); + + it('returns null if jsonata expression evaluation fails', async () => { + httpMock + .scope('https://example.com') + .get('/v1') + .reply(200, '1.0.0 \n2.0.0 \n 3.0.0 ', { + 'Content-Type': 'text/plain', + }); + const result = await getPkgReleases({ + datasource: `${CustomDatasource.id}.foo`, + packageName: 'myPackage', + customDatasources: { + foo: { + defaultRegistryUrlTemplate: 'https://example.com/v1', + transformTemplates: ['$notafunction()'], + format: 'plain', + }, + }, + }); + expect(result).toBeNull(); + expect(logger.once.warn).toHaveBeenCalledWith( + { err: expect.any(Object) }, + 'Error while evaluating JSONata expression: $notafunction()', ); }); diff --git a/lib/modules/datasource/custom/index.ts b/lib/modules/datasource/custom/index.ts index 0ecdc11bc8547c..372d15e97ab685 100644 --- a/lib/modules/datasource/custom/index.ts +++ b/lib/modules/datasource/custom/index.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; -import jsonata from 'jsonata'; import { logger } from '../../../logger'; +import { getExpression } from '../../../util/jsonata'; import { Datasource } from '../datasource'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; import { fetchers } from './formats'; @@ -46,13 +46,22 @@ export class CustomDatasource extends Datasource { logger.trace({ data }, `Custom manager fetcher '${format}' returned data.`); for (const transformTemplate of transformTemplates) { + const expression = getExpression(transformTemplate); + + if (expression instanceof Error) { + logger.once.warn( + { errorMessage: expression.message }, + `Invalid JSONata expression: ${transformTemplate}`, + ); + return null; + } + try { - const expression = jsonata(transformTemplate); data = await expression.evaluate(data); } catch (err) { - logger.debug( - { err, transformTemplate }, - 'Error while transforming response', + logger.once.warn( + { err }, + `Error while evaluating JSONata expression: ${transformTemplate}`, ); return null; } diff --git a/lib/modules/datasource/sbt-package/index.spec.ts b/lib/modules/datasource/sbt-package/index.spec.ts index 5613cdd4c1dbf0..45510d2c9402a6 100644 --- a/lib/modules/datasource/sbt-package/index.spec.ts +++ b/lib/modules/datasource/sbt-package/index.spec.ts @@ -2,12 +2,17 @@ import { codeBlock } from 'common-tags'; import { getPkgReleases } from '..'; import { Fixtures } from '../../../../test/fixtures'; import * as httpMock from '../../../../test/http-mock'; +import { mocked } from '../../../../test/util'; +import * as _packageCache from '../../../util/cache/package'; import { regEx } from '../../../util/regex'; import * as mavenVersioning from '../../versioning/maven'; import { MAVEN_REPO } from '../maven/common'; import { extractPageLinks } from './util'; import { SbtPackageDatasource } from '.'; +jest.mock('../../../util/cache/package'); +const packageCache = mocked(_packageCache); + describe('modules/datasource/sbt-package/index', () => { it('parses Maven index directory', () => { expect( @@ -62,12 +67,13 @@ describe('modules/datasource/sbt-package/index', () => { 200, codeBlock` empty_2.12/ + ??? `, ) .get('/maven2/com/example/empty/') .reply(200, '') - .get('/maven2/com.example/') - .reply(404) + .get('/maven2/com/example/empty_but_invalid/') + .reply(404, '') .get('/maven2/com/example/empty/maven-metadata.xml') .reply(404) .get('/maven2/com/example/empty/index.html') @@ -114,12 +120,11 @@ describe('modules/datasource/sbt-package/index', () => { `, ) .get('/org/example/example/1.2.3/example-1.2.3.pom') - .twice() - .reply(200, '') + .reply(404) .get('/org/example/example_2.12/1.2.3/example-1.2.3.pom') - .reply(200, '') + .reply(404) .get('/org/example/example_2.12/1.2.3/example_2.12-1.2.3.pom') - .reply(200, ''); + .reply(404); const res = await getPkgReleases({ versioning: mavenVersioning.id, @@ -278,4 +283,35 @@ describe('modules/datasource/sbt-package/index', () => { expect(res).toMatchObject({}); }); }); + + describe('postprocessRelease', () => { + const datasource = new SbtPackageDatasource(); + + it('extracts URL from Maven POM file', async () => { + const registryUrl = 'https://repo.maven.apache.org/maven2/'; + const packageName = 'org.example:example'; + packageCache.get.mockImplementation(((ns: string, k: string) => + ns === 'datasource-sbt-package' && + k === `package-urls:${registryUrl}:${packageName}` + ? Promise.resolve([`${registryUrl}org/example/`]) + : Promise.resolve(undefined)) as never); + + httpMock + .scope(registryUrl) + .get('/org/example/1.2.3/example-1.2.3.pom') + .reply(200, codeBlock``, { + 'last-modified': 'Wed, 21 Oct 2015 07:28:00 GMT', + }); + + const res = await datasource.postprocessRelease( + { packageName, registryUrl }, + { version: '1.2.3' }, + ); + + expect(res).toEqual({ + version: '1.2.3', + releaseTimestamp: '2015-10-21T07:28:00.000Z', + }); + }); + }); }); diff --git a/lib/modules/datasource/sbt-package/index.ts b/lib/modules/datasource/sbt-package/index.ts index c0d5403b63055f..463661b51c7429 100644 --- a/lib/modules/datasource/sbt-package/index.ts +++ b/lib/modules/datasource/sbt-package/index.ts @@ -1,22 +1,41 @@ +import * as upath from 'upath'; import { XmlDocument } from 'xmldoc'; import { logger } from '../../../logger'; +import * as packageCache from '../../../util/cache/package'; +import { cache } from '../../../util/cache/package/decorator'; import { Http } from '../../../util/http'; import { regEx } from '../../../util/regex'; -import { ensureTrailingSlash } from '../../../util/url'; +import { ensureTrailingSlash, trimTrailingSlash } from '../../../util/url'; import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; import { MavenDatasource } from '../maven'; import { MAVEN_REPO } from '../maven/common'; import { downloadHttpProtocol } from '../maven/util'; +import { normalizeDate } from '../metadata'; import type { GetReleasesConfig, + PostprocessReleaseConfig, + PostprocessReleaseResult, RegistryStrategy, + Release, ReleaseResult, } from '../types'; import { extractPageLinks, getLatestVersion } from './util'; +interface ScalaDepCoordinate { + groupId: string; + artifactId: string; + scalaVersion?: string; +} + +interface PomInfo { + homepage?: string; + sourceUrl?: string; + releaseTimestamp?: string; +} + export class SbtPackageDatasource extends MavenDatasource { - static override id = 'sbt-package'; + static override readonly id = 'sbt-package'; override readonly defaultRegistryUrls = [MAVEN_REPO]; @@ -33,125 +52,265 @@ export class SbtPackageDatasource extends MavenDatasource { this.http = new Http('sbt'); } - async getArtifactSubdirs( - searchRoot: string, - artifact: string, - scalaVersion: string, - ): Promise { - const pkgUrl = ensureTrailingSlash(searchRoot); - const res = await downloadHttpProtocol(this.http, pkgUrl); - const indexContent = res?.body; - if (indexContent) { - const rootPath = new URL(pkgUrl).pathname; - let artifactSubdirs = extractPageLinks(indexContent, (href) => { + protected static parseDepCoordinate(packageName: string): ScalaDepCoordinate { + const [groupId, javaArtifactId] = packageName.split(':'); + const [artifactId, scalaVersion] = javaArtifactId.split('_'); + return { groupId, artifactId, scalaVersion }; + } + + async getSbtReleases( + registryUrl: string, + packageName: string, + ): Promise { + const { groupId, artifactId, scalaVersion } = + SbtPackageDatasource.parseDepCoordinate(packageName); + + const groupIdSplit = groupId.split('.'); + const repoRootUrl = ensureTrailingSlash(registryUrl); + + const validRootUrlKey = `valid-root-url:${registryUrl}:${packageName}`; + const validRootUrl = await packageCache.get( + 'datasource-sbt-package', + validRootUrlKey, + ); + + const packageRootUrls: string[] = []; + // istanbul ignore if: not easily testable + if (validRootUrl) { + packageRootUrls.push(validRootUrl); + } else { + const packageRootUrlWith = (sep: string): string => + `${repoRootUrl}${groupIdSplit.join(sep)}`; + packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('/'))); + packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('.'))); + } + + let dependencyUrl: string | undefined; + let packageUrls: string[] | undefined; + for (const packageRootUrl of packageRootUrls) { + const res = await downloadHttpProtocol(this.http, packageRootUrl); + if (!res) { + continue; + } + + await packageCache.set( + 'datasource-sbt-package', + validRootUrlKey, + packageRootUrl, + 30 * 24 * 60, + ); + + dependencyUrl = trimTrailingSlash(packageRootUrl); + + const rootPath = new URL(packageRootUrl).pathname; + const artifactSubdirs = extractPageLinks(res.body, (href) => { const path = href.replace(rootPath, ''); + if ( - path.startsWith(`${artifact}_native`) || - path.startsWith(`${artifact}_sjs`) + path.startsWith(`${artifactId}_native`) || + path.startsWith(`${artifactId}_sjs`) ) { return null; } - if (path === artifact || path.startsWith(`${artifact}_`)) { - return path; + if (path === artifactId || path.startsWith(`${artifactId}_`)) { + return ensureTrailingSlash(`${packageRootUrl}${path}`); } return null; }); - if ( - scalaVersion && - artifactSubdirs.includes(`${artifact}_${scalaVersion}`) - ) { - artifactSubdirs = [`${artifact}_${scalaVersion}`]; + if (scalaVersion) { + const scalaSubdir = artifactSubdirs.find((x) => + x.endsWith(`/${artifactId}_${scalaVersion}/`), + ); + if (scalaSubdir) { + packageUrls = [scalaSubdir]; + break; + } } - return artifactSubdirs; + + packageUrls = artifactSubdirs; + break; } - return null; - } + if (!packageUrls) { + return null; + } - async getPackageReleases( - searchRoot: string, - artifactSubdirs: string[] | null, - ): Promise { - if (artifactSubdirs) { - const releases: string[] = []; - for (const searchSubdir of artifactSubdirs) { - const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`); - const res = await downloadHttpProtocol(this.http, pkgUrl); - const content = res?.body; - if (content) { - const rootPath = new URL(pkgUrl).pathname; - const subdirReleases = extractPageLinks(content, (href) => { - const path = href.replace(rootPath, ''); - if (path.startsWith('.')) { - return null; - } - - return path; - }); - - subdirReleases.forEach((x) => releases.push(x)); - } + const invalidPackageUrlsKey = `invalid-package-urls:${registryUrl}:${packageName}`; + const invalidPackageUrls = new Set( + await packageCache.get( + 'datasource-sbt-package', + invalidPackageUrlsKey, + ), + ); + packageUrls = packageUrls.filter((url) => !invalidPackageUrls.has(url)); + + const allVersions = new Set(); + for (const pkgUrl of packageUrls) { + const res = await downloadHttpProtocol(this.http, pkgUrl); + // istanbul ignore if + if (!res) { + invalidPackageUrls.add(pkgUrl); + continue; } - if (releases.length) { - return [...new Set(releases)].sort(compare); + + const rootPath = new URL(pkgUrl).pathname; + const versions = extractPageLinks(res.body, (href) => { + const path = href.replace(rootPath, ''); + if (path.startsWith('.')) { + return null; + } + + return path; + }); + + for (const version of versions) { + allVersions.add(version); } } - return null; + if (invalidPackageUrls.size > 0) { + await packageCache.set( + 'datasource-sbt-package', + invalidPackageUrlsKey, + [...invalidPackageUrls], + 30 * 24 * 60, + ); + } + + if (packageUrls.length > 0) { + const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`; + await packageCache.set( + 'datasource-sbt-package', + packageUrlsKey, + packageUrls, + 30 * 24 * 60, + ); + } + + const versions = [...allVersions]; + if (!versions.length) { + return null; + } + + const releases: Release[] = [...allVersions] + .sort(compare) + .map((version) => ({ version })); + const res: ReleaseResult = { releases, dependencyUrl }; + + const latestVersion = getLatestVersion(versions); + const pomInfo = await this.getPomInfo( + registryUrl, + packageName, + latestVersion, + packageUrls, + ); + + if (pomInfo?.homepage) { + res.homepage = pomInfo.homepage; + } + + if (pomInfo?.sourceUrl) { + res.sourceUrl = pomInfo.sourceUrl; + } + + return res; } - async getUrls( - searchRoot: string, - artifactDirs: string[] | null, + async getPomInfo( + registryUrl: string, + packageName: string, version: string | null, - ): Promise> { - const result: Partial = {}; + pkgUrls?: string[], + ): Promise { + const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`; + // istanbul ignore next: will be covered later + const packageUrls = + pkgUrls ?? + (await packageCache.get( + 'datasource-sbt-package', + packageUrlsKey, + )); - if (!artifactDirs?.length) { - return result; + // istanbul ignore if + if (!packageUrls?.length) { + return null; } + // istanbul ignore if if (!version) { - return result; + return null; } - for (const artifactDir of artifactDirs) { + const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`; + const invalidPomFiles = new Set( + await packageCache.get( + 'datasource-sbt-package', + invalidPomFilesKey, + ), + ); + + const saveCache = async (): Promise => { + if (invalidPomFiles.size > 0) { + await packageCache.set( + 'datasource-sbt-package', + invalidPomFilesKey, + [...invalidPomFiles], + 30 * 24 * 60, + ); + } + }; + + for (const packageUrl of packageUrls) { + const artifactDir = upath.basename(packageUrl); const [artifact] = artifactDir.split('_'); - const pomFileNames = [ - `${artifactDir}-${version}.pom`, - `${artifact}-${version}.pom`, - ]; - for (const pomFileName of pomFileNames) { - const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`; + for (const pomFilePrefix of [artifactDir, artifact]) { + const pomFileName = `${pomFilePrefix}-${version}.pom`; + const pomUrl = `${packageUrl}${version}/${pomFileName}`; + if (invalidPomFiles.has(pomUrl)) { + continue; + } + const res = await downloadHttpProtocol(this.http, pomUrl); const content = res?.body; - if (content) { - const pomXml = new XmlDocument(content); - - const homepage = pomXml.valueWithPath('url'); - if (homepage) { - result.homepage = homepage; - } - - const sourceUrl = pomXml.valueWithPath('scm.url'); - if (sourceUrl) { - result.sourceUrl = sourceUrl - .replace(regEx(/^scm:/), '') - .replace(regEx(/^git:/), '') - .replace(regEx(/^git@github.com:/), 'https://github.com/') - .replace(regEx(/\.git$/), ''); - } - - return result; + if (!content) { + invalidPomFiles.add(pomUrl); + continue; + } + + const result: PomInfo = {}; + + const releaseTimestamp = normalizeDate(res.headers['last-modified']); + if (releaseTimestamp) { + result.releaseTimestamp = releaseTimestamp; + } + + const pomXml = new XmlDocument(content); + + const homepage = pomXml.valueWithPath('url'); + if (homepage) { + result.homepage = homepage; + } + + const sourceUrl = pomXml.valueWithPath('scm.url'); + if (sourceUrl) { + result.sourceUrl = sourceUrl + .replace(regEx(/^scm:/), '') + .replace(regEx(/^git:/), '') + .replace(regEx(/^git@github.com:/), 'https://github.com/') + .replace(regEx(/\.git$/), ''); } + + await saveCache(); + return result; } } - return result; + await saveCache(); + return null; } override async getReleases( @@ -163,58 +322,50 @@ export class SbtPackageDatasource extends MavenDatasource { return null; } - const [groupId, artifactId] = packageName.split(':'); - const groupIdSplit = groupId.split('.'); - const artifactIdSplit = artifactId.split('_'); - const [artifact, scalaVersion] = artifactIdSplit; - - const repoRoot = ensureTrailingSlash(registryUrl); - const searchRoots: string[] = []; - // Optimize lookup order - searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`); - searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`); - - for (let idx = 0; idx < searchRoots.length; idx += 1) { - const searchRoot = searchRoots[idx]; - const artifactSubdirs = await this.getArtifactSubdirs( - searchRoot, - artifact, - scalaVersion, - ); - const versions = await this.getPackageReleases( - searchRoot, - artifactSubdirs, - ); - const latestVersion = getLatestVersion(versions); - const urls = await this.getUrls( - searchRoot, - artifactSubdirs, - latestVersion, - ); - - const dependencyUrl = searchRoot; - - logger.trace({ dependency: packageName, versions }, `Package versions`); - if (versions) { - return { - ...urls, - dependencyUrl, - releases: versions.map((v) => ({ version: v })), - }; - } + const sbtReleases = await this.getSbtReleases(registryUrl, packageName); + if (sbtReleases) { + return sbtReleases; } logger.debug( - `No versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`, + `Sbt: no versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`, ); const mavenReleaseResult = await super.getReleases(config); if (mavenReleaseResult) { return mavenReleaseResult; } - logger.debug( - `No versions found for ${packageName} in ${searchRoots.length} repositories`, - ); + logger.debug(`Sbt: no versions found for "${packageName}"`); return null; } + + @cache({ + namespace: 'datasource-sbt-package', + key: ( + { registryUrl, packageName }: PostprocessReleaseConfig, + { version }: Release, + ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`, + ttlMinutes: 30 * 24 * 60, + }) + override async postprocessRelease( + config: PostprocessReleaseConfig, + release: Release, + ): Promise { + // istanbul ignore if + if (!config.registryUrl) { + return release; + } + + const res = await this.getPomInfo( + config.registryUrl, + config.packageName, + release.version, + ); + + if (res?.releaseTimestamp) { + release.releaseTimestamp = res.releaseTimestamp; + } + + return release; + } } diff --git a/lib/modules/datasource/sbt-plugin/index.ts b/lib/modules/datasource/sbt-plugin/index.ts index e053811936ec68..fc84d656421be0 100644 --- a/lib/modules/datasource/sbt-plugin/index.ts +++ b/lib/modules/datasource/sbt-plugin/index.ts @@ -1,12 +1,13 @@ +import { XmlDocument } from 'xmldoc'; import { logger } from '../../../logger'; import { Http } from '../../../util/http'; import { regEx } from '../../../util/regex'; import { ensureTrailingSlash } from '../../../util/url'; import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; +import { Datasource } from '../datasource'; import { MAVEN_REPO } from '../maven/common'; import { downloadHttpProtocol } from '../maven/util'; -import { SbtPackageDatasource } from '../sbt-package'; import { extractPageLinks, getLatestVersion } from '../sbt-package/util'; import type { GetReleasesConfig, @@ -17,17 +18,15 @@ import type { export const SBT_PLUGINS_REPO = 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases'; -export const defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO]; +export class SbtPluginDatasource extends Datasource { + static readonly id = 'sbt-plugin'; -export class SbtPluginDatasource extends SbtPackageDatasource { - static override readonly id = 'sbt-plugin'; + override readonly defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO]; - override readonly defaultRegistryUrls = defaultRegistryUrls; + override readonly defaultVersioning = ivyVersioning.id; override readonly registryStrategy: RegistryStrategy = 'merge'; - override readonly defaultVersioning = ivyVersioning.id; - override readonly sourceUrlSupport = 'package'; override readonly sourceUrlNote = 'The source URL is determined from the `scm` tags in the results.'; @@ -37,6 +36,130 @@ export class SbtPluginDatasource extends SbtPackageDatasource { this.http = new Http('sbt'); } + // istanbul ignore next: to be rewritten + async getArtifactSubdirs( + searchRoot: string, + artifact: string, + scalaVersion: string, + ): Promise { + const pkgUrl = ensureTrailingSlash(searchRoot); + const res = await downloadHttpProtocol(this.http, pkgUrl); + const indexContent = res?.body; + if (indexContent) { + const rootPath = new URL(pkgUrl).pathname; + let artifactSubdirs = extractPageLinks(indexContent, (href) => { + const path = href.replace(rootPath, ''); + if ( + path.startsWith(`${artifact}_native`) || + path.startsWith(`${artifact}_sjs`) + ) { + return null; + } + + if (path === artifact || path.startsWith(`${artifact}_`)) { + return path; + } + + return null; + }); + + if ( + scalaVersion && + artifactSubdirs.includes(`${artifact}_${scalaVersion}`) + ) { + artifactSubdirs = [`${artifact}_${scalaVersion}`]; + } + return artifactSubdirs; + } + + return null; + } + + // istanbul ignore next: to be rewritten + async getPackageReleases( + searchRoot: string, + artifactSubdirs: string[] | null, + ): Promise { + if (artifactSubdirs) { + const releases: string[] = []; + for (const searchSubdir of artifactSubdirs) { + const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`); + const res = await downloadHttpProtocol(this.http, pkgUrl); + const content = res?.body; + if (content) { + const rootPath = new URL(pkgUrl).pathname; + const subdirReleases = extractPageLinks(content, (href) => { + const path = href.replace(rootPath, ''); + if (path.startsWith('.')) { + return null; + } + + return path; + }); + + subdirReleases.forEach((x) => releases.push(x)); + } + } + if (releases.length) { + return [...new Set(releases)].sort(compare); + } + } + + return null; + } + + // istanbul ignore next: to be rewritten + async getUrls( + searchRoot: string, + artifactDirs: string[] | null, + version: string | null, + ): Promise> { + const result: Partial = {}; + + if (!artifactDirs?.length) { + return result; + } + + if (!version) { + return result; + } + + for (const artifactDir of artifactDirs) { + const [artifact] = artifactDir.split('_'); + const pomFileNames = [ + `${artifactDir}-${version}.pom`, + `${artifact}-${version}.pom`, + ]; + + for (const pomFileName of pomFileNames) { + const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`; + const res = await downloadHttpProtocol(this.http, pomUrl); + const content = res?.body; + if (content) { + const pomXml = new XmlDocument(content); + + const homepage = pomXml.valueWithPath('url'); + if (homepage) { + result.homepage = homepage; + } + + const sourceUrl = pomXml.valueWithPath('scm.url'); + if (sourceUrl) { + result.sourceUrl = sourceUrl + .replace(regEx(/^scm:/), '') + .replace(regEx(/^git:/), '') + .replace(regEx(/^git@github.com:/), 'https://github.com/') + .replace(regEx(/\.git$/), ''); + } + + return result; + } + } + } + + return result; + } + async resolvePluginReleases( rootUrl: string, artifact: string, diff --git a/lib/modules/manager/azure-pipelines/index.ts b/lib/modules/manager/azure-pipelines/index.ts index 6dffe661f22ec9..b589f3c51e39de 100644 --- a/lib/modules/manager/azure-pipelines/index.ts +++ b/lib/modules/manager/azure-pipelines/index.ts @@ -4,7 +4,7 @@ import { GitTagsDatasource } from '../../datasource/git-tags'; export { extractPackageFile } from './extract'; export const defaultConfig = { - fileMatch: ['azure.*pipelines?.*\\.ya?ml$'], + fileMatch: ['(^|/).azuredevops/.+\\.ya?ml$', 'azure.*pipelines?.*\\.ya?ml$'], enabled: false, }; diff --git a/lib/modules/manager/azure-pipelines/readme.md b/lib/modules/manager/azure-pipelines/readme.md index a7071cc26e1e7b..35c72c834a1c2e 100644 --- a/lib/modules/manager/azure-pipelines/readme.md +++ b/lib/modules/manager/azure-pipelines/readme.md @@ -44,7 +44,7 @@ resources: - container: linux image: ubuntu:24.04 - container: python - image: python:3.12@sha256:785fef11f44b7393c03d77032fd72e56af8b05442b051a151229145e5fbbcb29 + image: python:3.12@sha256:05855f5bf06f5a004b0c1a8aaac73a9d9ea54390fc289d3e80ef52c4f90d5585 stages: - stage: StageOne diff --git a/lib/modules/manager/docker-compose/extract.spec.ts b/lib/modules/manager/docker-compose/extract.spec.ts index b9436050d88ae1..a089c8b465a612 100644 --- a/lib/modules/manager/docker-compose/extract.spec.ts +++ b/lib/modules/manager/docker-compose/extract.spec.ts @@ -56,6 +56,33 @@ describe('modules/manager/docker-compose/extract', () => { expect(res?.deps).toHaveLength(1); }); + it('extracts can parse yaml tags for version 3', () => { + const compose = codeBlock` + web: + image: node:20.0.0 + ports: + - "80:8000" + worker: + extends: + service: web + ports: !reset null + `; + const res = extractPackageFile(compose, '', {}); + expect(res).toEqual({ + deps: [ + { + depName: 'node', + currentValue: '20.0.0', + currentDigest: undefined, + replaceString: 'node:20.0.0', + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + datasource: 'docker', + }, + ], + }); + }); + it('extracts image and replaces registry', () => { const compose = codeBlock` version: "3" diff --git a/lib/modules/manager/gitlabci-include/extract.ts b/lib/modules/manager/gitlabci-include/extract.ts index 026f51e80760a9..60eb93772a183a 100644 --- a/lib/modules/manager/gitlabci-include/extract.ts +++ b/lib/modules/manager/gitlabci-include/extract.ts @@ -14,7 +14,6 @@ import type { GitlabIncludeProject, GitlabPipeline, } from '../gitlabci/types'; -import { replaceReferenceTags } from '../gitlabci/utils'; import type { PackageDependency, PackageFileContent } from '../types'; function extractDepFromIncludeFile( @@ -76,7 +75,7 @@ export function extractPackageFile( : null; try { // TODO: use schema (#9610) - const docs = parseYaml(replaceReferenceTags(content), { + const docs = parseYaml(content, { uniqueKeys: false, }); for (const doc of docs) { diff --git a/lib/modules/manager/gitlabci/common.spec.ts b/lib/modules/manager/gitlabci/common.spec.ts index 9c491ef848f968..5f55bcdb4b83ec 100644 --- a/lib/modules/manager/gitlabci/common.spec.ts +++ b/lib/modules/manager/gitlabci/common.spec.ts @@ -1,7 +1,6 @@ import { codeBlock } from 'common-tags'; import { parseSingleYaml } from '../../../util/yaml'; import type { GitlabPipeline } from '../gitlabci/types'; -import { replaceReferenceTags } from '../gitlabci/utils'; import { filterIncludeFromGitlabPipeline, isGitlabIncludeComponent, @@ -12,7 +11,7 @@ import { // TODO: use schema (#9610) const pipeline = parseSingleYaml( - replaceReferenceTags(codeBlock` + codeBlock` include: - project: mikebryant/include-source-example file: /template.yaml @@ -25,7 +24,7 @@ const pipeline = parseSingleYaml( script: - !reference [.setup, script] - - !reference [arbitrary job name with space and no starting dot, nested1, nested2, nested3]`), + - !reference [arbitrary job name with space and no starting dot, nested1, nested2, nested3]`, ); const includeLocal = { local: 'something' }; const includeProject = { project: 'something' }; @@ -37,7 +36,15 @@ describe('modules/manager/gitlabci/common', () => { const filtered_pipeline = filterIncludeFromGitlabPipeline(pipeline); expect(filtered_pipeline).not.toHaveProperty('include'); expect(filtered_pipeline).toEqual({ - script: [null, null], + script: [ + ['.setup', 'script'], + [ + 'arbitrary job name with space and no starting dot', + 'nested1', + 'nested2', + 'nested3', + ], + ], }); }); }); diff --git a/lib/modules/manager/gitlabci/utils.spec.ts b/lib/modules/manager/gitlabci/utils.spec.ts index 3c563ce93cbb93..0b89036dd8f5df 100644 --- a/lib/modules/manager/gitlabci/utils.spec.ts +++ b/lib/modules/manager/gitlabci/utils.spec.ts @@ -1,6 +1,5 @@ -import { Fixtures } from '../../../../test/fixtures'; import type { PackageDependency } from '../types'; -import { getGitlabDep, replaceReferenceTags } from './utils'; +import { getGitlabDep } from './utils'; describe('modules/manager/gitlabci/utils', () => { describe('getGitlabDep', () => { @@ -82,12 +81,4 @@ describe('modules/manager/gitlabci/utils', () => { }); }); }); - - describe('replaceReferenceTags', () => { - it('replaces all !reference tags with empty strings', () => { - const yamlFileReferenceConfig = Fixtures.get('gitlab-ci.reference.yaml'); - const replaced = replaceReferenceTags(yamlFileReferenceConfig); - expect(replaced).not.toContain('!reference'); - }); - }); }); diff --git a/lib/modules/manager/gitlabci/utils.ts b/lib/modules/manager/gitlabci/utils.ts index e69552b2a61f69..1a861897df735d 100644 --- a/lib/modules/manager/gitlabci/utils.ts +++ b/lib/modules/manager/gitlabci/utils.ts @@ -2,19 +2,6 @@ import { regEx } from '../../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency } from '../types'; -const re = /!reference \[[^\]]+\]/g; - -/** - * Replaces GitLab reference tags before parsing, because our yaml parser cannot process them anyway. - * @param content pipeline yaml - * @returns replaced pipeline content - * https://docs.gitlab.com/ee/ci/yaml/#reference-tags - */ -export function replaceReferenceTags(content: string): string { - const res = content.replace(re, ''); - return res; -} - const depProxyRe = regEx( `(?\\$\\{?CI_DEPENDENCY_PROXY_(?:DIRECT_)?GROUP_IMAGE_PREFIX\\}?/)(?.+)`, ); diff --git a/lib/modules/manager/helmfile/artifacts.spec.ts b/lib/modules/manager/helmfile/artifacts.spec.ts index a6796903f6babe..ba5e7e6b5c6435 100644 --- a/lib/modules/manager/helmfile/artifacts.spec.ts +++ b/lib/modules/manager/helmfile/artifacts.spec.ts @@ -418,4 +418,94 @@ describe('modules/manager/helmfile/artifacts', () => { }, ]); }); + + it('updates lockfile with multidoc YAML', async () => { + const multidocYaml = codeBlock` + apiVersion: source.toolkit.fluxcd.io/v1beta2 + kind: HelmRepository + metadata: + name: metallb + namespace: flux-system + spec: + interval: 30m + url: https://metallb.github.io/metallb + --- + apiVersion: helm.toolkit.fluxcd.io/v2beta1 + kind: HelmRelease + metadata: + name: metallb + namespace: flux-system + spec: + interval: 5m + install: + createNamespace: true + targetNamespace: metallb-system + chart: + spec: + chart: metallb + version: 0.13.10 + sourceRef: + kind: HelmRepository + name: metallb + namespace: flux-system + values: + controller: + image: + repository: quay.io/metallb/controller + tag: v0.13.10 + speaker: + image: + repository: quay.io/metallb/speaker + tag: v0.13.10 + frr: + enabled: false + `; + const lockFileMultidoc = codeBlock` + version: 0.151.0 + dependencies: + - name: metallb + repository: https://metallb.github.io/metallb + version: 0.13.9 + digest: sha256:e284706b71f37b757a536703da4cb148d67901afbf1ab431f7d60a9852ca6eef + generated: "2023-03-08T21:32:06.122276997+01:00" + `; + const lockFileMultidocUpdated = codeBlock` + version: 0.151.0 + dependencies: + - name: metallb + repository: https://metallb.github.io/metallb + version: 0.13.10 + digest: sha256:9d83889176d005effb86041d30c20361625561cbfb439cbd16d7243225bac17c + generated: "2023-03-08T21:30:48.273709455+01:00" + `; + + git.getFile.mockResolvedValueOnce(lockFileMultidoc as never); + fs.getSiblingFileName.mockReturnValueOnce('helmfile.lock'); + const execSnapshots = mockExecAll(); + fs.readLocalFile.mockResolvedValueOnce(lockFileMultidocUpdated as never); + fs.privateCacheDir.mockReturnValue( + '/tmp/renovate/cache/__renovate-private-cache', + ); + fs.getParentDir.mockReturnValue(''); + const updatedDeps = [{ depName: 'metallb' }]; + expect( + await helmfile.updateArtifacts({ + packageFileName: 'helmfile.yaml', + updatedDeps, + newPackageFileContent: multidocYaml, + config, + }), + ).toEqual([ + { + file: { + type: 'addition', + path: 'helmfile.lock', + contents: lockFileMultidocUpdated, + }, + }, + ]); + expect(execSnapshots).toMatchObject([ + { cmd: 'helmfile deps -f helmfile.yaml' }, + ]); + }); }); diff --git a/lib/modules/manager/helmfile/artifacts.ts b/lib/modules/manager/helmfile/artifacts.ts index 21bcec72e6023e..745ee835e9f629 100644 --- a/lib/modules/manager/helmfile/artifacts.ts +++ b/lib/modules/manager/helmfile/artifacts.ts @@ -13,7 +13,7 @@ import { import { getFile } from '../../../util/git'; import { regEx } from '../../../util/regex'; import { Result } from '../../../util/result'; -import { parseSingleYaml } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { generateHelmEnvs } from '../helmv3/common'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; import { Doc, LockVersion } from './schema'; @@ -70,21 +70,24 @@ export async function updateArtifacts({ } const cmd: string[] = []; - const doc = parseSingleYaml(newPackageFileContent, { + const docs = parseYaml(newPackageFileContent, { removeTemplates: true, customSchema: Doc, + failureBehaviour: 'filter', }); - for (const value of coerceArray(doc.repositories).filter(isOCIRegistry)) { - const loginCmd = await generateRegistryLoginCmd( - value.name, - `https://${value.url}`, - // this extracts the hostname from url like format ghcr.ip/helm-charts - value.url.replace(regEx(/\/.*/), ''), - ); + for (const doc of docs) { + for (const value of coerceArray(doc.repositories).filter(isOCIRegistry)) { + const loginCmd = await generateRegistryLoginCmd( + value.name, + `https://${value.url}`, + // this extracts the hostname from url like format ghcr.ip/helm-charts + value.url.replace(regEx(/\/.*/), ''), + ); - if (loginCmd) { - cmd.push(loginCmd); + if (loginCmd) { + cmd.push(loginCmd); + } } } diff --git a/lib/modules/manager/npm/__fixtures__/inputs/02.json b/lib/modules/manager/npm/__fixtures__/inputs/02.json index d17132e5db5831..024a963584e16c 100644 --- a/lib/modules/manager/npm/__fixtures__/inputs/02.json +++ b/lib/modules/manager/npm/__fixtures__/inputs/02.json @@ -13,6 +13,11 @@ "@babel/core": "7.0.0", "config": "1.21.0" }, + "pnpm": { + "overrides": { + "express>cookie": "0.7.0" + } + }, "homepage": "https://keylocation.sg", "keywords": [ "Key Location", diff --git a/lib/modules/manager/npm/extract/common/package-file.ts b/lib/modules/manager/npm/extract/common/package-file.ts index 03882c1b172bdb..b81fbf137fbdec 100644 --- a/lib/modules/manager/npm/extract/common/package-file.ts +++ b/lib/modules/manager/npm/extract/common/package-file.ts @@ -84,19 +84,26 @@ export function extractPackageJson( ), ); } else if (depType === 'pnpm' && depName === 'overrides') { + // pnpm overrides + // https://pnpm.io/package_json#pnpmoverrides for (const [overridesKey, overridesVal] of Object.entries( val as unknown as NpmPackageDependency, )) { if (is.string(overridesVal)) { + // Newer flat syntax: `parent>parent>child` + const packageName = overridesKey.split('>').pop()!; dep = { depName: overridesKey, + packageName, depType: 'pnpm.overrides', - ...extractDependency(depName, overridesKey, overridesVal), + ...extractDependency(depName, packageName, overridesVal), }; setNodeCommitTopic(dep); + // TODO: Is this expected? It's always 'overrides'. dep.prettyDepType = depTypes[depName]; deps.push(dep); } else if (is.object(overridesVal)) { + // Older nested object syntax: `parent: { parent: { child: version } }` deps.push( ...extractOverrideDepsRec( [overridesKey], diff --git a/lib/modules/manager/npm/extract/index.spec.ts b/lib/modules/manager/npm/extract/index.spec.ts index cd9de9df443251..715692c11896e8 100644 --- a/lib/modules/manager/npm/extract/index.spec.ts +++ b/lib/modules/manager/npm/extract/index.spec.ts @@ -1052,6 +1052,14 @@ describe('modules/manager/npm/extract/index', () => { depType: 'dependencies', prettyDepType: 'dependency', }, + { + currentValue: '0.7.0', + datasource: 'npm', + depName: 'express>cookie', + packageName: 'cookie', + depType: 'pnpm.overrides', + prettyDepType: 'overrides', + }, ], extractedConstraints: {}, managerData: { diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 4cd752def355a6..a2ccd07d47950d 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -99,6 +99,7 @@ export interface LookupUpdate { checksumUrl?: string; downloadUrl?: string; releaseTimestamp?: any; + newVersionAgeInDays?: number; registryUrl?: string; } diff --git a/lib/modules/platform/azure/index.spec.ts b/lib/modules/platform/azure/index.spec.ts index bfeb72ebd043d1..73308cdfbfa98e 100644 --- a/lib/modules/platform/azure/index.spec.ts +++ b/lib/modules/platform/azure/index.spec.ts @@ -1173,7 +1173,7 @@ describe('modules/platform/azure/index', () => { describe('updatePr(prNo, title, body, platformPrOptions)', () => { it('should update the PR', async () => { await initRepo({ repository: 'some/repo' }); - const updatePullRequest = jest.fn(); + const updatePullRequest = jest.fn(() => ({})); azureApi.gitApi.mockImplementationOnce( () => ({ @@ -1189,9 +1189,45 @@ describe('modules/platform/azure/index', () => { expect(updatePullRequest.mock.calls).toMatchSnapshot(); }); + it('should update the PR including cache', async () => { + await initRepo({ repository: 'some/repo' }); + azureApi.gitApi.mockImplementation( + () => + ({ + createPullRequest: jest.fn(() => ({ + pullRequestId: 456, + title: 'Title 1', + })), + createPullRequestLabel: jest.fn(() => ({})), + getPullRequests: jest.fn(() => []), + updatePullRequest: jest.fn(() => ({ + pullRequestId: 456, + title: 'Title 2', + })), + }) as any, + ); + expect(await azure.getPrList()).toEqual([]); + const createdPr = await azure.createPr({ + sourceBranch: 'some-branch', + targetBranch: 'master', + prTitle: 'Title 1', + prBody: 'Hello world', + labels: [], + }); + expect(createdPr).toMatchObject({ number: 456, title: 'Title 1' }); + expect(await azure.getPrList()).toHaveLength(1); + await azure.updatePr({ + number: 456, + prTitle: 'Title 2', + }); + const prList = await azure.getPrList(); + expect(prList).toHaveLength(1); + expect(prList[0]).toMatchObject({ number: 456, title: 'Title 2' }); + }); + it('should update the PR without description', async () => { await initRepo({ repository: 'some/repo' }); - const updatePullRequest = jest.fn(); + const updatePullRequest = jest.fn(() => ({})); azureApi.gitApi.mockImplementationOnce( () => ({ @@ -1207,7 +1243,7 @@ describe('modules/platform/azure/index', () => { it('should close the PR', async () => { await initRepo({ repository: 'some/repo' }); - const updatePullRequest = jest.fn(); + const updatePullRequest = jest.fn(() => ({})); azureApi.gitApi.mockImplementationOnce( () => ({ @@ -1225,7 +1261,7 @@ describe('modules/platform/azure/index', () => { it('should reopen the PR', async () => { await initRepo({ repository: 'some/repo' }); - const updatePullRequest = jest.fn(); + const updatePullRequest = jest.fn(() => ({})); azureApi.gitApi.mockImplementationOnce( () => ({ diff --git a/lib/modules/platform/azure/index.ts b/lib/modules/platform/azure/index.ts index 8049c82a19b907..21bd44eaa3f58c 100644 --- a/lib/modules/platform/azure/index.ts +++ b/lib/modules/platform/azure/index.ts @@ -538,7 +538,12 @@ export async function createPr({ ), ), ); - return getRenovatePRFormat(pr); + + const result = getRenovatePRFormat(pr); + if (config.prList) { + config.prList.push(result); + } + return result; } export async function updatePr({ @@ -591,7 +596,27 @@ export async function updatePr({ ); } - await azureApiGit.updatePullRequest(objToUpdate, config.repoId, prNo); + const updatedPr = await azureApiGit.updatePullRequest( + objToUpdate, + config.repoId, + prNo, + ); + if (config.prList) { + const prToCache = getRenovatePRFormat(updatedPr); + // We need to update the cached entry for this PR + const existingIndex = config.prList.findIndex( + (item) => item.number === prNo, + ); + // istanbul ignore if: should not happen + if (existingIndex === -1) { + logger.warn({ prNo }, 'PR not found in cache'); + // Add to cache + config.prList.push(prToCache); + } else { + // overwrite existing PR in cache + config.prList[existingIndex] = prToCache; + } + } } export async function ensureComment({ diff --git a/lib/util/cache/package/types.ts b/lib/util/cache/package/types.ts index 3a2b3938ed7ebe..7435f8bc787301 100644 --- a/lib/util/cache/package/types.ts +++ b/lib/util/cache/package/types.ts @@ -91,6 +91,7 @@ export type PackageCacheNamespace = | 'datasource-repology' | 'datasource-ruby-version' | 'datasource-rubygems' + | 'datasource-sbt-package' | 'datasource-terraform-module' | 'datasource-terraform-provider' | 'datasource-terraform' diff --git a/lib/util/date.spec.ts b/lib/util/date.spec.ts index aa5abd62ec6ccf..b68966f57f3187 100644 --- a/lib/util/date.spec.ts +++ b/lib/util/date.spec.ts @@ -22,6 +22,11 @@ describe('util/date', () => { const t = t0.minus({ days: 42 }); expect(getElapsedDays(t.toISO()!)).toBe(42); }); + + it('rounds down', () => { + const t = t0.minus({ days: 42, hours: 12 }); + expect(getElapsedDays(t.toISO()!)).toBe(42); + }); }); describe('getElapsedMinutes', () => { diff --git a/lib/util/date.ts b/lib/util/date.ts index d3078e2024fbaa..cca5c17462452a 100644 --- a/lib/util/date.ts +++ b/lib/util/date.ts @@ -1,12 +1,13 @@ import { DateTime } from 'luxon'; const ONE_MINUTE_MS = 60 * 1000; -const ONE_DAY_MS = 24 * 60 * ONE_MINUTE_MS; export function getElapsedDays(timestamp: string): number { - return Math.floor( - (new Date().getTime() - new Date(timestamp).getTime()) / ONE_DAY_MS, - ); + const currentVersionTimestampDate = DateTime.fromISO(timestamp); + const now = DateTime.now(); + const diffInDays = now.diff(currentVersionTimestampDate, 'days').as('days'); + const ageInDays = Math.floor(diffInDays); + return ageInDays; } export function getElapsedMinutes(date: Date): number { diff --git a/lib/util/exec/containerbase.ts b/lib/util/exec/containerbase.ts index 4f54c4879a572e..b0cdd7bd4bde9a 100644 --- a/lib/util/exec/containerbase.ts +++ b/lib/util/exec/containerbase.ts @@ -259,14 +259,14 @@ export function isDynamicInstall( function isStable( version: string, - versioning: allVersioning.VersioningApi, + versioningApi: allVersioning.VersioningApi, latest?: string, ): boolean { - if (!versioning.isStable(version)) { + if (!versioningApi.isStable(version)) { return false; } if (is.string(latest)) { - if (versioning.isGreaterThan(version, latest)) { + if (versioningApi.isGreaterThan(version, latest)) { return false; } } diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 24d94f8b05cdc6..67728a5bcac667 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -3,7 +3,7 @@ import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { getPkgReleases } from '../../../modules/datasource'; -import * as versioning from '../../../modules/versioning'; +import * as allVersioning from '../../../modules/versioning'; import { newlineRegex, regEx } from '../../regex'; import { uniq } from '../../uniq'; import { rawExec } from '../common'; @@ -76,41 +76,45 @@ function prepareCommands(commands: Opt[]): string[] { export async function getDockerTag( packageName: string, constraint: string, - scheme: string, + versioning: string, ): Promise { - const ver = versioning.get(scheme); + const versioningApi = allVersioning.get(versioning); - if (!ver.isValid(constraint)) { + if (!versioningApi.isValid(constraint)) { logger.warn( - { scheme, constraint }, + { versioning, constraint }, `Invalid Docker image version constraint`, ); return 'latest'; } logger.debug( - { packageName, scheme, constraint }, + { packageName, versioning, constraint }, `Found version constraint - checking for a compatible image to use`, ); const imageReleases = await getPkgReleases({ datasource: 'docker', packageName, - versioning: scheme, + versioning, }); if (imageReleases?.releases) { let versions = imageReleases.releases.map((release) => release.version); versions = versions.filter( - (version) => ver.isVersion(version) && ver.matches(version, constraint), + (version) => + versioningApi.isVersion(version) && + versioningApi.matches(version, constraint), ); // Prefer stable versions over unstable, even if the range satisfies both types - if (!versions.every((version) => ver.isStable(version))) { + if (!versions.every((version) => versioningApi.isStable(version))) { logger.debug('Filtering out unstable versions'); - versions = versions.filter((version) => ver.isStable(version)); + versions = versions.filter((version) => versioningApi.isStable(version)); } - const version = versions.sort(ver.sortVersions.bind(ver)).pop(); + const version = versions + .sort(versioningApi.sortVersions.bind(versioningApi)) + .pop(); if (version) { logger.debug( - { packageName, scheme, constraint, version }, + { packageName, versioning, constraint, version }, `Found compatible image version`, ); return version; @@ -120,7 +124,7 @@ export async function getDockerTag( return 'latest'; } logger.warn( - { packageName, constraint, scheme }, + { packageName, constraint, versioning }, 'Failed to find a tag satisfying constraint, using "latest" tag instead', ); return 'latest'; diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index f642a7ecaa777a..4b6a5bf453124a 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -199,7 +199,9 @@ async function fetchBranchCommits(): Promise { ); } try { - (await gitRetry(() => git.raw(opts))) + const lsRemoteRes = await gitRetry(() => git.raw(opts)); + logger.trace({ lsRemoteRes }, 'git ls-remote result'); + lsRemoteRes .split(newlineRegex) .filter(Boolean) .map((line) => line.trim().split(regEx(/\s+/))) @@ -207,6 +209,7 @@ async function fetchBranchCommits(): Promise { config.branchCommits[ref.replace('refs/heads/', '')] = sha as LongCommitSha; }); + logger.trace({ branchCommits: config.branchCommits }, 'branch commits'); } catch (err) /* istanbul ignore next */ { const errChecked = checkForPlatformFailure(err); if (errChecked) { diff --git a/lib/util/jsonata.spec.ts b/lib/util/jsonata.spec.ts new file mode 100644 index 00000000000000..f5a6651637b4e5 --- /dev/null +++ b/lib/util/jsonata.spec.ts @@ -0,0 +1,13 @@ +import { getExpression } from './jsonata'; + +describe('util/jsonata', () => { + describe('getExpression', () => { + it('should return an expression', () => { + expect(getExpression('foo')).not.toBeInstanceOf(Error); + }); + + it('should return an error', () => { + expect(getExpression('foo[')).toBeInstanceOf(Error); + }); + }); +}); diff --git a/lib/util/jsonata.ts b/lib/util/jsonata.ts new file mode 100644 index 00000000000000..2811f4e4075e5c --- /dev/null +++ b/lib/util/jsonata.ts @@ -0,0 +1,21 @@ +import jsonata from 'jsonata'; +import * as memCache from './cache/memory'; +import { toSha256 } from './hash'; + +export function getExpression(input: string): jsonata.Expression | Error { + const cacheKey = `jsonata:${toSha256(input)}`; + const cachedExpression = memCache.get(cacheKey); + // istanbul ignore if: cannot test + if (cachedExpression) { + return cachedExpression; + } + let result: jsonata.Expression | Error; + try { + result = jsonata(input); + } catch (err) { + // JSONata errors aren't detected as TypeOf Error + result = new Error(err.message); + } + memCache.set(cacheKey, result); + return result; +} diff --git a/lib/util/package-rules/base.ts b/lib/util/package-rules/base.ts index 121a982a7fc40d..e032615800ecec 100644 --- a/lib/util/package-rules/base.ts +++ b/lib/util/package-rules/base.ts @@ -11,5 +11,5 @@ export abstract class Matcher implements MatcherApi { abstract matches( inputConfig: PackageRuleInputConfig, packageRule: PackageRule, - ): boolean | null; + ): boolean | null | Promise; } diff --git a/lib/util/package-rules/current-version.ts b/lib/util/package-rules/current-version.ts index 9cbae8d57cc43f..62106041e7a7f8 100644 --- a/lib/util/package-rules/current-version.ts +++ b/lib/util/package-rules/current-version.ts @@ -20,7 +20,7 @@ export class CurrentVersionMatcher extends Matcher { } const isUnconstrainedValue = !!lockedVersion && is.nullOrUndefined(currentValue); - const version = allVersioning.get(versioning); + const versioningApi = allVersioning.get(versioning); const matchCurrentVersionStr = matchCurrentVersion.toString(); const matchCurrentVersionPred = getRegexPredicate(matchCurrentVersionStr); @@ -31,14 +31,14 @@ export class CurrentVersionMatcher extends Matcher { matchCurrentVersionPred(compareVersion) ); } - if (version.isVersion(matchCurrentVersionStr)) { + if (versioningApi.isVersion(matchCurrentVersionStr)) { try { return ( isUnconstrainedValue || !!( currentValue && - version.isValid(currentValue) && - version.matches(matchCurrentVersionStr, currentValue) + versioningApi.isValid(currentValue) && + versioningApi.matches(matchCurrentVersionStr, currentValue) ) ); } catch { @@ -46,14 +46,14 @@ export class CurrentVersionMatcher extends Matcher { } } - const compareVersion = version.isVersion(currentValue) + const compareVersion = versioningApi.isVersion(currentValue) ? currentValue // it's a version so we can match against it : (lockedVersion ?? currentVersion); // need to match against this currentVersion, if available if (is.nullOrUndefined(compareVersion)) { return false; } - if (version.isVersion(compareVersion)) { - return version.matches(compareVersion, matchCurrentVersion); + if (versioningApi.isVersion(compareVersion)) { + return versioningApi.matches(compareVersion, matchCurrentVersion); } logger.debug( { matchCurrentVersionStr, currentValue }, diff --git a/lib/util/package-rules/index.spec.ts b/lib/util/package-rules/index.spec.ts index ce06e832e9e837..2b78b17d251ccb 100644 --- a/lib/util/package-rules/index.spec.ts +++ b/lib/util/package-rules/index.spec.ts @@ -33,7 +33,7 @@ describe('util/package-rules/index', () => { ], }; - it('applies', () => { + it('applies', async () => { const config: PackageRuleInputConfig = { packageName: 'a', updateType: 'minor', @@ -60,78 +60,78 @@ describe('util/package-rules/index', () => { }, ], }; - expect(applyPackageRules(config)).toEqual({ + expect(await applyPackageRules(config)).toEqual({ ...config, labels: ['bump'], }); }); - it('applies both rules for a', () => { + it('applies both rules for a', async () => { const dep = { packageName: 'a', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBe(2); expect(res.y).toBe(2); expect(res.groupName).toBeUndefined(); }); - it('applies both rules for b', () => { + it('applies both rules for b', async () => { const dep = { packageName: 'b', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBe(2); expect(res.y).toBe(2); expect(res.groupName).toBeUndefined(); }); - it('applies the second rule', () => { + it('applies the second rule', async () => { const dep = { packageName: 'abc', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBeUndefined(); expect(res.y).toBe(2); expect(res.groupName).toBeUndefined(); }); - it('applies matchPackageNames', () => { + it('applies matchPackageNames', async () => { const dep = { packageName: 'xyz/foo', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.groupName).toBeUndefined(); }); - it('applies the second second rule', () => { + it('applies the second second rule', async () => { const dep = { packageName: 'bc', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBeUndefined(); expect(res.y).toBe(2); }); - it('excludes package name', () => { + it('excludes package name', async () => { const dep = { packageName: 'aa', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBeUndefined(); expect(res.y).toBeUndefined(); }); - it('excludes package pattern', () => { + it('excludes package pattern', async () => { const dep = { packageName: 'bcd', }; - const res = applyPackageRules({ ...config1, ...dep }); + const res = await applyPackageRules({ ...config1, ...dep }); expect(res.x).toBeUndefined(); expect(res.y).toBeUndefined(); }); - it('ignores patterns if lock file maintenance', () => { + it('ignores patterns if lock file maintenance', async () => { const dep = { automerge: true, updateType: 'lockFileMaintenance' as UpdateType, @@ -143,11 +143,11 @@ describe('util/package-rules/index', () => { ], }; // This should not match - const res = applyPackageRules(dep); + const res = await applyPackageRules(dep); expect(res.automerge).toBeTrue(); }); - it('do apply rule with matchPackageName', () => { + it('do apply rule with matchPackageName', async () => { const dep = { automerge: true, updateType: 'lockFileMaintenance' as UpdateType, @@ -158,13 +158,13 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(dep); + const res = await applyPackageRules(dep); expect(res.automerge).toBeTrue(); - const res2 = applyPackageRules({ ...dep, packageName: 'foo' }); + const res2 = await applyPackageRules({ ...dep, packageName: 'foo' }); expect(res2.automerge).toBeFalse(); }); - it('sets skipReason=package-rules if enabled=false', () => { + it('sets skipReason=package-rules if enabled=false', async () => { const dep: any = { depName: 'foo', packageRules: [ @@ -173,13 +173,13 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(dep, 'datasource-merge'); + const res = await applyPackageRules(dep, 'datasource-merge'); expect(res.enabled).toBeFalse(); expect(res.skipReason).toBe('package-rules'); expect(res.skipStage).toBe('datasource-merge'); }); - it('unsets skipReason=package-rules if enabled=true', () => { + it('unsets skipReason=package-rules if enabled=true', async () => { const dep: any = { depName: 'foo', packageRules: [ @@ -191,13 +191,13 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(dep, 'datasource-merge'); + const res = await applyPackageRules(dep, 'datasource-merge'); expect(res.enabled).toBeTrue(); expect(res.skipReason).toBeUndefined(); expect(res.skipStage).toBeUndefined(); }); - it('skips skipReason=package-rules if enabled=true', () => { + it('skips skipReason=package-rules if enabled=true', async () => { const dep: any = { enabled: false, depName: 'foo', @@ -207,11 +207,11 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(dep); + const res = await applyPackageRules(dep); expect(res.skipReason).toBeUndefined(); }); - it('matches anything if missing inclusive rules', () => { + it('matches anything if missing inclusive rules', async () => { const config: TestConfig = { packageRules: [ { @@ -220,19 +220,19 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, packageName: 'foo', }); expect(res1.x).toBeUndefined(); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, packageName: 'bar', }); expect(res2.x).toBeDefined(); }); - it('supports inclusive or', () => { + it('supports inclusive or', async () => { const config: TestConfig = { packageRules: [ { @@ -241,16 +241,19 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ ...config, packageName: 'neutrino' }); + const res1 = await applyPackageRules({ + ...config, + packageName: 'neutrino', + }); expect(res1.x).toBeDefined(); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, packageName: '@neutrino/something', }); expect(res2.x).toBeDefined(); }); - it('filters requested depType', () => { + it('filters requested depType', async () => { const config: TestConfig = { packageRules: [ { @@ -264,11 +267,11 @@ describe('util/package-rules/index', () => { depType: 'dependencies', packageName: 'a', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters from list of requested depTypes', () => { + it('filters from list of requested depTypes', async () => { const config: TestConfig = { packageRules: [ { @@ -282,11 +285,11 @@ describe('util/package-rules/index', () => { depTypes: ['build', 'test'], packageName: 'a', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('returns false if no depTypes', () => { + it('returns false if no depTypes', async () => { const config: TestConfig = { packageRules: [ { @@ -299,11 +302,11 @@ describe('util/package-rules/index', () => { const input = { ...config, packageName: 'a' }; delete input.depType; delete input.depTypes; - const res = applyPackageRules(input); + const res = await applyPackageRules(input); expect(res).toEqual(input); }); - it('filters managers with matching manager', () => { + it('filters managers with matching manager', async () => { const config: TestConfig = { packageRules: [ { @@ -318,11 +321,11 @@ describe('util/package-rules/index', () => { manager: 'meteor', packageName: 'node', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters managers with non-matching manager', () => { + it('filters managers with non-matching manager', async () => { const config: TestConfig = { packageRules: [ { @@ -339,11 +342,11 @@ describe('util/package-rules/index', () => { manager: 'pipenv', packageName: 'node', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters categories with matching category', () => { + it('filters categories with matching category', async () => { const config: TestConfig = { packageRules: [ { @@ -359,11 +362,11 @@ describe('util/package-rules/index', () => { manager: 'meteor', packageName: 'node', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters categories with non-matching category', () => { + it('filters categories with non-matching category', async () => { const config: TestConfig = { packageRules: [ { @@ -379,11 +382,11 @@ describe('util/package-rules/index', () => { manager: 'pipenv', packageName: 'node', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters categories with undefined category', () => { + it('filters categories with undefined category', async () => { const config: TestConfig = { packageRules: [ { @@ -397,11 +400,11 @@ describe('util/package-rules/index', () => { manager: 'pipenv', packageName: 'node', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters datasources with matching datasource', () => { + it('filters datasources with matching datasource', async () => { const config: TestConfig = { packageRules: [ { @@ -419,12 +422,12 @@ describe('util/package-rules/index', () => { datasource: OrbDatasource.id, baseBranch: 'master', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); expect(res.y).toBeUndefined(); }); - it('filters branches with matching branch', () => { + it('filters branches with matching branch', async () => { const config: TestConfig = { packageRules: [ { @@ -438,11 +441,11 @@ describe('util/package-rules/index', () => { datasource: OrbDatasource.id, baseBranch: 'master', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters datasources with non-matching datasource', () => { + it('filters datasources with non-matching datasource', async () => { const config: TestConfig = { packageRules: [ { @@ -455,11 +458,11 @@ describe('util/package-rules/index', () => { depType: 'dependencies', baseBranch: 'staging', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters branches with non-matching branch', () => { + it('filters branches with non-matching branch', async () => { const config: TestConfig = { packageRules: [ { @@ -472,11 +475,11 @@ describe('util/package-rules/index', () => { depType: 'dependencies', baseBranch: 'staging', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters branches with matching branch regex', () => { + it('filters branches with matching branch regex', async () => { const config: TestConfig = { packageRules: [ { @@ -490,11 +493,11 @@ describe('util/package-rules/index', () => { datasource: OrbDatasource.id, baseBranch: 'release/5.8', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters branches with non-matching branch regex', () => { + it('filters branches with non-matching branch regex', async () => { const config: TestConfig = { packageRules: [ { @@ -508,11 +511,11 @@ describe('util/package-rules/index', () => { datasource: OrbDatasource.id, baseBranch: 'master', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('filters updateType', () => { + it('filters updateType', async () => { const config: TestConfig = { packageRules: [ { @@ -530,12 +533,12 @@ describe('util/package-rules/index', () => { packageName: 'a', updateType: 'patch' as UpdateType, }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); expect(res.y).toBeUndefined(); }); - it('matches matchSourceUrls with glob', () => { + it('matches matchSourceUrls with glob', async () => { const config: TestConfig = { packageRules: [ { @@ -553,11 +556,11 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/renovatebot/presets', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('non-matches matchSourceUrls with globs', () => { + it('non-matches matchSourceUrls with globs', async () => { const config: TestConfig = { packageRules: [ { @@ -575,11 +578,11 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/vuejs/vue', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('handles matchSourceUrls when missing sourceUrl', () => { + it('handles matchSourceUrls when missing sourceUrl', async () => { const config: TestConfig = { packageRules: [ { @@ -596,11 +599,11 @@ describe('util/package-rules/index', () => { packageName: 'a', updateType: 'patch' as UpdateType, }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('matches matchSourceUrls', () => { + it('matches matchSourceUrls', async () => { const config: TestConfig = { packageRules: [ { @@ -618,11 +621,11 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/renovatebot/presets', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('non-matches matchSourceUrls', () => { + it('non-matches matchSourceUrls', async () => { const config: TestConfig = { packageRules: [ { @@ -640,7 +643,7 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/facebook/react-native', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); @@ -655,7 +658,7 @@ describe('util/package-rules/index', () => { hostRules.add(hostRule); }); - it('matches matchConfidence', () => { + it('matches matchConfidence', async () => { const config: TestConfig = { packageRules: [ { @@ -669,11 +672,11 @@ describe('util/package-rules/index', () => { packageName: 'a', mergeConfidenceLevel: 'high' as MergeConfidence, }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('non-matches matchConfidence', () => { + it('non-matches matchConfidence', async () => { const config: TestConfig = { packageRules: [ { @@ -687,11 +690,11 @@ describe('util/package-rules/index', () => { packageName: 'a', mergeConfidenceLevel: 'low' as MergeConfidence, }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('does not match matchConfidence when there is no mergeConfidenceLevel', () => { + it('does not match matchConfidence when there is no mergeConfidenceLevel', async () => { const config: TestConfig = { packageRules: [ { @@ -705,11 +708,11 @@ describe('util/package-rules/index', () => { packageName: 'a', mergeConfidenceLevel: undefined, }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('throws when unauthenticated', () => { + it('throws when unauthenticated', async () => { const config: TestConfig = { packageRules: [ { @@ -723,7 +726,7 @@ describe('util/package-rules/index', () => { let error = new Error(); try { - applyPackageRules(config); + await applyPackageRules(config); } catch (err) { error = err; } @@ -736,7 +739,7 @@ describe('util/package-rules/index', () => { }); }); - it('filters naked depType', () => { + it('filters naked depType', async () => { const config: TestConfig = { packageRules: [ { @@ -749,11 +752,11 @@ describe('util/package-rules/index', () => { depType: 'dependencies', packageName: 'a', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('filters out unrequested depType', () => { + it('filters out unrequested depType', async () => { const config: TestConfig = { packageRules: [ { @@ -767,11 +770,11 @@ describe('util/package-rules/index', () => { depType: 'devDependencies', packageName: 'a', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('checks if matchCurrentVersion selector is valid and satisfies the condition on range overlap', () => { + it('checks if matchCurrentVersion selector is valid and satisfies the condition on range overlap', async () => { const config: TestConfig = { versioning: 'semver', packageRules: [ @@ -782,7 +785,7 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -791,7 +794,7 @@ describe('util/package-rules/index', () => { }, }); expect(res1.x).toBeDefined(); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -799,7 +802,7 @@ describe('util/package-rules/index', () => { }, }); expect(res2.x).toBeUndefined(); - const res3 = applyPackageRules({ + const res3 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -809,7 +812,7 @@ describe('util/package-rules/index', () => { expect(res3.x).toBeUndefined(); }); - it('checks if matchCurrentVersion selector is valid and satisfies the condition on pinned to range overlap', () => { + it('checks if matchCurrentVersion selector is valid and satisfies the condition on pinned to range overlap', async () => { const config: TestConfig = { versioning: 'semver', packageRules: [ @@ -820,7 +823,7 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -831,7 +834,7 @@ describe('util/package-rules/index', () => { expect(res1.x).toBeDefined(); }); - it('checks if matchCurrentVersion selector is a version and matches if currentValue is a range', () => { + it('checks if matchCurrentVersion selector is a version and matches if currentValue is a range', async () => { const config: TestConfig = { packageRules: [ { @@ -842,7 +845,7 @@ describe('util/package-rules/index', () => { ], versioning: 'npm', }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -850,7 +853,7 @@ describe('util/package-rules/index', () => { }, }); expect(res1.x).toBeDefined(); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -860,7 +863,7 @@ describe('util/package-rules/index', () => { expect(res2.x).toBeUndefined(); }); - it('checks if matchCurrentVersion selector works with static values', () => { + it('checks if matchCurrentVersion selector works with static values', async () => { const config: TestConfig = { packageRules: [ { @@ -870,7 +873,7 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -881,7 +884,7 @@ describe('util/package-rules/index', () => { expect(res1.x).toBeDefined(); }); - it('checks if matchCurrentVersion selector works with regular expressions', () => { + it('checks if matchCurrentVersion selector works with regular expressions', async () => { const config: TestConfig = { packageRules: [ { @@ -891,7 +894,7 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -899,7 +902,7 @@ describe('util/package-rules/index', () => { currentVersion: '4.6.0', }, }); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -911,7 +914,7 @@ describe('util/package-rules/index', () => { expect(res2.x).toBeUndefined(); }); - it('checks if matchCurrentVersion selector works with negated regular expressions', () => { + it('checks if matchCurrentVersion selector works with negated regular expressions', async () => { const config: TestConfig = { packageRules: [ { @@ -921,7 +924,7 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -929,7 +932,7 @@ describe('util/package-rules/index', () => { currentVersion: '4.6.0', }, }); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, ...{ packageName: 'test', @@ -941,7 +944,7 @@ describe('util/package-rules/index', () => { expect(res2.x).toBeDefined(); }); - it('matches packageFiles', () => { + it('matches packageFiles', async () => { const config: TestConfig = { packageFile: 'examples/foo/package.json', packageRules: [ @@ -951,20 +954,20 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, packageName: 'test', }); expect(res1.x).toBeUndefined(); config.packageFile = 'package.json'; - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, packageName: 'test', }); expect(res2.x).toBeDefined(); }); - it('matches lock files', () => { + it('matches lock files', async () => { const config: TestConfig = { packageFile: 'examples/foo/package.json', lockFiles: ['yarn.lock'], @@ -975,11 +978,11 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(config); + const res = await applyPackageRules(config); expect(res.x).toBeDefined(); }); - it('matches paths', () => { + it('matches paths', async () => { const config: TestConfig = { packageFile: 'examples/foo/package.json', packageRules: [ @@ -989,35 +992,35 @@ describe('util/package-rules/index', () => { }, ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, packageName: 'test', }); expect(res1.x).toBeDefined(); config.packageFile = 'package.json'; - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, packageName: 'test', }); expect(res2.x).toBeUndefined(); config.packageFile = 'lib/a/package.json'; - const res3 = applyPackageRules({ + const res3 = await applyPackageRules({ ...config, packageName: 'test', }); expect(res3.x).toBeUndefined(); }); - it('empty rules', () => { + it('empty rules', async () => { expect( - applyPackageRules({ ...config1, packageRules: null as never }), + await applyPackageRules({ ...config1, packageRules: null as never }), ).toEqual({ foo: 'bar', packageRules: null, }); }); - it('creates groupSlug if necessary', () => { + it('creates groupSlug if necessary', async () => { const config: TestConfig = { packageName: 'foo', packageRules: [ @@ -1032,11 +1035,11 @@ describe('util/package-rules/index', () => { }, ], }; - const res = applyPackageRules(config); + const res = await applyPackageRules(config); expect(res.groupSlug).toBe('b'); }); - it('matches matchSourceUrls with patterns (case-insensitive)', () => { + it('matches matchSourceUrls with patterns (case-insensitive)', async () => { const config: TestConfig = { packageRules: [ { @@ -1054,11 +1057,11 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/renovatebot/Presets', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('matches matchSourceUrls(case-insensitive)', () => { + it('matches matchSourceUrls(case-insensitive)', async () => { const config: TestConfig = { packageRules: [ { @@ -1076,11 +1079,11 @@ describe('util/package-rules/index', () => { updateType: 'patch' as UpdateType, sourceUrl: 'https://github.com/renovatebot/Renovate', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBe(1); }); - it('needs language to match', () => { + it('needs language to match', async () => { const config: TestConfig = { packageRules: [ { @@ -1093,11 +1096,11 @@ describe('util/package-rules/index', () => { const dep = { packageName: 'abc', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('needs baseBranch to match', () => { + it('needs baseBranch to match', async () => { const config: TestConfig = { packageRules: [ { @@ -1110,11 +1113,11 @@ describe('util/package-rules/index', () => { const dep = { packageName: 'abc', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('needs manager to match', () => { + it('needs manager to match', async () => { const config: TestConfig = { packageRules: [ { @@ -1127,11 +1130,11 @@ describe('util/package-rules/index', () => { const dep = { packageName: 'abc', }; - const res = applyPackageRules({ ...config, ...dep }); + const res = await applyPackageRules({ ...config, ...dep }); expect(res.x).toBeUndefined(); }); - it('matches matchDepNames(depName)', () => { + it('matches matchDepNames(depName)', async () => { const config: TestConfig = { packageRules: [ { @@ -1141,21 +1144,21 @@ describe('util/package-rules/index', () => { ], }; - const res1 = applyPackageRules({ + const res1 = await applyPackageRules({ ...config, depName: 'test1', }); - const res2 = applyPackageRules({ + const res2 = await applyPackageRules({ ...config, depName: 'test2', }); - applyPackageRules(config); // coverage + await applyPackageRules(config); // coverage expect(res1.x).toBe(1); expect(res2.x).toBeUndefined(); }); - it('matches if there are no matchers', () => { + it('matches if there are no matchers', async () => { const config: TestConfig = { packageRules: [ { @@ -1164,7 +1167,7 @@ describe('util/package-rules/index', () => { ], }; - const res = applyPackageRules({ + const res = await applyPackageRules({ ...config, depName: 'test2', }); diff --git a/lib/util/package-rules/index.ts b/lib/util/package-rules/index.ts index 59f27b60499669..ab82e2169b0e33 100644 --- a/lib/util/package-rules/index.ts +++ b/lib/util/package-rules/index.ts @@ -6,12 +6,12 @@ import { logger } from '../../logger'; import type { StageName } from '../../types/skip-reason'; import matchers from './matchers'; -function matchesRule( +async function matchesRule( inputConfig: PackageRuleInputConfig, packageRule: PackageRule, -): boolean { +): Promise { for (const matcher of matchers) { - const isMatch = matcher.matches(inputConfig, packageRule); + const isMatch = await matcher.matches(inputConfig, packageRule); // no rules are defined if (is.nullOrUndefined(isMatch)) { @@ -26,10 +26,10 @@ function matchesRule( return true; } -export function applyPackageRules( +export async function applyPackageRules( inputConfig: T, stageName?: StageName, -): T { +): Promise { let config = { ...inputConfig }; const packageRules = config.packageRules ?? []; logger.trace( @@ -38,7 +38,7 @@ export function applyPackageRules( ); for (const packageRule of packageRules) { // This rule is considered matched if there was at least one positive match and no negative matches - if (matchesRule(config, packageRule)) { + if (await matchesRule(config, packageRule)) { // Package rule config overrides any existing config const toApply = removeMatchers({ ...packageRule }); if (config.groupSlug && packageRule.groupName && !packageRule.groupSlug) { diff --git a/lib/util/package-rules/jsonata.spec.ts b/lib/util/package-rules/jsonata.spec.ts new file mode 100644 index 00000000000000..c81315672ae2f3 --- /dev/null +++ b/lib/util/package-rules/jsonata.spec.ts @@ -0,0 +1,82 @@ +import { JsonataMatcher } from './jsonata'; + +describe('util/package-rules/jsonata', () => { + const matcher = new JsonataMatcher(); + + it('should return true for a matching JSONata expression', async () => { + const result = await matcher.matches( + { depName: 'lodash' }, + { matchJsonata: ['depName = "lodash"'] }, + ); + expect(result).toBeTrue(); + }); + + it('should return false for a non-matching JSONata expression', async () => { + const result = await matcher.matches( + { depName: 'lodash' }, + { matchJsonata: ['depName = "react"'] }, + ); + expect(result).toBeFalse(); + }); + + it('should return false for an invalid JSONata expression', async () => { + const result = await matcher.matches( + { depName: 'lodash' }, + { matchJsonata: ['depName = '] }, + ); + expect(result).toBeFalse(); + }); + + it('should return null if matchJsonata is not defined', async () => { + const result = await matcher.matches({ depName: 'lodash' }, {}); + expect(result).toBeNull(); + }); + + it('should return true for a complex JSONata expression', async () => { + const result = await matcher.matches( + { depName: 'lodash', version: '4.17.21' }, + { matchJsonata: ['depName = "lodash" and version = "4.17.21"'] }, + ); + expect(result).toBeTrue(); + }); + + it('should return false for a complex JSONata expression with non-matching version', async () => { + const result = await matcher.matches( + { depName: 'lodash', version: '4.17.20' }, + { matchJsonata: ['depName = "lodash" and version = "4.17.21"'] }, + ); + expect(result).toBeFalse(); + }); + + it('should return true for a JSONata expression with nested properties', async () => { + const result = await matcher.matches( + { dep: { name: 'lodash', version: '4.17.21' } }, + { matchJsonata: ['dep.name = "lodash" and dep.version = "4.17.21"'] }, + ); + expect(result).toBeTrue(); + }); + + it('should return false for a JSONata expression with nested properties and non-matching version', async () => { + const result = await matcher.matches( + { dep: { name: 'lodash', version: '4.17.20' } }, + { matchJsonata: ['dep.name = "lodash" and dep.version = "4.17.21"'] }, + ); + expect(result).toBeFalse(); + }); + + it('should return true if any JSONata expression matches', async () => { + const result = await matcher.matches( + { depName: 'lodash' }, + { matchJsonata: ['depName = "react"', 'depName = "lodash"'] }, + ); + expect(result).toBeTrue(); + }); + + it('should catch evaluate errors', async () => { + const result = await matcher.matches( + { depName: 'lodash' }, + { matchJsonata: ['$notafunction()'] }, + ); + expect(result).toBeFalse(); + }); +}); diff --git a/lib/util/package-rules/jsonata.ts b/lib/util/package-rules/jsonata.ts new file mode 100644 index 00000000000000..1fa0ff834fd94c --- /dev/null +++ b/lib/util/package-rules/jsonata.ts @@ -0,0 +1,37 @@ +import type { PackageRule, PackageRuleInputConfig } from '../../config/types'; +import { logger } from '../../logger'; +import { getExpression } from '../jsonata'; +import { Matcher } from './base'; + +export class JsonataMatcher extends Matcher { + override async matches( + inputConfig: PackageRuleInputConfig, + { matchJsonata }: PackageRule, + ): Promise { + if (!matchJsonata) { + return null; + } + + for (const expressionStr of matchJsonata) { + const expression = getExpression(expressionStr); + if (expression instanceof Error) { + logger.warn( + { errorMessage: expression.message }, + 'Invalid JSONata expression', + ); + } else { + try { + const result = await expression.evaluate(inputConfig); + if (result) { + // Only one needs to match, so return early + return true; + } + } catch (err) { + logger.warn({ err }, 'Error evaluating JSONata expression'); + } + } + } + // None matched, so return false + return false; + } +} diff --git a/lib/util/package-rules/matchers.ts b/lib/util/package-rules/matchers.ts index 9ad89afe0a92aa..f47d18a47fa963 100644 --- a/lib/util/package-rules/matchers.ts +++ b/lib/util/package-rules/matchers.ts @@ -7,6 +7,7 @@ import { DatasourcesMatcher } from './datasources'; import { DepNameMatcher } from './dep-names'; import { DepTypesMatcher } from './dep-types'; import { FileNamesMatcher } from './files'; +import { JsonataMatcher } from './jsonata'; import { ManagersMatcher } from './managers'; import { MergeConfidenceMatcher } from './merge-confidence'; import { NewValueMatcher } from './new-value'; @@ -40,3 +41,4 @@ matchers.push(new UpdateTypesMatcher()); matchers.push(new SourceUrlsMatcher()); matchers.push(new NewValueMatcher()); matchers.push(new CurrentAgeMatcher()); +matchers.push(new JsonataMatcher()); diff --git a/lib/util/package-rules/types.ts b/lib/util/package-rules/types.ts index 938232b86aa6d4..1bb55f1f7fb3b6 100644 --- a/lib/util/package-rules/types.ts +++ b/lib/util/package-rules/types.ts @@ -6,5 +6,5 @@ export interface MatcherApi { matches( inputConfig: PackageRuleInputConfig, packageRule: PackageRule, - ): boolean | null; + ): boolean | null | Promise; } diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts index f58a6597560a03..1e3ab8e9c95182 100644 --- a/lib/util/template/index.ts +++ b/lib/util/template/index.ts @@ -156,6 +156,7 @@ export const allowedFields = { currentValue: 'The extracted current value of the dependency being updated', currentVersion: 'The version that would be currently installed. For example, if currentValue is ^3.0.0 then currentVersion might be 3.1.0.', + currentVersionAgeInDays: 'The age of the current version in days', currentVersionTimestamp: 'The timestamp of the current version', currentDigest: 'The extracted current digest of the dependency being updated', currentDigestShort: @@ -203,6 +204,7 @@ export const allowedFields = { newValue: 'The new value in the upgrade. Can be a range or version e.g. "^3.0.0" or "3.1.0"', newVersion: 'The new version in the upgrade, e.g. "3.1.0"', + newVersionAgeInDays: 'The age of the new version in days', packageFile: 'The filename that the dependency was found in', packageFileDir: 'The directory with full path where the packageFile was found', diff --git a/lib/util/yaml.spec.ts b/lib/util/yaml.spec.ts index de9491f458054a..74f37c3e89f560 100644 --- a/lib/util/yaml.spec.ts +++ b/lib/util/yaml.spec.ts @@ -281,5 +281,23 @@ describe('util/yaml', () => { }, }); }); + + it('should parse content with yaml tags', () => { + expect( + parseSingleYaml( + codeBlock` + myObject: + aString: value + aStringWithTag: !reset null + `, + { removeTemplates: true }, + ), + ).toEqual({ + myObject: { + aString: 'value', + aStringWithTag: 'null', + }, + }); + }); }); }); diff --git a/lib/util/yaml.ts b/lib/util/yaml.ts index 3de220eb7087da..e483b762cf39d6 100644 --- a/lib/util/yaml.ts +++ b/lib/util/yaml.ts @@ -63,7 +63,7 @@ export function parseYaml( const results: ResT[] = []; for (const rawDocument of rawDocuments) { - const document = rawDocument.toJS(); + const document = rawDocument.toJS({ maxAliasCount: 10000 }); const errors = rawDocument.errors; // handle YAML parse errors @@ -127,7 +127,7 @@ export function parseSingleYaml( throw new AggregateError(rawDocument.errors, 'Failed to parse YAML file'); } - const document = rawDocument.toJS(); + const document = rawDocument.toJS({ maxAliasCount: 10000 }); const schema = options?.customSchema; if (!schema) { return document as ResT; diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts index 4b6b801589362d..8c8c06bfbb8510 100644 --- a/lib/workers/repository/init/vulnerability.ts +++ b/lib/workers/repository/init/vulnerability.ts @@ -120,11 +120,11 @@ export async function detectVulnerabilityAlerts( }; const alertDetails = combinedAlerts[fileName][datasource][depName]; alertDetails.advisories.push(advisory); - const version = allVersioning.get(versionings[datasource]); - if (version.isVersion(firstPatchedVersion)) { + const versioningApi = allVersioning.get(versionings[datasource]); + if (versioningApi.isVersion(firstPatchedVersion)) { if ( !alertDetails.firstPatchedVersion || - version.isGreaterThan( + versioningApi.isGreaterThan( firstPatchedVersion, alertDetails.firstPatchedVersion, ) diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 025aea391bd734..4a4aed2c310174 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -44,7 +44,7 @@ async function fetchDepUpdates( const datasourceDefaultConfig = await getDefaultConfig(depConfig.datasource!); depConfig = mergeChildConfig(depConfig, datasourceDefaultConfig); depConfig.versioning ??= getDefaultVersioning(depConfig.datasource); - depConfig = applyPackageRules(depConfig, 'pre-lookup'); + depConfig = await applyPackageRules(depConfig, 'pre-lookup'); depConfig.packageName ??= depConfig.depName; if (depConfig.ignoreDeps!.includes(depName!)) { // TODO: fix types (#22198) diff --git a/lib/workers/repository/process/lookup/bucket.ts b/lib/workers/repository/process/lookup/bucket.ts index b54b70ab99d8ea..1854ee0a7a62c4 100644 --- a/lib/workers/repository/process/lookup/bucket.ts +++ b/lib/workers/repository/process/lookup/bucket.ts @@ -11,7 +11,7 @@ export function getBucket( config: BucketConfig, currentVersion: string, newVersion: string, - versioning: VersioningApi, + versioningApi: VersioningApi, ): string | null { const { separateMajorMinor, @@ -22,8 +22,8 @@ export function getBucket( if (!separateMajorMinor) { return 'latest'; } - const fromMajor = versioning.getMajor(currentVersion); - const toMajor = versioning.getMajor(newVersion); + const fromMajor = versioningApi.getMajor(currentVersion); + const toMajor = versioningApi.getMajor(newVersion); // istanbul ignore if: error case if (toMajor === null) { @@ -41,8 +41,8 @@ export function getBucket( // If we reach here then we know it's non-major - const fromMinor = versioning.getMinor(currentVersion); - const toMinor = versioning.getMinor(newVersion); + const fromMinor = versioningApi.getMinor(currentVersion); + const toMinor = versioningApi.getMinor(newVersion); // istanbul ignore if: error case if (fromMinor === null || toMinor === null) { @@ -66,7 +66,7 @@ export function getBucket( /* future option if (separateMultiplePatch) { - const toPatch = versioning.getPatch(newVersion); + const toPatch = versioningApi.getPatch(newVersion); if (toPatch !== null && separateMultiplePatch) { return `v${toMajor}.${toMinor}.${toPatch}`; } diff --git a/lib/workers/repository/process/lookup/current.ts b/lib/workers/repository/process/lookup/current.ts index cd37363c50441f..4828052035aafd 100644 --- a/lib/workers/repository/process/lookup/current.ts +++ b/lib/workers/repository/process/lookup/current.ts @@ -6,7 +6,7 @@ import { regEx } from '../../../../util/regex'; export function getCurrentVersion( currentValue: string, lockedVersion: string, - versioning: VersioningApi, + versioningApi: VersioningApi, rangeStrategy: string, latestVersion: string, allVersions: string[], @@ -20,28 +20,28 @@ export function getCurrentVersion( return currentValue; } let useVersions = allVersions.filter((v) => - versioning.matches(v, currentValue), + versioningApi.matches(v, currentValue), ); if (useVersions.length === 1) { return useVersions[0]; } - if (latestVersion && versioning.matches(latestVersion, currentValue)) { + if (latestVersion && versioningApi.matches(latestVersion, currentValue)) { useVersions = useVersions.filter( - (v) => !versioning.isGreaterThan(v, latestVersion), + (v) => !versioningApi.isGreaterThan(v, latestVersion), ); } if (rangeStrategy === 'pin') { return ( lockedVersion || - versioning.getSatisfyingVersion(useVersions, currentValue) + versioningApi.getSatisfyingVersion(useVersions, currentValue) ); } if (rangeStrategy === 'bump') { // Use the lowest version in the current range - return versioning.minSatisfyingVersion(useVersions, currentValue); + return versioningApi.minSatisfyingVersion(useVersions, currentValue); } // Use the highest version in the current range - const satisfyingVersion = versioning.getSatisfyingVersion( + const satisfyingVersion = versioningApi.getSatisfyingVersion( useVersions, currentValue, ); @@ -49,10 +49,10 @@ export function getCurrentVersion( return satisfyingVersion; } - if (versioning.isVersion(currentValue)) { + if (versioningApi.isVersion(currentValue)) { return currentValue; } - if (versioning.isSingleVersion(currentValue)) { + if (versioningApi.isSingleVersion(currentValue)) { return currentValue.replace(regEx(/=/g), '').trim(); } diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index 4a545dcc3f9d24..9bac9c4bef69c8 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -24,7 +24,7 @@ export interface InternalChecksResult { export async function filterInternalChecks( config: Partial, - versioning: VersioningApi, + versioningApi: VersioningApi, bucket: string, sortedReleases: Release[], ): Promise { @@ -43,7 +43,7 @@ export async function filterInternalChecks( // calculate updateType and then apply it releaseConfig.updateType = getUpdateType( releaseConfig, - versioning, + versioningApi, // TODO #22198 currentVersion!, candidateRelease.version, @@ -53,7 +53,7 @@ export async function filterInternalChecks( releaseConfig[releaseConfig.updateType]!, ); // Apply packageRules in case any apply to updateType - releaseConfig = applyPackageRules(releaseConfig, 'update-type'); + releaseConfig = await applyPackageRules(releaseConfig, 'update-type'); const updatedCandidateRelease = await postprocessRelease( releaseConfig, diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 7c2bd0aa2619be..fc800b96c6ddc3 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -9,8 +9,11 @@ import * as poetryVersioning from '../../../../modules/versioning/poetry'; import { getRegexPredicate } from '../../../../util/string-match'; import type { FilterConfig } from './types'; -function isReleaseStable(release: Release, versioning: VersioningApi): boolean { - if (!versioning.isStable(release.version)) { +function isReleaseStable( + release: Release, + versioningApi: VersioningApi, +): boolean { + if (!versioningApi.isStable(release.version)) { return false; } @@ -26,7 +29,7 @@ export function filterVersions( currentVersion: string, latestVersion: string, releases: Release[], - versioning: VersioningApi, + versioningApi: VersioningApi, ): Release[] { const { ignoreUnstable, ignoreDeprecated, respectLatest, allowedVersions } = config; @@ -39,17 +42,17 @@ export function filterVersions( // Leave only versions greater than current let filteredReleases = releases.filter( (r) => - versioning.isVersion(r.version) && - versioning.isGreaterThan(r.version, currentVersion), + versioningApi.isVersion(r.version) && + versioningApi.isGreaterThan(r.version, currentVersion), ); const currentRelease = releases.find( (r) => - versioning.isValid(r.version) && - versioning.isVersion(r.version) && - versioning.isValid(currentVersion) && - versioning.isVersion(currentVersion) && - versioning.equals(r.version, currentVersion), + versioningApi.isValid(r.version) && + versioningApi.isVersion(r.version) && + versioningApi.isValid(currentVersion) && + versioningApi.isVersion(currentVersion) && + versioningApi.equals(r.version, currentVersion), ); // Don't upgrade from non-deprecated to deprecated @@ -71,9 +74,9 @@ export function filterVersions( filteredReleases = filteredReleases.filter(({ version }) => isAllowedPred(version), ); - } else if (versioning.isValid(allowedVersions)) { + } else if (versioningApi.isValid(allowedVersions)) { filteredReleases = filteredReleases.filter((r) => - versioning.matches(r.version, allowedVersions), + versioningApi.matches(r.version, allowedVersions), ); } else if ( config.versioning !== npmVersioning.id && @@ -122,10 +125,10 @@ export function filterVersions( if ( respectLatest && latestVersion && - !versioning.isGreaterThan(currentVersion, latestVersion) + !versioningApi.isGreaterThan(currentVersion, latestVersion) ) { filteredReleases = filteredReleases.filter( - (r) => !versioning.isGreaterThan(r.version, latestVersion), + (r) => !versioningApi.isGreaterThan(r.version, latestVersion), ); } @@ -133,31 +136,31 @@ export function filterVersions( return filteredReleases; } - if (currentRelease && isReleaseStable(currentRelease, versioning)) { - return filteredReleases.filter((r) => isReleaseStable(r, versioning)); + if (currentRelease && isReleaseStable(currentRelease, versioningApi)) { + return filteredReleases.filter((r) => isReleaseStable(r, versioningApi)); } - const currentMajor = versioning.getMajor(currentVersion); - const currentMinor = versioning.getMinor(currentVersion); - const currentPatch = versioning.getPatch(currentVersion); + const currentMajor = versioningApi.getMajor(currentVersion); + const currentMinor = versioningApi.getMinor(currentVersion); + const currentPatch = versioningApi.getPatch(currentVersion); return filteredReleases.filter((r) => { - if (isReleaseStable(r, versioning)) { + if (isReleaseStable(r, versioningApi)) { return true; } - const major = versioning.getMajor(r.version); + const major = versioningApi.getMajor(r.version); if (major !== currentMajor) { return false; } - if (versioning.allowUnstableMajorUpgrades) { + if (versioningApi.allowUnstableMajorUpgrades) { return true; } - const minor = versioning.getMinor(r.version); - const patch = versioning.getPatch(r.version); + const minor = versioningApi.getMinor(r.version); + const patch = versioningApi.getPatch(r.version); return minor === currentMinor && patch === currentPatch; }); diff --git a/lib/workers/repository/process/lookup/generate.ts b/lib/workers/repository/process/lookup/generate.ts index 3a352be8a5395f..747149c9d1cce2 100644 --- a/lib/workers/repository/process/lookup/generate.ts +++ b/lib/workers/repository/process/lookup/generate.ts @@ -4,6 +4,7 @@ import type { Release } from '../../../../modules/datasource'; import type { LookupUpdate } from '../../../../modules/manager/types'; import type { VersioningApi } from '../../../../modules/versioning'; import type { RangeStrategy } from '../../../../types'; +import { getElapsedDays } from '../../../../util/date'; import { getMergeConfidenceLevel } from '../../../../util/merge-confidence'; import type { LookupUpdateConfig } from './types'; import { getUpdateType } from './update-type'; @@ -11,7 +12,7 @@ import { getUpdateType } from './update-type'; export async function generateUpdate( config: LookupUpdateConfig, currentValue: string | undefined, - versioning: VersioningApi, + versioningApi: VersioningApi, rangeStrategy: RangeStrategy, currentVersion: string, bucket: string, @@ -37,8 +38,9 @@ export async function generateUpdate( update.newDigest = release.newDigest; } // istanbul ignore if - if (release.releaseTimestamp !== undefined) { + if (release.releaseTimestamp) { update.releaseTimestamp = release.releaseTimestamp; + update.newVersionAgeInDays = getElapsedDays(release.releaseTimestamp); } // istanbul ignore if if (release.registryUrl !== undefined) { @@ -52,7 +54,7 @@ export async function generateUpdate( if (currentValue) { try { - update.newValue = versioning.getNewValue({ + update.newValue = versioningApi.getNewValue({ currentValue, rangeStrategy, currentVersion, @@ -68,9 +70,9 @@ export async function generateUpdate( } else { update.newValue = currentValue; } - update.newMajor = versioning.getMajor(newVersion)!; - update.newMinor = versioning.getMinor(newVersion)!; - update.newPatch = versioning.getPatch(newVersion)!; + update.newMajor = versioningApi.getMajor(newVersion)!; + update.newMinor = versioningApi.getMinor(newVersion)!; + update.newPatch = versioningApi.getPatch(newVersion)!; // istanbul ignore if if (!update.updateType && !currentVersion) { logger.debug({ update }, 'Update has no currentVersion'); @@ -79,7 +81,7 @@ export async function generateUpdate( } update.updateType = update.updateType ?? - getUpdateType(config, versioning, currentVersion, newVersion); + getUpdateType(config, versioningApi, currentVersion, newVersion); const { datasource, packageName, packageRules } = config; if (packageRules?.some((pr) => is.nonEmptyArray(pr.matchConfidence))) { update.mergeConfidenceLevel = await getMergeConfidenceLevel( @@ -90,7 +92,7 @@ export async function generateUpdate( update.updateType, ); } - if (!versioning.isVersion(update.newValue)) { + if (!versioningApi.isVersion(update.newValue)) { update.isRange = true; } if (rangeStrategy === 'update-lockfile' && currentValue === update.newValue) { @@ -99,7 +101,7 @@ export async function generateUpdate( if ( rangeStrategy === 'bump' && // TODO #22198 - versioning.matches(newVersion, currentValue!) + versioningApi.matches(newVersion, currentValue!) ) { update.isBump = true; } diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 5fb42917805072..986d8bc395d6f4 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -161,6 +161,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -217,6 +218,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '^0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -228,6 +230,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -257,6 +260,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 4, newValue: '^0.4.0', newVersion: '0.4.4', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2011-06-10T17:20:04.719Z', updateType: 'patch', }, @@ -268,6 +272,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '^0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -279,6 +284,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -305,6 +311,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -315,6 +322,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -342,6 +350,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 4, newValue: '0.4.4', newVersion: '0.4.4', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -352,6 +361,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -362,6 +372,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -389,6 +400,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -423,6 +435,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '^0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -434,6 +447,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -459,6 +473,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -484,6 +499,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -509,6 +525,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -535,6 +552,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -561,6 +579,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 4, newValue: '0.9.4', newVersion: '0.9.4', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-05-22T20:26:50.888Z', updateType: 'minor', }, @@ -598,6 +617,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -608,6 +628,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -639,6 +660,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -649,6 +671,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -675,6 +698,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'patch', }, @@ -685,6 +709,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -711,6 +736,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 12, newValue: '0.8.12', newVersion: '0.8.12', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -721,6 +747,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -731,6 +758,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -765,6 +793,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -791,6 +820,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -816,6 +846,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.0.1', newVersion: '1.0.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -842,6 +873,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -868,6 +900,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.1.0', newVersion: '1.1.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -894,6 +927,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.1.0', newVersion: '1.1.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -920,6 +954,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.1.0', newVersion: '1.1.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -947,6 +982,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -973,6 +1009,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.0.1', newVersion: '1.0.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -1021,6 +1058,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '~0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -1032,6 +1070,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1176,6 +1215,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1209,6 +1249,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1237,6 +1278,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.2.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -1265,6 +1307,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.2.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -1293,6 +1336,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.2.0', newVersion: '1.2.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -1320,6 +1364,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: undefined, newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -1336,22 +1381,20 @@ describe('workers/repository/process/lookup/index', () => { const { updates } = await Result.wrap( lookup.lookupUpdates(config), ).unwrapOrThrow(); - expect(updates).toMatchInlineSnapshot(` - [ - { - "bucket": "non-major", - "isLockfileUpdate": true, - "isRange": true, - "newMajor": 1, - "newMinor": 3, - "newPatch": 0, - "newValue": undefined, - "newVersion": "1.3.0", - "releaseTimestamp": "2015-04-26T16:42:11.311Z", - "updateType": "minor", - }, - ] - `); + expect(updates).toMatchObject([ + { + bucket: 'non-major', + isLockfileUpdate: true, + isRange: true, + newMajor: 1, + newMinor: 3, + newPatch: 0, + newValue: undefined, + newVersion: '1.3.0', + releaseTimestamp: '2015-04-26T16:42:11.311Z', + updateType: 'minor', + }, + ]); expect(updates[0].newValue).toBeUndefined(); expect(updates[0].updateType).toBe('minor'); }); @@ -1376,6 +1419,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.3.0 || ~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1402,6 +1446,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1431,6 +1476,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^2.0.0 || ^3.0.0', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -1460,6 +1506,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^3.0.0', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -1567,6 +1614,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1600,6 +1648,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.x', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1626,6 +1675,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1652,6 +1702,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.x', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1678,6 +1729,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.x', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1704,6 +1756,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.2.x - 1.4.x', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1730,6 +1783,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1756,6 +1810,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -1782,6 +1837,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '~0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -1793,6 +1849,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1819,6 +1876,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '^0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -1830,6 +1888,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -1856,6 +1915,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '^0.7.0 || ^0.8.0 || ^0.9.0', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -1867,6 +1927,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^0.7.0 || ^0.8.0 || ^1.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -1896,6 +1957,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.0.0 || ^2.0.0 || ^3.0.0', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -1925,6 +1987,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.x - 3.x', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -1954,6 +2017,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.x || 2.x || 3.x', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -1983,6 +2047,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1 || 2 || 3', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'major', }, @@ -2009,6 +2074,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.2.0 || ~1.3.0 || ~1.4.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -2049,6 +2115,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '<= 0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -2060,6 +2127,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '<= 1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -2086,6 +2154,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '< 0.9.8', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2013-09-04T17:07:22.948Z', updateType: 'minor', }, @@ -2097,6 +2166,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '< 1.4.2', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -2123,6 +2193,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '< 2', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -2149,6 +2220,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '<= 1.4', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -2175,6 +2247,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '=1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -2202,6 +2275,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 3, newValue: '<= 2', newVersion: '2.0.3', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-01-31T08:11:47.852Z', updateType: 'major', }, @@ -2228,6 +2302,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '<= 1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -2254,6 +2329,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '< 2.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -2280,6 +2356,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '>= 0.5.0 < 2.0.0', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -2306,6 +2383,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '>= 0.5.0 <0.10', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -2317,6 +2395,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '>= 0.5.0 <1.5', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -2343,6 +2422,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 7, newValue: '>= 0.5.0 <= 0.9.7', newVersion: '0.9.7', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -2354,6 +2434,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '>= 0.5.0 <= 1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -2393,6 +2474,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 3, newValue: '2.0.3', newVersion: '2.0.3', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-01-31T08:11:47.852Z', updateType: 'major', }, @@ -2487,8 +2569,14 @@ describe('workers/repository/process/lookup/index', () => { getGithubReleases.mockResolvedValueOnce({ releases: [ { version: '1.4.4' }, - { version: '1.4.5', releaseTimestamp: lastWeek.toISOString() }, - { version: '1.4.6', releaseTimestamp: yesterday.toISOString() }, + { + version: '1.4.5', + releaseTimestamp: lastWeek.toISOString(), + }, + { + version: '1.4.6', + releaseTimestamp: yesterday.toISOString(), + }, ], }); @@ -2505,6 +2593,7 @@ describe('workers/repository/process/lookup/index', () => { newValue: '1.4.6', newVersion: '1.4.6', pendingChecks: true, + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2524,8 +2613,14 @@ describe('workers/repository/process/lookup/index', () => { getGithubReleases.mockResolvedValueOnce({ releases: [ { version: '1.4.4' }, - { version: '1.4.5', releaseTimestamp: lastWeek.toISOString() }, - { version: '1.4.6', releaseTimestamp: yesterday.toISOString() }, + { + version: '1.4.5', + releaseTimestamp: lastWeek.toISOString(), + }, + { + version: '1.4.6', + releaseTimestamp: yesterday.toISOString(), + }, ], }); @@ -2542,6 +2637,7 @@ describe('workers/repository/process/lookup/index', () => { newValue: '1.4.5', newVersion: '1.4.5', pendingVersions: ['1.4.6'], + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2571,6 +2667,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 17, newValue: '2.5.17-beta.0', newVersion: '2.5.17-beta.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2598,6 +2695,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '3.1.0-dev.20180813', newVersion: '3.1.0-dev.20180813', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2625,6 +2723,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.0.1', newVersion: '3.0.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2653,6 +2752,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 35, newValue: '0.0.35', newVersion: '0.0.35', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2698,6 +2798,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.0.1-insiders.20180726', newVersion: '3.0.1-insiders.20180726', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2753,6 +2854,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.0.1-insiders.20180726', newVersion: '3.0.1-insiders.20180726', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'patch', }, @@ -2948,6 +3050,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 35, newValue: '^0.0.35', newVersion: '0.0.35', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-04-27T16:59:06.479Z', updateType: 'patch', }, @@ -3001,6 +3104,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.15.0', newVersion: '1.15.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -3011,6 +3115,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.8.1', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -3039,6 +3144,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.15.0', newVersion: '1.15.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -3049,6 +3155,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '2.7.0', newVersion: '2.7.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -3059,6 +3166,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.8.1', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -3118,6 +3226,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '^1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -3146,6 +3255,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.0.1', newVersion: '1.0.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2014-03-11T18:47:17.560Z', updateType: 'patch', }, @@ -3157,6 +3267,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -3185,6 +3296,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.0.1', newVersion: '1.0.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2014-03-11T18:47:17.560Z', updateType: 'patch', }, @@ -3196,6 +3308,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -3223,6 +3336,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '>=1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -3251,6 +3365,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '>=1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -3319,6 +3434,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'minor', }, @@ -3420,6 +3536,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '~=1.4', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2015-05-17T04:25:07.299Z', updateType: 'major', }, @@ -3436,7 +3553,7 @@ describe('workers/repository/process/lookup/index', () => { lookup.lookupUpdates(config), ).unwrapOrThrow(); - expect(res).toEqual({ + expect(res).toMatchObject({ currentVersion: '1.3.0', currentVersionTimestamp: '2015-04-26T16:42:11.311Z', fixedVersion: '1.3.0', @@ -3451,6 +3568,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -3478,7 +3596,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await Result.wrap( lookup.lookupUpdates(config), ).unwrapOrThrow(); - expect(res).toEqual({ + expect(res).toMatchObject({ currentVersion: '1.3.0', currentVersionTimestamp: '2015-04-26T16:42:11.311Z', fixedVersion: '1.3.0', @@ -3493,6 +3611,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.4.0', newVersion: '1.4.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -3503,6 +3622,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 3, newValue: '2.0.3', newVersion: '2.0.3', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -3533,7 +3653,7 @@ describe('workers/repository/process/lookup/index', () => { lookup.lookupUpdates(config), ).unwrapOrThrow(); - expect(res).toEqual({ + expect(res).toMatchObject({ currentVersion: '1.3.0', currentVersionTimestamp: '2015-04-26T16:42:11.311Z', deprecationMessage: codeBlock` @@ -3556,6 +3676,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '1.4.1', newVersion: '1.4.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'minor', }, @@ -4274,6 +4395,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: '1.3.0', newVersion: '1.3.0', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: expect.any(String), updateType: 'major', }, @@ -4367,6 +4489,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res).toEqual({ currentVersion: '17.0.0', + currentVersionAgeInDays: 1, currentVersionTimestamp: releaseTimestamp, fixedVersion: '17.0.0', isSingleVersion: true, @@ -4909,6 +5032,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.8.1', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'minor', }, @@ -4937,6 +5061,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 1, newValue: '3.8.1', newVersion: '3.8.1', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2017-10-17T15:22:36.646Z', updateType: 'minor', }, @@ -4996,6 +5121,7 @@ describe('workers/repository/process/lookup/index', () => { newPatch: 0, newValue: 'v0.0.0-20240509183442-62759503f434', newVersion: 'v0.0.0-20240509183442-62759503f434', + newVersionAgeInDays: expect.any(Number), releaseTimestamp: '2024-05-09T18:34:42.000Z', updateType: 'digest', }, diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index ff096ec13933fd..ea4b77b968e5c2 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -24,6 +24,7 @@ import * as allVersioning from '../../../../modules/versioning'; import { id as dockerVersioningId } from '../../../../modules/versioning/docker'; import { ExternalHostError } from '../../../../types/errors/external-host-error'; import { assignKeys } from '../../../../util/assign-keys'; +import { getElapsedDays } from '../../../../util/date'; import { applyPackageRules } from '../../../../util/package-rules'; import { regEx } from '../../../../util/regex'; import { Result } from '../../../../util/result'; @@ -42,11 +43,12 @@ import { function getTimestamp( versions: Release[], version: string, - versioning: allVersioning.VersioningApi, + versioningApi: allVersioning.VersioningApi, ): string | null | undefined { return versions.find( (v) => - versioning.isValid(v.version) && versioning.equals(v.version, version), + versioningApi.isValid(v.version) && + versioningApi.equals(v.version, version), )?.releaseTimestamp; } @@ -56,7 +58,7 @@ export async function lookupUpdates( let config: LookupUpdateConfig = { ...inconfig }; config.versioning ??= getDefaultVersioning(config.datasource); - const versioning = allVersioning.get(config.versioning); + const versioningApi = allVersioning.get(config.versioning); const unconstrainedValue = !!config.lockedVersion && is.undefined(config.currentValue); @@ -122,13 +124,14 @@ export async function lookupUpdates( ); } } - const isValid = is.string(compareValue) && versioning.isValid(compareValue); + const isValid = + is.string(compareValue) && versioningApi.isValid(compareValue); if (unconstrainedValue || isValid) { if ( !config.updatePinnedDependencies && // TODO #22198 - versioning.isSingleVersion(compareValue!) + versioningApi.isSingleVersion(compareValue!) ) { res.skipReason = 'is-pinned'; return Result.ok(res); @@ -185,7 +188,7 @@ export async function lookupUpdates( const latestVersion = dependency.tags?.latest; // Filter out any results from datasource that don't comply with our versioning let allVersions = dependency.releases.filter((release) => - versioning.isVersion(release.version), + versioningApi.isVersion(release.version), ); // istanbul ignore if if (allVersions.length === 0) { @@ -202,7 +205,7 @@ export async function lookupUpdates( } } // Reapply package rules in case we missed something from sourceUrl - config = applyPackageRules( + config = await applyPackageRules( { ...config, sourceUrl: res.sourceUrl }, 'source-url', ); @@ -219,14 +222,14 @@ export async function lookupUpdates( (v) => v.version === taggedVersion || (v.version === compareValue && - versioning.isGreaterThan(taggedVersion, compareValue)), + versioningApi.isGreaterThan(taggedVersion, compareValue)), ); } // Check that existing constraint can be satisfied const allSatisfyingVersions = allVersions.filter( (v) => // TODO #22198 - unconstrainedValue || versioning.matches(v.version, compareValue!), + unconstrainedValue || versioningApi.matches(v.version, compareValue!), ); if (!allSatisfyingVersions.length) { logger.debug( @@ -235,7 +238,7 @@ export async function lookupUpdates( } if (config.rollbackPrs && !allSatisfyingVersions.length) { - const rollback = getRollbackUpdate(config, allVersions, versioning); + const rollback = getRollbackUpdate(config, allVersions, versioningApi); // istanbul ignore if if (!rollback) { res.warnings.push({ @@ -279,7 +282,7 @@ export async function lookupUpdates( getCurrentVersion( compareValue!, config.lockedVersion!, - versioning, + versioningApi, rangeStrategy!, latestVersion!, nonDeprecatedVersions, @@ -287,7 +290,7 @@ export async function lookupUpdates( getCurrentVersion( compareValue!, config.lockedVersion!, - versioning, + versioningApi, rangeStrategy!, latestVersion!, allVersions.map((v) => v.version), @@ -307,18 +310,20 @@ export async function lookupUpdates( const currentVersionTimestamp = getTimestamp( allVersions, currentVersion, - versioning, + versioningApi, ); if (is.nonEmptyString(currentVersionTimestamp)) { res.currentVersionTimestamp = currentVersionTimestamp; + res.currentVersionAgeInDays = getElapsedDays(currentVersionTimestamp); + if ( - config.packageRules?.some((rules) => - is.nonEmptyString(rules.matchCurrentAge), + config.packageRules?.some((rule) => + is.nonEmptyString(rule.matchCurrentAge), ) ) { // Reapply package rules to check matches for matchCurrentAge - config = applyPackageRules( + config = await applyPackageRules( { ...config, currentVersionTimestamp }, 'current-timestamp', ); @@ -329,20 +334,20 @@ export async function lookupUpdates( compareValue && currentVersion && rangeStrategy === 'pin' && - !versioning.isSingleVersion(compareValue) + !versioningApi.isSingleVersion(compareValue) ) { res.updates.push({ updateType: 'pin', isPin: true, // TODO: newValue can be null! (#22198) - newValue: versioning.getNewValue({ + newValue: versioningApi.getNewValue({ currentValue: compareValue, rangeStrategy, currentVersion, newVersion: currentVersion, })!, newVersion: currentVersion, - newMajor: versioning.getMajor(currentVersion)!, + newMajor: versioningApi.getMajor(currentVersion)!, }); } if (rangeStrategy === 'pin') { @@ -350,7 +355,7 @@ export async function lookupUpdates( rangeStrategy = 'replace'; } // istanbul ignore if - if (!versioning.isVersion(currentVersion!)) { + if (!versioningApi.isVersion(currentVersion!)) { res.skipReason = 'invalid-version'; return Result.ok(res); } @@ -363,25 +368,25 @@ export async function lookupUpdates( config.rangeStrategy === 'in-range-only' ? allSatisfyingVersions : allVersions, - versioning, + versioningApi, ).filter( (v) => // Leave only compatible versions unconstrainedValue || - versioning.isCompatible(v.version, compareValue), + versioningApi.isCompatible(v.version, compareValue), ); let shrinkedViaVulnerability = false; if (config.isVulnerabilityAlert) { if (config.vulnerabilityFixVersion) { res.vulnerabilityFixVersion = config.vulnerabilityFixVersion; res.vulnerabilityFixStrategy = config.vulnerabilityFixStrategy; - if (versioning.isValid(config.vulnerabilityFixVersion)) { + if (versioningApi.isValid(config.vulnerabilityFixVersion)) { let fixedFilteredReleases; - if (versioning.isVersion(config.vulnerabilityFixVersion)) { + if (versioningApi.isVersion(config.vulnerabilityFixVersion)) { // Retain only releases greater than or equal to the fix version fixedFilteredReleases = filteredReleases.filter( (release) => - !versioning.isGreaterThan( + !versioningApi.isGreaterThan( config.vulnerabilityFixVersion!, release.version, ), @@ -389,7 +394,7 @@ export async function lookupUpdates( } else { // Retain only releases which max the fix constraint fixedFilteredReleases = filteredReleases.filter((release) => - versioning.matches( + versioningApi.matches( release.version, config.vulnerabilityFixVersion!, ), @@ -439,7 +444,7 @@ export async function lookupUpdates( // TODO #22198 currentVersion!, release.version, - versioning, + versioningApi, ); if (is.string(bucket)) { if (buckets[bucket]) { @@ -452,12 +457,12 @@ export async function lookupUpdates( const depResultConfig = mergeChildConfig(config, res); for (const [bucket, releases] of Object.entries(buckets)) { const sortedReleases = releases.sort((r1, r2) => - versioning.sortVersions(r1.version, r2.version), + versioningApi.sortVersions(r1.version, r2.version), ); const { release, pendingChecks, pendingReleases } = await filterInternalChecks( depResultConfig, - versioning, + versioningApi, bucket, sortedReleases, ); @@ -469,7 +474,7 @@ export async function lookupUpdates( const update = await generateUpdate( config, compareValue, - versioning, + versioningApi, // TODO #22198 rangeStrategy!, @@ -517,16 +522,16 @@ export async function lookupUpdates( } res.isSingleVersion ??= is.string(update.newValue) && - versioning.isSingleVersion(update.newValue); + versioningApi.isSingleVersion(update.newValue); // istanbul ignore if if ( config.versioning === dockerVersioningId && update.updateType !== 'rollback' && update.newValue && - versioning.isVersion(update.newValue) && + versioningApi.isVersion(update.newValue) && compareValue && - versioning.isVersion(compareValue) && - versioning.isGreaterThan(compareValue, update.newValue) + versioningApi.isVersion(compareValue) && + versioningApi.isGreaterThan(compareValue, update.newValue) ) { logger.warn( { @@ -570,7 +575,7 @@ export async function lookupUpdates( if (config.lockedVersion) { res.currentVersion = config.lockedVersion; res.fixedVersion = config.lockedVersion; - } else if (compareValue && versioning.isSingleVersion(compareValue)) { + } else if (compareValue && versioningApi.isSingleVersion(compareValue)) { res.fixedVersion = compareValue.replace(regEx(/^=+/), ''); } @@ -612,12 +617,12 @@ export async function lookupUpdates( }); } } - if (versioning.valueToVersion) { + if (versioningApi.valueToVersion) { // TODO #22198 - res.currentVersion = versioning.valueToVersion(res.currentVersion!); + res.currentVersion = versioningApi.valueToVersion(res.currentVersion!); for (const update of res.updates || /* istanbul ignore next*/ []) { // TODO #22198 - update.newVersion = versioning.valueToVersion(update.newVersion!); + update.newVersion = versioningApi.valueToVersion(update.newVersion!); } } if (res.registryUrl) { diff --git a/lib/workers/repository/process/lookup/rollback.ts b/lib/workers/repository/process/lookup/rollback.ts index 64a45b7afab5a5..4f6171d25e856c 100644 --- a/lib/workers/repository/process/lookup/rollback.ts +++ b/lib/workers/repository/process/lookup/rollback.ts @@ -7,11 +7,11 @@ import type { RollbackConfig } from './types'; export function getRollbackUpdate( config: RollbackConfig, versions: Release[], - version: VersioningApi, + versioningApi: VersioningApi, ): LookupUpdate | null { const { packageFile, versioning, depName, currentValue } = config; // istanbul ignore if - if (!('isLessThanRange' in version)) { + if (!('isLessThanRange' in versioningApi)) { logger.debug( { versioning }, 'Current versioning does not support isLessThanRange()', @@ -20,7 +20,7 @@ export function getRollbackUpdate( } const lessThanVersions = versions.filter((v) => { try { - return version.isLessThanRange!(v.version, currentValue!); + return versioningApi.isLessThanRange!(v.version, currentValue!); } catch /* istanbul ignore next */ { return false; } @@ -42,11 +42,13 @@ export function getRollbackUpdate( 'Versions found before rolling back', ); - lessThanVersions.sort((a, b) => version.sortVersions(a.version, b.version)); + lessThanVersions.sort((a, b) => + versioningApi.sortVersions(a.version, b.version), + ); let newRelease; - if (currentValue && version.isStable(currentValue)) { + if (currentValue && versioningApi.isStable(currentValue)) { newRelease = lessThanVersions - .filter((v) => version.isStable(v.version)) + .filter((v) => versioningApi.isStable(v.version)) .pop(); } let newVersion = newRelease?.version; @@ -62,7 +64,7 @@ export function getRollbackUpdate( logger.debug('No newVersion to roll back to'); return null; } - const newValue = version.getNewValue({ + const newValue = versioningApi.getNewValue({ // TODO #22198 currentValue: currentValue!, rangeStrategy: 'replace', @@ -71,7 +73,7 @@ export function getRollbackUpdate( return { bucket: 'rollback', // TODO #22198 - newMajor: version.getMajor(newVersion)!, + newMajor: versioningApi.getMajor(newVersion)!, newValue: newValue!, newVersion, registryUrl, diff --git a/lib/workers/repository/process/lookup/types.ts b/lib/workers/repository/process/lookup/types.ts index 03ad7f94942f39..25950a3221a767 100644 --- a/lib/workers/repository/process/lookup/types.ts +++ b/lib/workers/repository/process/lookup/types.ts @@ -69,6 +69,7 @@ export interface UpdateResult { updates: LookupUpdate[]; warnings: ValidationMessage[]; versioning?: string; + currentVersionAgeInDays?: number; currentVersionTimestamp?: string; vulnerabilityFixVersion?: string; vulnerabilityFixStrategy?: string; diff --git a/lib/workers/repository/process/lookup/update-type.ts b/lib/workers/repository/process/lookup/update-type.ts index 9db72f6a56746e..e919cfd2cbdbaf 100644 --- a/lib/workers/repository/process/lookup/update-type.ts +++ b/lib/workers/repository/process/lookup/update-type.ts @@ -10,14 +10,20 @@ export interface UpdateTypeConfig { export function getUpdateType( config: UpdateTypeConfig, - versioning: allVersioning.VersioningApi, + versioningApi: allVersioning.VersioningApi, currentVersion: string, newVersion: string, ): UpdateType { - if (versioning.getMajor(newVersion)! > versioning.getMajor(currentVersion)!) { + if ( + versioningApi.getMajor(newVersion)! > + versioningApi.getMajor(currentVersion)! + ) { return 'major'; } - if (versioning.getMinor(newVersion)! > versioning.getMinor(currentVersion)!) { + if ( + versioningApi.getMinor(newVersion)! > + versioningApi.getMinor(currentVersion)! + ) { return 'minor'; } return 'patch'; diff --git a/lib/workers/repository/process/lookup/utils.ts b/lib/workers/repository/process/lookup/utils.ts index 9e12201bb3cbfa..cc544cd863b0fb 100644 --- a/lib/workers/repository/process/lookup/utils.ts +++ b/lib/workers/repository/process/lookup/utils.ts @@ -50,11 +50,11 @@ export function determineNewReplacementName( export function determineNewReplacementValue( config: LookupUpdateConfig, ): string | undefined | null { - const versioning = allVersioning.get(config.versioning); + const versioningApi = allVersioning.get(config.versioning); const rangeStrategy = getRangeStrategy(config); if (!is.nullOrUndefined(config.replacementVersion)) { - return versioning.getNewValue({ + return versioningApi.getNewValue({ // TODO #22198 currentValue: config.currentValue!, newVersion: config.replacementVersion, diff --git a/lib/workers/repository/update/pr/changelog/index.ts b/lib/workers/repository/update/pr/changelog/index.ts index d24ea5138b905a..dbe5d30eb697ac 100644 --- a/lib/workers/repository/update/pr/changelog/index.ts +++ b/lib/workers/repository/update/pr/changelog/index.ts @@ -17,8 +17,8 @@ export async function getChangeLogJSON( if (!(sourceUrl && currentVersion && newVersion)) { return null; } - const version = allVersioning.get(versioning); - if (version.equals(currentVersion, newVersion)) { + const versioningApi = allVersioning.get(versioning); + if (versioningApi.equals(currentVersion, newVersion)) { return null; } logger.debug( diff --git a/lib/workers/repository/update/pr/changelog/releases.ts b/lib/workers/repository/update/pr/changelog/releases.ts index 42e5747aab9049..9a9113bd1fcb4e 100644 --- a/lib/workers/repository/update/pr/changelog/releases.ts +++ b/lib/workers/repository/update/pr/changelog/releases.ts @@ -10,20 +10,24 @@ import { get } from '../../../../../modules/versioning'; import { coerceArray } from '../../../../../util/array'; import type { BranchUpgradeConfig } from '../../../../types'; -function matchesMMP(version: VersioningApi, v1: string, v2: string): boolean { +function matchesMMP( + versioningApi: VersioningApi, + v1: string, + v2: string, +): boolean { return ( - version.getMajor(v1) === version.getMajor(v2) && - version.getMinor(v1) === version.getMinor(v2) && - version.getPatch(v1) === version.getPatch(v2) + versioningApi.getMajor(v1) === versioningApi.getMajor(v2) && + versioningApi.getMinor(v1) === versioningApi.getMinor(v2) && + versioningApi.getPatch(v1) === versioningApi.getPatch(v2) ); } function matchesUnstable( - version: VersioningApi, + versioningApi: VersioningApi, v1: string, v2: string, ): boolean { - return !version.isStable(v1) && matchesMMP(version, v1, v2); + return !versioningApi.isStable(v1) && matchesMMP(versioningApi, v1, v2); } export async function getInRangeReleases( diff --git a/lib/workers/repository/update/pr/changelog/source.ts b/lib/workers/repository/update/pr/changelog/source.ts index 0101a00e056edc..ae76f628f5bf4d 100644 --- a/lib/workers/repository/update/pr/changelog/source.ts +++ b/lib/workers/repository/update/pr/changelog/source.ts @@ -76,7 +76,7 @@ export abstract class ChangeLogSource { const packageName = config.packageName!; const depName = config.depName!; const sourceDirectory = config.sourceDirectory; - const version = allVersioning.get(versioning); + const versioningApi = allVersioning.get(versioning); if (this.shouldSkipPackage(config)) { return null; @@ -108,8 +108,8 @@ export abstract class ChangeLogSource { } // This extra filter/sort should not be necessary, but better safe than sorry const validReleases = [...releases] - .filter((release) => version.isVersion(release.version)) - .sort((a, b) => version.sortVersions(a.version, b.version)); + .filter((release) => versioningApi.isVersion(release.version)) + .sort((a, b) => versioningApi.sortVersions(a.version, b.version)); if (validReleases.length < 2) { logger.debug( @@ -122,8 +122,8 @@ export abstract class ChangeLogSource { // Check if `v` belongs to the range (currentVersion, newVersion] const inRange = (v: string): boolean => - version.isGreaterThan(v, currentVersion) && - !version.isGreaterThan(v, newVersion); + versioningApi.isGreaterThan(v, currentVersion) && + !versioningApi.isGreaterThan(v, newVersion); const getTags = memoize(() => this.getAllTags(apiBaseUrl, repository)); for (let i = 1; i < validReleases.length; i += 1) { @@ -146,8 +146,20 @@ export abstract class ChangeLogSource { compare: {}, }; const tags = await getTags(); - const prevHead = this.getRef(version, packageName, depName, prev, tags); - const nextHead = this.getRef(version, packageName, depName, next, tags); + const prevHead = this.getRef( + versioningApi, + packageName, + depName, + prev, + tags, + ); + const nextHead = this.getRef( + versioningApi, + packageName, + depName, + next, + tags, + ); if (is.nonEmptyString(prevHead) && is.nonEmptyString(nextHead)) { release.compare.url = this.getCompareURL( baseUrl, @@ -186,7 +198,7 @@ export abstract class ChangeLogSource { } private findTagOfRelease( - version: allVersioning.VersioningApi, + versioningApi: allVersioning.VersioningApi, packageName: string, depName: string, depNewVersion: string, @@ -200,19 +212,21 @@ export abstract class ChangeLogSource { }); const tagList = exactTagsList.length ? exactTagsList : tags; return tagList - .filter((tag) => version.isVersion(tag.replace(regex, ''))) - .find((tag) => version.equals(tag.replace(regex, ''), depNewVersion)); + .filter((tag) => versioningApi.isVersion(tag.replace(regex, ''))) + .find((tag) => + versioningApi.equals(tag.replace(regex, ''), depNewVersion), + ); } private getRef( - version: allVersioning.VersioningApi, + versioningApi: allVersioning.VersioningApi, packageName: string, depName: string, release: Release, tags: string[], ): string | null { const tagName = this.findTagOfRelease( - version, + versioningApi, packageName, depName, release.version, diff --git a/lib/workers/repository/updates/flatten.ts b/lib/workers/repository/updates/flatten.ts index 1ee8a7326f37ad..1ff393b4abeff8 100644 --- a/lib/workers/repository/updates/flatten.ts +++ b/lib/workers/repository/updates/flatten.ts @@ -113,7 +113,10 @@ export async function flattenUpdates( depConfig.datasource, ); updateConfig = mergeChildConfig(updateConfig, datasourceConfig); - updateConfig = applyPackageRules(updateConfig, 'datasource-merge'); + updateConfig = await applyPackageRules( + updateConfig, + 'datasource-merge', + ); // apply major/minor/patch/pin/digest updateConfig = mergeChildConfig( updateConfig, @@ -123,7 +126,10 @@ export async function flattenUpdates( delete updateConfig[updateType]; } // Apply again in case any were added by the updateType config - updateConfig = applyPackageRules(updateConfig, 'update-type-merge'); + updateConfig = await applyPackageRules( + updateConfig, + 'update-type-merge', + ); updateConfig = applyUpdateConfig(updateConfig); updateConfig.baseDeps = packageFile.deps; update.branchName = updateConfig.branchName; @@ -143,7 +149,7 @@ export async function flattenUpdates( ); lockFileConfig.updateType = 'lockFileMaintenance'; lockFileConfig.isLockFileMaintenance = true; - lockFileConfig = applyPackageRules( + lockFileConfig = await applyPackageRules( lockFileConfig, 'lock-file-maintenance-merge', ); @@ -152,7 +158,7 @@ export async function flattenUpdates( lockFileConfig, lockFileConfig.lockFileMaintenance, ); - lockFileConfig = applyPackageRules( + lockFileConfig = await applyPackageRules( lockFileConfig, 'lock-file-maintenance-merge-2', ); diff --git a/package.json b/package.json index 7ebdbaaac7e56f..7250b6871f360b 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "async-mutex": "0.5.0", "auth-header": "1.0.0", "aws4": "1.13.2", - "azure-devops-node-api": "14.0.2", + "azure-devops-node-api": "14.1.0", "bunyan": "1.8.15", "cacache": "18.0.4", "chalk": "4.1.2", @@ -263,7 +263,7 @@ "@openpgp/web-stream-tools": "0.0.14", "@renovate/eslint-plugin": "file:tools/eslint", "@semantic-release/exec": "6.0.3", - "@swc/core": "1.7.26", + "@swc/core": "1.7.28", "@types/auth-header": "1.0.6", "@types/aws4": "1.11.6", "@types/better-sqlite3": "7.6.11", @@ -285,7 +285,7 @@ "@types/js-yaml": "4.0.9", "@types/json-dup-key-validator": "1.0.2", "@types/linkify-markdown": "1.0.3", - "@types/lodash": "4.17.9", + "@types/lodash": "4.17.10", "@types/luxon": "3.4.2", "@types/markdown-it": "14.1.2", "@types/markdown-table": "2.0.0", @@ -293,7 +293,7 @@ "@types/mdast": "3.0.15", "@types/moo": "0.5.9", "@types/ms": "0.7.34", - "@types/node": "20.16.7", + "@types/node": "20.16.10", "@types/parse-link-header": "2.0.3", "@types/semver": "7.5.8", "@types/semver-stable": "3.0.2", @@ -304,8 +304,8 @@ "@types/url-join": "4.0.3", "@types/validate-npm-package-name": "4.0.2", "@types/xmldoc": "1.1.9", - "@typescript-eslint/eslint-plugin": "8.7.0", - "@typescript-eslint/parser": "8.7.0", + "@typescript-eslint/eslint-plugin": "8.8.0", + "@typescript-eslint/parser": "8.8.0", "aws-sdk-client-mock": "4.0.2", "callsite": "1.0.0", "common-tags": "1.8.2", @@ -314,7 +314,7 @@ "eslint": "8.57.1", "eslint-formatter-gha": "1.5.1", "eslint-import-resolver-typescript": "3.6.3", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jest": "28.8.3", "eslint-plugin-jest-formatting": "3.1.0", "eslint-plugin-promise": "7.1.0", @@ -335,7 +335,7 @@ "nyc": "17.1.0", "pretty-format": "29.7.0", "rimraf": "6.0.1", - "semantic-release": "24.1.1", + "semantic-release": "24.1.2", "tar": "7.4.3", "tmp-promise": "3.0.3", "ts-jest": "29.2.5", @@ -344,7 +344,7 @@ "typescript": "5.6.2", "unified": "9.2.2" }, - "packageManager": "pnpm@9.11.0", + "packageManager": "pnpm@9.12.0", "files": [ "dist", "renovate-schema.json" @@ -357,7 +357,7 @@ "safe-json-stringify" ], "overrides": { - "@semantic-release/github>@octokit/plugin-paginate-rest": "11.3.0" + "@semantic-release/github>@octokit/plugin-paginate-rest": "11.3.5" } } } diff --git a/pdm.lock b/pdm.lock index eff1634223433e..787286f9018474 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:d572a587ff7dfa3b1102a6ea07dc50db88b1954d95954e107068efbeeacea2c3" +content_hash = "sha256:82bcc4913503c793c29861d179d986aac5e6f7d1f7c3eb48d87c89f2fbc588af" [[metadata.targets]] requires_python = ">=3.11" @@ -48,43 +48,58 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" requires_python = ">=3.7.0" summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." groups = ["default"] files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -167,32 +182,52 @@ files = [ [[package]] name = "markupsafe" -version = "2.1.5" -requires_python = ">=3.7" +version = "3.0.1" +requires_python = ">=3.9" summary = "Safely add untrusted strings to HTML/XML markup." groups = ["default"] files = [ - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295"}, + {file = "markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344"}, ] [[package]] @@ -268,7 +303,7 @@ files = [ [[package]] name = "mkdocs-material" -version = "9.5.39" +version = "9.5.40" requires_python = ">=3.8" summary = "Documentation that simply works" groups = ["default"] @@ -286,8 +321,8 @@ dependencies = [ "requests~=2.26", ] files = [ - {file = "mkdocs_material-9.5.39-py3-none-any.whl", hash = "sha256:0f2f68c8db89523cb4a59705cd01b4acd62b2f71218ccb67e1e004e560410d2b"}, - {file = "mkdocs_material-9.5.39.tar.gz", hash = "sha256:25faa06142afa38549d2b781d475a86fb61de93189f532b88e69bf11e5e5c3be"}, + {file = "mkdocs_material-9.5.40-py3-none-any.whl", hash = "sha256:8e7a16ada34e79a7b6459ff2602584222f522c738b6a023d1bea853d5049da6f"}, + {file = "mkdocs_material-9.5.40.tar.gz", hash = "sha256:b69d70e667ec51fc41f65e006a3184dd00d95b2439d982cb1586e4c018943156"}, ] [[package]] @@ -368,7 +403,7 @@ files = [ [[package]] name = "pymdown-extensions" -version = "10.11.1" +version = "10.11.2" requires_python = ">=3.8" summary = "Extension pack for Python Markdown." groups = ["default"] @@ -377,8 +412,8 @@ dependencies = [ "pyyaml", ] files = [ - {file = "pymdown_extensions-10.11.1-py3-none-any.whl", hash = "sha256:a2b28f5786e041f19cb5bb30a1c2c853668a7099da8e3dd822a5ad05f2e855e3"}, - {file = "pymdown_extensions-10.11.1.tar.gz", hash = "sha256:a8836e955851542fa2625d04d59fdf97125ca001377478ed5618e04f9183a59a"}, + {file = "pymdown_extensions-10.11.2-py3-none-any.whl", hash = "sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf"}, + {file = "pymdown_extensions-10.11.2.tar.gz", hash = "sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049"}, ] [[package]] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f95bab4c83a041..35c3ad14c02255 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - '@semantic-release/github>@octokit/plugin-paginate-rest': 11.3.0 + '@semantic-release/github>@octokit/plugin-paginate-rest': 11.3.5 importers: @@ -108,8 +108,8 @@ importers: specifier: 1.13.2 version: 1.13.2 azure-devops-node-api: - specifier: 14.0.2 - version: 14.0.2 + specifier: 14.1.0 + version: 14.1.0 bunyan: specifier: 1.8.15 version: 1.8.15 @@ -372,10 +372,10 @@ importers: version: '@renovatebot/eslint-plugin@file:tools/eslint' '@semantic-release/exec': specifier: 6.0.3 - version: 6.0.3(semantic-release@24.1.1(typescript@5.6.2)) + version: 6.0.3(semantic-release@24.1.2(typescript@5.6.2)) '@swc/core': - specifier: 1.7.26 - version: 1.7.26 + specifier: 1.7.28 + version: 1.7.28 '@types/auth-header': specifier: 1.0.6 version: 1.0.6 @@ -440,8 +440,8 @@ importers: specifier: 1.0.3 version: 1.0.3 '@types/lodash': - specifier: 4.17.9 - version: 4.17.9 + specifier: 4.17.10 + version: 4.17.10 '@types/luxon': specifier: 3.4.2 version: 3.4.2 @@ -464,8 +464,8 @@ importers: specifier: 0.7.34 version: 0.7.34 '@types/node': - specifier: 20.16.7 - version: 20.16.7 + specifier: 20.16.10 + version: 20.16.10 '@types/parse-link-header': specifier: 2.0.3 version: 2.0.3 @@ -497,11 +497,11 @@ importers: specifier: 1.1.9 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.7.0 - version: 8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + specifier: 8.8.0 + version: 8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': - specifier: 8.7.0 - version: 8.7.0(eslint@8.57.1)(typescript@5.6.2) + specifier: 8.8.0 + version: 8.8.0(eslint@8.57.1)(typescript@5.6.2) aws-sdk-client-mock: specifier: 4.0.2 version: 4.0.2 @@ -525,13 +525,13 @@ importers: version: 1.5.1 eslint-import-resolver-typescript: specifier: 3.6.3 - version: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + version: 3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-plugin-import: - specifier: 2.30.0 - version: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + specifier: 2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jest: specifier: 28.8.3 - version: 28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2) + version: 28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.1) @@ -555,16 +555,16 @@ importers: version: 9.1.6 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2))) + version: 4.0.2(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2))) jest-mock: specifier: 29.7.0 version: 29.7.0 jest-mock-extended: specifier: 3.0.7 - version: 3.0.7(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2) + version: 3.0.7(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -590,8 +590,8 @@ importers: specifier: 6.0.1 version: 6.0.1 semantic-release: - specifier: 24.1.1 - version: 24.1.1(typescript@5.6.2) + specifier: 24.1.2 + version: 24.1.2(typescript@5.6.2) tar: specifier: 7.4.3 version: 7.4.3 @@ -600,10 +600,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.2.5 - version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2) + version: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2) type-fest: specifier: 4.26.1 version: 4.26.1 @@ -826,66 +826,66 @@ packages: resolution: {integrity: sha512-qA2diK3d/ztC8HUb7NwPKbJRV01NpzTzxFn+L5G3HzJBNeKbjLcprQ/9uG9gp2UEx2Go782FI1ddrMNa0qBICA==} engines: {node: '>=16.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true @@ -910,8 +910,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.25.6': - resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -926,8 +926,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -974,26 +974,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.4': - resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.25.6': - resolution: {integrity: sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==} + '@babel/runtime-corejs3@7.25.7': + resolution: {integrity: sha512-gMmIEhg35sXk9Te5qbGp3W9YKrvLt3HV658/d3odWrHSqT0JeG5OzsJWFHRLiOohRyjRsJc/x03DhJm3i8VJxg==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1172,8 +1172,8 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/util@1.3.0': - resolution: {integrity: sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==} + '@jsonjoy.com/util@1.5.0': + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -1249,18 +1249,18 @@ packages: '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/plugin-paginate-rest@11.3.0': - resolution: {integrity: sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - '@octokit/plugin-paginate-rest@11.3.1': resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '5' + '@octokit/plugin-paginate-rest@11.3.5': + resolution: {integrity: sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + '@octokit/plugin-request-log@4.0.1': resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} engines: {node: '>= 18'} @@ -1279,8 +1279,8 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-throttling@9.3.1': - resolution: {integrity: sha512-Qd91H4liUBhwLB2h6jZ99bsxoQdhgPk6TdwnClPyTBSDAdviGPceViEgUwj+pcQDmB/rfAXAXK7MTochpHM3yQ==} + '@octokit/plugin-throttling@9.3.2': + resolution: {integrity: sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^6.0.0 @@ -1305,8 +1305,8 @@ packages: resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} engines: {node: '>= 18'} - '@octokit/types@13.6.0': - resolution: {integrity: sha512-CrooV/vKCXqwLa+osmHLIMUb87brpgUqlqkPGc6iE2wCkUvTrHiXFMhAKoDDaAAYJrtKtrFTgSQTg5nObBEaew==} + '@octokit/types@13.6.1': + resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -1587,11 +1587,11 @@ packages: peerDependencies: semantic-release: '>=18.0.0' - '@semantic-release/github@10.3.5': - resolution: {integrity: sha512-svvRglGmvqvxjmDgkXhrjf0lC88oZowFhOfifTldbgX9Dzj0inEtMLaC+3/MkDEmxmaQjWmF5Q/0CMIvPNSVdQ==} + '@semantic-release/github@11.0.0': + resolution: {integrity: sha512-Uon6G6gJD8U1JNvPm7X0j46yxNRJ8Ui6SgK4Zw5Ktu8RgjEft3BGn+l/RX1TTzhhO3/uUcKuqM+/9/ETFxWS/Q==} engines: {node: '>=20.8.1'} peerDependencies: - semantic-release: '>=20.1.0' + semantic-release: '>=24.1.0' '@semantic-release/npm@12.0.1': resolution: {integrity: sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==} @@ -1638,8 +1638,8 @@ packages: '@sinonjs/text-encoding@0.7.3': resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} - '@smithy/abort-controller@3.1.4': - resolution: {integrity: sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==} + '@smithy/abort-controller@3.1.5': + resolution: {integrity: sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==} engines: {node: '>=16.0.0'} '@smithy/chunked-blob-reader-native@3.0.0': @@ -1648,53 +1648,53 @@ packages: '@smithy/chunked-blob-reader@3.0.0': resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} - '@smithy/config-resolver@3.0.8': - resolution: {integrity: sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==} + '@smithy/config-resolver@3.0.9': + resolution: {integrity: sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==} engines: {node: '>=16.0.0'} - '@smithy/core@2.4.6': - resolution: {integrity: sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==} + '@smithy/core@2.4.8': + resolution: {integrity: sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==} engines: {node: '>=16.0.0'} - '@smithy/credential-provider-imds@3.2.3': - resolution: {integrity: sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==} + '@smithy/credential-provider-imds@3.2.4': + resolution: {integrity: sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==} engines: {node: '>=16.0.0'} - '@smithy/eventstream-codec@3.1.5': - resolution: {integrity: sha512-6pu+PT2r+5ZnWEV3vLV1DzyrpJ0TmehQlniIDCSpZg6+Ji2SfOI38EqUyQ+O8lotVElCrfVc9chKtSMe9cmCZQ==} + '@smithy/eventstream-codec@3.1.6': + resolution: {integrity: sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==} - '@smithy/eventstream-serde-browser@3.0.9': - resolution: {integrity: sha512-PiQLo6OQmZAotJweIcObL1H44gkvuJACKMNqpBBe5Rf2Ax1DOcGi/28+feZI7yTe1ERHlQQaGnm8sSkyDUgsMg==} + '@smithy/eventstream-serde-browser@3.0.10': + resolution: {integrity: sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==} engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-config-resolver@3.0.6': - resolution: {integrity: sha512-iew15It+c7WfnVowWkt2a7cdPp533LFJnpjDQgfZQcxv2QiOcyEcea31mnrk5PVbgo0nNH3VbYGq7myw2q/F6A==} + '@smithy/eventstream-serde-config-resolver@3.0.7': + resolution: {integrity: sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==} engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-node@3.0.8': - resolution: {integrity: sha512-6m+wI+fT0na+6oao6UqALVA38fsScCpoG5UO/A8ZSyGLnPM2i4MS1cFUhpuALgvLMxfYoTCh7qSeJa0aG4IWpQ==} + '@smithy/eventstream-serde-node@3.0.9': + resolution: {integrity: sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==} engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-universal@3.0.8': - resolution: {integrity: sha512-09tqzIQ6e+7jLqGvRji1yJoDbL/zob0OFhq75edgStWErGLf16+yI5hRc/o9/YAybOhUZs/swpW2SPn892G5Gg==} + '@smithy/eventstream-serde-universal@3.0.9': + resolution: {integrity: sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==} engines: {node: '>=16.0.0'} - '@smithy/fetch-http-handler@3.2.8': - resolution: {integrity: sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==} + '@smithy/fetch-http-handler@3.2.9': + resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} - '@smithy/hash-blob-browser@3.1.5': - resolution: {integrity: sha512-Vi3eoNCmao4iKglS80ktYnBOIqZhjbDDwa1IIbF/VaJ8PsHnZTQ5wSicicPrU7nTI4JPFn92/txzWkh4GlK18Q==} + '@smithy/hash-blob-browser@3.1.6': + resolution: {integrity: sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==} - '@smithy/hash-node@3.0.6': - resolution: {integrity: sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==} + '@smithy/hash-node@3.0.7': + resolution: {integrity: sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==} engines: {node: '>=16.0.0'} - '@smithy/hash-stream-node@3.1.5': - resolution: {integrity: sha512-61CyFCzqN3VBfcnGX7mof/rkzLb8oHjm4Lr6ZwBIRpBssBb8d09ChrZAqinP2rUrA915BRNkq9NpJz18N7+3hQ==} + '@smithy/hash-stream-node@3.1.6': + resolution: {integrity: sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==} engines: {node: '>=16.0.0'} - '@smithy/invalid-dependency@3.0.6': - resolution: {integrity: sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==} + '@smithy/invalid-dependency@3.0.7': + resolution: {integrity: sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} @@ -1704,75 +1704,75 @@ packages: resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} engines: {node: '>=16.0.0'} - '@smithy/md5-js@3.0.6': - resolution: {integrity: sha512-Ze690T8O3M5SVbb70WormwrKzVf9QQRtIuxtJDgpUQDkmt+PtdYDetBbyCbF9ryupxLw6tgzWKgwffAShhVIXQ==} + '@smithy/md5-js@3.0.7': + resolution: {integrity: sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==} - '@smithy/middleware-content-length@3.0.8': - resolution: {integrity: sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==} + '@smithy/middleware-content-length@3.0.9': + resolution: {integrity: sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==} engines: {node: '>=16.0.0'} - '@smithy/middleware-endpoint@3.1.3': - resolution: {integrity: sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==} + '@smithy/middleware-endpoint@3.1.4': + resolution: {integrity: sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==} engines: {node: '>=16.0.0'} - '@smithy/middleware-retry@3.0.21': - resolution: {integrity: sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==} + '@smithy/middleware-retry@3.0.23': + resolution: {integrity: sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==} engines: {node: '>=16.0.0'} - '@smithy/middleware-serde@3.0.6': - resolution: {integrity: sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==} + '@smithy/middleware-serde@3.0.7': + resolution: {integrity: sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==} engines: {node: '>=16.0.0'} - '@smithy/middleware-stack@3.0.6': - resolution: {integrity: sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==} + '@smithy/middleware-stack@3.0.7': + resolution: {integrity: sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==} engines: {node: '>=16.0.0'} - '@smithy/node-config-provider@3.1.7': - resolution: {integrity: sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==} + '@smithy/node-config-provider@3.1.8': + resolution: {integrity: sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==} engines: {node: '>=16.0.0'} - '@smithy/node-http-handler@3.2.3': - resolution: {integrity: sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==} + '@smithy/node-http-handler@3.2.4': + resolution: {integrity: sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==} engines: {node: '>=16.0.0'} - '@smithy/property-provider@3.1.6': - resolution: {integrity: sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==} + '@smithy/property-provider@3.1.7': + resolution: {integrity: sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==} engines: {node: '>=16.0.0'} - '@smithy/protocol-http@4.1.3': - resolution: {integrity: sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==} + '@smithy/protocol-http@4.1.4': + resolution: {integrity: sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==} engines: {node: '>=16.0.0'} - '@smithy/querystring-builder@3.0.6': - resolution: {integrity: sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==} + '@smithy/querystring-builder@3.0.7': + resolution: {integrity: sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==} engines: {node: '>=16.0.0'} - '@smithy/querystring-parser@3.0.6': - resolution: {integrity: sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==} + '@smithy/querystring-parser@3.0.7': + resolution: {integrity: sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==} engines: {node: '>=16.0.0'} - '@smithy/service-error-classification@3.0.6': - resolution: {integrity: sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==} + '@smithy/service-error-classification@3.0.7': + resolution: {integrity: sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==} engines: {node: '>=16.0.0'} - '@smithy/shared-ini-file-loader@3.1.7': - resolution: {integrity: sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==} + '@smithy/shared-ini-file-loader@3.1.8': + resolution: {integrity: sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==} engines: {node: '>=16.0.0'} - '@smithy/signature-v4@4.1.4': - resolution: {integrity: sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==} + '@smithy/signature-v4@4.2.0': + resolution: {integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==} engines: {node: '>=16.0.0'} - '@smithy/smithy-client@3.3.5': - resolution: {integrity: sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==} + '@smithy/smithy-client@3.4.0': + resolution: {integrity: sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==} engines: {node: '>=16.0.0'} - '@smithy/types@3.4.2': - resolution: {integrity: sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==} + '@smithy/types@3.5.0': + resolution: {integrity: sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==} engines: {node: '>=16.0.0'} - '@smithy/url-parser@3.0.6': - resolution: {integrity: sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==} + '@smithy/url-parser@3.0.7': + resolution: {integrity: sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==} '@smithy/util-base64@3.0.0': resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} @@ -1797,32 +1797,32 @@ packages: resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} engines: {node: '>=16.0.0'} - '@smithy/util-defaults-mode-browser@3.0.21': - resolution: {integrity: sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==} + '@smithy/util-defaults-mode-browser@3.0.23': + resolution: {integrity: sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==} engines: {node: '>= 10.0.0'} - '@smithy/util-defaults-mode-node@3.0.21': - resolution: {integrity: sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==} + '@smithy/util-defaults-mode-node@3.0.23': + resolution: {integrity: sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==} engines: {node: '>= 10.0.0'} - '@smithy/util-endpoints@2.1.2': - resolution: {integrity: sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==} + '@smithy/util-endpoints@2.1.3': + resolution: {integrity: sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==} engines: {node: '>=16.0.0'} '@smithy/util-hex-encoding@3.0.0': resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} - '@smithy/util-middleware@3.0.6': - resolution: {integrity: sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==} + '@smithy/util-middleware@3.0.7': + resolution: {integrity: sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==} engines: {node: '>=16.0.0'} - '@smithy/util-retry@3.0.6': - resolution: {integrity: sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==} + '@smithy/util-retry@3.0.7': + resolution: {integrity: sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==} engines: {node: '>=16.0.0'} - '@smithy/util-stream@3.1.8': - resolution: {integrity: sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==} + '@smithy/util-stream@3.1.9': + resolution: {integrity: sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==} engines: {node: '>=16.0.0'} '@smithy/util-uri-escape@3.0.0': @@ -1837,72 +1837,72 @@ packages: resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} engines: {node: '>=16.0.0'} - '@smithy/util-waiter@3.1.5': - resolution: {integrity: sha512-jYOSvM3H6sZe3CHjzD2VQNCjWBJs+4DbtwBMvUp9y5EnnwNa7NQxTeYeQw0CKCAdGGZ3QvVkyJmvbvs5M/B10A==} + '@smithy/util-waiter@3.1.6': + resolution: {integrity: sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==} engines: {node: '>=16.0.0'} - '@swc/core-darwin-arm64@1.7.26': - resolution: {integrity: sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==} + '@swc/core-darwin-arm64@1.7.28': + resolution: {integrity: sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.26': - resolution: {integrity: sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==} + '@swc/core-darwin-x64@1.7.28': + resolution: {integrity: sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.26': - resolution: {integrity: sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==} + '@swc/core-linux-arm-gnueabihf@1.7.28': + resolution: {integrity: sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.26': - resolution: {integrity: sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==} + '@swc/core-linux-arm64-gnu@1.7.28': + resolution: {integrity: sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.26': - resolution: {integrity: sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==} + '@swc/core-linux-arm64-musl@1.7.28': + resolution: {integrity: sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.26': - resolution: {integrity: sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==} + '@swc/core-linux-x64-gnu@1.7.28': + resolution: {integrity: sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.26': - resolution: {integrity: sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==} + '@swc/core-linux-x64-musl@1.7.28': + resolution: {integrity: sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.26': - resolution: {integrity: sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==} + '@swc/core-win32-arm64-msvc@1.7.28': + resolution: {integrity: sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.26': - resolution: {integrity: sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==} + '@swc/core-win32-ia32-msvc@1.7.28': + resolution: {integrity: sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.26': - resolution: {integrity: sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==} + '@swc/core-win32-x64-msvc@1.7.28': + resolution: {integrity: sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.26': - resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==} + '@swc/core@1.7.28': + resolution: {integrity: sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -2076,8 +2076,8 @@ packages: '@types/linkify-markdown@1.0.3': resolution: {integrity: sha512-BnuGqDmpzmXCDMXHzgle/vMRUnbFcWclts0+n7Or421exav3XG6efl9gsxamLET6QPhX+pMnxcsHgnAO/daj9w==} - '@types/lodash@4.17.9': - resolution: {integrity: sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==} + '@types/lodash@4.17.10': + resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} '@types/luxon@3.4.2': resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} @@ -2109,8 +2109,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.16.7': - resolution: {integrity: sha512-QkDQjAY3gkvJNcZOWwzy3BN34RweT0OQ9zJyvLCU0kSK22dO2QYh/NHGfbEAYylPYzRB1/iXcojS79wOg5gFSw==} + '@types/node@20.16.10': + resolution: {integrity: sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2172,8 +2172,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.7.0': - resolution: {integrity: sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==} + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -2189,8 +2189,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/parser@8.7.0': - resolution: {integrity: sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==} + '@typescript-eslint/parser@8.8.0': + resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2203,12 +2203,12 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@8.7.0': - resolution: {integrity: sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.7.0': - resolution: {integrity: sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==} + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2220,8 +2220,8 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@8.7.0': - resolution: {integrity: sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==} + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -2233,8 +2233,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.7.0': - resolution: {integrity: sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==} + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2248,8 +2248,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.7.0': - resolution: {integrity: sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==} + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2258,8 +2258,8 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@8.7.0': - resolution: {integrity: sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -2449,8 +2449,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - azure-devops-node-api@14.0.2: - resolution: {integrity: sha512-TwjAEnWnOSZ2oypkDyqppgvJw43qArEfPiJtEWLL3NBgdvAuOuB0xgFz/Eiz4H6Dk0Yv52wCodZxtZvAMhJXwQ==} + azure-devops-node-api@14.1.0: + resolution: {integrity: sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==} engines: {node: '>= 16.0.0'} babel-jest@29.7.0: @@ -2607,8 +2607,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001664: - resolution: {integrity: sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -3006,8 +3006,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.29: - resolution: {integrity: sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==} + electron-to-chromium@1.5.32: + resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -3172,12 +3172,12 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.30.0: - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true @@ -3225,6 +3225,7 @@ packages: eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: @@ -3743,8 +3744,8 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} - import-in-the-middle@1.11.1: - resolution: {integrity: sha512-lGdg70ECFGv/OHQXL/IPhcxkFPeQ7YA4zborlA54XHVr58oM50QNxItRiayHMqj1MspC5Y9zaHf+QHod/gq7Ug==} + import-in-the-middle@1.11.2: + resolution: {integrity: sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} @@ -4203,9 +4204,9 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-bigint@1.0.0: @@ -4748,8 +4749,8 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.8.3: - resolution: {integrity: sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==} + npm@10.9.0: + resolution: {integrity: sha512-ZanDioFylI9helNhl2LNd+ErmVD+H5I53ry41ixlLyCBgkuYb+58CvbAp99hW+zr5L9W4X7CchSoeqKdngOLSw==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -5245,8 +5246,8 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} registry-auth-token@5.0.2: @@ -5366,8 +5367,8 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - semantic-release@24.1.1: - resolution: {integrity: sha512-4Ax2GxD411jUe9IdhOjMLuN+6wAj+aKjvOGngByrpD/iKL+UKN/2puQglhyI4gxNyy9XzEBMzBwbqpnEwbXGEg==} + semantic-release@24.1.2: + resolution: {integrity: sha512-hvEJ7yI97pzJuLsDZCYzJgmRxF8kiEJvNZhf0oiZQcexw+Ycjy4wbdsn/sVMURgNCu8rwbAXJdBRyIxM4pe32g==} engines: {node: '>=20.8.1'} hasBin: true @@ -6273,30 +6274,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 uuid: 9.0.1 @@ -6320,30 +6321,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: @@ -6367,32 +6368,32 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.1.5 + '@smithy/util-waiter': 3.1.6 tslib: 2.7.0 uuid: 9.0.1 transitivePeerDependencies: @@ -6415,32 +6416,32 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.1.5 + '@smithy/util-waiter': 3.1.6 tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -6463,32 +6464,32 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.1.5 + '@smithy/util-waiter': 3.1.6 tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -6519,39 +6520,39 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 '@aws-sdk/xml-builder': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/eventstream-serde-browser': 3.0.9 - '@smithy/eventstream-serde-config-resolver': 3.0.6 - '@smithy/eventstream-serde-node': 3.0.8 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-blob-browser': 3.1.5 - '@smithy/hash-node': 3.0.6 - '@smithy/hash-stream-node': 3.1.5 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/md5-js': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/eventstream-serde-browser': 3.0.10 + '@smithy/eventstream-serde-config-resolver': 3.0.7 + '@smithy/eventstream-serde-node': 3.0.9 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-blob-browser': 3.1.6 + '@smithy/hash-node': 3.0.7 + '@smithy/hash-stream-node': 3.1.6 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/md5-js': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 - '@smithy/util-stream': 3.1.8 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-stream': 3.1.9 '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.1.5 + '@smithy/util-waiter': 3.1.6 tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -6572,30 +6573,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: @@ -6615,30 +6616,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: @@ -6660,30 +6661,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.654.0 '@aws-sdk/util-user-agent-browser': 3.654.0 '@aws-sdk/util-user-agent-node': 3.654.0 - '@smithy/config-resolver': 3.0.8 - '@smithy/core': 2.4.6 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/hash-node': 3.0.6 - '@smithy/invalid-dependency': 3.0.6 - '@smithy/middleware-content-length': 3.0.8 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/middleware-stack': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/node-http-handler': 3.2.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.21 - '@smithy/util-defaults-mode-node': 3.0.21 - '@smithy/util-endpoints': 2.1.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: @@ -6691,14 +6692,14 @@ snapshots: '@aws-sdk/core@3.658.1': dependencies: - '@smithy/core': 2.4.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/property-provider': 3.1.6 - '@smithy/protocol-http': 4.1.3 - '@smithy/signature-v4': 4.1.4 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/util-middleware': 3.0.6 + '@smithy/core': 2.4.8 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 fast-xml-parser: 4.4.1 tslib: 2.7.0 @@ -6706,8 +6707,8 @@ snapshots: dependencies: '@aws-sdk/client-cognito-identity': 3.658.1 '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -6715,20 +6716,20 @@ snapshots: '@aws-sdk/credential-provider-env@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/credential-provider-http@3.658.1': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/node-http-handler': 3.2.3 - '@smithy/property-provider': 3.1.6 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/util-stream': 3.1.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 tslib: 2.7.0 '@aws-sdk/credential-provider-ini@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1)': @@ -6740,10 +6741,10 @@ snapshots: '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) '@aws-sdk/types': 3.654.0 - '@smithy/credential-provider-imds': 3.2.3 - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -6758,10 +6759,10 @@ snapshots: '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) '@aws-sdk/types': 3.654.0 - '@smithy/credential-provider-imds': 3.2.3 - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -6771,9 +6772,9 @@ snapshots: '@aws-sdk/credential-provider-process@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/credential-provider-sso@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': @@ -6781,9 +6782,9 @@ snapshots: '@aws-sdk/client-sso': 3.658.1 '@aws-sdk/token-providers': 3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -6793,8 +6794,8 @@ snapshots: dependencies: '@aws-sdk/client-sts': 3.658.1 '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/credential-providers@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': @@ -6811,9 +6812,9 @@ snapshots: '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) '@aws-sdk/types': 3.654.0 - '@smithy/credential-provider-imds': 3.2.3 - '@smithy/property-provider': 3.1.6 - '@smithy/types': 3.4.2 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -6823,17 +6824,17 @@ snapshots: dependencies: '@aws-sdk/types': 3.654.0 '@aws-sdk/util-arn-parser': 3.568.0 - '@smithy/node-config-provider': 3.1.7 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 '@smithy/util-config-provider': 3.0.0 tslib: 2.7.0 '@aws-sdk/middleware-expect-continue@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-flexible-checksums@3.658.1': @@ -6842,58 +6843,58 @@ snapshots: '@aws-crypto/crc32c': 5.2.0 '@aws-sdk/types': 3.654.0 '@smithy/is-array-buffer': 3.0.0 - '@smithy/node-config-provider': 3.1.7 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 - '@smithy/util-middleware': 3.0.6 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 '@aws-sdk/middleware-host-header@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-location-constraint@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-logger@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-recursion-detection@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-sdk-ec2@3.658.1': dependencies: '@aws-sdk/types': 3.654.0 '@aws-sdk/util-format-url': 3.654.0 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/signature-v4': 4.1.4 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-sdk-rds@3.658.1': dependencies: '@aws-sdk/types': 3.654.0 '@aws-sdk/util-format-url': 3.654.0 - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/protocol-http': 4.1.3 - '@smithy/signature-v4': 4.1.4 - '@smithy/types': 3.4.2 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-sdk-s3@3.658.1': @@ -6901,62 +6902,62 @@ snapshots: '@aws-sdk/core': 3.658.1 '@aws-sdk/types': 3.654.0 '@aws-sdk/util-arn-parser': 3.568.0 - '@smithy/core': 2.4.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/protocol-http': 4.1.3 - '@smithy/signature-v4': 4.1.4 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 + '@smithy/core': 2.4.8 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-stream': 3.1.8 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-stream': 3.1.9 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 '@aws-sdk/middleware-ssec@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/middleware-user-agent@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 '@aws-sdk/util-endpoints': 3.654.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/region-config-resolver@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/node-config-provider': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.6 + '@smithy/util-middleware': 3.0.7 tslib: 2.7.0 '@aws-sdk/signature-v4-multi-region@3.658.1': dependencies: '@aws-sdk/middleware-sdk-s3': 3.658.1 '@aws-sdk/types': 3.654.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/signature-v4': 4.1.4 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/token-providers@3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': dependencies: '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) '@aws-sdk/types': 3.654.0 - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/types@3.654.0': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/util-arn-parser@3.568.0': @@ -6966,15 +6967,15 @@ snapshots: '@aws-sdk/util-endpoints@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/types': 3.4.2 - '@smithy/util-endpoints': 2.1.2 + '@smithy/types': 3.5.0 + '@smithy/util-endpoints': 2.1.3 tslib: 2.7.0 '@aws-sdk/util-format-url@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/querystring-builder': 3.0.6 - '@smithy/types': 3.4.2 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/util-locate-window@3.568.0': @@ -6984,41 +6985,41 @@ snapshots: '@aws-sdk/util-user-agent-browser@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 bowser: 2.11.0 tslib: 2.7.0 '@aws-sdk/util-user-agent-node@3.654.0': dependencies: '@aws-sdk/types': 3.654.0 - '@smithy/node-config-provider': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@aws-sdk/xml-builder@3.654.0': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 + '@babel/highlight': 7.25.7 picocolors: 1.1.0 - '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.25.7': {} - '@babel/core@7.25.2': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -7027,181 +7028,181 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.6': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-compilation-targets@7.25.2': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.7': {} - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} - '@babel/helpers@7.25.6': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.0 - '@babel/parser@7.25.6': + '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/runtime-corejs3@7.25.6': + '@babel/runtime-corejs3@7.25.7': dependencies: core-js-pure: 3.38.1 regenerator-runtime: 0.14.1 - '@babel/template@7.25.0': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - '@babel/traverse@7.25.6': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': + '@babel/types@7.25.7': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@bcoe/v8-coverage@0.2.3': {} @@ -7284,27 +7285,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7329,7 +7330,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 jest-mock: 29.7.0 '@jest/expect-utils@29.4.1': @@ -7351,7 +7352,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.16.7 + '@types/node': 20.16.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -7373,7 +7374,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -7420,7 +7421,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -7443,7 +7444,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -7476,12 +7477,12 @@ snapshots: '@jsonjoy.com/json-pack@1.1.0(tslib@2.7.0)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.7.0) - '@jsonjoy.com/util': 1.3.0(tslib@2.7.0) + '@jsonjoy.com/util': 1.5.0(tslib@2.7.0) hyperdyperid: 1.2.0 thingies: 1.21.0(tslib@2.7.0) tslib: 2.7.0 - '@jsonjoy.com/util@1.3.0(tslib@2.7.0)': + '@jsonjoy.com/util@1.5.0(tslib@2.7.0)': dependencies: tslib: 2.7.0 @@ -7534,7 +7535,7 @@ snapshots: '@octokit/graphql': 7.1.0 '@octokit/request': 8.4.0 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 @@ -7544,43 +7545,43 @@ snapshots: '@octokit/graphql': 8.1.1 '@octokit/request': 9.1.3 '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 '@octokit/endpoint@10.1.1': dependencies: - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 7.0.2 '@octokit/endpoint@9.0.5': dependencies: - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 6.0.1 '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 6.0.1 '@octokit/graphql@8.1.1': dependencies: '@octokit/request': 9.1.3 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 7.0.2 '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@11.3.0(@octokit/core@6.1.2)': - dependencies: - '@octokit/core': 6.1.2 - '@octokit/types': 13.6.0 - '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 + + '@octokit/plugin-paginate-rest@11.3.5(@octokit/core@6.1.2)': + dependencies: + '@octokit/core': 6.1.2 + '@octokit/types': 13.6.1 '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': dependencies: @@ -7589,43 +7590,43 @@ snapshots: '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 '@octokit/plugin-retry@7.1.2(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 bottleneck: 2.19.5 - '@octokit/plugin-throttling@9.3.1(@octokit/core@6.1.2)': + '@octokit/plugin-throttling@9.3.2(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 bottleneck: 2.19.5 '@octokit/request-error@5.1.0': dependencies: - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 deprecation: 2.3.1 once: 1.4.0 '@octokit/request-error@6.1.5': dependencies: - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 '@octokit/request@8.4.0': dependencies: '@octokit/endpoint': 9.0.5 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 6.0.1 '@octokit/request@9.1.3': dependencies: '@octokit/endpoint': 10.1.1 '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.0 + '@octokit/types': 13.6.1 universal-user-agent: 7.0.2 '@octokit/rest@20.1.1': @@ -7635,7 +7636,7 @@ snapshots: '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) - '@octokit/types@13.6.0': + '@octokit/types@13.6.1': dependencies: '@octokit/openapi-types': 22.2.0 @@ -7693,7 +7694,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.53.0 '@types/shimmer': 1.2.0 - import-in-the-middle: 1.11.1 + import-in-the-middle: 1.11.2 require-in-the-middle: 7.4.0 semver: 7.6.3 shimmer: 1.2.1 @@ -7847,7 +7848,7 @@ snapshots: '@qnighy/marshal@0.1.3': dependencies: - '@babel/runtime-corejs3': 7.25.6 + '@babel/runtime-corejs3': 7.25.7 '@redis/bloom@1.2.0(@redis/client@1.6.0)': dependencies: @@ -7932,7 +7933,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.1.1(typescript@5.6.2))': + '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.1.2(typescript@5.6.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 @@ -7942,7 +7943,7 @@ snapshots: import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.1.1(typescript@5.6.2) + semantic-release: 24.1.2(typescript@5.6.2) transitivePeerDependencies: - supports-color @@ -7950,7 +7951,7 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/exec@6.0.3(semantic-release@24.1.1(typescript@5.6.2))': + '@semantic-release/exec@6.0.3(semantic-release@24.1.2(typescript@5.6.2))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 @@ -7958,16 +7959,16 @@ snapshots: execa: 5.1.1 lodash: 4.17.21 parse-json: 5.2.0 - semantic-release: 24.1.1(typescript@5.6.2) + semantic-release: 24.1.2(typescript@5.6.2) transitivePeerDependencies: - supports-color - '@semantic-release/github@10.3.5(semantic-release@24.1.1(typescript@5.6.2))': + '@semantic-release/github@11.0.0(semantic-release@24.1.2(typescript@5.6.2))': dependencies: '@octokit/core': 6.1.2 - '@octokit/plugin-paginate-rest': 11.3.0(@octokit/core@6.1.2) + '@octokit/plugin-paginate-rest': 11.3.5(@octokit/core@6.1.2) '@octokit/plugin-retry': 7.1.2(@octokit/core@6.1.2) - '@octokit/plugin-throttling': 9.3.1(@octokit/core@6.1.2) + '@octokit/plugin-throttling': 9.3.2(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.3.7 @@ -7979,12 +7980,12 @@ snapshots: lodash-es: 4.17.21 mime: 4.0.4 p-filter: 4.1.0 - semantic-release: 24.1.1(typescript@5.6.2) + semantic-release: 24.1.2(typescript@5.6.2) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.1(semantic-release@24.1.1(typescript@5.6.2))': + '@semantic-release/npm@12.0.1(semantic-release@24.1.2(typescript@5.6.2))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -7993,15 +7994,15 @@ snapshots: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.1 - npm: 10.8.3 + npm: 10.9.0 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 24.1.1(typescript@5.6.2) + semantic-release: 24.1.2(typescript@5.6.2) semver: 7.6.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.1.1(typescript@5.6.2))': + '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.1.2(typescript@5.6.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 @@ -8013,7 +8014,7 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.1.1(typescript@5.6.2) + semantic-release: 24.1.2(typescript@5.6.2) transitivePeerDependencies: - supports-color @@ -8049,9 +8050,9 @@ snapshots: '@sinonjs/text-encoding@0.7.3': {} - '@smithy/abort-controller@3.1.4': + '@smithy/abort-controller@3.1.5': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@smithy/chunked-blob-reader-native@3.0.0': @@ -8063,96 +8064,96 @@ snapshots: dependencies: tslib: 2.7.0 - '@smithy/config-resolver@3.0.8': + '@smithy/config-resolver@3.0.9': dependencies: - '@smithy/node-config-provider': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.6 + '@smithy/util-middleware': 3.0.7 tslib: 2.7.0 - '@smithy/core@2.4.6': + '@smithy/core@2.4.8': dependencies: - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-retry': 3.0.21 - '@smithy/middleware-serde': 3.0.6 - '@smithy/protocol-http': 4.1.3 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-middleware': 3.0.6 + '@smithy/util-middleware': 3.0.7 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/credential-provider-imds@3.2.3': + '@smithy/credential-provider-imds@3.2.4': dependencies: - '@smithy/node-config-provider': 3.1.7 - '@smithy/property-provider': 3.1.6 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 tslib: 2.7.0 - '@smithy/eventstream-codec@3.1.5': + '@smithy/eventstream-codec@3.1.6': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 '@smithy/util-hex-encoding': 3.0.0 tslib: 2.7.0 - '@smithy/eventstream-serde-browser@3.0.9': + '@smithy/eventstream-serde-browser@3.0.10': dependencies: - '@smithy/eventstream-serde-universal': 3.0.8 - '@smithy/types': 3.4.2 + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/eventstream-serde-config-resolver@3.0.6': + '@smithy/eventstream-serde-config-resolver@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/eventstream-serde-node@3.0.8': + '@smithy/eventstream-serde-node@3.0.9': dependencies: - '@smithy/eventstream-serde-universal': 3.0.8 - '@smithy/types': 3.4.2 + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/eventstream-serde-universal@3.0.8': + '@smithy/eventstream-serde-universal@3.0.9': dependencies: - '@smithy/eventstream-codec': 3.1.5 - '@smithy/types': 3.4.2 + '@smithy/eventstream-codec': 3.1.6 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/fetch-http-handler@3.2.8': + '@smithy/fetch-http-handler@3.2.9': dependencies: - '@smithy/protocol-http': 4.1.3 - '@smithy/querystring-builder': 3.0.6 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 '@smithy/util-base64': 3.0.0 tslib: 2.7.0 - '@smithy/hash-blob-browser@3.1.5': + '@smithy/hash-blob-browser@3.1.6': dependencies: '@smithy/chunked-blob-reader': 3.0.0 '@smithy/chunked-blob-reader-native': 3.0.0 - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/hash-node@3.0.6': + '@smithy/hash-node@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/hash-stream-node@3.1.5': + '@smithy/hash-stream-node@3.1.6': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/invalid-dependency@3.0.6': + '@smithy/invalid-dependency@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@smithy/is-array-buffer@2.2.0': @@ -8163,123 +8164,123 @@ snapshots: dependencies: tslib: 2.7.0 - '@smithy/md5-js@3.0.6': + '@smithy/md5-js@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/middleware-content-length@3.0.8': + '@smithy/middleware-content-length@3.0.9': dependencies: - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/middleware-endpoint@3.1.3': + '@smithy/middleware-endpoint@3.1.4': dependencies: - '@smithy/middleware-serde': 3.0.6 - '@smithy/node-config-provider': 3.1.7 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 - '@smithy/url-parser': 3.0.6 - '@smithy/util-middleware': 3.0.6 + '@smithy/middleware-serde': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-middleware': 3.0.7 tslib: 2.7.0 - '@smithy/middleware-retry@3.0.21': + '@smithy/middleware-retry@3.0.23': dependencies: - '@smithy/node-config-provider': 3.1.7 - '@smithy/protocol-http': 4.1.3 - '@smithy/service-error-classification': 3.0.6 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 - '@smithy/util-middleware': 3.0.6 - '@smithy/util-retry': 3.0.6 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/service-error-classification': 3.0.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 tslib: 2.7.0 uuid: 9.0.1 - '@smithy/middleware-serde@3.0.6': + '@smithy/middleware-serde@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/middleware-stack@3.0.6': + '@smithy/middleware-stack@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/node-config-provider@3.1.7': + '@smithy/node-config-provider@3.1.8': dependencies: - '@smithy/property-provider': 3.1.6 - '@smithy/shared-ini-file-loader': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/node-http-handler@3.2.3': + '@smithy/node-http-handler@3.2.4': dependencies: - '@smithy/abort-controller': 3.1.4 - '@smithy/protocol-http': 4.1.3 - '@smithy/querystring-builder': 3.0.6 - '@smithy/types': 3.4.2 + '@smithy/abort-controller': 3.1.5 + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/property-provider@3.1.6': + '@smithy/property-provider@3.1.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/protocol-http@4.1.3': + '@smithy/protocol-http@4.1.4': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/querystring-builder@3.0.6': + '@smithy/querystring-builder@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 '@smithy/util-uri-escape': 3.0.0 tslib: 2.7.0 - '@smithy/querystring-parser@3.0.6': + '@smithy/querystring-parser@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/service-error-classification@3.0.6': + '@smithy/service-error-classification@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 - '@smithy/shared-ini-file-loader@3.1.7': + '@smithy/shared-ini-file-loader@3.1.8': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/signature-v4@4.1.4': + '@smithy/signature-v4@4.2.0': dependencies: '@smithy/is-array-buffer': 3.0.0 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-middleware': 3.0.6 + '@smithy/util-middleware': 3.0.7 '@smithy/util-uri-escape': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/smithy-client@3.3.5': + '@smithy/smithy-client@3.4.0': dependencies: - '@smithy/middleware-endpoint': 3.1.3 - '@smithy/middleware-stack': 3.0.6 - '@smithy/protocol-http': 4.1.3 - '@smithy/types': 3.4.2 - '@smithy/util-stream': 3.1.8 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-stack': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 tslib: 2.7.0 - '@smithy/types@3.4.2': + '@smithy/types@3.5.0': dependencies: tslib: 2.7.0 - '@smithy/url-parser@3.0.6': + '@smithy/url-parser@3.0.7': dependencies: - '@smithy/querystring-parser': 3.0.6 - '@smithy/types': 3.4.2 + '@smithy/querystring-parser': 3.0.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@smithy/util-base64@3.0.0': @@ -8310,50 +8311,50 @@ snapshots: dependencies: tslib: 2.7.0 - '@smithy/util-defaults-mode-browser@3.0.21': + '@smithy/util-defaults-mode-browser@3.0.23': dependencies: - '@smithy/property-provider': 3.1.6 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 bowser: 2.11.0 tslib: 2.7.0 - '@smithy/util-defaults-mode-node@3.0.21': + '@smithy/util-defaults-mode-node@3.0.23': dependencies: - '@smithy/config-resolver': 3.0.8 - '@smithy/credential-provider-imds': 3.2.3 - '@smithy/node-config-provider': 3.1.7 - '@smithy/property-provider': 3.1.6 - '@smithy/smithy-client': 3.3.5 - '@smithy/types': 3.4.2 + '@smithy/config-resolver': 3.0.9 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/util-endpoints@2.1.2': + '@smithy/util-endpoints@2.1.3': dependencies: - '@smithy/node-config-provider': 3.1.7 - '@smithy/types': 3.4.2 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 tslib: 2.7.0 '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.7.0 - '@smithy/util-middleware@3.0.6': + '@smithy/util-middleware@3.0.7': dependencies: - '@smithy/types': 3.4.2 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/util-retry@3.0.6': + '@smithy/util-retry@3.0.7': dependencies: - '@smithy/service-error-classification': 3.0.6 - '@smithy/types': 3.4.2 + '@smithy/service-error-classification': 3.0.7 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@smithy/util-stream@3.1.8': + '@smithy/util-stream@3.1.9': dependencies: - '@smithy/fetch-http-handler': 3.2.8 - '@smithy/node-http-handler': 3.2.3 - '@smithy/types': 3.4.2 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/types': 3.5.0 '@smithy/util-base64': 3.0.0 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-hex-encoding': 3.0.0 @@ -8374,57 +8375,57 @@ snapshots: '@smithy/util-buffer-from': 3.0.0 tslib: 2.7.0 - '@smithy/util-waiter@3.1.5': + '@smithy/util-waiter@3.1.6': dependencies: - '@smithy/abort-controller': 3.1.4 - '@smithy/types': 3.4.2 + '@smithy/abort-controller': 3.1.5 + '@smithy/types': 3.5.0 tslib: 2.7.0 - '@swc/core-darwin-arm64@1.7.26': + '@swc/core-darwin-arm64@1.7.28': optional: true - '@swc/core-darwin-x64@1.7.26': + '@swc/core-darwin-x64@1.7.28': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.26': + '@swc/core-linux-arm-gnueabihf@1.7.28': optional: true - '@swc/core-linux-arm64-gnu@1.7.26': + '@swc/core-linux-arm64-gnu@1.7.28': optional: true - '@swc/core-linux-arm64-musl@1.7.26': + '@swc/core-linux-arm64-musl@1.7.28': optional: true - '@swc/core-linux-x64-gnu@1.7.26': + '@swc/core-linux-x64-gnu@1.7.28': optional: true - '@swc/core-linux-x64-musl@1.7.26': + '@swc/core-linux-x64-musl@1.7.28': optional: true - '@swc/core-win32-arm64-msvc@1.7.26': + '@swc/core-win32-arm64-msvc@1.7.28': optional: true - '@swc/core-win32-ia32-msvc@1.7.26': + '@swc/core-win32-ia32-msvc@1.7.28': optional: true - '@swc/core-win32-x64-msvc@1.7.26': + '@swc/core-win32-x64-msvc@1.7.28': optional: true - '@swc/core@1.7.26': + '@swc/core@1.7.28': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.26 - '@swc/core-darwin-x64': 1.7.26 - '@swc/core-linux-arm-gnueabihf': 1.7.26 - '@swc/core-linux-arm64-gnu': 1.7.26 - '@swc/core-linux-arm64-musl': 1.7.26 - '@swc/core-linux-x64-gnu': 1.7.26 - '@swc/core-linux-x64-musl': 1.7.26 - '@swc/core-win32-arm64-msvc': 1.7.26 - '@swc/core-win32-ia32-msvc': 1.7.26 - '@swc/core-win32-x64-msvc': 1.7.26 + '@swc/core-darwin-arm64': 1.7.28 + '@swc/core-darwin-x64': 1.7.28 + '@swc/core-linux-arm-gnueabihf': 1.7.28 + '@swc/core-linux-arm64-gnu': 1.7.28 + '@swc/core-linux-arm64-musl': 1.7.28 + '@swc/core-linux-x64-gnu': 1.7.28 + '@swc/core-linux-x64-musl': 1.7.28 + '@swc/core-win32-arm64-msvc': 1.7.28 + '@swc/core-win32-ia32-msvc': 1.7.28 + '@swc/core-win32-x64-msvc': 1.7.28 '@swc/counter@0.1.3': {} @@ -8485,52 +8486,52 @@ snapshots: '@types/aws4@1.11.6': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@types/better-sqlite3@7.6.11': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/breejs__later@4.1.5': {} '@types/bunyan@1.8.11': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/bunyan@1.8.9': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/cacache@17.0.2': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/responselike': 1.0.3 '@types/callsite@1.0.34': {} @@ -8557,7 +8558,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/git-url-parse@9.0.3': {} @@ -8567,7 +8568,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/http-cache-semantics@4.0.4': {} @@ -8593,17 +8594,17 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/keyv@3.1.4': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/linkify-it@5.0.0': {} '@types/linkify-markdown@1.0.3': {} - '@types/lodash@4.17.9': {} + '@types/lodash@4.17.10': {} '@types/luxon@3.4.2': {} @@ -8616,7 +8617,7 @@ snapshots: '@types/marshal@0.5.3': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/mdast@3.0.15': dependencies: @@ -8632,7 +8633,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.16.7': + '@types/node@20.16.10': dependencies: undici-types: 6.19.8 @@ -8642,7 +8643,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 '@types/semver-stable@3.0.2': {} @@ -8662,7 +8663,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 minipass: 4.2.8 '@types/tmp@0.2.6': {} @@ -8685,17 +8686,17 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 optional: true - '@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 8.7.0 - '@typescript-eslint/type-utils': 8.7.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 8.7.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.7.0 + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 @@ -8714,12 +8715,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/scope-manager': 8.7.0 - '@typescript-eslint/types': 8.7.0 - '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.7.0 + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.7 eslint: 8.57.1 optionalDependencies: @@ -8732,15 +8733,15 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@8.7.0': + '@typescript-eslint/scope-manager@8.8.0': dependencies: - '@typescript-eslint/types': 8.7.0 - '@typescript-eslint/visitor-keys': 8.7.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 - '@typescript-eslint/type-utils@8.7.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/type-utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.7.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: @@ -8751,7 +8752,7 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@8.7.0': {} + '@typescript-eslint/types@8.8.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': dependencies: @@ -8767,10 +8768,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.7.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': dependencies: - '@typescript-eslint/types': 8.7.0 - '@typescript-eslint/visitor-keys': 8.7.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -8797,12 +8798,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.7.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.7.0 - '@typescript-eslint/types': 8.7.0 - '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -8813,9 +8814,9 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.7.0': + '@typescript-eslint/visitor-keys@8.8.0': dependencies: - '@typescript-eslint/types': 8.7.0 + '@typescript-eslint/types': 8.8.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -9054,18 +9055,18 @@ snapshots: aws4@1.13.2: {} - azure-devops-node-api@14.0.2: + azure-devops-node-api@14.1.0: dependencies: tunnel: 0.0.6 typed-rest-client: 2.1.0 - babel-jest@29.7.0(@babel/core@7.25.2): + babel-jest@29.7.0(@babel/core@7.25.7): dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.25.2) + babel-preset-jest: 29.6.3(@babel/core@7.25.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -9074,7 +9075,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -9084,35 +9085,35 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2): - dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) - - babel-preset-jest@29.6.3(@babel/core@7.25.2): - dependencies: - '@babel/core': 7.25.2 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + + babel-preset-jest@29.6.3(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) backslash@0.2.0: {} @@ -9174,8 +9175,8 @@ snapshots: browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001664 - electron-to-chromium: 1.5.29 + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.32 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.0) @@ -9259,7 +9260,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001664: {} + caniuse-lite@1.0.30001667: {} chalk@2.4.2: dependencies: @@ -9437,13 +9438,13 @@ snapshots: optionalDependencies: typescript: 5.6.2 - create-jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -9536,7 +9537,7 @@ snapshots: object-is: 1.1.6 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 side-channel: 1.0.6 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 @@ -9647,7 +9648,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.29: {} + electron-to-chromium@1.5.32: {} email-addresses@5.0.0: {} @@ -9737,7 +9738,7 @@ snapshots: object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -9821,37 +9822,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -9862,7 +9863,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -9871,9 +9872,10 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -9883,13 +9885,13 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2): + eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2): dependencies: - '@typescript-eslint/utils': 8.7.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - jest: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + jest: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) transitivePeerDependencies: - supports-color - typescript @@ -10566,7 +10568,7 @@ snapshots: transitivePeerDependencies: - supports-color - import-in-the-middle@1.11.1: + import-in-the-middle@1.11.2: dependencies: acorn: 8.12.1 acorn-import-attributes: 1.9.5(acorn@8.12.1) @@ -10783,8 +10785,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.25.2 - '@babel/parser': 7.25.6 + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10793,8 +10795,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.25.2 - '@babel/parser': 7.25.6 + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -10860,7 +10862,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -10880,16 +10882,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10899,12 +10901,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.25.2) + babel-jest: 29.7.0(@babel/core@7.25.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -10924,8 +10926,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.16.7 - ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2) + '@types/node': 20.16.10 + ts-node: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10954,16 +10956,16 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2))): + jest-extended@4.0.2(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-get-type@29.6.3: {} @@ -10971,7 +10973,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.16.7 + '@types/node': 20.16.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11004,7 +11006,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -11014,16 +11016,16 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2): dependencies: - jest: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) ts-essentials: 10.0.2(typescript@5.6.2) typescript: 5.6.2 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -11058,7 +11060,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11086,7 +11088,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -11106,15 +11108,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.25.2 - '@babel/generator': 7.25.6 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) - '@babel/types': 7.25.6 + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/types': 7.25.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -11132,7 +11134,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11151,7 +11153,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.7 + '@types/node': 20.16.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11160,17 +11162,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.16.7 + '@types/node': 20.16.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)): + jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11193,7 +11195,7 @@ snapshots: jsbn@1.1.0: optional: true - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-bigint@1.0.0: dependencies: @@ -11470,7 +11472,7 @@ snapshots: memfs@4.12.0: dependencies: '@jsonjoy.com/json-pack': 1.1.0(tslib@2.7.0) - '@jsonjoy.com/util': 1.3.0(tslib@2.7.0) + '@jsonjoy.com/util': 1.5.0(tslib@2.7.0) tree-dump: 1.0.2(tslib@2.7.0) tslib: 2.7.0 @@ -11771,7 +11773,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.8.3: {} + npm@10.9.0: {} nth-check@2.1.1: dependencies: @@ -11974,14 +11976,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 index-to-position: 0.1.2 type-fest: 4.26.1 @@ -12131,7 +12133,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.16.7 + '@types/node': 20.16.10 long: 5.2.3 protocols@2.0.1: {} @@ -12246,7 +12248,7 @@ snapshots: regenerator-runtime@0.14.1: {} - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -12378,13 +12380,13 @@ snapshots: sax@1.4.1: {} - semantic-release@24.1.1(typescript@5.6.2): + semantic-release@24.1.2(typescript@5.6.2): dependencies: - '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.1.1(typescript@5.6.2)) + '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.1.2(typescript@5.6.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 10.3.5(semantic-release@24.1.1(typescript@5.6.2)) - '@semantic-release/npm': 12.0.1(semantic-release@24.1.1(typescript@5.6.2)) - '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.1.1(typescript@5.6.2)) + '@semantic-release/github': 11.0.0(semantic-release@24.1.2(typescript@5.6.2)) + '@semantic-release/npm': 12.0.1(semantic-release@24.1.2(typescript@5.6.2)) + '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.1.2(typescript@5.6.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.6.2) debug: 4.3.7 @@ -12843,12 +12845,12 @@ snapshots: optionalDependencies: typescript: 5.6.2 - ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.7)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.10)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12857,19 +12859,19 @@ snapshots: typescript: 5.6.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.25.2) + babel-jest: 29.7.0(@babel/core@7.25.7) - ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.16.7)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.10)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.7 + '@types/node': 20.16.10 acorn: 8.12.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -12880,7 +12882,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.26 + '@swc/core': 1.7.28 tsconfig-paths@3.15.0: dependencies: diff --git a/pyproject.toml b/pyproject.toml index b9e3c62814f387..149b3bc1d82fa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] dependencies = [ - "mkdocs-material==9.5.39", + "mkdocs-material==9.5.40", "mkdocs-awesome-pages-plugin==2.9.3", ] requires-python = ">=3.11" diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 6930e2453761c0..22a934f4b779c2 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -5,21 +5,21 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:7.31.4@sha256:eb64c57363effe1eded36bec6bb9dc429b926a3ceb9077d4ee89e0c56be0f1bb AS slim-base +FROM ghcr.io/renovatebot/base-image:7.35.2@sha256:e82956ba7122b0c686f65013ad9b62e03c2d4033440e89f7a0404b2855673134 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:7.31.4-full@sha256:b9e21c9bfa775a1ca056ae5aa63d86d1dd517cf6bd8d745a3c4d2e1029e0b640 AS full-base +FROM ghcr.io/renovatebot/base-image:7.35.2-full@sha256:1ce62d4ad40a141850609bc88d0cd66e320866df8d0219f4086970fc74626be9 AS full-base # -------------------------------------- # build image # -------------------------------------- -FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:7.31.4@sha256:eb64c57363effe1eded36bec6bb9dc429b926a3ceb9077d4ee89e0c56be0f1bb AS build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:7.35.2@sha256:e82956ba7122b0c686f65013ad9b62e03c2d4033440e89f7a0404b2855673134 AS build # We want a specific node version here # renovate: datasource=node-version -RUN install-tool node 20.17.0 +RUN install-tool node 20.18.0 WORKDIR /usr/local/renovate diff --git a/tools/mkdocs/mkdocs.yml b/tools/mkdocs/mkdocs.yml index cf68267748d9c9..5b8eef98dd2962 100644 --- a/tools/mkdocs/mkdocs.yml +++ b/tools/mkdocs/mkdocs.yml @@ -59,7 +59,7 @@ theme: # The custom_dir points to the overrides folder, this folder has the code for our announcement bar. # The easiest way to disable the announcement bar is to comment out the custom_dir: overrides entry in this mkdocs.yml file. # https://squidfunk.github.io/mkdocs-material/customization/#setup-and-theme-structure - custom_dir: overrides + # custom_dir: overrides logo: 'assets/images/logo.png' favicon: 'assets/images/logo.png'