diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index cd37bcd41a64f1..4a7db0c79db266 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/containerbase/devcontainer:10.12.0 +FROM ghcr.io/containerbase/devcontainer:10.15.2 diff --git a/.github/DISCUSSION_TEMPLATE/request-help.yml b/.github/DISCUSSION_TEMPLATE/request-help.yml index 3dcb62a21aa156..db4c2073080476 100644 --- a/.github/DISCUSSION_TEMPLATE/request-help.yml +++ b/.github/DISCUSSION_TEMPLATE/request-help.yml @@ -27,6 +27,9 @@ body: id: the-question attributes: label: Please tell us more about your question or problem + description: | + Remember to [follow these guidelines](https://github.com/renovatebot/renovate/blob/main/docs/development/help-us-help-you.md) for maximum effectiveness. + It may help to include a [minimal reproduction](https://github.com/renovatebot/renovate/blob/main/docs/development/minimal-reproductions.md) as well. validations: required: true diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index 65777a99305b45..bceeb0cc34288b 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -56,7 +56,26 @@ runs: uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: node-version: ${{ inputs.node-version }} - cache: ${{ env.CACHE_HIT != 'true' && 'pnpm' || '' }} + + - name: Calculate `PNPM_STORE` + shell: bash + run: | + echo "PNPM_STORE=$(pnpm store path)" >> "$GITHUB_ENV" + + - name: Cache and restore `pnpm store` + if: env.CACHE_HIT != 'true' + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: ${{ env.PNPM_STORE }} + key: | + pnpm_store-${{ + inputs.os + }}-${{ + inputs.node-version + }}-${{ + hashFiles('pnpm-lock.yaml', 'package.json') + }} + enableCrossOsArchive: true - name: Install dependencies uses: nick-fields/retry@7152eba30c6575329ac0576536151aca5a72780e # v3.0.0 diff --git a/.github/label-actions.yml b/.github/label-actions.yml index 4758a918bcf121..328273cc4e131b 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -107,6 +107,25 @@ The Renovate team +'auto:logs-packages': + comment: > + Hi there, + + + Please give us specific logs, so we can help you more. + + + If you self-host Renovate: make sure you run Renovate with `LOG_LEVEL=debug` to get the debug log messages! Next, open the debug-level logs and search for `packageFiles with updates`. This text marks the start of a structured log message that shows every package file, dependency, and update that Renovate found. + + + Find the relevant dependency/dependencies in the log message, and copy/paste those parts into this discussion. If you do not know which bits we need, you can copy/paste the full log message. + + + Read the [Renovate docs, Troubleshooting](https://docs.renovatebot.com/troubleshooting/) to learn more about getting the docs, and getting the correct type of logs. + + + Thanks, the Renovate team + 'new package manager': comment: > Hi there, @@ -338,4 +357,85 @@ As a general rule, we will read and respond to all discussions in this repository, so there is no need to mention us. + Thanks, the Renovate team + +'auto:bug-to-idea': + comment: > + Hi there, + + + A maintainer reviewed the information, and decided that this is not a bug. To avoid confusing others, we will close this Discussion. Please keep reading as there is good news too! + + + The good news is that the maintainer likes your idea, in general. Please create a new [Suggest an Idea](https://github.com/renovatebot/renovate/discussions/new?category=suggest-an-idea) Discussion. Feel free to copy/paste what you need from this Discussion. Please focus on the feature request: explain what Renovate should do, and how Renovate can know when/what to do. We may convert that Discussion to an Issue when it is ready. Note that you will still have to wait for a maintainer, or someone else, to do the work needed for your feature. + + + Why are we closing your Discussion? For us, bug reports are about things that are not working as intended, or things that are not working as described in the docs. What you found may be bad behavior, but we do not think it is a bug. + + + For more details, please read [our development docs about bug handling](https://github.com/renovatebot/renovate/blob/main/docs/development/bug-handling.md). + + + Thanks, the Renovate team + +'auto:bug-invalid': + comment: > + Hi there, + + + A maintainer decided this is not a bug, and behaving as designed. The maintainer will explain why this behavior is correct. To avoid confusing future readers, we will close this Discussion. + + + We want Bug-type Discussions to be about things that we rate as bugs. For more details, please read [our development docs about bug handling](https://github.com/renovatebot/renovate/blob/main/docs/development/bug-handling.md). + + + If this bug report makes you think of an idea for a new feature, or how to improve a current feature, feel free to create a new [Suggest an Idea](https://github.com/renovatebot/renovate/discussions/new?category=suggest-an-idea) Discussion. + + + Thanks, the Renovate team + +'auto:bug-converted': + comment: > + Hi there, + + + A maintainer confirmed this is a bug, and converted this Discussion to an Issue. If you have more thoughts/info about the bug, please post them in the Issue. + + + We will close this Discussion, as we want new info to go in the Issue. + + + Thanks, the Renovate team + +'auto:idea-rewrite': + comment: > + Hi there, + + + The maintainers want to convert this idea into a Feature Request issue. Before we can convert, we need you update the Discussion title and/or the description(s). + + + We want the top post, and title, to match the current state of your idea/feature request. This is because a discussion often has lots of info, thoughts and comments. There may also be ideas that turn out to be dead ends. In simple terms, we only want the good stuff to go in the top post. + + + So please put the current information in the top post and update the title. Feel free to copy/paste examples, links or comments into the description. Let us know when you are finished updating, and we will convert your discussion to an Issue. + + + Thanks, the Renovate team + +'auto:no-slas': + comment: > + Hi there, + + + Please remember that there are no Service Level Agreements (SLAs) or roadmap commitments in Open Source projects like Renovate. The maintainers and contributors work on bugs/features/docs at their own pace. This means that sometimes you will have to wait for things to happen, or to get a response. + + + Please avoid comments like: "Any update on this?" or "When will this be fixed?". Do not chase a maintainer to get answers quickly. We will block you if you nudge us frequently. + + + Please read our [Code of Conduct, how we prioritize work](https://github.com/renovatebot/renovate/blob/main/CODE_OF_CONDUCT.md#how-we-prioritize-work) to learn more about how we prioritize what to work on. + If you are a paying Mend.io customer, please tell your support or customer contact that this issue is important to you. + + Thanks, the Renovate team diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a8f281b81c0b9e..fa27126819edb7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,8 @@ concurrency: env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} - NODE_VERSION: 18 + NODE_VERSION_TEST: 18 + NODE_VERSION_BUILD: 20 DRY_RUN: true TEST_LEGACY_DECRYPTION: true SPARSE_CHECKOUT: |- @@ -105,13 +106,13 @@ jobs: with: repo: ${{ github.event.repository.full_name }} token: ${{ github.token }} - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ env.NODE_VERSION_TEST }} - - name: Prefetch modules for `ubuntu-latest` + - name: Prefetch test modules for `ubuntu-latest` id: setup-node uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ env.NODE_VERSION_TEST }} os: ${{ runner.os }} save-cache: true @@ -124,6 +125,27 @@ jobs: run: | echo "$(pnpm -s schedule-test-shards)" >> "$GITHUB_OUTPUT" + setup-build: + runs-on: ubuntu-latest + + outputs: + node-version: ${{ env.NODE_VERSION_BUILD }} + + steps: + - name: Checkout code + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + filter: blob:none # we don't need all blobs + sparse-checkout: ${{ env.SPARSE_CHECKOUT }} + show-progress: false + + - name: Prefetch build modules for `ubuntu-latest` + uses: ./.github/actions/setup-node + with: + node-version: ${{ env.NODE_VERSION_BUILD }} + os: ${{ runner.os }} + save-cache: true + prefetch: needs: [setup] @@ -142,7 +164,6 @@ jobs: strategy: matrix: os: ${{ fromJSON(needs.setup.outputs.os-matrix-prefetch) }} - node-version: [18] runs-on: ${{ matrix.os }} @@ -161,12 +182,13 @@ jobs: if: needs.setup.outputs.os-matrix-is-full && runner.os != 'Linux' uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ env.NODE_VERSION_TEST }} os: ${{ runner.os }} save-cache: true lint-eslint: - needs: [setup] + needs: + - setup-build runs-on: ubuntu-latest timeout-minutes: 15 @@ -182,7 +204,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Restore eslint cache @@ -211,7 +233,8 @@ jobs: key: eslint-main-cache lint-prettier: - needs: [setup] + needs: + - setup-build runs-on: ubuntu-latest timeout-minutes: 7 @@ -227,7 +250,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Restore prettier cache @@ -256,7 +279,8 @@ jobs: key: prettier-main-cache lint-docs: - needs: [setup] + needs: + - setup-build runs-on: ubuntu-latest timeout-minutes: 7 @@ -269,7 +293,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Lint markdown @@ -285,7 +309,8 @@ jobs: run: pnpm markdown-lint lint-other: - needs: [setup] + needs: + - setup-build runs-on: ubuntu-latest timeout-minutes: 7 @@ -298,7 +323,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Type check @@ -337,7 +362,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ env.NODE_VERSION_TEST }} os: ${{ runner.os }} - name: Cache jest @@ -348,7 +373,7 @@ jobs: jest-cache-${{ runner.os }}-${{ - env.NODE_VERSION + env.NODE_VERSION_TEST }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ @@ -379,7 +404,7 @@ jobs: - name: Save coverage artifacts if: (success() || failure()) && github.event.pull_request.draft != true && matrix.coverage - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: ${{ matrix.upload-artifact-name }} path: | @@ -399,7 +424,7 @@ jobs: show-progress: false - name: Download coverage reports - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: pattern: coverage-* path: coverage @@ -416,6 +441,7 @@ jobs: coverage-threshold: needs: - test + - setup-build runs-on: ubuntu-latest timeout-minutes: 3 if: (success() || failure()) && github.event.pull_request.draft != true @@ -430,11 +456,11 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Download coverage reports - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: pattern: coverage-* path: coverage @@ -505,7 +531,8 @@ jobs: run: exit 1 build: - needs: setup + needs: + - setup-build runs-on: ubuntu-latest timeout-minutes: 15 if: github.event.pull_request.draft != true @@ -518,7 +545,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Build @@ -533,13 +560,15 @@ jobs: run: pnpm test-e2e:pack - name: Upload - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: renovate-package path: renovate-0.0.0-semantic-release.tgz build-docs: - needs: [lint-docs] + needs: + - lint-docs + - setup-build runs-on: ubuntu-latest timeout-minutes: 5 if: github.event.pull_request.draft != true @@ -552,7 +581,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - name: Build @@ -562,7 +591,7 @@ jobs: run: pnpm test:docs - name: Upload - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: docs path: tmp/docs/ @@ -588,10 +617,10 @@ jobs: - name: Setup Node.js uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ env.NODE_VERSION_TEST }} - name: Download package - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: renovate-package @@ -603,7 +632,7 @@ jobs: release: needs: - - setup + - setup-build - lint-eslint - lint-prettier - lint-docs @@ -632,14 +661,14 @@ jobs: show-progress: false - name: docker-config - uses: containerbase/internal-tools@e4c460a459854978aeebf7b7d03fa576fc0247e5 # v3.3.0 + uses: containerbase/internal-tools@f3b5cf0d18d03e0cbc001037e1a669f6a2b1afca # v3.3.3 with: command: docker-config - name: Setup Node.js uses: ./.github/actions/setup-node with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ needs.setup-build.outputs.node-version }} os: ${{ runner.os }} - uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d6d91e20b931ea..0aa63ab58b5011 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml index aead3c9df7ad32..faf5970d86852d 100644 --- a/.github/workflows/update-data.yml +++ b/.github/workflows/update-data.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: env: - NODE_VERSION: 18 + NODE_VERSION: 20 permissions: contents: read diff --git a/docs/development/bug-handling.md b/docs/development/bug-handling.md new file mode 100644 index 00000000000000..601d3a0d55f148 --- /dev/null +++ b/docs/development/bug-handling.md @@ -0,0 +1,78 @@ +# Bug report handling + +## Start with a Discussion + +We use GitHub Discussions as a triaging stage for bug reports. +Users should [create a new Request Help discussion](https://github.com/renovatebot/renovate/discussions/new?category=request-help) and choose from the options there. + +We often need more information to resolve your bug report. +Maintainers may ask for such information directly, or use automated label comments, or both. +Maintainers may close bug reports that lack the extra information, for example when keeping the Discussion open does not help other users anymore. + +We only create issues in this repository when we: + +- consider them to be actionable +- are in a state where someone could work on it + +We often need a minimal reproduction or logs, or even _both_, to pinpoint the exact problem. +Because we need enough information for a actionable bug report, we may close Discussions that lack the needed info, even if it's highly likely the behavior is buggy. + +We have found that keeping Issues around that are not actionable just leads to them getting stale, and then closed. +The Issues list is meant as a list of actionable things for a contributor or maintainer to pick up eventually. + +## Discussion Resolution + +Bug reports are resolved in one of three ways: + +1. Confirmed as a bug. The Discussion will be converted to an Issue, and then closed. Any future comments go to the Issue and _not_ the Discussion. +1. Closed as "behaving as designed" with no further action. The Discussion will be closed with a relevant note. +1. Rejected as not a _bug_, but accepted as a _feature request_. The Discussion will be closed with a note suggesting that the poster create a new "Suggest an Idea" Discussion instead, which can then be converted to an Issue once actionable. + +## FAQ + +### What's your definition of bug? + +Bugs are behavior in Renovate which is _not_ as intended or documented. +Missing functionality or partial support is not automatically a bug. +For example, we're probably missing at least one feature from each package manager that Renovate supports. +If we labeled all those missing features as bugs, we lose sight of real bugs. + +### Why can't I create Bug Issues directly? + +It is really hard for users to decide if something is a bug. +Only a fraction of the incoming bug reports are for things we consider proper bugs. + +A while ago, users were allowed to create Bug Issues. +We ended up with many "bug, but not really" type issues, that polluted the repository. +Those issues made it tricky for maintainers and users to see what's really going on in the repository. +We have since closed many old user-created bug Issues, and now only allow maintainers to create bug Issues. +This way we do not end up in the same situation again. + +### What if I disagree with your definition of bug? + +We are not interested in debating you, we prefer to spend our time helping users solve their problems. +We are open to improve our approach to bugs, or this document, in good spirit. +Please do _not_ post comments like these: + +- "How dare you block users from creating Issues?!" +- "If the behavior was unexpected to me then that means it's a bug." + +Users who want to make our life difficult as maintainers will be blocked. +Read our [Code of Conduct](https://github.com/renovatebot/renovate/blob/main/CODE_OF_CONDUCT.md) to learn more. + +### Why do you close Bug discussions? + +It's important to move relevant reports to the next step of an Issue, and focus our attention there. +Bug reports that are not (going to be) an Issue, are marked as "not a bug". +This helps future users who browse or search the repository for similar terms, as they will not see any invalid Bug reports. + +If you are not sure if you have an _actual_ bug to report, please use the "Request Help" Discussion category. + +### When will you fix my bug? + +There are no Service Level Agreements (SLAs) in Open Source. +This means we are not required to respond to, or fix your problem within a certain time. + +If you are a paying Mend.io customer, please tell your support or customer contact that this bug is important to you. + +Please read our [Code of Conduct, how we prioritize work](https://github.com/renovatebot/renovate/blob/main/CODE_OF_CONDUCT.md#how-we-prioritize-work) to learn more. diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 125bccf0971000..09dc38bc540f13 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1510,7 +1510,7 @@ Example: Ignore the default project level approval(s), so that Renovate bot can automerge its merge requests, without needing approval(s). Under the hood, it creates a MR-level approval rule where `approvals_required` is set to `0`. -This option works only when `automerge=true`, `automergeType=pr` or `automergeType=branch`, and `platformAutomerge=true`. +This option works only when `automerge=true` and either `automergeType=pr` or `automergeType=branch`. Also, approval rules overriding should not be [prevented in GitLab settings](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/settings.html#prevent-editing-approval-rules-in-merge-requests). ## goGetDirs diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 741c6a9c6451fb..43b0113102ce8b 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -237,6 +237,8 @@ module.exports = { #### AWS ECR (Amazon Web Services Elastic Container Registry) +#### Using access key id & secret + Renovate can authenticate with AWS ECR using AWS access key id & secret as the username & password, for example: ```json @@ -254,6 +256,27 @@ Renovate can authenticate with AWS ECR using AWS access key id & secret as the u } ``` +##### Using `get-login-password` + +Renovate can also authenticate with AWS ECR using the output from the `aws ecr get-login-password` command as outlined in +the [AWS documentation](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html#registry-auth-token). +To make use of this authentication mechanism, specify the username as `AWS`: + +```json +{ + "hostRules": [ + { + "hostType": "docker", + "matchHost": "12345612312.dkr.ecr.us-east-1.amazonaws.com", + "username": "AWS", + "encrypted": { + "password": "w...A" + } + } + ] +} +``` + #### Google Container Registry / Google Artifact Registry ##### Using Application Default Credentials / Workload Identity (Self-Hosted only) @@ -384,7 +407,7 @@ To get access to the token a custom Renovate Docker image is needed that include The Dockerfile to create such an image can look like this: ```Dockerfile -FROM renovate/renovate:37.414.1 +FROM renovate/renovate:37.421.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/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index 5f57ff5212e93b..f72124f0233706 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -327,6 +327,10 @@ Results which are soft expired are reused in the following manner: - The `etag` from the cached results will be reused, and may result in a 304 response, meaning cached results are revalidated - If an error occurs when querying the `npmjs` registry, then soft expired results will be reused if they are present +## cachePrivatePackages + +In the self-hosted setup, use option to enable caching of private packages to improve performance. + ## cacheTtlOverride Utilize this key-value map to override the default package cache TTL values for a specific namespace. This object contains pairs of namespaces and their corresponding TTL values in minutes. diff --git a/lib/config/global.ts b/lib/config/global.ts index 3008fb6117f004..b1b1205dbd50cd 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -37,6 +37,7 @@ export class GlobalConfig { 'autodiscoverRepoSort', 'autodiscoverRepoOrder', 'userAgent', + 'cachePrivatePackages', ]; private static config: RepoGlobalConfig = {}; diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 627efe28c3f0f9..3bec15eefb2d24 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -3117,6 +3117,14 @@ const options: RenovateOptions[] = [ default: 90, globalOnly: true, }, + { + name: 'cachePrivatePackages', + description: + 'Cache private packages in the datasource cache. This is useful for self-hosted setups', + type: 'boolean', + default: false, + globalOnly: true, + }, ]; export function getOptions(): RenovateOptions[] { diff --git a/lib/config/presets/internal/group.ts b/lib/config/presets/internal/group.ts index 2a9756eb5d5e6c..a7100038e935bf 100644 --- a/lib/config/presets/internal/group.ts +++ b/lib/config/presets/internal/group.ts @@ -27,7 +27,7 @@ const staticGroups = { description: 'Group all packages published by Apollo GraphQL together.', packageRules: [ { - extends: 'packages:apollographql', + extends: ['packages:apollographql'], groupName: 'Apollo GraphQL packages', }, ], @@ -130,7 +130,7 @@ const staticGroups = { description: 'Group `googleapis` packages together.', packageRules: [ { - extends: 'packages:googleapis', + extends: ['packages:googleapis'], groupName: 'googleapis packages', }, ], @@ -228,7 +228,7 @@ const staticGroups = { description: 'Group JS test packages together.', packageRules: [ { - extends: 'packages:jsTest', + extends: ['packages:jsTest'], groupName: 'JS test packages', }, ], @@ -237,7 +237,7 @@ const staticGroups = { description: 'Group non-major JS test package updates together.', packageRules: [ { - extends: 'packages:jsTest', + extends: ['packages:jsTest'], groupName: 'JS test packages', matchUpdateTypes: ['minor', 'patch'], }, @@ -247,7 +247,7 @@ const staticGroups = { description: 'Group JavaScript unit test packages together.', packageRules: [ { - extends: 'packages:jsUnitTest', + extends: ['packages:jsUnitTest'], groupName: 'JS unit test packages', }, ], @@ -257,7 +257,7 @@ const staticGroups = { 'Group JavaScipt unit test packages together for non-major updates.', packageRules: [ { - extends: 'packages:jsUnitTest', + extends: ['packages:jsUnitTest'], groupName: 'JS unit test packages', matchUpdateTypes: ['minor', 'patch'], }, @@ -316,7 +316,7 @@ const staticGroups = { description: 'Group various lint packages together.', packageRules: [ { - extends: 'packages:linters', + extends: ['packages:linters'], groupName: 'linters', }, ], @@ -361,7 +361,7 @@ const staticGroups = { description: 'Group PostCSS packages together.', packageRules: [ { - extends: 'packages:postcss', + extends: ['packages:postcss'], groupName: 'postcss packages', }, ], @@ -756,7 +756,7 @@ const staticGroups = { description: 'Group all test packages together.', packageRules: [ { - extends: 'packages:test', + extends: ['packages:test'], groupName: 'test packages', }, ], @@ -765,7 +765,7 @@ const staticGroups = { description: 'Group all non-major test package updates together.', packageRules: [ { - extends: 'packages:test', + extends: ['packages:test'], groupName: 'test packages', matchUpdateTypes: ['minor', 'patch'], }, @@ -775,7 +775,7 @@ const staticGroups = { description: 'Group all unit test packages together.', packageRules: [ { - extends: 'packages:unitTest', + extends: ['packages:unitTest'], groupName: 'unit test packages', }, ], @@ -784,7 +784,7 @@ const staticGroups = { description: 'Group all unit test packages together for non-major updates.', packageRules: [ { - extends: 'packages:unitTest', + extends: ['packages:unitTest'], groupName: 'unit test packages', matchUpdateTypes: ['minor', 'patch'], }, @@ -794,7 +794,7 @@ const staticGroups = { description: 'Group all Vite related packages together.', packageRules: [ { - extends: 'packages:vite', + extends: ['packages:vite'], groupName: 'Vite packages', }, ], @@ -811,7 +811,7 @@ for (const monorepo of Object.keys(monorepos.presets)) { packageRules: [ { description: `Group packages from ${monorepo} monorepo together.`, - extends: `monorepo:${monorepo}`, + extends: [`monorepo:${monorepo}`], groupName: `${monorepo} monorepo`, matchUpdateTypes: nonPinUpdateTypes, }, diff --git a/lib/config/types.ts b/lib/config/types.ts index f62e4d2484e458..796731ebc1e693 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -166,6 +166,7 @@ export interface RepoGlobalConfig { autodiscoverRepoSort?: RepoSortMethod; autodiscoverRepoOrder?: SortMethod; userAgent?: string; + cachePrivatePackages?: boolean; } export interface LegacyAdminConfig { diff --git a/lib/modules/datasource/docker/ecr.ts b/lib/modules/datasource/docker/ecr.ts index f90a6608495a5b..4a2d1be216f777 100644 --- a/lib/modules/datasource/docker/ecr.ts +++ b/lib/modules/datasource/docker/ecr.ts @@ -16,7 +16,15 @@ export async function getECRAuthToken( opts: HostRule, ): Promise { const config: ECRClientConfig = { region }; - if (opts.username && opts.password) { + if (opts.username === `AWS` && opts.password) { + logger.trace( + `AWS user specified, encoding basic auth credentials for ECR registry`, + ); + return Buffer.from(`AWS:${opts.password}`).toString('base64'); + } else if (opts.username && opts.password) { + logger.trace( + `Using AWS accessKey to get Authorization token for ECR registry`, + ); config.credentials = { accessKeyId: opts.username, secretAccessKey: opts.password, diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index 52a8fef2588ac2..96e576aa07a261 100644 --- a/lib/modules/datasource/docker/index.spec.ts +++ b/lib/modules/datasource/docker/index.spec.ts @@ -358,6 +358,33 @@ describe('modules/datasource/docker/index', () => { expect(res).toBeNull(); }); + it('supports ECR authentication for private repositories', async () => { + httpMock + .scope(amazonUrl) + .get('/') + .reply(401, '', { + 'www-authenticate': 'Basic realm="My Private Docker Registry Server"', + }) + .head('/node/manifests/some-tag') + .matchHeader('authorization', 'Basic QVdTOnNvbWUtcGFzc3dvcmQ=') + .reply(200, '', { 'docker-content-digest': 'some-digest' }); + + hostRules.find.mockReturnValue({ + username: 'AWS', + password: 'some-password', + }); + + const res = await getDigest( + { + datasource: 'docker', + packageName: '123456789.dkr.ecr.us-east-1.amazonaws.com/node', + }, + 'some-tag', + ); + + expect(res).toBe('some-digest'); + }); + it('supports Google ADC authentication for gcr', async () => { httpMock .scope(gcrUrl) diff --git a/lib/modules/datasource/pypi/index.ts b/lib/modules/datasource/pypi/index.ts index 532de67f592e2b..3d9d9eacd81f48 100644 --- a/lib/modules/datasource/pypi/index.ts +++ b/lib/modules/datasource/pypi/index.ts @@ -182,7 +182,7 @@ export class PypiDatasource extends Datasource { // source packages const srcText = PypiDatasource.normalizeName(text); const srcPrefix = `${packageName}-`; - const srcSuffixes = ['.tar.gz', '.tar.bz2', '.tar.xz', '.zip']; + const srcSuffixes = ['.tar.gz', '.tar.bz2', '.tar.xz', '.zip', '.tgz']; if ( srcText.startsWith(srcPrefix) && srcSuffixes.some((srcSuffix) => srcText.endsWith(srcSuffix)) diff --git a/lib/modules/datasource/sbt-package/index.ts b/lib/modules/datasource/sbt-package/index.ts index b714aae786c7b6..96f68b0fbf289e 100644 --- a/lib/modules/datasource/sbt-package/index.ts +++ b/lib/modules/datasource/sbt-package/index.ts @@ -8,7 +8,11 @@ import { compare } from '../../versioning/maven/compare'; import { MavenDatasource } from '../maven'; import { MAVEN_REPO } from '../maven/common'; import { downloadHttpProtocol } from '../maven/util'; -import type { GetReleasesConfig, ReleaseResult } from '../types'; +import type { + GetReleasesConfig, + RegistryStrategy, + ReleaseResult, +} from '../types'; import { getLatestVersion, normalizeRootRelativeUrls, @@ -22,7 +26,7 @@ export class SbtPackageDatasource extends MavenDatasource { override readonly defaultVersioning = ivyVersioning.id; - override readonly registryStrategy = 'hunt'; + override readonly registryStrategy: RegistryStrategy = 'hunt'; override readonly sourceUrlSupport = 'package'; override readonly sourceUrlNote = diff --git a/lib/modules/datasource/sbt-package/readme.md b/lib/modules/datasource/sbt-package/readme.md new file mode 100644 index 00000000000000..ff2e3d3a152b82 --- /dev/null +++ b/lib/modules/datasource/sbt-package/readme.md @@ -0,0 +1,15 @@ +This datasource finds SBT package updates from Maven repositories. + +By default, Renovate checks `https://repo.maven.apache.org/maven2` for SBT packages. +You can override the default behavior with the `registryUrls` config option. +For example: + +```json +{ + "matchDatasources": ["sbt-package"], + "registryUrls": [ + "https://repo.maven.apache.org/maven2", + "https://oss.sonatype.org/content/repositories/snapshots" + ] +} +``` diff --git a/lib/modules/datasource/sbt-plugin/index.spec.ts b/lib/modules/datasource/sbt-plugin/index.spec.ts index f2b3daaaa81df9..6387ff45e60a0e 100644 --- a/lib/modules/datasource/sbt-plugin/index.spec.ts +++ b/lib/modules/datasource/sbt-plugin/index.spec.ts @@ -1,3 +1,4 @@ +import { codeBlock, html } from 'common-tags'; import { getPkgReleases } from '..'; import { Fixtures } from '../../../../test/fixtures'; import * as httpMock from '../../../../test/http-mock'; @@ -37,10 +38,12 @@ describe('modules/datasource/sbt-plugin/index', () => { .get('/maven2/org/scalatest/') .reply( 200, - 'scalatest_2.12/\n' + - 'scalatest_2.12/\n' + - "scalatest_2.12/" + - "scalatest_2.12/", + html` + scalatest/ + scalatest_2.12/ + scalatest_sjs2.12/ + scalatest_native2.12/ + `, ); httpMock .scope('https://repo.maven.apache.org') @@ -52,53 +55,46 @@ describe('modules/datasource/sbt-plugin/index', () => { .reply(200, "4.5.6/"); httpMock - .scope('https://repo.scala-sbt.org') - .get('/scalasbt/sbt-plugin-releases/com.github.gseitz/') - .reply(200, ''); - httpMock - .scope('https://repo.scala-sbt.org') - .get('/scalasbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/') + .scope('https://repo.maven.apache.org') + .get('/maven2/org/foundweekends/sbt-bintray/') .reply( 200, - '\n' + - '\n' + - '\n' + - '\n' + - '
scala_2.12/
\n' + - '\n' + - '', + html` + + + +
scala_2.12/
+ + + `, ); httpMock - .scope('https://repo.scala-sbt.org') - .get( - '/scalasbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/', - ) + .scope('https://repo.maven.apache.org') + .get('/maven2/org/foundweekends/sbt-bintray/scala_2.12/') .reply( 200, - '\n' + - '\n' + - '\n' + - '\n' + - '\n' + - '
sbt_1.0/
\n' + - '\n' + - '\n', + html` + + + +
sbt_1.0/
+ + + `, ); httpMock - .scope('https://repo.scala-sbt.org') - .get( - '/scalasbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/sbt_1.0/', - ) + .scope('https://repo.maven.apache.org') + .get('/maven2/org/foundweekends/sbt-bintray/scala_2.12/sbt_1.0/') .reply( 200, - '\n' + - '\n' + - '\n' + - '\n' + - '\n' + - '
0.5.5/
\n' + - '\n' + - '\n', + html` + + + +
0.5.5/
+ + + `, ); httpMock @@ -106,20 +102,28 @@ describe('modules/datasource/sbt-plugin/index', () => { .get('/maven2/io/get-coursier/') .reply( 200, - 'sbt-coursier_2.10_0.13/\n' + - 'sbt-coursier_2.12_1.0/\n' + - 'sbt-coursier_2.12_1.0.0-M5/\n' + - 'sbt-coursier_2.12_1.0.0-M6/\n', + html` + sbt-coursier_2.10_0.13/ + sbt-coursier_2.12_1.0/ + sbt-coursier_2.12_1.0.0-M5/ + sbt-coursier_2.12_1.0.0-M6/ + `, ); httpMock .scope('https://repo.maven.apache.org') .get('/maven2/io/get-coursier/sbt-coursier_2.12_1.0/') .reply( 200, - '2.0.0-RC2/\n' + - '2.0.0-RC6-1/\n' + - '2.0.0-RC6-2/\n' + - '2.0.0-RC6-6/\n', + html` + 2.0.0-RC2/ + 2.0.0-RC6-1/ + 2.0.0-RC6-2/ + 2.0.0-RC6-6/ + `, ); httpMock .scope('https://repo.maven.apache.org') @@ -128,12 +132,14 @@ describe('modules/datasource/sbt-plugin/index', () => { ) .reply( 200, - '\n' + - 'https://get-coursier.io/\n' + - '\n' + - 'https://github.com/coursier/sbt-coursier\n' + - '\n' + - '\n', + codeBlock` + + https://get-coursier.io/ + + https://github.com/coursier/sbt-coursier + + + `, ); }); @@ -169,8 +175,8 @@ describe('modules/datasource/sbt-plugin/index', () => { }), ).toEqual({ dependencyUrl: - 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.foundweekends/sbt-bintray', - registryUrl: 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases', + 'https://repo.maven.apache.org/maven2/org/foundweekends/sbt-bintray', + registryUrl: 'https://repo.maven.apache.org/maven2', releases: [{ version: '0.5.5' }], }); }); @@ -185,8 +191,8 @@ describe('modules/datasource/sbt-plugin/index', () => { }), ).toEqual({ dependencyUrl: - 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.foundweekends/sbt-bintray', - registryUrl: 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases', + 'https://repo.maven.apache.org/maven2/org/foundweekends/sbt-bintray', + registryUrl: 'https://repo.maven.apache.org/maven2', releases: [{ version: '0.5.5' }], }); }); diff --git a/lib/modules/datasource/sbt-plugin/index.ts b/lib/modules/datasource/sbt-plugin/index.ts index 1d4c18a6ab039a..de9ca82afe2ae6 100644 --- a/lib/modules/datasource/sbt-plugin/index.ts +++ b/lib/modules/datasource/sbt-plugin/index.ts @@ -4,22 +4,27 @@ import { regEx } from '../../../util/regex'; import { ensureTrailingSlash } from '../../../util/url'; import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; +import { MAVEN_REPO } from '../maven/common'; import { downloadHttpProtocol } from '../maven/util'; import { SbtPackageDatasource } from '../sbt-package'; import { getLatestVersion, parseIndexDir } from '../sbt-package/util'; -import type { GetReleasesConfig, ReleaseResult } from '../types'; +import type { + GetReleasesConfig, + RegistryStrategy, + ReleaseResult, +} from '../types'; export const SBT_PLUGINS_REPO = 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases'; -export const defaultRegistryUrls = [SBT_PLUGINS_REPO]; +export const defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO]; export class SbtPluginDatasource extends SbtPackageDatasource { static override readonly id = 'sbt-plugin'; override readonly defaultRegistryUrls = defaultRegistryUrls; - override readonly registryStrategy = 'hunt'; + override readonly registryStrategy: RegistryStrategy = 'merge'; override readonly defaultVersioning = ivyVersioning.id; @@ -98,7 +103,9 @@ export class SbtPluginDatasource extends SbtPackageDatasource { const repoRoot = ensureTrailingSlash(registryUrl); const searchRoots: string[] = []; // Optimize lookup order - searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`); + if (!registryUrl.startsWith(MAVEN_REPO)) { + searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`); + } searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`); for (let idx = 0; idx < searchRoots.length; idx += 1) { diff --git a/lib/modules/datasource/sbt-plugin/readme.md b/lib/modules/datasource/sbt-plugin/readme.md new file mode 100644 index 00000000000000..01f5302616dcae --- /dev/null +++ b/lib/modules/datasource/sbt-plugin/readme.md @@ -0,0 +1,20 @@ +This datasource finds SBT plugin updates from Maven repositories. + +By default, Renovate: + +1. Checks `https://repo1.maven.org/maven2/` for SBT plugins +1. If the above URL returns no results, then Renovate tries the _legacy_ URL: `https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases` + +You can override the default behavior with the `registryUrls` config option. +For example: + +```json +{ + "matchDatasources": ["sbt-plugin"], + "registryUrls": [ + "https://repo1.maven.org/maven2/", + "https://oss.sonatype.org/content/repositories/snapshots", + "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases" + ] +} +``` diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts index 98f6279ebb2101..ae8eaac067b28a 100644 --- a/lib/modules/datasource/types.ts +++ b/lib/modules/datasource/types.ts @@ -102,9 +102,9 @@ export interface DatasourceApi extends ModuleApi { /** * Strategy to use when multiple registryUrls are available to the datasource. - * first: only the first registryUrl will be tried and others ignored - * hunt: registryUrls will be tried in order until one returns a result - * merge: all registryUrls will be tried and the results merged if more than one returns a result + * - `first`: only the first registryUrl will be tried and others ignored + * - `hunt`: registryUrls will be tried in order until one returns a result + * - `merge`: all registryUrls will be tried and the results merged if more than one returns a result */ registryStrategy?: RegistryStrategy | undefined; diff --git a/lib/modules/manager/pipenv/artifacts.spec.ts b/lib/modules/manager/pipenv/artifacts.spec.ts index a3975ef6c31603..d509a94b7d8574 100644 --- a/lib/modules/manager/pipenv/artifacts.spec.ts +++ b/lib/modules/manager/pipenv/artifacts.spec.ts @@ -1,10 +1,10 @@ +import * as _fsExtra from 'fs-extra'; import { mockDeep } from 'jest-mock-extended'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../../test/exec-util'; import { Fixtures } from '../../../../test/fixtures'; import { env, - fs, git, mocked, mockedFunction, @@ -30,9 +30,11 @@ import { updateArtifacts } from '.'; const datasource = mocked(_datasource); const find = mockedFunction(_find); +jest.mock('fs-extra'); +const fsExtra = mocked(_fsExtra); + jest.mock('../../../util/exec/env'); jest.mock('../../../util/git'); -jest.mock('../../../util/fs'); jest.mock('../../../util/host-rules', () => mockDeep()); jest.mock('../../../util/http'); jest.mock('../../datasource', () => mockDeep()); @@ -41,9 +43,9 @@ process.env.CONTAINERBASE = 'true'; const adminConfig: RepoGlobalConfig = { // `join` fixes Windows CI - localDir: join('/tmp/github/some/repo'), - cacheDir: join('/tmp/renovate/cache'), - containerbaseDir: join('/tmp/renovate/cache/containerbase'), + localDir: join(join('/tmp/github/some/repo')), + cacheDir: join(join('/tmp/renovate/cache')), + containerbaseDir: join(join('/tmp/renovate/cache/containerbase')), }; const dockerAdminConfig = { ...adminConfig, @@ -53,13 +55,34 @@ const dockerAdminConfig = { const config: UpdateArtifactsConfig = {}; const lockMaintenanceConfig = { ...config, isLockFileMaintenance: true }; -const pipenvCacheDir = '/tmp/renovate/cache/others/pipenv'; -const pipCacheDir = '/tmp/renovate/cache/others/pip'; -const virtualenvsCacheDir = '/tmp/renovate/cache/others/virtualenvs'; +const pipenvCacheDir = join('/tmp/renovate/cache/others/pipenv'); +const pipCacheDir = join('/tmp/renovate/cache/others/pip'); +const virtualenvsCacheDir = join('/tmp/renovate/cache/others/virtualenvs'); + +interface MockFiles { + [key: string]: string | string[]; +} + +function mockFiles(mockFiles: MockFiles): void { + fsExtra.readFile.mockImplementation(((name: string) => { + for (const [key, value] of Object.entries(mockFiles)) { + if (name.endsWith(key)) { + if (!Array.isArray(value)) { + return value; + } + + if (value.length > 1) { + return value.shift(); + } + + return value[0]; + } + } + throw new Error('File not found'); + }) as never); +} describe('modules/manager/pipenv/artifacts', () => { - let pipFileLock: PipfileLockSchema; - beforeEach(() => { env.getChildProcessEnv.mockReturnValue({ ...envMock.basic, @@ -69,11 +92,6 @@ describe('modules/manager/pipenv/artifacts', () => { GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); - pipFileLock = { - _meta: { requires: {} }, - default: { pipenv: {} }, - develop: { pipenv: {} }, - }; // python datasource.getPkgReleases.mockResolvedValueOnce({ @@ -109,12 +127,16 @@ describe('modules/manager/pipenv/artifacts', () => { }); it('returns null if unchanged', async () => { - pipFileLock._meta!.requires!.python_full_version = '3.7.6'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': JSON.stringify({ + _meta: { + requires: { python_full_version: '3.7.6' }, + }, + } satisfies PipfileLockSchema), + }); const execSnapshots = mockExecAll(); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); expect( await updateArtifacts({ @@ -129,23 +151,38 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, }, }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('gets python full version from Pipfile', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - pipFileLock._meta!.requires!.python_full_version = '3.7.6'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + mockFiles({ + '/Pipfile.lock': JSON.stringify({ + _meta: { + requires: { python_full_version: '3.7.6' }, + }, + } satisfies PipfileLockSchema), + }); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + const execSnapshots = mockExecAll(); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); expect( await updateArtifacts({ @@ -162,23 +199,38 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, }, }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('gets python version from Pipfile', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - pipFileLock._meta!.requires!.python_full_version = '3.7.6'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + mockFiles({ + '/Pipfile.lock': JSON.stringify({ + _meta: { + requires: { python_full_version: '3.7.6' }, + }, + } satisfies PipfileLockSchema), + }); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + const execSnapshots = mockExecAll(); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); expect( await updateArtifacts({ @@ -195,23 +247,35 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, }, }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('gets full python version from .python-version', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + mockFiles({ + '/Pipfile.lock': '{}', + '/.python-version': '3.7.6', + }); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + const execSnapshots = mockExecAll(); - fs.getSiblingFileName.mockResolvedValueOnce('.python-version' as never); - fs.readLocalFile.mockResolvedValueOnce('3.7.6'); expect( await updateArtifacts({ @@ -228,23 +292,35 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, }, }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + ]); }); it('gets python stream, from .python-version', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': '{}', + '/.python-version': '3.8', + }); const execSnapshots = mockExecAll(); - fs.getSiblingFileName.mockResolvedValueOnce('.python-version' as never); - fs.readLocalFile.mockResolvedValueOnce('3.8'); expect( await updateArtifacts({ @@ -261,22 +337,33 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, }, }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + ]); }); it('handles no constraint', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('unparseable pipfile lock'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': 'unparseable pipfile lock', + }); + const execSnapshots = mockExecAll(); - fs.readLocalFile.mockResolvedValueOnce('unparseable pipfile lock'); expect( await updateArtifacts({ @@ -291,7 +378,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -300,20 +387,29 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('returns updated Pipfile.lock', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('current pipfile.lock'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': ['current pipfile.lock', 'new pipfile.lock'], + }); const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('New Pipfile.lock'); expect( await updateArtifacts({ @@ -322,13 +418,21 @@ describe('modules/manager/pipenv/artifacts', () => { newPackageFileContent: 'some new content', config: { ...config, constraints: { python: '== 3.8.*' } }, }), - ).not.toBeNull(); + ).toEqual([ + { + file: { + contents: 'new pipfile.lock', + path: 'Pipfile.lock', + type: 'addition', + }, + }, + ]); expect(execSnapshots).toMatchObject([ { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -337,15 +441,30 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('supports docker mode', async () => { GlobalConfig.set(dockerAdminConfig); - pipFileLock._meta!.requires!.python_version = '3.7'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + const pipFileLock = JSON.stringify({ + _meta: { requires: { python_version: '3.7' } }, + } satisfies PipfileLockSchema); + mockFiles({ + '/Pipfile.lock': [pipFileLock, 'new lock'], + }); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + // pipenv datasource.getPkgReleases.mockResolvedValueOnce({ releases: [{ version: '2023.1.2' }], @@ -356,7 +475,6 @@ describe('modules/manager/pipenv/artifacts', () => { modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -389,7 +507,7 @@ describe('modules/manager/pipenv/artifacts', () => { 'pipenv lock' + '"', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -398,15 +516,30 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('supports install mode', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - pipFileLock._meta!.requires!.python_version = '3.6'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + const pipFileLock = JSON.stringify({ + _meta: { requires: { python_version: '3.6' } }, + } satisfies PipfileLockSchema); + mockFiles({ + '/Pipfile.lock': [pipFileLock, 'new lock'], + }); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + // pipenv datasource.getPkgReleases.mockResolvedValueOnce({ releases: [{ version: '2023.1.2' }], @@ -417,7 +550,6 @@ describe('modules/manager/pipenv/artifacts', () => { modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -434,7 +566,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -443,14 +575,26 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('defaults to latest if no lock constraints', async () => { GlobalConfig.set({ ...adminConfig, binarySource: 'install' }); - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': ['{}', 'new lock'], + }); + // pipenv datasource.getPkgReleases.mockResolvedValueOnce({ releases: [{ version: '2023.1.2' }], @@ -461,7 +605,6 @@ describe('modules/manager/pipenv/artifacts', () => { modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -478,7 +621,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -487,17 +630,30 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('catches errors', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('Current Pipfile.lock'); - fs.writeLocalFile.mockImplementationOnce(() => { - throw new Error('not found'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': 'Current Pipfile.lock', }); + fsExtra.outputFile.mockImplementationOnce((() => { + throw new Error('not found'); + }) as never); + expect( await updateArtifacts({ packageFileName: 'Pipfile', @@ -508,20 +664,26 @@ describe('modules/manager/pipenv/artifacts', () => { ).toEqual([ { artifactError: { lockFile: 'Pipfile.lock', stderr: 'not found' } }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('returns updated Pipenv.lock when doing lockfile maintenance', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('Current Pipfile.lock'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': ['Current Pipfile.lock', 'New Pipfile.lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('New Pipfile.lock'); expect( await updateArtifacts({ @@ -536,7 +698,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, PIP_CACHE_DIR: pipCacheDir, @@ -548,19 +710,23 @@ describe('modules/manager/pipenv/artifacts', () => { }); it('uses pipenv version from Pipfile', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + GlobalConfig.set(dockerAdminConfig); - pipFileLock.default!['pipenv'].version = '==2020.8.13'; - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + const oldLock = JSON.stringify({ + default: { pipenv: { version: '==2020.8.13' } }, + } satisfies PipfileLockSchema); + mockFiles({ + '/Pipfile.lock': [oldLock, 'new lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -593,7 +759,7 @@ describe('modules/manager/pipenv/artifacts', () => { 'pipenv lock' + '"', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, WORKON_HOME: virtualenvsCacheDir, @@ -601,22 +767,37 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('uses pipenv version from Pipfile dev packages', async () => { GlobalConfig.set(dockerAdminConfig); - pipFileLock.develop!['pipenv'].version = '==2020.8.13'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + const oldLock = JSON.stringify({ + develop: { pipenv: { version: '==2020.8.13' } }, + } satisfies PipfileLockSchema) as never; + mockFiles({ + '/Pipfile.lock': [oldLock, 'new lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -649,7 +830,7 @@ describe('modules/manager/pipenv/artifacts', () => { 'pipenv lock' + '"', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, WORKON_HOME: virtualenvsCacheDir, @@ -657,22 +838,36 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('uses pipenv version from config', async () => { GlobalConfig.set(dockerAdminConfig); - pipFileLock.default!['pipenv'].version = '==2020.8.13'; - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce(JSON.stringify(pipFileLock)); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + const oldLock = JSON.stringify({ + default: { pipenv: { version: '==2020.8.13' } }, + } satisfies PipfileLockSchema) as never; + mockFiles({ + '/Pipfile.lock': [oldLock, 'new lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('new lock'); expect( await updateArtifacts({ @@ -705,7 +900,7 @@ describe('modules/manager/pipenv/artifacts', () => { 'pipenv lock' + '"', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, WORKON_HOME: virtualenvsCacheDir, @@ -713,20 +908,32 @@ describe('modules/manager/pipenv/artifacts', () => { }, }, ]); + + expect(fsExtra.ensureDir.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/renovate/cache/others/pipenv'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/pip'))], + [expect.toEndWith(join('/tmp/renovate/cache/others/virtualenvs'))], + ]); + expect(fsExtra.readFile.mock.calls).toEqual([ + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/.python-version')), 'utf8'], + [expect.toEndWith(join('/tmp/github/some/repo/Pipfile.lock')), 'utf8'], + ]); }); it('passes private credential environment vars', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('current pipfile.lock'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': ['current Pipfile.lock', 'New Pipfile.lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('New Pipfile.lock'); find.mockReturnValueOnce({ username: 'usernameOne', @@ -754,7 +961,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, WORKON_HOME: virtualenvsCacheDir, @@ -791,17 +998,18 @@ describe('modules/manager/pipenv/artifacts', () => { }); it('updates extraEnv if variable names differ from default', async () => { - fs.ensureCacheDir.mockResolvedValueOnce(pipenvCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(pipCacheDir); - fs.ensureCacheDir.mockResolvedValueOnce(virtualenvsCacheDir); - fs.readLocalFile.mockResolvedValueOnce('current pipfile.lock'); + fsExtra.ensureDir.mockResolvedValue(undefined as never); + + mockFiles({ + '/Pipfile.lock': ['current Pipfile.lock', 'New Pipfile.lock'], + }); + const execSnapshots = mockExecAll(); git.getRepoStatus.mockResolvedValue( partial({ modified: ['Pipfile.lock'], }), ); - fs.readLocalFile.mockResolvedValueOnce('New Pipfile.lock'); find.mockReturnValueOnce({ username: 'usernameOne', @@ -829,7 +1037,7 @@ describe('modules/manager/pipenv/artifacts', () => { { cmd: 'pipenv lock', options: { - cwd: '/tmp/github/some/repo', + cwd: join('/tmp/github/some/repo'), env: { PIPENV_CACHE_DIR: pipenvCacheDir, WORKON_HOME: virtualenvsCacheDir, diff --git a/lib/modules/manager/sbt/extract.spec.ts b/lib/modules/manager/sbt/extract.spec.ts index 29b09a5eae1600..7410b282ae382c 100644 --- a/lib/modules/manager/sbt/extract.spec.ts +++ b/lib/modules/manager/sbt/extract.spec.ts @@ -490,7 +490,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, { @@ -499,7 +499,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, { @@ -508,7 +508,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, { @@ -517,7 +517,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, { @@ -526,7 +526,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, { @@ -535,7 +535,7 @@ describe('modules/manager/sbt/extract', () => { registryUrls: [ 'http://example.org/repo', 'https://example.org/ivy-repo/', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', ], }, ], @@ -551,7 +551,7 @@ describe('modules/manager/sbt/extract', () => { for (const dep of pkg.deps.filter((d) => d.depType === 'plugin')) { expect(dep.registryUrls).toStrictEqual([ 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases', - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', 'https://example.com/repos/1/', 'https://example.com/repos/2/', 'https://example.com/repos/3/', @@ -563,7 +563,7 @@ describe('modules/manager/sbt/extract', () => { for (const pkg of packages) { for (const dep of pkg.deps.filter((d) => d.depType !== 'plugin')) { expect(dep.registryUrls).toStrictEqual([ - 'https://repo1.maven.org/maven2', + 'https://repo.maven.apache.org/maven2', 'https://example.com/repos/1/', 'https://example.com/repos/2/', 'https://example.com/repos/3/', diff --git a/lib/modules/manager/sbt/extract.ts b/lib/modules/manager/sbt/extract.ts index 747245f1ae14ee..fd5a9173769dd0 100644 --- a/lib/modules/manager/sbt/extract.ts +++ b/lib/modules/manager/sbt/extract.ts @@ -5,6 +5,7 @@ import { newlineRegex, regEx } from '../../../util/regex'; import { parseUrl } from '../../../util/url'; import { GithubReleasesDatasource } from '../../datasource/github-releases'; import { MavenDatasource } from '../../datasource/maven'; +import { MAVEN_REPO } from '../../datasource/maven/common'; import { SbtPackageDatasource } from '../../datasource/sbt-package'; import { SBT_PLUGINS_REPO, @@ -41,8 +42,6 @@ interface Ctx { variableName?: string; } -const SBT_MVN_REPO = 'https://repo1.maven.org/maven2'; - const scala = lang.createLang('scala'); const sbtVersionRegex = regEx( @@ -308,7 +307,7 @@ export function extractProxyUrls( if (extraction?.groups?.proxy) { extractedProxyUrls.push(extraction.groups.proxy); } else if (line.trim() === 'maven-central') { - extractedProxyUrls.push(SBT_MVN_REPO); + extractedProxyUrls.push(MAVEN_REPO); } } return extractedProxyUrls; @@ -418,9 +417,9 @@ export async function extractAllPackageFiles( if (proxyUrls.length > 0) { dep.registryUrls!.unshift(...proxyUrls); } else if (dep.depType === 'plugin') { - dep.registryUrls!.unshift(SBT_PLUGINS_REPO, SBT_MVN_REPO); + dep.registryUrls!.unshift(SBT_PLUGINS_REPO, MAVEN_REPO); } else { - dep.registryUrls!.unshift(SBT_MVN_REPO); + dep.registryUrls!.unshift(MAVEN_REPO); } } } diff --git a/lib/modules/platform/gerrit/client.spec.ts b/lib/modules/platform/gerrit/client.spec.ts index 59a5dcd788ca21..4901128bb858b1 100644 --- a/lib/modules/platform/gerrit/client.spec.ts +++ b/lib/modules/platform/gerrit/client.spec.ts @@ -98,7 +98,11 @@ describe('modules/platform/gerrit/client', () => { ['owner:self', { branchName: 'dependency-xyz' }], ['project:repo', { branchName: 'dependency-xyz' }], ['-is:wip', { branchName: 'dependency-xyz' }], - ['hashtag:sourceBranch-dependency-xyz', { branchName: 'dependency-xyz' }], + [ + 'footer:Renovate-Branch=dependency-xyz', + { branchName: 'dependency-xyz' }, + ], + ['hashtag:sourceBranch-dependency-xyz', { branchName: 'dependency-xyz' }], // for backwards compatibility ['label:Code-Review=-2', { branchName: 'dependency-xyz', label: '-2' }], [ 'branch:otherTarget', diff --git a/lib/modules/platform/gerrit/client.ts b/lib/modules/platform/gerrit/client.ts index 3182db64db37b2..cd2dd1fc30bec6 100644 --- a/lib/modules/platform/gerrit/client.ts +++ b/lib/modules/platform/gerrit/client.ts @@ -231,8 +231,17 @@ class GerritClient { ): string[] { const filterState = mapPrStateToGerritFilter(searchConfig.state); const filters = ['owner:self', 'project:' + repository, filterState]; - if (searchConfig.branchName !== '') { - filters.push(`hashtag:sourceBranch-${searchConfig.branchName}`); + if (searchConfig.branchName) { + filters.push( + ...[ + '(', + `footer:Renovate-Branch=${searchConfig.branchName}`, + // for backwards compatibility + 'OR', + `hashtag:sourceBranch-${searchConfig.branchName}`, + ')', + ], + ); } if (searchConfig.targetBranch) { filters.push(`branch:${searchConfig.targetBranch}`); diff --git a/lib/modules/platform/gerrit/readme.md b/lib/modules/platform/gerrit/readme.md index 01a539311cf65d..7246f3f946dc78 100644 --- a/lib/modules/platform/gerrit/readme.md +++ b/lib/modules/platform/gerrit/readme.md @@ -3,11 +3,16 @@ ## Supported Gerrit versions Renovate supports all Gerrit 3.x versions. + Support for Gerrit is currently _experimental_, meaning that it _might_ still have some undiscovered bugs or design limitations, and that we _might_ need to change functionality in a non-backwards compatible manner in a non-major release. -The current implementation uses Gerrit's "hashtags" feature. -Therefore you must use a Gerrit version that uses the [NoteDB](https://gerrit-review.googlesource.com/Documentation/note-db.html) backend. -We did not test Gerrit `2.x` with NoteDB (only in `2.15` and `2.16`), but could work. +Renovate stores its metadata in the _commit message footer_. + +Previously Renovate stored metadata in Gerrit's _hashtags_. +To keep backwards compatibility, Renovate still reads metadata from hashtags. +But Renovate _always_ puts its metadata in the _commit message footer_! +When the Renovate maintainers mark Gerrit support as stable, the maintainers will remove the "read metadata from hashtags" feature. +This means changes without metadata in the commit message footer will be "forgotten" by Renovate. ## Authentication diff --git a/lib/modules/platform/gerrit/scm.spec.ts b/lib/modules/platform/gerrit/scm.spec.ts index 18667a04c4d4c5..9be155245ad15e 100644 --- a/lib/modules/platform/gerrit/scm.spec.ts +++ b/lib/modules/platform/gerrit/scm.spec.ts @@ -300,13 +300,18 @@ describe('modules/platform/gerrit/scm', () => { baseBranch: 'main', branchName: 'renovate/dependency-1.x', files: [], - message: ['commit msg', expect.stringMatching(/Change-Id: I.{32}/)], + message: [ + 'commit msg', + expect.stringMatching( + /^Renovate-Branch: renovate\/dependency-1\.x\nChange-Id: I[a-z0-9]{40}$/, + ), + ], force: true, }); expect(git.pushCommit).toHaveBeenCalledWith({ files: [], sourceRef: 'renovate/dependency-1.x', - targetRef: 'refs/for/main%t=sourceBranch-renovate/dependency-1.x', + targetRef: 'refs/for/main', }); }); @@ -339,7 +344,10 @@ describe('modules/platform/gerrit/scm', () => { baseBranch: 'main', branchName: 'renovate/dependency-1.x', files: [], - message: ['commit msg', 'Change-Id: ...'], + message: [ + 'commit msg', + 'Renovate-Branch: renovate/dependency-1.x\nChange-Id: ...', + ], force: true, }); expect(git.fetchRevSpec).toHaveBeenCalledWith('refs/changes/1/2'); @@ -377,14 +385,17 @@ describe('modules/platform/gerrit/scm', () => { baseBranch: 'main', branchName: 'renovate/dependency-1.x', files: [], - message: ['commit msg', 'Change-Id: ...'], + message: [ + 'commit msg', + 'Renovate-Branch: renovate/dependency-1.x\nChange-Id: ...', + ], force: true, }); expect(git.fetchRevSpec).toHaveBeenCalledWith('refs/changes/1/2'); expect(git.pushCommit).toHaveBeenCalledWith({ files: [], sourceRef: 'renovate/dependency-1.x', - targetRef: 'refs/for/main%t=sourceBranch-renovate/dependency-1.x', + targetRef: 'refs/for/main', }); expect(clientMock.wasApprovedBy).toHaveBeenCalledWith( existingChange, diff --git a/lib/modules/platform/gerrit/scm.ts b/lib/modules/platform/gerrit/scm.ts index f4369fa39e2877..d8500e95205251 100644 --- a/lib/modules/platform/gerrit/scm.ts +++ b/lib/modules/platform/gerrit/scm.ts @@ -109,7 +109,7 @@ export class GerritScm extends DefaultGitScm { typeof commit.message === 'string' ? [commit.message] : commit.message; commit.message = [ ...origMsg, - `Change-Id: ${existingChange?.change_id ?? generateChangeId()}`, + `Renovate-Branch: ${commit.branchName}\nChange-Id: ${existingChange?.change_id ?? generateChangeId()}`, ]; const commitResult = await git.prepareCommit({ ...commit, force: true }); if (commitResult) { @@ -123,9 +123,7 @@ export class GerritScm extends DefaultGitScm { if (hasChanges || commit.force) { const pushResult = await git.pushCommit({ sourceRef: commit.branchName, - targetRef: `refs/for/${commit.baseBranch!}%t=sourceBranch-${ - commit.branchName - }`, + targetRef: `refs/for/${commit.baseBranch!}`, files: commit.files, }); if (pushResult) { diff --git a/lib/modules/platform/gerrit/types.ts b/lib/modules/platform/gerrit/types.ts index 3aae7d47e6831e..0d1b5d90fed354 100644 --- a/lib/modules/platform/gerrit/types.ts +++ b/lib/modules/platform/gerrit/types.ts @@ -34,6 +34,9 @@ export type GerritReviewersType = 'REVIEWER' | 'CC' | 'REMOVED'; export interface GerritChange { branch: string; + /** + * for backwards compatibility + */ hashtags?: string[]; change_id: string; subject: string; diff --git a/lib/modules/platform/gerrit/utils.spec.ts b/lib/modules/platform/gerrit/utils.spec.ts index f5159804473bea..b609fdf7a88c0e 100644 --- a/lib/modules/platform/gerrit/utils.spec.ts +++ b/lib/modules/platform/gerrit/utils.spec.ts @@ -10,6 +10,7 @@ import type { GerritChangeMessageInfo, GerritChangeStatus, GerritLabelTypeInfo, + GerritRevisionInfo, } from './types'; import * as utils from './utils'; import { mapBranchStatusToLabel } from './utils'; @@ -83,7 +84,6 @@ describe('modules/platform/gerrit/utils', () => { const change = partial({ _number: 123456, status: 'NEW', - hashtags: ['other', 'sourceBranch-renovate/dependency-1.x'], branch: 'main', subject: 'Fix for', reviewers: { @@ -91,6 +91,15 @@ describe('modules/platform/gerrit/utils', () => { REMOVED: [], CC: [], }, + current_revision: 'abc', + revisions: { + abc: partial({ + commit: { + message: + 'Some change\n\nRenovate-Branch: renovate/dependency-1.x\nChange-Id: ...', + }, + }), + }, messages: [ partial({ id: '9d78ac236714cee8c2d86e95d638358925cf6853', @@ -122,11 +131,10 @@ describe('modules/platform/gerrit/utils', () => { }); }); - it('map a gerrit change without sourceBranch-tag and reviewers to Pr', () => { + it('map a gerrit change without source branch info and reviewers to Pr', () => { const change = partial({ _number: 123456, status: 'NEW', - hashtags: ['other'], branch: 'main', subject: 'Fix for', }); @@ -145,26 +153,80 @@ describe('modules/platform/gerrit/utils', () => { }); describe('extractSourceBranch()', () => { - it('without hashtags', () => { + it('no commit message', () => { + const change = partial(); + expect(utils.extractSourceBranch(change)).toBeUndefined(); + }); + + it('commit message with no footer', () => { const change = partial({ - hashtags: undefined, + current_revision: 'abc', + revisions: { + abc: partial({ + commit: { + message: 'some message...', + }, + }), + }, }); expect(utils.extractSourceBranch(change)).toBeUndefined(); }); - it('no hashtag with "sourceBranch-" prefix', () => { + it('commit message with footer', () => { const change = partial({ - hashtags: ['other', 'another'], + current_revision: 'abc', + revisions: { + abc: partial({ + commit: { + message: + 'Some change\n\nRenovate-Branch: renovate/dependency-1.x\nChange-Id: ...', + }, + }), + }, }); - expect(utils.extractSourceBranch(change)).toBeUndefined(); + expect(utils.extractSourceBranch(change)).toBe('renovate/dependency-1.x'); + }); + + // for backwards compatibility + it('no commit message but with hashtags', () => { + const change = partial({ + hashtags: ['sourceBranch-renovate/dependency-1.x'], + }); + expect(utils.extractSourceBranch(change)).toBe('renovate/dependency-1.x'); }); - it('hashtag with "sourceBranch-" prefix', () => { + // for backwards compatibility + it('commit message with no footer but with hashtags', () => { const change = partial({ - hashtags: ['other', 'sourceBranch-renovate/dependency-1.x', 'another'], + hashtags: ['sourceBranch-renovate/dependency-1.x'], + current_revision: 'abc', + revisions: { + abc: partial({ + commit: { + message: 'some message...', + }, + }), + }, }); expect(utils.extractSourceBranch(change)).toBe('renovate/dependency-1.x'); }); + + // for backwards compatibility + it('prefers the footer over the hashtags', () => { + const change = partial({ + hashtags: ['sourceBranch-renovate/dependency-1.x'], + current_revision: 'abc', + revisions: { + abc: partial({ + commit: { + message: + 'Some change\n\nRenovate-Branch: renovate/dependency-2.x\nChange-Id: ...', + }, + }), + }, + }); + expect(utils.extractSourceBranch(change)).toBe('renovate/dependency-2.x'); + }); }); describe('findPullRequestBody()', () => { diff --git a/lib/modules/platform/gerrit/utils.ts b/lib/modules/platform/gerrit/utils.ts index d42ec4a463b2e1..3eb28e4b8ece47 100644 --- a/lib/modules/platform/gerrit/utils.ts +++ b/lib/modules/platform/gerrit/utils.ts @@ -2,6 +2,7 @@ import { CONFIG_GIT_URL_UNAVAILABLE } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import type { BranchStatus, PrState } from '../../../types'; import * as hostRules from '../../../util/host-rules'; +import { regEx } from '../../../util/regex'; import { joinUrlParts, parseUrl } from '../../../util/url'; import { hashBody } from '../pr-body'; import type { Pr } from '../types'; @@ -90,9 +91,24 @@ export function mapGerritChangeStateToPrState( return 'all'; } export function extractSourceBranch(change: GerritChange): string | undefined { - return change.hashtags - ?.find((tag) => tag.startsWith('sourceBranch-')) - ?.replace('sourceBranch-', ''); + let sourceBranch: string | undefined = undefined; + + if (change.current_revision) { + const re = regEx(/^Renovate-Branch: (.+)$/m); + const message = change.revisions[change.current_revision]?.commit?.message; + if (message) { + sourceBranch = re.exec(message)?.[1]; + } + } + + // for backwards compatibility + if (!sourceBranch) { + sourceBranch = change.hashtags + ?.find((tag) => tag.startsWith('sourceBranch-')) + ?.replace('sourceBranch-', ''); + } + + return sourceBranch ?? undefined; } export function findPullRequestBody(change: GerritChange): string | undefined { diff --git a/lib/modules/platform/gitlab/index.spec.ts b/lib/modules/platform/gitlab/index.spec.ts index 3878f49d6229f1..f327ec9a5d4ec9 100644 --- a/lib/modules/platform/gitlab/index.spec.ts +++ b/lib/modules/platform/gitlab/index.spec.ts @@ -2228,6 +2228,49 @@ describe('modules/platform/gitlab/index', () => { `); }); + it('adds approval rule to ignore all approvals when platformAutomerge is false', async () => { + await initPlatform('13.3.6-ee'); + httpMock + .scope(gitlabApiHost) + .post('/api/v4/projects/undefined/merge_requests') + .reply(200, { + id: 1, + iid: 12345, + title: 'some title', + }) + .get('/api/v4/projects/undefined/merge_requests/12345/approval_rules') + .reply(200, [ + { + name: 'AnyApproverRule', + rule_type: 'any_approver', + id: 50005, + }, + ]) + .put( + '/api/v4/projects/undefined/merge_requests/12345/approval_rules/50005', + ) + .reply(200); + expect( + await gitlab.createPr({ + sourceBranch: 'some-branch', + targetBranch: 'master', + prTitle: 'some-title', + prBody: 'the-body', + labels: [], + platformOptions: { + usePlatformAutomerge: false, + gitLabIgnoreApprovals: true, + }, + }), + ).toEqual({ + id: 1, + iid: 12345, + number: 12345, + sourceBranch: 'some-branch', + title: 'some title', + }); + }); + it('will modify a rule of type any_approvers, if such a rule exists', async () => { await initPlatform('13.3.6-ee'); httpMock diff --git a/lib/modules/platform/gitlab/index.ts b/lib/modules/platform/gitlab/index.ts index 90eccc206c9640..4a28db74a02aee 100644 --- a/lib/modules/platform/gitlab/index.ts +++ b/lib/modules/platform/gitlab/index.ts @@ -648,12 +648,12 @@ async function tryPrAutomerge( pr: number, platformOptions: PlatformPrOptions | undefined, ): Promise { - if (platformOptions?.usePlatformAutomerge) { - try { - if (platformOptions?.gitLabIgnoreApprovals) { - await ignoreApprovals(pr); - } + try { + if (platformOptions?.gitLabIgnoreApprovals) { + await ignoreApprovals(pr); + } + if (platformOptions?.usePlatformAutomerge) { // https://docs.gitlab.com/ee/api/merge_requests.html#merge-status const desiredDetailedMergeStatus = [ 'mergeable', @@ -730,9 +730,9 @@ async function tryPrAutomerge( } await setTimeout(mergeDelay * attempt ** 2); // exponential backoff } - } catch (err) /* istanbul ignore next */ { - logger.debug({ err }, 'Automerge on PR creation failed'); } + } catch (err) /* istanbul ignore next */ { + logger.debug({ err }, 'Automerge on PR creation failed'); } } diff --git a/lib/modules/platform/gitlab/readme.md b/lib/modules/platform/gitlab/readme.md index 57d48ee3898187..c9293f90d26b38 100644 --- a/lib/modules/platform/gitlab/readme.md +++ b/lib/modules/platform/gitlab/readme.md @@ -8,6 +8,7 @@ To start, create either: - a [Personal Access Token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) for the bot account - or a [Group Access Token](https://docs.gitlab.com/ee/user/group/settings/group_access_tokens.html#bot-users-for-groups) for the bot account +- or a [Deploy Token](https://docs.gitlab.com/ee/user/project/deploy_tokens/index.html) for the bot account The bot account must have at least the Developer role in order to [create issues and merge requests](https://docs.gitlab.com/ee/user/permissions.html#project-members-permissions). If you are using automerge, the bot account must have the appropriate ["Allowed to merge" permission on the protected branch](https://docs.gitlab.com/ee/user/project/protected_branches.html#require-everyone-to-submit-merge-requests-for-a-protected-branch) of your projects. diff --git a/lib/modules/versioning/semver/readme.md b/lib/modules/versioning/semver/readme.md index 81e7f028d73016..01784677288a46 100644 --- a/lib/modules/versioning/semver/readme.md +++ b/lib/modules/versioning/semver/readme.md @@ -1,3 +1,5 @@ -Renovate's Semantic Versioning is a strict/independent implementation of [Semantic Versioning 2.0](https://semver.org). It has been developed to be used in situations where exact-only SemVer support is needed and not npm's extended semver implementation including ranges. +Renovate's `semver` versioning _strictly_ implements the [Semantic Versioning 2.0](https://semver.org) specification. +Because the SemVer 2.0 specification does _not_ allow ranges, Renovate's `semver` versioning also does _not_ support ranges. -Ranges are not supported, in line with the specification. +Only use the `semver` versioning when you mean to follow the full SemVer 2.0 specifications strictly. +If you need a more forgiving variant use `semver-coerced`. diff --git a/lib/util/cache/package/decorator.spec.ts b/lib/util/cache/package/decorator.spec.ts index c8716c410f3313..2cf76c495a1b98 100644 --- a/lib/util/cache/package/decorator.spec.ts +++ b/lib/util/cache/package/decorator.spec.ts @@ -67,6 +67,29 @@ describe('util/cache/package/decorator', () => { expect(setCache).not.toHaveBeenCalled(); }); + it('forces cache if cachePrivatePackages=true', async () => { + GlobalConfig.set({ cachePrivatePackages: true }); + + class Class { + @cache({ + namespace: '_test-namespace', + key: 'key', + cacheable: () => false, + }) + public fn(): Promise { + return getValue(); + } + } + const obj = new Class(); + + expect(await obj.fn()).toBe('111'); + expect(await obj.fn()).toBe('111'); + expect(await obj.fn()).toBe('111'); + + expect(getValue).toHaveBeenCalledTimes(1); + expect(setCache).toHaveBeenCalledOnce(); + }); + it('caches null values', async () => { class Class { @cache({ namespace: '_test-namespace', key: 'key' }) diff --git a/lib/util/cache/package/decorator.ts b/lib/util/cache/package/decorator.ts index f81d01895dbee7..052ac79c79d349 100644 --- a/lib/util/cache/package/decorator.ts +++ b/lib/util/cache/package/decorator.ts @@ -50,7 +50,12 @@ export function cache({ ttlMinutes = 30, }: CacheParameters): Decorator { return decorate(async ({ args, instance, callback, methodName }) => { - if (!cacheable.apply(instance, args)) { + const cachePrivatePackages = GlobalConfig.get( + 'cachePrivatePackages', + false, + ); + const isCacheable = cachePrivatePackages || cacheable.apply(instance, args); + if (!isCacheable) { return callback(); } diff --git a/lib/util/compress.ts b/lib/util/compress.ts index fc3a0e8bbce193..03ecd7ec10988c 100644 --- a/lib/util/compress.ts +++ b/lib/util/compress.ts @@ -4,9 +4,6 @@ import zlib, { constants } from 'node:zlib'; const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); -/** - * @deprecated - */ export async function compressToBase64(input: string): Promise { const buf = await brotliCompress(input, { params: { @@ -17,9 +14,6 @@ export async function compressToBase64(input: string): Promise { return buf.toString('base64'); } -/** - * @deprecated - */ export async function decompressFromBase64(input: string): Promise { const buf = Buffer.from(input, 'base64'); const str = await brotliDecompress(buf); diff --git a/lib/workers/repository/process/lookup/filter.spec.ts b/lib/workers/repository/process/lookup/filter.spec.ts index 0d75534e35ec27..e445a9b0fdffdb 100644 --- a/lib/workers/repository/process/lookup/filter.spec.ts +++ b/lib/workers/repository/process/lookup/filter.spec.ts @@ -1,37 +1,38 @@ import { partial } from '../../../../../test/util'; +import type { Release } from '../../../../modules/datasource/types'; import * as allVersioning from '../../../../modules/versioning'; import { filterVersions } from './filter'; import type { FilterConfig } from './types'; const versioning = allVersioning.get('semver'); -const releases = [ - { - version: '1.0.1', - releaseTimestamp: '2021-01-01T00:00:01.000Z', - }, - { - version: '1.2.0', - releaseTimestamp: '2021-01-03T00:00:00.000Z', - }, - { - version: '2.0.0', - releaseTimestamp: '2021-01-05T00:00:00.000Z', - }, - { - version: '2.1.0', - releaseTimestamp: '2021-01-07T00:00:00.000Z', - }, - // for coverage - { - version: 'invalid.version', - releaseTimestamp: '2021-01-07T00:00:00.000Z', - }, -]; - describe('workers/repository/process/lookup/filter', () => { describe('.filterVersions()', () => { it('should filter versions allowed by semver syntax when allowedVersions is not valid version, range or pypi syntax', () => { + const releases = [ + { + version: '1.0.1', + releaseTimestamp: '2021-01-01T00:00:01.000Z', + }, + { + version: '1.2.0', + releaseTimestamp: '2021-01-03T00:00:00.000Z', + }, + { + version: '2.0.0', + releaseTimestamp: '2021-01-05T00:00:00.000Z', + }, + { + version: '2.1.0', + releaseTimestamp: '2021-01-07T00:00:00.000Z', + }, + // for coverage + { + version: 'invalid.version', + releaseTimestamp: '2021-01-07T00:00:00.000Z', + }, + ] satisfies Release[]; + const config = partial({ ignoreUnstable: false, ignoreDeprecated: false, @@ -41,9 +42,6 @@ describe('workers/repository/process/lookup/filter', () => { const currentVersion = '1.0.0'; const latestVersion = '2.0.0'; - jest.spyOn(versioning, 'isVersion').mockReturnValue(true); - jest.spyOn(versioning, 'isGreaterThan').mockReturnValue(true); - const filteredVersions = filterVersions( config, currentVersion, @@ -57,5 +55,60 @@ describe('workers/repository/process/lookup/filter', () => { { version: '2.1.0', releaseTimestamp: '2021-01-07T00:00:00.000Z' }, ]); }); + + it('allows unstable major upgrades', () => { + const nodeVersioning = allVersioning.get('node'); + + const releases = [ + { version: '1.0.0-alpha' }, + { version: '1.2.3-beta' }, + ] satisfies Release[]; + + const config = partial({ + ignoreUnstable: true, + ignoreDeprecated: true, + }); + const currentVersion = '1.0.0-alpha'; + const latestVersion = '1.2.3-beta'; + + const filteredVersions = filterVersions( + config, + currentVersion, + latestVersion, + releases, + nodeVersioning, + ); + + expect(filteredVersions).toEqual([{ version: '1.2.3-beta' }]); + }); + + it('ignores version insufficient prefixes', () => { + const releases = [ + { version: '1.0.1' }, + { version: '1.2.0' }, + { version: '2.0.0', isDeprecated: true }, + { version: '2.1.0' }, + ] satisfies Release[]; + + const config = partial({ + ignoreUnstable: true, + ignoreDeprecated: true, + }); + const currentVersion = 'v1.0.1'; + const latestVersion = 'v2.0.0'; + + const filteredVersions = filterVersions( + config, + currentVersion, + latestVersion, + releases, + versioning, + ); + + expect(filteredVersions).toEqual([ + { version: '1.2.0' }, + { version: '2.1.0' }, + ]); + }); }); }); diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index a4c15b2f997563..7c2bd0aa2619be 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -9,6 +9,18 @@ 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)) { + return false; + } + + if (release.isStable === false) { + return false; + } + + return true; +} + export function filterVersions( config: FilterConfig, currentVersion: string, @@ -18,42 +30,34 @@ export function filterVersions( ): Release[] { const { ignoreUnstable, ignoreDeprecated, respectLatest, allowedVersions } = config; - function isVersionStable(version: string): boolean { - if (!versioning.isStable(version)) { - return false; - } - // Check if the datasource returned isStable = false - const release = releases.find((r) => r.version === version); - if (release?.isStable === false) { - return false; - } - return true; - } + // istanbul ignore if: shouldn't happen if (!currentVersion) { return []; } // Leave only versions greater than current - let filteredVersions = releases.filter( - (v) => - versioning.isVersion(v.version) && - versioning.isGreaterThan(v.version, currentVersion), + let filteredReleases = releases.filter( + (r) => + versioning.isVersion(r.version) && + versioning.isGreaterThan(r.version, currentVersion), ); - // Don't upgrade from non-deprecated to deprecated - const fromRelease = releases.find( - (release) => release.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), ); - if (ignoreDeprecated && fromRelease && !fromRelease.isDeprecated) { - filteredVersions = filteredVersions.filter((v) => { - const versionRelease = releases.find( - (release) => release.version === v.version, - ); - // TODO: types (#22198) - if (versionRelease!.isDeprecated) { + + // Don't upgrade from non-deprecated to deprecated + if (ignoreDeprecated && currentRelease && !currentRelease.isDeprecated) { + filteredReleases = filteredReleases.filter((r) => { + if (r.isDeprecated) { logger.trace( - `Skipping ${config.depName!}@${v.version} because it is deprecated`, + `Skipping ${config.depName!}@${r.version} because it is deprecated`, ); return false; } @@ -64,12 +68,12 @@ export function filterVersions( if (allowedVersions) { const isAllowedPred = getRegexPredicate(allowedVersions); if (isAllowedPred) { - filteredVersions = filteredVersions.filter(({ version }) => + filteredReleases = filteredReleases.filter(({ version }) => isAllowedPred(version), ); } else if (versioning.isValid(allowedVersions)) { - filteredVersions = filteredVersions.filter((v) => - versioning.matches(v.version, allowedVersions), + filteredReleases = filteredReleases.filter((r) => + versioning.matches(r.version, allowedVersions), ); } else if ( config.versioning !== npmVersioning.id && @@ -79,9 +83,13 @@ export function filterVersions( { depName: config.depName }, 'Falling back to npm semver syntax for allowedVersions', ); - filteredVersions = filteredVersions.filter((v) => + filteredReleases = filteredReleases.filter((r) => semver.satisfies( - semver.valid(v.version) ? v.version : semver.coerce(v.version)!, + semver.valid(r.version) + ? r.version + : /* istanbul ignore next: not reachable, but it's safer to preserve it */ semver.coerce( + r.version, + )!, allowedVersions, ), ); @@ -93,8 +101,8 @@ export function filterVersions( { depName: config.depName }, 'Falling back to pypi syntax for allowedVersions', ); - filteredVersions = filteredVersions.filter((v) => - pep440.matches(v.version, allowedVersions), + filteredReleases = filteredReleases.filter((r) => + pep440.matches(r.version, allowedVersions), ); } else { const error = new Error(CONFIG_VALIDATION); @@ -108,7 +116,7 @@ export function filterVersions( } if (config.followTag) { - return filteredVersions; + return filteredReleases; } if ( @@ -116,37 +124,41 @@ export function filterVersions( latestVersion && !versioning.isGreaterThan(currentVersion, latestVersion) ) { - filteredVersions = filteredVersions.filter( - (v) => !versioning.isGreaterThan(v.version, latestVersion), + filteredReleases = filteredReleases.filter( + (r) => !versioning.isGreaterThan(r.version, latestVersion), ); } if (!ignoreUnstable) { - return filteredVersions; + return filteredReleases; } - if (isVersionStable(currentVersion)) { - return filteredVersions.filter((v) => isVersionStable(v.version)); + if (currentRelease && isReleaseStable(currentRelease, versioning)) { + return filteredReleases.filter((r) => isReleaseStable(r, versioning)); } - // if current is unstable then allow unstable in the current major only - // Allow unstable only in current major - return filteredVersions.filter((v) => { - if (isVersionStable(v.version)) { + const currentMajor = versioning.getMajor(currentVersion); + const currentMinor = versioning.getMinor(currentVersion); + const currentPatch = versioning.getPatch(currentVersion); + + return filteredReleases.filter((r) => { + if (isReleaseStable(r, versioning)) { return true; } - if ( - versioning.getMajor(v.version) !== versioning.getMajor(currentVersion) - ) { + + const major = versioning.getMajor(r.version); + + if (major !== currentMajor) { return false; } - // istanbul ignore if: test passes without touching this + if (versioning.allowUnstableMajorUpgrades) { return true; } - return ( - versioning.getMinor(v.version) === versioning.getMinor(currentVersion) && - versioning.getPatch(v.version) === versioning.getPatch(currentVersion) - ); + + const minor = versioning.getMinor(r.version); + const patch = versioning.getPatch(r.version); + + return minor === currentMinor && patch === currentPatch; }); } diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index d2cc1510f2a817..63aae5d76c4fcc 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -363,6 +363,10 @@ export async function lookupUpdates( ); if (config.isVulnerabilityAlert) { filteredReleases = filteredReleases.slice(0, 1); + logger.debug( + { filteredReleases }, + 'Vulnerability alert found: limiting results to a single release', + ); } const buckets: Record = {}; for (const release of filteredReleases) { @@ -460,7 +464,15 @@ export async function lookupUpdates( versioning.isGreaterThan(compareValue, update.newValue) ) { logger.warn( - { update, allVersions, filteredReleases }, + { + packageName: config.packageName, + currentValue: config.currentValue, + compareValue, + currentVersion: config.currentVersion, + update, + allVersionsLength: allVersions.length, + filteredReleaseVersions: filteredReleases.map((r) => r.version), + }, 'Unexpected downgrade detected: skipping', ); } else { diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index 1bbb0c666e6d32..234e20e40a9185 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -64,6 +64,101 @@ function getTableValues(upgrade: BranchUpgradeConfig): string[] | null { return null; } +function compileCommitMessage(upgrade: BranchUpgradeConfig): string { + if (upgrade.semanticCommits === 'enabled' && !upgrade.commitMessagePrefix) { + logger.trace('Upgrade has semantic commits enabled'); + let semanticPrefix = upgrade.semanticCommitType; + if (upgrade.semanticCommitScope) { + semanticPrefix += `(${template.compile( + upgrade.semanticCommitScope, + upgrade, + )})`; + } + upgrade.commitMessagePrefix = CommitMessage.formatPrefix(semanticPrefix!); + upgrade.toLowerCase = + regEx(/[A-Z]/).exec(upgrade.semanticCommitType!) === null && + !upgrade.semanticCommitType!.startsWith(':'); + } + + // Compile a few times in case there are nested templates + upgrade.commitMessage = template.compile( + upgrade.commitMessage ?? '', + upgrade, + ); + upgrade.commitMessage = template.compile(upgrade.commitMessage, upgrade); + upgrade.commitMessage = template.compile(upgrade.commitMessage, upgrade); + // istanbul ignore if + if (upgrade.commitMessage !== sanitize(upgrade.commitMessage)) { + logger.debug( + { branchName: upgrade.branchName }, + 'Secrets exposed in commit message', + ); + throw new Error(CONFIG_SECRETS_EXPOSED); + } + upgrade.commitMessage = upgrade.commitMessage.trim(); // Trim exterior whitespace + upgrade.commitMessage = upgrade.commitMessage.replace(regEx(/\s+/g), ' '); // Trim extra whitespace inside string + upgrade.commitMessage = upgrade.commitMessage.replace( + regEx(/to vv(\d)/), + 'to v$1', + ); + if (upgrade.toLowerCase && upgrade.commitMessageLowerCase !== 'never') { + // We only need to lowercase the first line + const splitMessage = upgrade.commitMessage.split(newlineRegex); + splitMessage[0] = splitMessage[0].toLowerCase(); + upgrade.commitMessage = splitMessage.join('\n'); + } + + logger.trace(`commitMessage: ` + JSON.stringify(upgrade.commitMessage)); + return upgrade.commitMessage; +} + +function compilePrTitle( + upgrade: BranchUpgradeConfig, + commitMessage: string, +): void { + if (upgrade.prTitle) { + upgrade.prTitle = template.compile(upgrade.prTitle, upgrade); + upgrade.prTitle = template.compile(upgrade.prTitle, upgrade); + upgrade.prTitle = template + .compile(upgrade.prTitle, upgrade) + .trim() + .replace(regEx(/\s+/g), ' '); + // istanbul ignore if + if (upgrade.prTitle !== sanitize(upgrade.prTitle)) { + logger.debug( + { branchName: upgrade.branchName }, + 'Secrets were exposed in PR title', + ); + throw new Error(CONFIG_SECRETS_EXPOSED); + } + if (upgrade.toLowerCase && upgrade.commitMessageLowerCase !== 'never') { + upgrade.prTitle = upgrade.prTitle.toLowerCase(); + } + } else { + [upgrade.prTitle] = commitMessage.split(newlineRegex); + } + if (!upgrade.prTitleStrict) { + upgrade.prTitle += upgrade.hasBaseBranches ? ' ({{baseBranch}})' : ''; + if (upgrade.isGroup) { + upgrade.prTitle += + upgrade.updateType === 'major' && upgrade.separateMajorMinor + ? ' (major)' + : ''; + upgrade.prTitle += + upgrade.updateType === 'minor' && upgrade.separateMinorPatch + ? ' (minor)' + : ''; + upgrade.prTitle += + upgrade.updateType === 'patch' && upgrade.separateMinorPatch + ? ' (patch)' + : ''; + } + } + // Compile again to allow for nested templates + upgrade.prTitle = template.compile(upgrade.prTitle, upgrade); + logger.trace(`prTitle: ` + JSON.stringify(upgrade.prTitle)); +} + export function generateBranchConfig( upgrades: BranchUpgradeConfig[], ): BranchConfig { @@ -261,83 +356,8 @@ export function generateBranchConfig( }; // TODO: fixme (#9666) // Use templates to generate strings - if (config.semanticCommits === 'enabled' && !config.commitMessagePrefix) { - logger.trace('Upgrade has semantic commits enabled'); - let semanticPrefix = config.semanticCommitType; - if (config.semanticCommitScope) { - semanticPrefix += `(${template.compile(config.semanticCommitScope, config)})`; - } - config.commitMessagePrefix = CommitMessage.formatPrefix(semanticPrefix!); - config.toLowerCase = - regEx(/[A-Z]/).exec(config.semanticCommitType!) === null && - !config.semanticCommitType!.startsWith(':'); - } - // Compile a few times in case there are nested templates - config.commitMessage = template.compile(config.commitMessage ?? '', config); - config.commitMessage = template.compile(config.commitMessage, config); - config.commitMessage = template.compile(config.commitMessage, config); - // istanbul ignore if - if (config.commitMessage !== sanitize(config.commitMessage)) { - logger.debug( - { branchName: config.branchName }, - 'Secrets exposed in commit message', - ); - throw new Error(CONFIG_SECRETS_EXPOSED); - } - config.commitMessage = config.commitMessage.trim(); // Trim exterior whitespace - config.commitMessage = config.commitMessage.replace(regEx(/\s+/g), ' '); // Trim extra whitespace inside string - config.commitMessage = config.commitMessage.replace( - regEx(/to vv(\d)/), - 'to v$1', - ); - if (config.toLowerCase && config.commitMessageLowerCase !== 'never') { - // We only need to lowercase the first line - const splitMessage = config.commitMessage.split(newlineRegex); - splitMessage[0] = splitMessage[0].toLowerCase(); - config.commitMessage = splitMessage.join('\n'); - } - logger.trace(`commitMessage: ` + JSON.stringify(config.commitMessage)); - if (config.prTitle) { - config.prTitle = template.compile(config.prTitle, config); - config.prTitle = template.compile(config.prTitle, config); - config.prTitle = template - .compile(config.prTitle, config) - .trim() - .replace(regEx(/\s+/g), ' '); - // istanbul ignore if - if (config.prTitle !== sanitize(config.prTitle)) { - logger.debug( - { branchName: config.branchName }, - 'Secrets were exposed in PR title', - ); - throw new Error(CONFIG_SECRETS_EXPOSED); - } - if (config.toLowerCase && config.commitMessageLowerCase !== 'never') { - config.prTitle = config.prTitle.toLowerCase(); - } - } else { - [config.prTitle] = config.commitMessage.split(newlineRegex); - } - if (!config.prTitleStrict) { - config.prTitle += config.hasBaseBranches ? ' ({{baseBranch}})' : ''; - if (config.isGroup) { - config.prTitle += - config.updateType === 'major' && config.separateMajorMinor - ? ' (major)' - : ''; - config.prTitle += - config.updateType === 'minor' && config.separateMinorPatch - ? ' (minor)' - : ''; - config.prTitle += - config.updateType === 'patch' && config.separateMinorPatch - ? ' (patch)' - : ''; - } - } - // Compile again to allow for nested templates - config.prTitle = template.compile(config.prTitle, config); - logger.trace(`prTitle: ` + JSON.stringify(config.prTitle)); + const commitMessage = compileCommitMessage(config); + compilePrTitle(config, commitMessage); config.dependencyDashboardApproval = config.upgrades.some( (upgrade) => upgrade.dependencyDashboardApproval, diff --git a/package.json b/package.json index 3175235761d028..b209d9fa758f32 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "prepare": "run-s 'prepare:*'", "prepare:husky": "husky", "prepare:generate": "run-s 'generate:*'", - "prepare:re2": "node tools/check-re2.mjs", + "prepare:deps": "node tools/prepare-deps.mjs", "prestart": "run-s 'generate:*'", "pretest": "run-s 'generate:*'", "prettier": "prettier --cache --check '**/*.{ts,js,mjs,json,md,yml}'", @@ -142,12 +142,12 @@ "node": "^18.12.0 || >=20.0.0" }, "dependencies": { - "@aws-sdk/client-codecommit": "3.588.0", - "@aws-sdk/client-ec2": "3.588.0", - "@aws-sdk/client-ecr": "3.588.0", - "@aws-sdk/client-rds": "3.588.0", - "@aws-sdk/client-s3": "3.588.0", - "@aws-sdk/credential-providers": "3.588.0", + "@aws-sdk/client-codecommit": "3.606.0", + "@aws-sdk/client-ec2": "3.606.0", + "@aws-sdk/client-ecr": "3.606.0", + "@aws-sdk/client-rds": "3.606.0", + "@aws-sdk/client-s3": "3.606.0", + "@aws-sdk/credential-providers": "3.606.0", "@breejs/later": "4.2.0", "@cdktf/hcl2json": "0.20.7", "@opentelemetry/api": "1.9.0", @@ -172,7 +172,7 @@ "aggregate-error": "3.1.0", "auth-header": "1.0.0", "aws4": "1.13.0", - "azure-devops-node-api": "13.0.0", + "azure-devops-node-api": "14.0.1", "bunyan": "1.8.15", "cacache": "18.0.3", "cacheable-lookup": "5.0.4", @@ -211,13 +211,13 @@ "json-stringify-pretty-compact": "3.0.0", "json5": "2.2.3", "jsonata": "2.0.5", - "jsonc-parser": "3.2.1", + "jsonc-parser": "3.3.1", "klona": "2.0.6", - "lru-cache": "10.2.2", + "lru-cache": "10.3.0", "luxon": "3.4.4", "markdown-it": "14.1.0", "markdown-table": "2.0.0", - "minimatch": "9.0.4", + "minimatch": "9.0.5", "moo": "0.5.2", "ms": "2.1.3", "nanoid": "3.3.7", @@ -239,7 +239,7 @@ "simple-git": "3.25.0", "slugify": "1.6.6", "source-map-support": "0.5.21", - "toml-eslint-parser": "0.9.3", + "toml-eslint-parser": "0.10.0", "traverse": "0.6.9", "tslib": "2.6.3", "upath": "2.0.1", @@ -250,7 +250,7 @@ "zod": "3.23.8" }, "optionalDependencies": { - "better-sqlite3": "9.6.0", + "better-sqlite3": "11.1.2", "openpgp": "5.11.2", "re2": "1.21.3" }, @@ -265,7 +265,7 @@ "@openpgp/web-stream-tools": "0.0.14", "@renovate/eslint-plugin": "file:tools/eslint", "@semantic-release/exec": "6.0.3", - "@swc/core": "1.6.5", + "@swc/core": "1.6.12", "@types/auth-header": "1.0.6", "@types/aws4": "1.11.6", "@types/better-sqlite3": "7.6.10", @@ -287,7 +287,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.5", + "@types/lodash": "4.17.6", "@types/luxon": "3.4.2", "@types/markdown-it": "14.0.1", "@types/markdown-table": "2.0.0", @@ -312,7 +312,7 @@ "aws-sdk-client-mock": "4.0.1", "callsite": "1.0.0", "common-tags": "1.8.2", - "conventional-changelog-conventionalcommits": "7.0.2", + "conventional-changelog-conventionalcommits": "8.0.0", "emojibase-data": "15.3.2", "eslint": "8.57.0", "eslint-formatter-gha": "1.5.0", @@ -338,7 +338,7 @@ "nyc": "17.0.0", "pretty-format": "29.7.0", "rimraf": "5.0.7", - "semantic-release": "22.0.12", + "semantic-release": "24.0.0", "tar": "6.2.1", "tmp-promise": "3.0.3", "ts-jest": "29.1.5", @@ -353,10 +353,9 @@ "renovate-schema.json" ], "pnpm": { - "neverBuiltDependencies": [ - "dtrace-provider" - ], + "ignoredOptionalDependencies": ["dtrace-provider", "moment", "mv", "safe-json-stringify"], "overrides": { + "@semantic-release/github>@octokit/plugin-paginate-rest": "11.3.0", "@types/linkify-it": "<5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 724275ce2e6882..95c49ae317ac11 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: + '@semantic-release/github>@octokit/plugin-paginate-rest': 11.3.0 '@types/linkify-it': <5.0.0 importers: @@ -12,23 +13,23 @@ importers: .: dependencies: '@aws-sdk/client-codecommit': - specifier: 3.588.0 - version: 3.588.0 + specifier: 3.606.0 + version: 3.606.0 '@aws-sdk/client-ec2': - specifier: 3.588.0 - version: 3.588.0 + specifier: 3.606.0 + version: 3.606.0 '@aws-sdk/client-ecr': - specifier: 3.588.0 - version: 3.588.0 + specifier: 3.606.0 + version: 3.606.0 '@aws-sdk/client-rds': - specifier: 3.588.0 - version: 3.588.0 + specifier: 3.606.0 + version: 3.606.0 '@aws-sdk/client-s3': - specifier: 3.588.0 - version: 3.588.0 + specifier: 3.606.0 + version: 3.606.0 '@aws-sdk/credential-providers': - specifier: 3.588.0 - version: 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) + specifier: 3.606.0 + version: 3.606.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)) '@breejs/later': specifier: 4.2.0 version: 4.2.0 @@ -102,8 +103,8 @@ importers: specifier: 1.13.0 version: 1.13.0 azure-devops-node-api: - specifier: 13.0.0 - version: 13.0.0 + specifier: 14.0.1 + version: 14.0.1 bunyan: specifier: 1.8.15 version: 1.8.15 @@ -219,14 +220,14 @@ importers: specifier: 2.0.5 version: 2.0.5 jsonc-parser: - specifier: 3.2.1 - version: 3.2.1 + specifier: 3.3.1 + version: 3.3.1 klona: specifier: 2.0.6 version: 2.0.6 lru-cache: - specifier: 10.2.2 - version: 10.2.2 + specifier: 10.3.0 + version: 10.3.0 luxon: specifier: 3.4.4 version: 3.4.4 @@ -237,8 +238,8 @@ importers: specifier: 2.0.0 version: 2.0.0 minimatch: - specifier: 9.0.4 - version: 9.0.4 + specifier: 9.0.5 + version: 9.0.5 moo: specifier: 0.5.2 version: 0.5.2 @@ -303,8 +304,8 @@ importers: specifier: 0.5.21 version: 0.5.21 toml-eslint-parser: - specifier: 0.9.3 - version: 0.9.3 + specifier: 0.10.0 + version: 0.10.0 traverse: specifier: 0.6.9 version: 0.6.9 @@ -331,8 +332,8 @@ importers: version: 3.23.8 optionalDependencies: better-sqlite3: - specifier: 9.6.0 - version: 9.6.0 + specifier: 11.1.2 + version: 11.1.2 openpgp: specifier: 5.11.2 version: 5.11.2 @@ -369,10 +370,10 @@ importers: version: '@renovatebot/eslint-plugin@file:tools/eslint' '@semantic-release/exec': specifier: 6.0.3 - version: 6.0.3(semantic-release@22.0.12(typescript@5.4.5)) + version: 6.0.3(semantic-release@24.0.0(typescript@5.4.5)) '@swc/core': - specifier: 1.6.5 - version: 1.6.5 + specifier: 1.6.12 + version: 1.6.12 '@types/auth-header': specifier: 1.0.6 version: 1.0.6 @@ -437,8 +438,8 @@ importers: specifier: 1.0.3 version: 1.0.3 '@types/lodash': - specifier: 4.17.5 - version: 4.17.5 + specifier: 4.17.6 + version: 4.17.6 '@types/luxon': specifier: 3.4.2 version: 3.4.2 @@ -512,8 +513,8 @@ importers: specifier: 1.8.2 version: 1.8.2 conventional-changelog-conventionalcommits: - specifier: 7.0.2 - version: 7.0.2 + specifier: 8.0.0 + version: 8.0.0 emojibase-data: specifier: 15.3.2 version: 15.3.2(emojibase@15.3.1) @@ -531,7 +532,7 @@ importers: version: 2.29.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jest: specifier: 27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) + version: 27.9.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@8.57.0) @@ -555,16 +556,16 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-extended: specifier: 4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5))) + version: 4.0.2(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5))) 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@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) + version: 3.0.7(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) jest-snapshot: specifier: 29.7.0 version: 29.7.0 @@ -590,8 +591,8 @@ importers: specifier: 5.0.7 version: 5.0.7 semantic-release: - specifier: 22.0.12 - version: 22.0.12(typescript@5.4.5) + specifier: 24.0.0 + version: 24.0.0(typescript@5.4.5) tar: specifier: 6.2.1 version: 6.2.1 @@ -600,10 +601,10 @@ importers: version: 3.0.3 ts-jest: specifier: 29.1.5 - version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5) type-fest: specifier: 4.20.1 version: 4.20.1 @@ -623,208 +624,202 @@ packages: '@arcanis/slice-ansi@1.1.1': resolution: {integrity: sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==} - '@aws-crypto/crc32@3.0.0': - resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} - '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} - '@aws-crypto/crc32c@3.0.0': - resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} - - '@aws-crypto/ie11-detection@3.0.0': - resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - '@aws-crypto/sha1-browser@3.0.0': - resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - '@aws-crypto/sha256-browser@3.0.0': - resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - '@aws-crypto/sha256-js@3.0.0': - resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} - - '@aws-crypto/supports-web-crypto@3.0.0': - resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} - '@aws-crypto/util@3.0.0': - resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-codecommit@3.588.0': - resolution: {integrity: sha512-XVy2KNp5qETTTbpGBz/Zp7bysLtQb3tQCAxNr31mCdAH2wQeqqhYMPGCguCvK4fwkD3RL4xZT0xbnZXeFGX/0A==} + '@aws-sdk/client-codecommit@3.606.0': + resolution: {integrity: sha512-zttJ22j5kwGDL0yj4haXNjMMVT06gUm7mqzPzc8rK3N4MSEVds5Q42vF5LeYcBjZ4OhnZg7zmVHL0dCtdsa8dQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-cognito-identity@3.588.0': - resolution: {integrity: sha512-UrucggmHTpcR1UmAyA6OtL5ezCGuC34fBGnYSNxgXzmIGtvGKwYZhu580NPWV+vW1MjXnELQxppR/jCuD4HxPg==} + '@aws-sdk/client-cognito-identity@3.606.0': + resolution: {integrity: sha512-CJ3kovUg7HAn3trqo0WxVw3PJoaHxiGU1U+Ok8Vx/sL81+auyyiasT09M/NcchRqwAooKvUi44sVD0ih7Zi9Nw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-ec2@3.588.0': - resolution: {integrity: sha512-0EwJUG/Dl8CIRutINeucNZQCKmaIgqzzMNWiD+bEfqFVvZkZWbb6dP24fzxoPLrvV71ZJauf0MxV+/tMIxT+9g==} + '@aws-sdk/client-ec2@3.606.0': + resolution: {integrity: sha512-7CxvJNs3I2PQsyAWCBtRy7TjtdA+/Jf1BhIO1hlCKh7JvlcUY0XNpgpg7a3VWm7UTarh9J8SH6aDIMROS2vkXw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-ecr@3.588.0': - resolution: {integrity: sha512-3UrJ+5VQ6YV+fQM7aq22MctuNURn6lt00HHiqjZQoDkpDJUVGdkFdduPRyHA0OxQNYpvP0cEtv5WOAVtEFjKmQ==} + '@aws-sdk/client-ecr@3.606.0': + resolution: {integrity: sha512-WwSeHXrCCYx48IxrwBnGl4t0+hYhka151R/8QyPTMINB2TcVBqbBsOGqV9wWJh3d0vK+hOhSJoOoQWN1XnkQYQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-rds@3.588.0': - resolution: {integrity: sha512-7TtKNskpOuyulnbgVufq7XAo6tmHjxmSjk8TOD5OsO8UX8xinokk3xyTN1unr2zCPleZGUEnfJKEduERbz9Dlw==} + '@aws-sdk/client-rds@3.606.0': + resolution: {integrity: sha512-cedTB6Tu/komKp+kxqcVZx3mtOci2bpAJfeOCNBLkeWMaAnwEvUYRvoO2A2wJrvaLkDwT1zo2Iyl3FaXk3KQjw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-s3@3.588.0': - resolution: {integrity: sha512-MyJs3sbgRtVOdT2xxdg/CmLk+t+dMg26nfEZucBFeJKFAHfTA74sjef9y+GQ2xFUNq+kqG1CnP8JGMiGx2ht0w==} + '@aws-sdk/client-s3@3.606.0': + resolution: {integrity: sha512-IGM/E8kVk/NY/kZwLdmGRsX1QYtuPljoNutM5kBRdtGahQL5VwVAve5PElPUArcsTkfTyW+LfXpznDeeHxMCcA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso-oidc@3.588.0': - resolution: {integrity: sha512-CTbgtLSg0y2jIOtESuQKkRIqRe/FQmKuyzFWc+Qy6yGcbk1Pyusfz2BC+GGwpYU+1BlBBSNnLQHpx3XY87+aSA==} + '@aws-sdk/client-sso-oidc@3.606.0': + resolution: {integrity: sha512-gL1FHPS6hwgMNS/A+Qh5bUyHOeRVOqdb7c6+i+9gR3wtGvt2lvoSm8w5DhS08Xiiacz2AqYRDEapp0xuyCrbBQ==} engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.606.0 - '@aws-sdk/client-sso@3.588.0': - resolution: {integrity: sha512-zKS+xUkBLfwjbh77ZjtRUoG/vR/fyDteSE6rOAzwlmHQL8p+QUX+zNUNvCInvPi62zGBhEwXOvzs8zvnT4NzfQ==} + '@aws-sdk/client-sso@3.598.0': + resolution: {integrity: sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sts@3.588.0': - resolution: {integrity: sha512-UIMjcUikgG9NIENQxSyJNTHMD8TaTfK6Jjf1iuZSyQRyTrcGy0/xcDxrmwZQFAPkOPUf6w9KqydLkMLcYOBdPQ==} + '@aws-sdk/client-sts@3.606.0': + resolution: {integrity: sha512-b11mAhjrkm3MMiAPoMGcmd6vsaz2120lg8rHG/NZCo9vB1K6Kc7WP+a1Q05TRMseer2egTtpWJfn44aVO97VqA==} engines: {node: '>=16.0.0'} - '@aws-sdk/core@3.588.0': - resolution: {integrity: sha512-O1c2+9ce46Z+iiid+W3iC1IvPbfIo5ev9CBi54GdNB9SaI8/3+f8MJcux0D6c9toCF0ArMersN/gp8ek57e9uQ==} + '@aws-sdk/core@3.598.0': + resolution: {integrity: sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.588.0': - resolution: {integrity: sha512-KGwNFx2iKk/cY5T7J6BZ3Cvrrf45MdfKlBx+maNAA4NaX2bjL2BuA4Jvp+rxc2b2BsrKEUZUBdaMsLK+7KLTGQ==} + '@aws-sdk/credential-provider-cognito-identity@3.606.0': + resolution: {integrity: sha512-4wGvXilFLkozs4/dMnn9NvxZbL9oyyReoF9aR3kGUZ0QVO8cCBp/Zkr8IXZifhVBo9/esJdMFnR9lEXR7Yuleg==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-env@3.587.0': - resolution: {integrity: sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==} + '@aws-sdk/credential-provider-env@3.598.0': + resolution: {integrity: sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-http@3.587.0': - resolution: {integrity: sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==} + '@aws-sdk/credential-provider-http@3.598.0': + resolution: {integrity: sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-ini@3.588.0': - resolution: {integrity: sha512-tP/YmEKvYpmp7pCR2OuhoOhAOtm6BbZ1hbeG9Sw9RFZi55dbGPHqMmfvvzHFAGsJ20z4/oDS+UnHaWVhRnV82w==} + '@aws-sdk/credential-provider-ini@3.598.0': + resolution: {integrity: sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.588.0 + '@aws-sdk/client-sts': ^3.598.0 - '@aws-sdk/credential-provider-node@3.588.0': - resolution: {integrity: sha512-8s4Ruo6q1YIrj8AZKBiUQG42051ytochDMSqdVOEZGxskfvmt2XALyi5SsWd0Ve3zR95zi+EtRBNPn2EU8sQpA==} + '@aws-sdk/credential-provider-node@3.600.0': + resolution: {integrity: sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-process@3.587.0': - resolution: {integrity: sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==} + '@aws-sdk/credential-provider-process@3.598.0': + resolution: {integrity: sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-sso@3.588.0': - resolution: {integrity: sha512-1GstMCyFzenVeppK7hWazMvo3P1DXKP70XkXAjH8H2ELBVg5X8Zt043cnQ7CMt4XjCV+ettHAtc9kz/gJTkDNQ==} + '@aws-sdk/credential-provider-sso@3.598.0': + resolution: {integrity: sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-web-identity@3.587.0': - resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} + '@aws-sdk/credential-provider-web-identity@3.598.0': + resolution: {integrity: sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.587.0 + '@aws-sdk/client-sts': ^3.598.0 - '@aws-sdk/credential-providers@3.588.0': - resolution: {integrity: sha512-AcxPB/mU6N9ZJnDx0eM62nu7BPQYrnllYoDa9H32o9zUvy3n3z6K4x5FT5hjAbDkjPKeHiRLrokwNuLMHTYdWg==} + '@aws-sdk/credential-providers@3.606.0': + resolution: {integrity: sha512-34hswGNDWBFvp4Hi4Gv9DIJ4Ks0Nbg8w3emFsPVHLqqI6X2Wd0hJTf+mi1kMhy/AQXt5LisKLw6wjNIKD2+KGg==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.587.0': - resolution: {integrity: sha512-HkFXLPl8pr6BH/Q0JpOESqEKL0ZK3sk7aSZ1S6GE4RXET7H5R94THULXqQFZzD48gZcyFooO/yNKZTqrZFaWKg==} + '@aws-sdk/middleware-bucket-endpoint@3.598.0': + resolution: {integrity: sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-expect-continue@3.577.0': - resolution: {integrity: sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==} + '@aws-sdk/middleware-expect-continue@3.598.0': + resolution: {integrity: sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.587.0': - resolution: {integrity: sha512-URMwp/budDvKhIvZ4a6zIBfFTun/iDlPWXqsGKYjEtHt8jz27OSjCZtDtIeqW4WTBdKL8KZgQcl+DdaE5M1qiQ==} + '@aws-sdk/middleware-flexible-checksums@3.598.0': + resolution: {integrity: sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-host-header@3.577.0': - resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==} + '@aws-sdk/middleware-host-header@3.598.0': + resolution: {integrity: sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-location-constraint@3.577.0': - resolution: {integrity: sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==} + '@aws-sdk/middleware-location-constraint@3.598.0': + resolution: {integrity: sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-logger@3.577.0': - resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==} + '@aws-sdk/middleware-logger@3.598.0': + resolution: {integrity: sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-recursion-detection@3.577.0': - resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==} + '@aws-sdk/middleware-recursion-detection@3.598.0': + resolution: {integrity: sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-ec2@3.587.0': - resolution: {integrity: sha512-mbmgBdw5JVq6zDU54MM6ICSK2ngIkIsQJ/spsy27lXPskQwMuLG5BOYMQf7in5xfMjmnBT9Cxnk/YqaXN1K3+A==} + '@aws-sdk/middleware-sdk-ec2@3.598.0': + resolution: {integrity: sha512-s46eDkfA7/sqdNEhwvqkuFyo4eWhBAH7CnNJL9W8WBEveu8AQ0qFw5TK0xsdWNAxpe5BETys2qO/i+g+5BsG0g==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-rds@3.587.0': - resolution: {integrity: sha512-JvFSoPxExQChGGWyIQw11dzYsVJI0k4MbD3h/T6tSoStKSe8TLX97vAOu/UJzW3O9bYl3035fIOt7PNyEWDcZQ==} + '@aws-sdk/middleware-sdk-rds@3.598.0': + resolution: {integrity: sha512-R2ZuXb220wLBcu9/MilGVRMxJrsXRq7JBBzp2f7sJNiExX7UBJcXZox7KGzYhLNBGdBpoKtfkdMlmGPeYLCc5Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-s3@3.587.0': - resolution: {integrity: sha512-vtXTGEiw1E9Fax4LmcU2Z208gbrC8ShrdsSLmGcRPpu5NPOGBFBSDG5sy5EDNClrFxIl/Le8coQnD0EDBtx+uQ==} + '@aws-sdk/middleware-sdk-s3@3.598.0': + resolution: {integrity: sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-signing@3.587.0': - resolution: {integrity: sha512-tiZaTDj4RvhXGRAlncFn7CSEfL3iNPO67WSaxAq+Ls5j1VgczPhu5262cWONNoMgth3nXR1hhLC4ITSl/a6AzA==} + '@aws-sdk/middleware-signing@3.598.0': + resolution: {integrity: sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-ssec@3.577.0': - resolution: {integrity: sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==} + '@aws-sdk/middleware-ssec@3.598.0': + resolution: {integrity: sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-user-agent@3.587.0': - resolution: {integrity: sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==} + '@aws-sdk/middleware-user-agent@3.598.0': + resolution: {integrity: sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==} engines: {node: '>=16.0.0'} - '@aws-sdk/region-config-resolver@3.587.0': - resolution: {integrity: sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==} + '@aws-sdk/region-config-resolver@3.598.0': + resolution: {integrity: sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==} engines: {node: '>=16.0.0'} - '@aws-sdk/signature-v4-multi-region@3.587.0': - resolution: {integrity: sha512-TR9+ZSjdXvXUz54ayHcCihhcvxI9W7102J1OK6MrLgBlPE7uRhAx42BR9L5lLJ86Xj3LuqPWf//o9d/zR9WVIg==} + '@aws-sdk/signature-v4-multi-region@3.598.0': + resolution: {integrity: sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA==} engines: {node: '>=16.0.0'} - '@aws-sdk/token-providers@3.587.0': - resolution: {integrity: sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==} + '@aws-sdk/token-providers@3.598.0': + resolution: {integrity: sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.587.0 + '@aws-sdk/client-sso-oidc': ^3.598.0 - '@aws-sdk/types@3.577.0': - resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==} + '@aws-sdk/types@3.598.0': + resolution: {integrity: sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==} engines: {node: '>=16.0.0'} '@aws-sdk/util-arn-parser@3.568.0': resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-endpoints@3.587.0': - resolution: {integrity: sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==} + '@aws-sdk/util-endpoints@3.598.0': + resolution: {integrity: sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-format-url@3.577.0': - resolution: {integrity: sha512-SyEGC2J+y/krFRuPgiF02FmMYhqbiIkOjDE6k4nYLJQRyS6XEAGxZoG+OHeOVEM+bsDgbxokXZiM3XKGu6qFIg==} + '@aws-sdk/util-format-url@3.598.0': + resolution: {integrity: sha512-1X0PlREk5K6tQg8rFZOjoKVtDyI1WgbKJNCymHhMye6STryY6fhuuayKstiDThkqDYxqahjUJz/Tl2p5W3rbcw==} engines: {node: '>=16.0.0'} '@aws-sdk/util-locate-window@3.568.0': resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-user-agent-browser@3.577.0': - resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==} + '@aws-sdk/util-user-agent-browser@3.598.0': + resolution: {integrity: sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==} - '@aws-sdk/util-user-agent-node@3.587.0': - resolution: {integrity: sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==} + '@aws-sdk/util-user-agent-node@3.598.0': + resolution: {integrity: sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==} engines: {node: '>=16.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -832,11 +827,8 @@ packages: aws-crt: optional: true - '@aws-sdk/util-utf8-browser@3.259.0': - resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} - - '@aws-sdk/xml-builder@3.575.0': - resolution: {integrity: sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==} + '@aws-sdk/xml-builder@3.598.0': + resolution: {integrity: sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q==} engines: {node: '>=16.0.0'} '@babel/code-frame@7.24.7': @@ -1221,10 +1213,22 @@ packages: resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} + engines: {node: '>= 18'} + '@octokit/core@5.2.0': resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} + '@octokit/core@6.1.2': + resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.1': + resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} + engines: {node: '>= 18'} + '@octokit/endpoint@9.0.5': resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} @@ -1233,20 +1237,21 @@ packages: resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} - '@octokit/openapi-types@20.0.0': - resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + '@octokit/graphql@8.1.1': + resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} + engines: {node: '>= 18'} '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/plugin-paginate-rest@11.3.1': - resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + '@octokit/plugin-paginate-rest@11.3.0': + resolution: {integrity: sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': '>=6' - '@octokit/plugin-paginate-rest@9.2.1': - resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} + '@octokit/plugin-paginate-rest@11.3.1': + resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '5' @@ -1263,33 +1268,38 @@ packages: peerDependencies: '@octokit/core': ^5 - '@octokit/plugin-retry@6.0.1': - resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} + '@octokit/plugin-retry@7.1.1': + resolution: {integrity: sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=5' + '@octokit/core': '>=6' - '@octokit/plugin-throttling@8.2.0': - resolution: {integrity: sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==} + '@octokit/plugin-throttling@9.3.0': + resolution: {integrity: sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': ^5.0.0 + '@octokit/core': ^6.0.0 '@octokit/request-error@5.1.0': resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} + '@octokit/request-error@6.1.1': + resolution: {integrity: sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==} + engines: {node: '>= 18'} + '@octokit/request@8.4.0': resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} + '@octokit/request@9.1.1': + resolution: {integrity: sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==} + engines: {node: '>= 18'} + '@octokit/rest@20.1.1': resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} engines: {node: '>= 18'} - '@octokit/types@12.6.0': - resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.5.0': resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} @@ -1543,9 +1553,12 @@ packages: '@seald-io/nedb@4.0.4': resolution: {integrity: sha512-CUNcMio7QUHTA+sIJ/DC5JzVNNsHe743TPmC4H5Gij9zDLMbmrCT2li3eVB72/gF63BPS8pWEZrjlAMRKA8FDw==} - '@semantic-release/commit-analyzer@11.1.0': - resolution: {integrity: sha512-cXNTbv3nXR2hlzHjAMgbuiQVtvWHTlwwISt60B+4NZv01y/QRY7p2HcJm8Eh2StzcTJoNnflvKjHH/cjFS7d5g==} - engines: {node: ^18.17 || >=20.6.1} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@semantic-release/commit-analyzer@13.0.0': + resolution: {integrity: sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==} + engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -1563,21 +1576,21 @@ packages: peerDependencies: semantic-release: '>=18.0.0' - '@semantic-release/github@9.2.6': - resolution: {integrity: sha512-shi+Lrf6exeNZF+sBhK+P011LSbhmIAoUEgEY6SsxF8irJ+J2stwI5jkyDQ+4gzYyDImzV6LCKdYB9FXnQRWKA==} - engines: {node: '>=18'} + '@semantic-release/github@10.0.7': + resolution: {integrity: sha512-J7JiFvOu/8QKqFF5FDTk/k19Z/Jku4LdDof/+LsjaGgLOISJR7TL66q89c2YXV6Dh5Jw5VmiT4uK4q6SSfbQGA==} + engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' - '@semantic-release/npm@11.0.3': - resolution: {integrity: sha512-KUsozQGhRBAnoVg4UMZj9ep436VEGwT536/jwSqB7vcEfA6oncCUU7UIYTRdLx7GvTtqn0kBjnkfLVkcnBa2YQ==} - engines: {node: ^18.17 || >=20} + '@semantic-release/npm@12.0.1': + resolution: {integrity: sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==} + engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' - '@semantic-release/release-notes-generator@12.1.0': - resolution: {integrity: sha512-g6M9AjUKAZUZnxaJZnouNBeDNTCUrJ5Ltj+VJ60gJeDaRRahcHsry9HW8yKrnKkKNkx5lbWiEP1FPMqVNQz8Kg==} - engines: {node: ^18.17 || >=20.6.1} + '@semantic-release/release-notes-generator@14.0.1': + resolution: {integrity: sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==} + engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -1592,6 +1605,10 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@2.0.0': resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} @@ -1813,68 +1830,68 @@ packages: resolution: {integrity: sha512-wwnrVQdjQxvWGOAiLmqlEhENGCcDIN+XJ/+usPOgSZObAslrCXgKlkX7rNVwIWW2RhPguTKthvF+4AoO0Z6KpA==} engines: {node: '>=16.0.0'} - '@swc/core-darwin-arm64@1.6.5': - resolution: {integrity: sha512-RGQhMdni2v1/ANQ/2K+F+QYdzaucekYBewZcX1ogqJ8G5sbPaBdYdDN1qQ4kHLCIkPtGP6qC7c71qPEqL2RidQ==} + '@swc/core-darwin-arm64@1.6.12': + resolution: {integrity: sha512-aVDdQ5BNn6pFedCZIE/756rGo+6P7ue1sYtTseBlGe94yfj6jr0I7nAffBnXAA9cbQ46aMtmKvVfv023HmUwNg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.6.5': - resolution: {integrity: sha512-/pSN0/Jtcbbb9+ovS9rKxR3qertpFAM3OEJr/+Dh/8yy7jK5G5EFPIrfsw/7Q5987ERPIJIH6BspK2CBB2tgcg==} + '@swc/core-darwin-x64@1.6.12': + resolution: {integrity: sha512-ud+wlkWdQKawtpdjWNP2+ZLiwZU2xkKuC3L8uhlLy6MGNmRl6OGIpD/ASEDfOy3O77UhrjYRuOiOxsgBmXwuow==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.6.5': - resolution: {integrity: sha512-B0g/dROCE747RRegs/jPHuKJgwXLracDhnqQa80kFdgWEMjlcb7OMCgs5OX86yJGRS4qcYbiMGD0Pp7Kbqn3yw==} + '@swc/core-linux-arm-gnueabihf@1.6.12': + resolution: {integrity: sha512-I5370gbWGsyrlgQQ0bB3j2TALUTr/AZpOXFbwhB45HsUwpV+W1ZpuB0L5d6uzlX+UvMtoNXtUYiDCcdFWw2UXA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.6.5': - resolution: {integrity: sha512-W8meapgXTq8AOtSvDG4yKR8ant2WWD++yOjgzAleB5VAC+oC+aa8YJROGxj8HepurU8kurqzcialwoMeq5SZZQ==} + '@swc/core-linux-arm64-gnu@1.6.12': + resolution: {integrity: sha512-5SzAKf+rzsTwU/OCbEF+v7sUO5DVHbM5v2nYhZf8Otq4Lqphr9X65CIlmyakv77s7vIN4IrX+e8FOffSVF+OpQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.5': - resolution: {integrity: sha512-jyCKqoX50Fg8rJUQqh4u5PqnE7nqYKXHjVH2WcYr114/MU21zlsI+YL6aOQU1XP8bJQ2gPQ1rnlnGJdEHiKS/w==} + '@swc/core-linux-arm64-musl@1.6.12': + resolution: {integrity: sha512-Hsy04ZPUSs6oti2ZqCoMa+3r9wBU/rhEyYYoTiqWKtdH2zxqXyph8ZfEdJfAop5STX6w318iqMiAh0p7TBM3ew==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.6.5': - resolution: {integrity: sha512-G6HmUn/RRIlXC0YYFfBz2qh6OZkHS/KUPkhoG4X9ADcgWXXjOFh6JrefwsYj8VBAJEnr5iewzjNfj+nztwHaeA==} + '@swc/core-linux-x64-gnu@1.6.12': + resolution: {integrity: sha512-86PsFFQsTXdJWXM/VjNLNE2s0JFB05Pi6DwSOa2/5g7HIHk1QuD8TCusB4zcky4F3MX78QDRHKLpxIEnOV6Tnw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.5': - resolution: {integrity: sha512-AQpBjBnelQDSbeTJA50AXdS6+CP66LsXIMNTwhPSgUfE7Bx1ggZV11Fsi4Q5SGcs6a8Qw1cuYKN57ZfZC5QOuA==} + '@swc/core-linux-x64-musl@1.6.12': + resolution: {integrity: sha512-qqylxwMWRVYh0XiozJLajX25yqCABkaySGS1eNXIDQsc7uV8Z7qq5OB07Ilpm6FxIkyRnrjUfGG9WO4UfBWiXQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.6.5': - resolution: {integrity: sha512-MZTWM8kUwS30pVrtbzSGEXtek46aXNb/mT9D6rsS7NvOuv2w+qZhjR1rzf4LNbbn5f8VnR4Nac1WIOYZmfC5ng==} + '@swc/core-win32-arm64-msvc@1.6.12': + resolution: {integrity: sha512-nl6/7kOKSx5R4j25yANfKJntJpFy41bAIhEcI3bpm8Xay2BDp6YrDQtpaYT/MeBFzg6EUWg/YYQLcOhZsSvmaw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.6.5': - resolution: {integrity: sha512-WZdu4gISAr3yOm1fVwKhhk6+MrP7kVX0KMP7+ZQFTN5zXQEiDSDunEJKVgjMVj3vlR+6mnAqa/L0V9Qa8+zKlQ==} + '@swc/core-win32-ia32-msvc@1.6.12': + resolution: {integrity: sha512-GfWyYotHr3u6QvmGxagcIOiheK/fxP/+CTJ+SdtkADBHGLfgs/Bc9ePqzTY033sdjTVzPCOujV/JRVizmOnavA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.6.5': - resolution: {integrity: sha512-ezXgucnMTzlFIxQZw7ls/5r2hseFaRoDL04cuXUOs97E8r+nJSmFsRQm/ygH5jBeXNo59nyZCalrjJAjwfgACA==} + '@swc/core-win32-x64-msvc@1.6.12': + resolution: {integrity: sha512-W00XNkFQnGf+2JXTPjxg3qhgYfblETXqeQBN1nAg2OXoMuvyU+xs+Qp9CryO+mOGt613GlZ/etmOvkC2xX1l7Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.6.5': - resolution: {integrity: sha512-tyVvUK/HDOUUsK6/GmWvnqUtD9oDpPUA4f7f7JCOV8hXxtfjMtAZeBKf93yrB1XZet69TDR7EN0hFC6i4MF0Ig==} + '@swc/core@1.6.12': + resolution: {integrity: sha512-XWS4fQrmZUsMUOzKWZHoSO5sBNUlLpbi++WpCtGyoXC279IKBnWL90YS7SxjYudiKuGDBWrS7Ph25yN63vTZYg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -2048,8 +2065,8 @@ packages: '@types/linkify-markdown@1.0.3': resolution: {integrity: sha512-BnuGqDmpzmXCDMXHzgle/vMRUnbFcWclts0+n7Or421exav3XG6efl9gsxamLET6QPhX+pMnxcsHgnAO/daj9w==} - '@types/lodash@4.17.5': - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + '@types/lodash@4.17.6': + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} '@types/luxon@3.4.2': resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} @@ -2264,10 +2281,6 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2318,9 +2331,9 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -2346,8 +2359,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -2423,8 +2436,9 @@ packages: aws4@1.13.0: resolution: {integrity: sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==} - azure-devops-node-api@13.0.0: - resolution: {integrity: sha512-T/i3pt2Dxb2//1+TJT05Ff5heUmQEWKwa8sdguIhdRYT3Zge9FYw98zpfFvCD7CZsz6AN74SKGgqF3ISVN2TGg==} + azure-devops-node-api@14.0.1: + resolution: {integrity: sha512-oVnFfTNmergd3JU852EpGY64d1nAxW8lCyzZqFDPhfQVZkdApBeK/ZMN7yoFiq/C50Ru304X1L/+BFblh2SRJw==} + engines: {node: '>= 16.0.0'} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -2466,8 +2480,11 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - better-sqlite3@9.6.0: - resolution: {integrity: sha512-yR5HATnqeYNVnkaUTf4bOP2dJSnyhP4puJN/QPRyx4YkBEEUxib422n2XzPqDEHjQQqazoYoADdAm5vE15+dAQ==} + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + better-sqlite3@11.1.2: + resolution: {integrity: sha512-gujtFwavWU4MSPT+h9B+4pkvZdyOUkH54zgLdIrMmmmd4ZqiBIrRNBzNzYVFO417xo882uP5HBu4GjOfaSrIQw==} bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} @@ -2580,10 +2597,6 @@ packages: caniuse-lite@1.0.30001636: resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} - cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2641,6 +2654,11 @@ packages: resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} engines: {node: '>=14.16'} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} @@ -2653,6 +2671,9 @@ packages: cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2708,17 +2729,17 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@8.0.0: + resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} + engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@8.0.0: + resolution: {integrity: sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==} + engines: {node: '>=18'} - conventional-changelog-writer@7.0.1: - resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} - engines: {node: '>=16'} + conventional-changelog-writer@8.0.0: + resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==} + engines: {node: '>=18'} hasBin: true conventional-commits-detector@1.0.3: @@ -2726,15 +2747,19 @@ packages: engines: {node: '>=6.9.0'} hasBin: true - conventional-commits-filter@4.0.0: - resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} - engines: {node: '>=16'} + conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} + conventional-commits-parser@6.0.0: + resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==} + engines: {node: '>=18'} hasBin: true + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -2747,8 +2772,8 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -2874,6 +2899,9 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2934,10 +2962,6 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dtrace-provider@0.8.8: - resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} - engines: {node: '>=0.10'} - duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} @@ -2999,14 +3023,18 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - env-ci@10.0.0: - resolution: {integrity: sha512-U4xcd/utDYFgMh0yWj07R1H6L5fwhVbmxBCpnL0DbVSDZVnsC82HONw0wxtxNkIAcua3KtbomQvIk5xFZGAQJw==} + env-ci@11.0.0: + resolution: {integrity: sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ==} engines: {node: ^18.17 || >=20.6.1} env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -3203,6 +3231,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.3.0: + resolution: {integrity: sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==} + engines: {node: ^18.19.0 || >=20.5.0} + exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -3301,9 +3333,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} @@ -3355,6 +3387,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} + function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -3406,6 +3442,10 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -3446,10 +3486,6 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true - glob@6.0.4: - resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3563,6 +3599,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3604,6 +3643,10 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + human-signals@7.0.0: + resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} + engines: {node: '>=18.18.0'} + humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -3814,6 +3857,10 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -3837,6 +3884,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3845,10 +3896,6 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} @@ -3888,9 +3935,9 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - issue-parser@6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} - engines: {node: '>=10.13'} + issue-parser@7.0.1: + resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} + engines: {node: ^18.17 || >=20.6.1} istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} @@ -4080,6 +4127,9 @@ packages: node-notifier: optional: true + js-md4@0.3.2: + resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4146,13 +4196,12 @@ packages: jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - just-extend@6.2.0: resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} @@ -4262,8 +4311,8 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} engines: {node: 14 || >=16.14} lru-cache@5.1.1: @@ -4328,15 +4377,15 @@ packages: resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} engines: {node: '>=18'} - marked-terminal@6.2.0: - resolution: {integrity: sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==} + marked-terminal@7.1.0: + resolution: {integrity: sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <12' + marked: '>=1 <14' - marked@9.1.6: - resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} - engines: {node: '>= 16'} + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} hasBin: true matcher@3.0.0: @@ -4369,9 +4418,9 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} meow@7.1.1: resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==} @@ -4434,8 +4483,8 @@ packages: resolution: {integrity: sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: @@ -4488,10 +4537,6 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -4500,9 +4545,6 @@ packages: module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} @@ -4515,9 +4557,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mv@2.1.1: - resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} - engines: {node: '>=0.8.0'} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} nan@2.20.0: resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} @@ -4533,10 +4574,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4716,6 +4753,10 @@ packages: engines: {node: '>=18'} hasBin: true + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -4883,12 +4924,25 @@ packages: parse-link-header@2.0.0: resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-path@7.0.0: resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -4983,6 +5037,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.0.0: + resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} + engines: {node: '>=18'} + proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5071,10 +5129,9 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - read-pkg-up@11.0.0: - resolution: {integrity: sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} - deprecated: Renamed to read-package-up read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -5103,9 +5160,6 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} - redis@4.6.14: resolution: {integrity: sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==} @@ -5188,11 +5242,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.4.5: - resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -5220,9 +5269,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-json-stringify@1.2.0: - resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} - safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -5237,9 +5283,9 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - semantic-release@22.0.12: - resolution: {integrity: sha512-0mhiCR/4sZb00RVFJIUlMuiBkW3NMpVIW2Gse7noqEMoFGkvfPPAImEQbkBV8xga4KOPP4FdTRYuLLy32R1fPw==} - engines: {node: ^18.17 || >=20.6.1} + semantic-release@24.0.0: + resolution: {integrity: sha512-v46CRPw+9eI3ZuYGF2oAjqPqsfbnfFTwLBgQsv/lch4goD09ytwOTESMN4QIrx/wPLxUGey60/NMx+ANQtWRsA==} + engines: {node: '>=20.8.1'} hasBin: true semver-compare@1.0.0: @@ -5402,10 +5448,6 @@ packages: split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5483,6 +5525,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5498,6 +5544,10 @@ packages: strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + super-regex@1.0.0: + resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} + engines: {node: '>=18'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5545,13 +5595,16 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thingies@1.21.0: resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} engines: {node: '>=10.18'} @@ -5567,8 +5620,9 @@ packages: through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} tinylogic@2.0.0: resolution: {integrity: sha512-dljTkiLLITtsjqBvTA1MRZQK/sGP4kI3UJKc3yA9fMzYbMF2RhcN04SeROVqJBIYYOoJMM8u0WDnhFwMSFQotw==} @@ -5591,8 +5645,8 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toml-eslint-parser@0.9.3: - resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + toml-eslint-parser@0.10.0: + resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} tr46@0.0.3: @@ -5765,8 +5819,9 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typed-rest-client@1.8.11: - resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} + typed-rest-client@2.0.1: + resolution: {integrity: sha512-LSfgVu+jKUbkceVBGJ6bdIMzzpvjhw6A+aKsVnGa2S7bT82QCALh/RAtq/fdV3aLXxHqsChuClrQ93fXMrIckA==} + engines: {node: '>= 16.0.0'} typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -5838,6 +5893,9 @@ packages: universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -6005,6 +6063,10 @@ packages: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -6020,12 +6082,22 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.1.0: + resolution: {integrity: sha512-FsQpXXeOEe05tcJN4Z2eicuC6+6KiJdBbPOAChanSkwwjZ277XGsh8wh/HaPuGeifTiw/7dgAzabitu2bnDvRg==} + engines: {node: '>=18'} + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} +ignoredOptionalDependencies: + - dtrace-provider + - moment + - mv + - safe-json-stringify + snapshots: '@ampproject/remapping@2.3.0': @@ -6037,88 +6109,70 @@ snapshots: dependencies: grapheme-splitter: 1.0.4 - '@aws-crypto/crc32@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 - '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 tslib: 2.6.3 - '@aws-crypto/crc32c@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 - - '@aws-crypto/ie11-detection@3.0.0': + '@aws-crypto/crc32c@5.2.0': dependencies: - tslib: 1.14.1 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.598.0 + tslib: 2.6.3 - '@aws-crypto/sha1-browser@3.0.0': + '@aws-crypto/sha1-browser@5.2.0': dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.598.0 '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.3 - '@aws-crypto/sha256-browser@3.0.0': + '@aws-crypto/sha256-browser@5.2.0': dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.598.0 '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - - '@aws-crypto/sha256-js@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.3 - '@aws-crypto/supports-web-crypto@3.0.0': + '@aws-crypto/sha256-js@5.2.0': dependencies: - tslib: 1.14.1 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.598.0 + tslib: 2.6.3 - '@aws-crypto/util@3.0.0': + '@aws-crypto/supports-web-crypto@5.2.0': dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 + tslib: 2.6.3 '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/util-utf8': 2.3.0 tslib: 2.6.3 - '@aws-sdk/client-codecommit@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-codecommit@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6149,23 +6203,23 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-cognito-identity@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-cognito-identity@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6195,24 +6249,24 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-ec2@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-sdk-ec2': 3.587.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-ec2@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-sdk-ec2': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6244,23 +6298,23 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-ecr@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-ecr@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6291,24 +6345,24 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-rds@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-sdk-rds': 3.587.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-rds@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-sdk-rds': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6339,33 +6393,33 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-s3@3.588.0': - dependencies: - '@aws-crypto/sha1-browser': 3.0.0 - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-bucket-endpoint': 3.587.0 - '@aws-sdk/middleware-expect-continue': 3.577.0 - '@aws-sdk/middleware-flexible-checksums': 3.587.0 - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-location-constraint': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-sdk-s3': 3.587.0 - '@aws-sdk/middleware-signing': 3.587.0 - '@aws-sdk/middleware-ssec': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/signature-v4-multi-region': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@aws-sdk/xml-builder': 3.575.0 + '@aws-sdk/client-s3@3.606.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-bucket-endpoint': 3.598.0 + '@aws-sdk/middleware-expect-continue': 3.598.0 + '@aws-sdk/middleware-flexible-checksums': 3.598.0 + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-location-constraint': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-sdk-s3': 3.598.0 + '@aws-sdk/middleware-signing': 3.598.0 + '@aws-sdk/middleware-ssec': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/signature-v4-multi-region': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 + '@aws-sdk/xml-builder': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/eventstream-serde-browser': 3.0.2 @@ -6402,22 +6456,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6445,23 +6499,22 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-sso@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-sso@3.598.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6491,22 +6544,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.588.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 + '@aws-sdk/client-sts@3.606.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 '@smithy/config-resolver': 3.0.2 '@smithy/core': 2.2.1 '@smithy/fetch-http-handler': 3.0.2 @@ -6536,7 +6589,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.588.0': + '@aws-sdk/core@3.598.0': dependencies: '@smithy/core': 2.2.1 '@smithy/protocol-http': 4.0.1 @@ -6546,26 +6599,26 @@ snapshots: fast-xml-parser: 4.2.5 tslib: 2.6.3 - '@aws-sdk/credential-provider-cognito-identity@3.588.0': + '@aws-sdk/credential-provider-cognito-identity@3.606.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.588.0 - '@aws-sdk/types': 3.577.0 + '@aws-sdk/client-cognito-identity': 3.606.0 + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-env@3.587.0': + '@aws-sdk/credential-provider-env@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/credential-provider-http@3.587.0': + '@aws-sdk/credential-provider-http@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/fetch-http-handler': 3.0.2 '@smithy/node-http-handler': 3.0.1 '@smithy/property-provider': 3.1.1 @@ -6575,15 +6628,15 @@ snapshots: '@smithy/util-stream': 3.0.2 tslib: 2.6.3 - '@aws-sdk/credential-provider-ini@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)': + '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0)': dependencies: - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/credential-provider-env': 3.598.0 + '@aws-sdk/credential-provider-http': 3.598.0 + '@aws-sdk/credential-provider-process': 3.598.0 + '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.1 '@smithy/property-provider': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1 @@ -6593,15 +6646,15 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)': + '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0)': dependencies: - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 + '@aws-sdk/credential-provider-env': 3.598.0 + '@aws-sdk/credential-provider-http': 3.598.0 + '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/credential-provider-process': 3.598.0 + '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.1 '@smithy/property-provider': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1 @@ -6612,19 +6665,19 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.587.0': + '@aws-sdk/credential-provider-process@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/credential-provider-sso@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))': + '@aws-sdk/credential-provider-sso@3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))': dependencies: - '@aws-sdk/client-sso': 3.588.0 - '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) - '@aws-sdk/types': 3.577.0 + '@aws-sdk/client-sso': 3.598.0 + '@aws-sdk/token-providers': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)) + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1 '@smithy/types': 3.1.0 @@ -6633,28 +6686,28 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.588.0)': + '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.606.0)': dependencies: - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/types': 3.577.0 + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/credential-providers@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))': - dependencies: - '@aws-sdk/client-cognito-identity': 3.588.0 - '@aws-sdk/client-sso': 3.588.0 - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/credential-provider-cognito-identity': 3.588.0 - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 + '@aws-sdk/credential-providers@3.606.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.606.0 + '@aws-sdk/client-sso': 3.598.0 + '@aws-sdk/client-sts': 3.606.0 + '@aws-sdk/credential-provider-cognito-identity': 3.606.0 + '@aws-sdk/credential-provider-env': 3.598.0 + '@aws-sdk/credential-provider-http': 3.598.0 + '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/credential-provider-process': 3.598.0 + '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.1 '@smithy/property-provider': 3.1.1 '@smithy/types': 3.1.0 @@ -6663,9 +6716,9 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/middleware-bucket-endpoint@3.587.0': + '@aws-sdk/middleware-bucket-endpoint@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@aws-sdk/util-arn-parser': 3.568.0 '@smithy/node-config-provider': 3.1.1 '@smithy/protocol-http': 4.0.1 @@ -6673,54 +6726,54 @@ snapshots: '@smithy/util-config-provider': 3.0.0 tslib: 2.6.3 - '@aws-sdk/middleware-expect-continue@3.577.0': + '@aws-sdk/middleware-expect-continue@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/protocol-http': 4.0.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-flexible-checksums@3.587.0': + '@aws-sdk/middleware-flexible-checksums@3.598.0': dependencies: - '@aws-crypto/crc32': 3.0.0 - '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.577.0 + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-sdk/types': 3.598.0 '@smithy/is-array-buffer': 3.0.0 '@smithy/protocol-http': 4.0.1 '@smithy/types': 3.1.0 '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 - '@aws-sdk/middleware-host-header@3.577.0': + '@aws-sdk/middleware-host-header@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/protocol-http': 4.0.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-location-constraint@3.577.0': + '@aws-sdk/middleware-location-constraint@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-logger@3.577.0': + '@aws-sdk/middleware-logger@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-recursion-detection@3.577.0': + '@aws-sdk/middleware-recursion-detection@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/protocol-http': 4.0.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-sdk-ec2@3.587.0': + '@aws-sdk/middleware-sdk-ec2@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-format-url': 3.577.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-format-url': 3.598.0 '@smithy/middleware-endpoint': 3.0.2 '@smithy/protocol-http': 4.0.1 '@smithy/signature-v4': 3.1.0 @@ -6728,19 +6781,19 @@ snapshots: '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-sdk-rds@3.587.0': + '@aws-sdk/middleware-sdk-rds@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-format-url': 3.577.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-format-url': 3.598.0 '@smithy/middleware-endpoint': 3.0.2 '@smithy/protocol-http': 4.0.1 '@smithy/signature-v4': 3.1.0 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-sdk-s3@3.587.0': + '@aws-sdk/middleware-sdk-s3@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@aws-sdk/util-arn-parser': 3.568.0 '@smithy/node-config-provider': 3.1.1 '@smithy/protocol-http': 4.0.1 @@ -6750,9 +6803,9 @@ snapshots: '@smithy/util-config-provider': 3.0.0 tslib: 2.6.3 - '@aws-sdk/middleware-signing@3.587.0': + '@aws-sdk/middleware-signing@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/protocol-http': 4.0.1 '@smithy/signature-v4': 3.1.0 @@ -6760,48 +6813,48 @@ snapshots: '@smithy/util-middleware': 3.0.1 tslib: 2.6.3 - '@aws-sdk/middleware-ssec@3.577.0': + '@aws-sdk/middleware-ssec@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/middleware-user-agent@3.587.0': + '@aws-sdk/middleware-user-agent@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 '@smithy/protocol-http': 4.0.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/region-config-resolver@3.587.0': + '@aws-sdk/region-config-resolver@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/node-config-provider': 3.1.1 '@smithy/types': 3.1.0 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.1 tslib: 2.6.3 - '@aws-sdk/signature-v4-multi-region@3.587.0': + '@aws-sdk/signature-v4-multi-region@3.598.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.587.0 - '@aws-sdk/types': 3.577.0 + '@aws-sdk/middleware-sdk-s3': 3.598.0 + '@aws-sdk/types': 3.598.0 '@smithy/protocol-http': 4.0.1 '@smithy/signature-v4': 3.1.0 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))': + '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.606.0(@aws-sdk/client-sts@3.606.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.606.0(@aws-sdk/client-sts@3.606.0) + '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/types@3.577.0': + '@aws-sdk/types@3.598.0': dependencies: '@smithy/types': 3.1.0 tslib: 2.6.3 @@ -6810,16 +6863,16 @@ snapshots: dependencies: tslib: 2.6.3 - '@aws-sdk/util-endpoints@3.587.0': + '@aws-sdk/util-endpoints@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/types': 3.1.0 '@smithy/util-endpoints': 2.0.2 tslib: 2.6.3 - '@aws-sdk/util-format-url@3.577.0': + '@aws-sdk/util-format-url@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/querystring-builder': 3.0.1 '@smithy/types': 3.1.0 tslib: 2.6.3 @@ -6828,25 +6881,21 @@ snapshots: dependencies: tslib: 2.6.3 - '@aws-sdk/util-user-agent-browser@3.577.0': + '@aws-sdk/util-user-agent-browser@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/types': 3.1.0 bowser: 2.11.0 tslib: 2.6.3 - '@aws-sdk/util-user-agent-node@3.587.0': + '@aws-sdk/util-user-agent-node@3.598.0': dependencies: - '@aws-sdk/types': 3.577.0 + '@aws-sdk/types': 3.598.0 '@smithy/node-config-provider': 3.1.1 '@smithy/types': 3.1.0 tslib: 2.6.3 - '@aws-sdk/util-utf8-browser@3.259.0': - dependencies: - tslib: 2.6.3 - - '@aws-sdk/xml-builder@3.575.0': + '@aws-sdk/xml-builder@3.598.0': dependencies: '@smithy/types': 3.1.0 tslib: 2.6.3 @@ -7143,7 +7192,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -7157,7 +7206,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7365,7 +7414,7 @@ snapshots: agent-base: 7.1.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 - lru-cache: 10.2.2 + lru-cache: 10.3.0 socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -7377,6 +7426,8 @@ snapshots: '@octokit/auth-token@4.0.0': {} + '@octokit/auth-token@5.1.1': {} + '@octokit/core@5.2.0': dependencies: '@octokit/auth-token': 4.0.0 @@ -7387,6 +7438,21 @@ snapshots: before-after-hook: 2.2.3 universal-user-agent: 6.0.1 + '@octokit/core@6.1.2': + dependencies: + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.1 + '@octokit/request': 9.1.1 + '@octokit/request-error': 6.1.1 + '@octokit/types': 13.5.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.1': + dependencies: + '@octokit/types': 13.5.0 + universal-user-agent: 7.0.2 + '@octokit/endpoint@9.0.5': dependencies: '@octokit/types': 13.5.0 @@ -7398,19 +7464,23 @@ snapshots: '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 - '@octokit/openapi-types@20.0.0': {} + '@octokit/graphql@8.1.1': + dependencies: + '@octokit/request': 9.1.1 + '@octokit/types': 13.5.0 + universal-user-agent: 7.0.2 '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': + '@octokit/plugin-paginate-rest@11.3.0(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 5.2.0 + '@octokit/core': 6.1.2 '@octokit/types': 13.5.0 - '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)': + '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 12.6.0 + '@octokit/types': 13.5.0 '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': dependencies: @@ -7421,17 +7491,17 @@ snapshots: '@octokit/core': 5.2.0 '@octokit/types': 13.5.0 - '@octokit/plugin-retry@6.0.1(@octokit/core@5.2.0)': + '@octokit/plugin-retry@7.1.1(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 5.2.0 - '@octokit/request-error': 5.1.0 - '@octokit/types': 12.6.0 + '@octokit/core': 6.1.2 + '@octokit/request-error': 6.1.1 + '@octokit/types': 13.5.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@8.2.0(@octokit/core@5.2.0)': + '@octokit/plugin-throttling@9.3.0(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 5.2.0 - '@octokit/types': 12.6.0 + '@octokit/core': 6.1.2 + '@octokit/types': 13.5.0 bottleneck: 2.19.5 '@octokit/request-error@5.1.0': @@ -7440,6 +7510,10 @@ snapshots: deprecation: 2.3.1 once: 1.4.0 + '@octokit/request-error@6.1.1': + dependencies: + '@octokit/types': 13.5.0 + '@octokit/request@8.4.0': dependencies: '@octokit/endpoint': 9.0.5 @@ -7447,6 +7521,13 @@ snapshots: '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 + '@octokit/request@9.1.1': + dependencies: + '@octokit/endpoint': 10.1.1 + '@octokit/request-error': 6.1.1 + '@octokit/types': 13.5.0 + universal-user-agent: 7.0.2 + '@octokit/rest@20.1.1': dependencies: '@octokit/core': 5.2.0 @@ -7454,10 +7535,6 @@ 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@12.6.0': - dependencies: - '@octokit/openapi-types': 20.0.0 - '@octokit/types@13.5.0': dependencies: '@octokit/openapi-types': 22.2.0 @@ -7745,16 +7822,19 @@ snapshots: localforage: 1.10.0 util: 0.12.5 - '@semantic-release/commit-analyzer@11.1.0(semantic-release@22.0.12(typescript@5.4.5))': + '@sec-ant/readable-stream@0.4.1': {} + + '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.0.0(typescript@5.4.5))': dependencies: - conventional-changelog-angular: 7.0.0 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 + conventional-changelog-angular: 8.0.0 + conventional-changelog-writer: 8.0.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.0.0 debug: 4.3.5 import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.7 - semantic-release: 22.0.12(typescript@5.4.5) + semantic-release: 24.0.0(typescript@5.4.5) transitivePeerDependencies: - supports-color @@ -7762,7 +7842,7 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/exec@6.0.3(semantic-release@22.0.12(typescript@5.4.5))': + '@semantic-release/exec@6.0.3(semantic-release@24.0.0(typescript@5.4.5))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 @@ -7770,16 +7850,16 @@ snapshots: execa: 5.1.1 lodash: 4.17.21 parse-json: 5.2.0 - semantic-release: 22.0.12(typescript@5.4.5) + semantic-release: 24.0.0(typescript@5.4.5) transitivePeerDependencies: - supports-color - '@semantic-release/github@9.2.6(semantic-release@22.0.12(typescript@5.4.5))': + '@semantic-release/github@10.0.7(semantic-release@24.0.0(typescript@5.4.5))': dependencies: - '@octokit/core': 5.2.0 - '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.2.0) - '@octokit/plugin-throttling': 8.2.0(@octokit/core@5.2.0) + '@octokit/core': 6.1.2 + '@octokit/plugin-paginate-rest': 11.3.0(@octokit/core@6.1.2) + '@octokit/plugin-retry': 7.1.1(@octokit/core@6.1.2) + '@octokit/plugin-throttling': 9.3.0(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.3.5 @@ -7787,20 +7867,20 @@ snapshots: globby: 14.0.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 - issue-parser: 6.0.0 + issue-parser: 7.0.1 lodash-es: 4.17.21 mime: 4.0.3 p-filter: 4.1.0 - semantic-release: 22.0.12(typescript@5.4.5) + semantic-release: 24.0.0(typescript@5.4.5) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@11.0.3(semantic-release@22.0.12(typescript@5.4.5))': + '@semantic-release/npm@12.0.1(semantic-release@24.0.0(typescript@5.4.5))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - execa: 8.0.1 + execa: 9.3.0 fs-extra: 11.2.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 @@ -7809,23 +7889,23 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 22.0.12(typescript@5.4.5) + semantic-release: 24.0.0(typescript@5.4.5) semver: 7.6.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.12(typescript@5.4.5))': + '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.0.0(typescript@5.4.5))': dependencies: - conventional-changelog-angular: 7.0.0 - conventional-changelog-writer: 7.0.1 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 + conventional-changelog-angular: 8.0.0 + conventional-changelog-writer: 8.0.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.0.0 debug: 4.3.5 get-stream: 7.0.1 import-from-esm: 1.3.4 into-stream: 7.0.0 lodash-es: 4.17.21 - read-pkg-up: 11.0.0 - semantic-release: 22.0.12(typescript@5.4.5) + read-package-up: 11.0.0 + semantic-release: 24.0.0(typescript@5.4.5) transitivePeerDependencies: - supports-color @@ -7835,6 +7915,8 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@2.0.0': dependencies: type-detect: 4.0.8 @@ -8187,51 +8269,51 @@ snapshots: '@smithy/types': 3.1.0 tslib: 2.6.3 - '@swc/core-darwin-arm64@1.6.5': + '@swc/core-darwin-arm64@1.6.12': optional: true - '@swc/core-darwin-x64@1.6.5': + '@swc/core-darwin-x64@1.6.12': optional: true - '@swc/core-linux-arm-gnueabihf@1.6.5': + '@swc/core-linux-arm-gnueabihf@1.6.12': optional: true - '@swc/core-linux-arm64-gnu@1.6.5': + '@swc/core-linux-arm64-gnu@1.6.12': optional: true - '@swc/core-linux-arm64-musl@1.6.5': + '@swc/core-linux-arm64-musl@1.6.12': optional: true - '@swc/core-linux-x64-gnu@1.6.5': + '@swc/core-linux-x64-gnu@1.6.12': optional: true - '@swc/core-linux-x64-musl@1.6.5': + '@swc/core-linux-x64-musl@1.6.12': optional: true - '@swc/core-win32-arm64-msvc@1.6.5': + '@swc/core-win32-arm64-msvc@1.6.12': optional: true - '@swc/core-win32-ia32-msvc@1.6.5': + '@swc/core-win32-ia32-msvc@1.6.12': optional: true - '@swc/core-win32-x64-msvc@1.6.5': + '@swc/core-win32-x64-msvc@1.6.12': optional: true - '@swc/core@1.6.5': + '@swc/core@1.6.12': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.5 - '@swc/core-darwin-x64': 1.6.5 - '@swc/core-linux-arm-gnueabihf': 1.6.5 - '@swc/core-linux-arm64-gnu': 1.6.5 - '@swc/core-linux-arm64-musl': 1.6.5 - '@swc/core-linux-x64-gnu': 1.6.5 - '@swc/core-linux-x64-musl': 1.6.5 - '@swc/core-win32-arm64-msvc': 1.6.5 - '@swc/core-win32-ia32-msvc': 1.6.5 - '@swc/core-win32-x64-msvc': 1.6.5 + '@swc/core-darwin-arm64': 1.6.12 + '@swc/core-darwin-x64': 1.6.12 + '@swc/core-linux-arm-gnueabihf': 1.6.12 + '@swc/core-linux-arm64-gnu': 1.6.12 + '@swc/core-linux-arm64-musl': 1.6.12 + '@swc/core-linux-x64-gnu': 1.6.12 + '@swc/core-linux-x64-musl': 1.6.12 + '@swc/core-win32-arm64-msvc': 1.6.12 + '@swc/core-win32-ia32-msvc': 1.6.12 + '@swc/core-win32-x64-msvc': 1.6.12 '@swc/counter@0.1.3': {} @@ -8410,7 +8492,7 @@ snapshots: '@types/linkify-markdown@1.0.3': {} - '@types/lodash@4.17.5': {} + '@types/lodash@4.17.6': {} '@types/luxon@3.4.2': {} @@ -8583,7 +8665,7 @@ snapshots: debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 + minimatch: 9.0.5 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -8688,11 +8770,6 @@ snapshots: transitivePeerDependencies: - typanion - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - abbrev@2.0.0: optional: true @@ -8743,7 +8820,9 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 ansi-regex@5.0.1: {} @@ -8761,7 +8840,7 @@ snapshots: ansi-styles@6.2.1: {} - ansicolors@0.3.2: {} + any-promise@1.3.0: {} anymatch@3.1.3: dependencies: @@ -8860,10 +8939,10 @@ snapshots: aws4@1.13.0: {} - azure-devops-node-api@13.0.0: + azure-devops-node-api@14.0.1: dependencies: tunnel: 0.0.6 - typed-rest-client: 1.8.11 + typed-rest-client: 2.0.1 babel-jest@29.7.0(@babel/core@7.24.7): dependencies: @@ -8927,7 +9006,9 @@ snapshots: before-after-hook@2.2.3: {} - better-sqlite3@9.6.0: + before-after-hook@3.0.2: {} + + better-sqlite3@11.1.2: dependencies: bindings: 1.5.0 prebuild-install: 7.1.2 @@ -9000,12 +9081,7 @@ snapshots: ieee754: 1.2.1 optional: true - bunyan@1.8.15: - optionalDependencies: - dtrace-provider: 0.8.8 - moment: 2.30.1 - mv: 2.1.1 - safe-json-stringify: 1.2.0 + bunyan@1.8.15: {} bzip-deflate@1.0.0: {} @@ -9014,7 +9090,7 @@ snapshots: '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 glob: 10.4.2 - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -9067,11 +9143,6 @@ snapshots: caniuse-lite@1.0.30001636: {} - cardinal@2.1.1: - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 - chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -9117,6 +9188,15 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cli-table3@0.6.5: dependencies: string-width: 4.2.3 @@ -9133,6 +9213,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9181,22 +9267,21 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - conventional-changelog-angular@7.0.0: + conventional-changelog-angular@8.0.0: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: + conventional-changelog-conventionalcommits@8.0.0: dependencies: compare-func: 2.0.0 - conventional-changelog-writer@7.0.1: + conventional-changelog-writer@8.0.0: dependencies: - conventional-commits-filter: 4.0.0 + '@types/semver': 7.5.8 + conventional-commits-filter: 5.0.0 handlebars: 4.7.8 - json-stringify-safe: 5.0.1 - meow: 12.1.1 + meow: 13.2.0 semver: 7.6.2 - split2: 4.2.0 conventional-commits-detector@1.0.3: dependencies: @@ -9205,14 +9290,13 @@ snapshots: meow: 7.1.1 through2-concurrent: 2.0.0 - conventional-commits-filter@4.0.0: {} + conventional-commits-filter@5.0.0: {} - conventional-commits-parser@5.0.0: + conventional-commits-parser@6.0.0: dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 + meow: 13.2.0 + + convert-hrtime@5.0.0: {} convert-source-map@1.9.0: {} @@ -9222,22 +9306,22 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.4.5): + cosmiconfig@9.0.0(typescript@5.4.5): dependencies: + env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - path-type: 4.0.0 optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)): 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@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -9362,6 +9446,11 @@ snapshots: dequal@2.0.3: {} + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + detect-indent@6.1.0: {} detect-libc@2.0.3: @@ -9413,11 +9502,6 @@ snapshots: dotenv@16.4.5: {} - dtrace-provider@0.8.8: - dependencies: - nan: 2.20.0 - optional: true - duplexer2@0.1.4: dependencies: readable-stream: 2.3.8 @@ -9473,13 +9557,14 @@ snapshots: entities@4.5.0: {} - env-ci@10.0.0: + env-ci@11.0.0: dependencies: execa: 8.0.1 java-properties: 1.0.2 - env-paths@2.2.1: - optional: true + env-paths@2.2.1: {} + + environment@1.1.0: {} err-code@2.0.3: optional: true @@ -9667,13 +9752,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript @@ -9793,6 +9878,21 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.3.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.3 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 7.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 5.3.0 + pretty-ms: 9.0.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.0 + exit@0.1.2: {} expand-template@2.0.3: @@ -9908,9 +10008,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-versions@5.1.0: + find-versions@6.0.0: dependencies: semver-regex: 4.0.5 + super-regex: 1.0.0 flat-cache@3.2.0: dependencies: @@ -9965,6 +10066,8 @@ snapshots: function-bind@1.1.2: {} + function-timeout@1.0.2: {} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 @@ -10019,6 +10122,11 @@ snapshots: get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -10072,20 +10180,11 @@ snapshots: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@6.0.4: - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -10230,6 +10329,8 @@ snapshots: he@1.2.0: {} + highlight.js@10.7.3: {} + hook-std@3.0.0: {} hosted-git-info@2.8.9: {} @@ -10240,7 +10341,7 @@ snapshots: hosted-git-info@7.0.2: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 html-escaper@2.0.2: {} @@ -10269,6 +10370,8 @@ snapshots: human-signals@5.0.0: {} + human-signals@7.0.0: {} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 @@ -10451,6 +10554,8 @@ snapshots: is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -10470,6 +10575,8 @@ snapshots: is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -10478,10 +10585,6 @@ snapshots: dependencies: has-symbols: 1.0.3 - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 @@ -10512,7 +10615,7 @@ snapshots: isexe@3.1.1: optional: true - issue-parser@6.0.0: + issue-parser@7.0.1: dependencies: lodash.capitalize: 4.2.1 lodash.escaperegexp: 4.1.2 @@ -10614,16 +10717,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10633,7 +10736,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 @@ -10659,7 +10762,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 18.19.39 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10692,12 +10795,12 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5))): + jest-extended@4.0.2(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5))): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-get-type@29.6.3: {} @@ -10748,9 +10851,9 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) ts-essentials: 10.0.0(typescript@5.4.5) typescript: 5.4.5 @@ -10899,18 +11002,20 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node + js-md4@0.3.2: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -10961,14 +11066,14 @@ snapshots: jsonc-parser@3.2.1: {} + jsonc-parser@3.3.1: {} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - just-extend@6.2.0: {} jwa@2.0.0: @@ -11071,7 +11176,7 @@ snapshots: lowercase-keys@2.0.0: {} - lru-cache@10.2.2: {} + lru-cache@10.3.0: {} lru-cache@5.1.1: dependencies: @@ -11152,17 +11257,17 @@ snapshots: markdown-it: 14.1.0 markdownlint-micromark: 0.1.9 - marked-terminal@6.2.0(marked@9.1.6): + marked-terminal@7.1.0(marked@12.0.2): dependencies: - ansi-escapes: 6.2.1 - cardinal: 2.1.1 + ansi-escapes: 7.0.0 chalk: 5.3.0 + cli-highlight: 2.1.11 cli-table3: 0.6.5 - marked: 9.1.6 + marked: 12.0.2 node-emoji: 2.1.3 supports-hyperlinks: 3.0.0 - marked@9.1.6: {} + marked@12.0.2: {} matcher@3.0.0: dependencies: @@ -11208,7 +11313,7 @@ snapshots: memorystream@0.3.1: {} - meow@12.1.1: {} + meow@13.2.0: {} meow@7.1.1: dependencies: @@ -11271,8 +11376,7 @@ snapshots: min-indent@1.0.1: {} - minimalistic-assert@1.0.1: - optional: true + minimalistic-assert@1.0.1: {} minimatch@3.1.2: dependencies: @@ -11282,7 +11386,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -11338,18 +11442,10 @@ snapshots: mkdirp-classic@0.5.3: optional: true - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - optional: true - mkdirp@1.0.4: {} module-details-from-path@1.0.3: {} - moment@2.30.1: - optional: true - moo@0.5.2: {} more-entropy@0.0.7: @@ -11360,12 +11456,11 @@ snapshots: ms@2.1.3: {} - mv@2.1.1: + mz@2.7.0: dependencies: - mkdirp: 0.5.6 - ncp: 2.0.0 - rimraf: 2.4.5 - optional: true + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 nan@2.20.0: optional: true @@ -11377,9 +11472,6 @@ snapshots: natural-compare@1.4.0: {} - ncp@2.0.0: - optional: true - negotiator@0.6.3: optional: true @@ -11489,7 +11581,7 @@ snapshots: ansi-styles: 6.2.1 cross-spawn: 7.0.3 memorystream: 0.3.1 - minimatch: 9.0.4 + minimatch: 9.0.5 pidtree: 0.6.0 read-package-json-fast: 3.0.2 shell-quote: 1.8.1 @@ -11540,6 +11632,8 @@ snapshots: transitivePeerDependencies: - supports-color + object-assign@4.1.1: {} + object-inspect@1.13.1: {} object-is@1.1.6: @@ -11718,6 +11812,8 @@ snapshots: dependencies: xtend: 4.0.2 + parse-ms@4.0.0: {} + parse-path@7.0.0: dependencies: protocols: 2.0.1 @@ -11726,6 +11822,14 @@ snapshots: dependencies: parse-path: 7.0.0 + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -11740,7 +11844,7 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 path-to-regexp@6.2.2: {} @@ -11803,6 +11907,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@9.0.0: + dependencies: + parse-ms: 4.0.0 + proc-log@3.0.0: optional: true @@ -11895,7 +12003,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 - read-pkg-up@11.0.0: + read-package-up@11.0.0: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 @@ -11948,10 +12056,6 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - redeyed@2.1.1: - dependencies: - esprima: 4.0.1 - redis@4.6.14: dependencies: '@redis/bloom': 1.2.0(@redis/client@1.5.16) @@ -12045,11 +12149,6 @@ snapshots: reusify@1.0.4: {} - rimraf@2.4.5: - dependencies: - glob: 6.0.4 - optional: true - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -12082,9 +12181,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-json-stringify@1.2.0: - optional: true - safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -12098,32 +12194,32 @@ snapshots: sax@1.4.1: {} - semantic-release@22.0.12(typescript@5.4.5): + semantic-release@24.0.0(typescript@5.4.5): dependencies: - '@semantic-release/commit-analyzer': 11.1.0(semantic-release@22.0.12(typescript@5.4.5)) + '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.0.0(typescript@5.4.5)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.6(semantic-release@22.0.12(typescript@5.4.5)) - '@semantic-release/npm': 11.0.3(semantic-release@22.0.12(typescript@5.4.5)) - '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.12(typescript@5.4.5)) + '@semantic-release/github': 10.0.7(semantic-release@24.0.0(typescript@5.4.5)) + '@semantic-release/npm': 12.0.1(semantic-release@24.0.0(typescript@5.4.5)) + '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.0.0(typescript@5.4.5)) aggregate-error: 5.0.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.4.5) debug: 4.3.5 - env-ci: 10.0.0 - execa: 8.0.1 + env-ci: 11.0.0 + execa: 9.3.0 figures: 6.1.0 - find-versions: 5.1.0 + find-versions: 6.0.0 get-stream: 6.0.1 git-log-parser: 1.2.0 hook-std: 3.0.0 hosted-git-info: 7.0.2 import-from-esm: 1.3.4 lodash-es: 4.17.21 - marked: 9.1.6 - marked-terminal: 6.2.0(marked@9.1.6) + marked: 12.0.2 + marked-terminal: 7.1.0(marked@12.0.2) micromatch: 4.0.7 p-each-series: 3.0.0 p-reduce: 3.0.0 - read-pkg-up: 11.0.0 + read-package-up: 11.0.0 resolve-from: 5.0.0 semver: 7.6.2 semver-diff: 4.0.0 @@ -12310,8 +12406,6 @@ snapshots: dependencies: readable-stream: 3.6.2 - split2@4.2.0: {} - sprintf-js@1.0.3: {} sprintf-js@1.1.3: {} @@ -12395,6 +12489,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -12405,6 +12501,11 @@ snapshots: strnum@1.0.5: {} + super-regex@1.0.0: + dependencies: + function-timeout: 1.0.2 + time-span: 5.1.0 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -12467,10 +12568,16 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-extensions@2.4.0: {} - text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + thingies@1.21.0(tslib@2.6.3): dependencies: tslib: 2.6.3 @@ -12488,7 +12595,9 @@ snapshots: dependencies: readable-stream: 3.6.2 - through@2.3.8: {} + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 tinylogic@2.0.0: {} @@ -12506,7 +12615,7 @@ snapshots: dependencies: is-number: 7.0.0 - toml-eslint-parser@0.9.3: + toml-eslint-parser@0.10.0: dependencies: eslint-visitor-keys: 3.4.3 @@ -12545,11 +12654,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 - ts-jest@29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5)) + jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12563,7 +12672,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.7) - ts-node@10.9.2(@swc/core@1.6.5)(@types/node@18.19.39)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.6.12)(@types/node@18.19.39)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -12581,7 +12690,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.6.5 + '@swc/core': 1.6.12 tsconfig-paths@3.15.0: dependencies: @@ -12668,8 +12777,10 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typed-rest-client@1.8.11: + typed-rest-client@2.0.1: dependencies: + des.js: 1.1.0 + js-md4: 0.3.2 qs: 6.12.1 tunnel: 0.0.6 underscore: 1.13.6 @@ -12751,6 +12862,8 @@ snapshots: universal-user-agent@6.0.1: {} + universal-user-agent@7.0.2: {} + universalify@2.0.1: {} upath@2.0.1: {} @@ -12940,6 +13053,16 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -12959,6 +13082,8 @@ snapshots: yocto-queue@0.1.0: {} + yoctocolors@2.1.0: {} + zod@3.23.8: {} zwitch@1.0.5: {} diff --git a/tools/check-re2.mjs b/tools/check-re2.mjs deleted file mode 100644 index b86559956b8e6a..00000000000000 --- a/tools/check-re2.mjs +++ /dev/null @@ -1,11 +0,0 @@ -await (async () => { - console.log('Checking re2 ... '); - try { - const { default: RE2 } = await import('re2'); - new RE2('.*').exec('test'); - console.log(`ok.`); - } catch (e) { - console.error(`error.\n${e}`); - process.exit(1); - } -})(); diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile index 0574f2e4dc9515..47729565193956 100644 --- a/tools/docker/Dockerfile +++ b/tools/docker/Dockerfile @@ -3,26 +3,44 @@ ARG BASE_IMAGE_TYPE=slim # -------------------------------------- # slim image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.23.1@sha256:ba75ae8e5609d3d0803a4d555f44b5dbe55b4340a8e238ff4af18d742f529c7b AS slim-base +FROM ghcr.io/renovatebot/base-image:2.24.3@sha256:e7704e885fb948f01b9b81430b1f80f5c14169db9cc89a92d2a781fd1e2d2f12 AS slim-base # -------------------------------------- # full image # -------------------------------------- -FROM ghcr.io/renovatebot/base-image:2.23.1-full@sha256:772da65d627fd3a54bb37ec2669bf98a4801cb94d7d402cb8d272cdb0ecc85c8 AS full-base +FROM ghcr.io/renovatebot/base-image:2.24.3-full@sha256:1804690db9a7dbb1a225aa519bb7da748b0dfc3bb2a4569eef9e5889cd61ee93 AS full-base # -------------------------------------- # build image # -------------------------------------- -FROM slim-base as build +FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:2.24.3@sha256:e7704e885fb948f01b9b81430b1f80f5c14169db9cc89a92d2a781fd1e2d2f12 AS build + +ARG TARGETPLATFORM +ARG BUILDPLATFORM + +RUN set -ex; \ + echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM"; \ + uname -a; \ + true WORKDIR /usr/local/renovate -ENV CI=1 npm_config_modules_cache_max_age=0 +ENV CI=1 npm_config_modules_cache_max_age=0 \ + npm_config_loglevel=info \ + ARCH=arm64 COPY pnpm-lock.yaml ./ +# trim `linux/` from TARGETPLATFORM +# replace `amd64` with `x64` for `node` +# set `npm_config_arch` for `prebuild-install` +# set `npm_config_platform_arch` for `install-artifact-from-github` # only fetch deps from lockfile https://pnpm.io/cli/fetch -RUN corepack pnpm fetch --prod +RUN set -ex; \ + arch=${TARGETPLATFORM:6}; \ + export npm_config_arch=${arch/amd64/x64} npm_config_platform_arch=${arch/amd64/x64}; \ + corepack pnpm fetch --prod; \ + true COPY . ./ @@ -33,10 +51,11 @@ RUN set -ex; \ # test COPY tools/docker/bin/ /usr/local/bin/ +# RE2 doesn't work on cross compile +ENV RENOVATE_X_IGNORE_RE2=true RUN set -ex; \ renovate --version; \ renovate-config-validator; \ - node -e "new require('re2')('.*').exec('test')"; \ true # -------------------------------------- @@ -68,8 +87,7 @@ RUN set -ex; \ RUN set -ex; \ renovate --version; \ - renovate-config-validator; \ - node -e "new require('re2')('.*').exec('test')"; \ + node -e "new require('re2')('.*').exec('test');new require('better-sqlite3')(':memory:')"; \ true LABEL \ diff --git a/tools/prepare-deps.mjs b/tools/prepare-deps.mjs new file mode 100644 index 00000000000000..9d62b542196b1d --- /dev/null +++ b/tools/prepare-deps.mjs @@ -0,0 +1,65 @@ +import { execSync } from 'child_process'; + +function testRe2() { + execSync( + `node -e "try{require('re2')('.*').exec('test')}catch(e){console.error(e);if(e.code === 'ERR_DLOPEN_FAILED' && e.message.includes('NODE_MODULE_VERSION')) process.exit(1); else process.exit(-1)}"`, + { stdio: 'inherit' }, + ); + console.log(`Ok.`); +} + +function testSqlite() { + execSync( + `node -e "try{new require('better-sqlite3')(':memory:')}catch(e){console.error(e);if(e.code === 'ERR_DLOPEN_FAILED' && e.message.includes('NODE_MODULE_VERSION')) process.exit(1); else process.exit(-1)}"`, + { stdio: 'inherit' }, + ); + console.log(`Ok.`); +} + +(() => { + console.log('Checking re2 ... '); + try { + testRe2(); + } catch (e) { + console.error(`Failed.\n${e}`); + try { + if (e.status === 1) { + console.log(`Retry re2 install ...`); + execSync('pnpm run install', { + stdio: 'inherit', + cwd: `${process.cwd()}/node_modules/re2`, + }); + testRe2(); + return; + } + } catch (e1) { + console.error(`Retry failed.\n${e1}`); + } + + process.exit(1); + } +})(); + +(() => { + console.log('Checking better-sqlite3 ... '); + try { + testSqlite(); + } catch (e) { + console.error(`Failed.\n${e}`); + try { + if (e.status === 1) { + console.log(`Retry better-sqlite3 install ...`); + execSync('pnpm run install', { + stdio: 'inherit', + cwd: `${process.cwd()}/node_modules/better-sqlite3`, + }); + testSqlite(); + return; + } + } catch (e1) { + console.error(`Retry failed.\n${e1}`); + } + + process.exit(1); + } +})();