From dbc6028ea3c883fa27c46ae85cdb62b7723a3dfc Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Fri, 23 Oct 2026 12:13:56 +0200 Subject: [PATCH 1/3] chore: publish releases the way strapi/client does Remove Changesets so a maintainer bumps the version and the Release workflow publishes with npm trusted publishing. --- .changeset/commander-15-esm.md | 7 - .changeset/config.json | 7 - .changeset/execa-10.md | 7 - .changeset/ora-9-4-1.md | 7 - .changeset/prettier-3-9-6.md | 7 - .changeset/slow-oranges-hang.md | 5 - .changeset/swift-ferrets-climb.md | 9 - .eslintignore | 1 - .github/workflows/release.yml | 165 ++++++++-- .prettierignore | 1 - CHANGELOG.md | 2 + CONTRIBUTING.md | 32 ++ package.json | 9 +- pnpm-lock.yaml | 493 ------------------------------ 14 files changed, 174 insertions(+), 578 deletions(-) delete mode 100644 .changeset/commander-15-esm.md delete mode 100644 .changeset/config.json delete mode 100644 .changeset/execa-10.md delete mode 100644 .changeset/ora-9-4-1.md delete mode 100644 .changeset/prettier-3-9-6.md delete mode 100644 .changeset/slow-oranges-hang.md delete mode 100644 .changeset/swift-ferrets-climb.md create mode 100644 CONTRIBUTING.md diff --git a/.changeset/commander-15-esm.md b/.changeset/commander-15-esm.md deleted file mode 100644 index e518e93..0000000 --- a/.changeset/commander-15-esm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@strapi/sdk-plugin": patch ---- - -chore(deps): bump commander from 14.0.3 to 15.0.0 - -fix: load ESM-only commander 15 via a dynamic `import()` so the CJS CLI bundle and Jest tests work across the Node 22/24/26 matrix diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index 40a5be6..0000000 --- a/.changeset/config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "commit": false, - "changelog": ["@changesets/changelog-github", { "repo": "strapi/sdk-plugin" }], - "access": "public", - "baseBranch": "main" -} diff --git a/.changeset/execa-10.md b/.changeset/execa-10.md deleted file mode 100644 index dbc9a60..0000000 --- a/.changeset/execa-10.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@strapi/sdk-plugin": patch ---- - -chore(deps): bump execa from ^9.6.1 to ^10.0.0 - -Backfill for the major dependency bump in #205 (lockfile-only follow-up #215 stayed within ^10). diff --git a/.changeset/ora-9-4-1.md b/.changeset/ora-9-4-1.md deleted file mode 100644 index 84a6cb9..0000000 --- a/.changeset/ora-9-4-1.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@strapi/sdk-plugin": patch ---- - -chore(deps): bump ora from 9.4.0 to 9.4.1 - -Backfill for Dependabot bump #191 that landed without a changeset. diff --git a/.changeset/prettier-3-9-6.md b/.changeset/prettier-3-9-6.md deleted file mode 100644 index b522c5d..0000000 --- a/.changeset/prettier-3-9-6.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@strapi/sdk-plugin": patch ---- - -chore(deps): bump prettier from 3.8.3 to 3.9.6 - -Backfill for Dependabot bumps that landed without a changeset (#182, #196, #200, #210). diff --git a/.changeset/slow-oranges-hang.md b/.changeset/slow-oranges-hang.md deleted file mode 100644 index 7c9dad4..0000000 --- a/.changeset/slow-oranges-hang.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@strapi/sdk-plugin": patch ---- - -chore(deps): bump @swc/core from 1.15.40 to 1.15.41 diff --git a/.changeset/swift-ferrets-climb.md b/.changeset/swift-ferrets-climb.md deleted file mode 100644 index b2695c8..0000000 --- a/.changeset/swift-ferrets-climb.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@strapi/sdk-plugin": minor ---- - -chore(deps): bump @vitejs/plugin-react from 4.7.0 to 5.2.0 - -fix: resolve ESM default exports for `@vitejs/plugin-react` and dynamic `import()` usage so admin plugin builds and unit tests load the React Vite plugin correctly - -chore: raise minimum Node.js version to `^20.19.0 || >=22.12.0` to match `@vitejs/plugin-react@5` requirements diff --git a/.eslintignore b/.eslintignore index a1dd9e3..66dd39c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,4 +2,3 @@ bin coverage dist *.yaml -.changeset diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 979a77b..1d2d7e8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,9 +1,16 @@ name: Release on: - push: - branches: - - main + workflow_dispatch: + inputs: + tag: + description: 'npm dist-tag to publish under' + required: true + default: 'latest' + type: choice + options: + - latest + - next concurrency: ${{ github.workflow }}-${{ github.ref }} @@ -13,31 +20,137 @@ jobs: if: github.repository == 'strapi/sdk-plugin' runs-on: ubuntu-latest permissions: - contents: write - pull-requests: write - id-token: write # Required for npm trusted publishing (OIDC) + contents: read + id-token: write # required for npm trusted publishing (OIDC) + outputs: + package_version: ${{ steps.package_version.outputs.package_version }} steps: - - uses: actions/checkout@v7 - - uses: pnpm/action-setup@v6 - - uses: actions/setup-node@v6 + - name: Checkout repo + uses: actions/checkout@v7 with: + fetch-depth: 0 + + - name: Install pnpm + uses: pnpm/action-setup@v6 + with: + version: 9.1.0 + + - name: Setup node + uses: actions/setup-node@v6 + with: + node-version: 22 cache: pnpm - node-version: lts/* - registry-url: 'https://registry.npmjs.org' # Pin the publish registry for npm trusted publishing (OIDC) - - run: pnpm --version - # npm trusted publishing (OIDC) requires npm CLI >= 11.5.1 - - run: npm install -g npm@11.17.0 - - run: npm --version - - run: pnpm install - - run: pnpm build - - - name: Create Release Pull Request or Publish to npm - id: changesets - uses: changesets/action@v1 + + - name: Update npm for trusted publishing + run: npm install -g 'npm@^11.5.1' # OIDC trusted publishing requires npm >= 11.5.1 + + - name: Install deps + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm run build + + - name: Resolve package version + id: package_version + run: echo "package_version=$(node -p "require('./package.json').version")" >> "$GITHUB_OUTPUT" + + - name: Publish to npm + run: npm publish --provenance --access public --tag ${{ inputs.tag }} + + notify_slack: + name: 'Notify Slack' + needs: [release] + runs-on: ubuntu-latest + if: github.repository == 'strapi/sdk-plugin' && success() + permissions: {} + steps: + - name: send message to slack + uses: slackapi/slack-github-action@v1.24.0 + with: + payload: | + { + "blocks": [ + { + "type": "header", + "text": { + "type": "plain_text", + "text": "@strapi/sdk-plugin ${{ needs.release.outputs.package_version }} has been successfully deployed :tada:", + "emoji": true + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Check out the **" + } + }, + { + "type": "context", + "elements": [ + { + "type": "image", + "image_url": "https://github.com/${{ github.triggering_actor }}.png", + "alt_text": "${{ github.triggering_actor }} avatar" + }, + { + "type": "mrkdwn", + "text": "Triggered by *${{ github.triggering_actor }}*" + } + ] + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_RELEASE_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + + notify_on_error: + needs: [release] + name: notify on error + runs-on: ubuntu-latest + if: failure() + permissions: {} + steps: + - name: send message to slack + uses: slackapi/slack-github-action@v1.24.0 with: - version: pnpm release:version - publish: pnpm release:publish - commit: 'chore: version packages for release' - title: 'chore: version packages for release' + payload: | + { + "blocks": [ + { + "type": "header", + "text": { + "type": "plain_text", + "text": "Deployment failed or has been rejected :disappointed:", + "emoji": true + } + }, + { + "type": "section", + "fields": [ + { + "type": "mrkdwn", + "text": "<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Click here to see the logs>" + } + ] + }, + { + "type": "context", + "elements": [ + { + "type": "image", + "image_url": "https://github.com/${{ github.triggering_actor }}.png", + "alt_text": "${{ github.triggering_actor }} avatar" + }, + { + "type": "mrkdwn", + "text": "Triggered by *${{ github.triggering_actor }}*" + } + ] + } + ] + } env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_RELEASE_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/.prettierignore b/.prettierignore index b35638c..a1d6d2e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ bin dist pnpm-lock.yaml -.changeset diff --git a/CHANGELOG.md b/CHANGELOG.md index 00562ee..3859296 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # @strapi/sdk-plugin +Versions through 6.1.1 were cut with Changesets. Later releases follow [CONTRIBUTING.md](./CONTRIBUTING.md) and use GitHub release notes. + ## 6.1.1 ### Patch Changes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5e3098a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Releases + +This section is for maintainers. + +To release a new version: + +1. Create a release branch from `main` and ensure it is up to date. + + The branch name should follow the format: `releases/..`. + +2. Install the latest dependencies with `pnpm install`. +3. Update the package version in the root [package.json](./package.json): + + ```diff + { + "name": "@strapi/sdk-plugin", + - "version": "6.1.1", + + "version": "6.1.2", + // ... + } + ``` + +4. Perform a dry-run publication with `pnpm publish --dry-run --tag latest`. +5. If the dry run succeeds, commit the version update with the message `release: ..`. If it fails, resolve the issues before proceeding. +6. Create a version tag with `git tag v..`. +7. Push the tag to the remote repository: `git push origin v..`. +8. Push the release branch and run the [Release workflow](https://github.com/strapi/sdk-plugin/actions/workflows/release.yml) on that branch. Choose the npm dist-tag, `latest` or `next`. The workflow publishes with npm trusted publishing. +9. [Draft a new release](https://github.com/strapi/sdk-plugin/releases/new) on GitHub. +10. Select the newly created tag under the `Choose a tag` dropdown, leaving the `Target` as `auto`. +11. Click `Generate release notes`, review the content (for example, remove PRs related to the release process), and make necessary corrections. +12. Ensure the `Set as the latest release` option is selected, then click `Publish release`. +13. Create a pull request named `release: ..` targeting the `main` branch. diff --git a/package.json b/package.json index e53fa04..8148f1a 100644 --- a/package.json +++ b/package.json @@ -46,13 +46,9 @@ "check": "pnpm lint && pnpm test:ts && pnpm test:unit", "lint": "eslint .", "prepare": "husky", - "prerelease:enter": "changeset pre enter", - "prerelease:exit": "changeset pre exit", + "prepack": "pnpm prettier:check && pnpm check && pnpm build", "prettier:check": "prettier --check .", "prettier:write": "prettier --write .", - "release:add": "changeset add", - "release:publish": "changeset publish", - "release:version": "changeset version && pnpm install", "test:ts": "tsc --noEmit", "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "watch": "vite build --watch" @@ -79,9 +75,6 @@ "yup": "1.7.1" }, "devDependencies": { - "@changesets/changelog-git": "^0.2.1", - "@changesets/changelog-github": "^0.7.0", - "@changesets/cli": "^2.31.0", "@commitlint/cli": "^21.0.1", "@commitlint/config-conventional": "^21.0.1", "@strapi/eslint-config": "^1.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dc4768..1a3567c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,15 +66,6 @@ importers: specifier: 1.7.1 version: 1.7.1 devDependencies: - '@changesets/changelog-git': - specifier: ^0.2.1 - version: 0.2.1 - '@changesets/changelog-github': - specifier: ^0.7.0 - version: 0.7.0 - '@changesets/cli': - specifier: ^2.31.0 - version: 2.31.1(@types/node@26.2.0) '@commitlint/cli': specifier: ^21.0.1 version: 21.2.1(@types/node@26.2.0)(conventional-commits-parser@7.1.0)(typescript@5.9.3) @@ -314,67 +305,6 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@changesets/apply-release-plan@7.1.1': - resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} - - '@changesets/assemble-release-plan@6.0.10': - resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} - - '@changesets/changelog-git@0.2.1': - resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - - '@changesets/changelog-github@0.7.0': - resolution: {integrity: sha512-rBsbRvc4TVn+FvFnOVM3LxlFJfTXXCp8gfVJ+0BubxWNSVnLuAzowi5j+IEraLLP52w8AAs9QfKbPS3MMiXQJA==} - - '@changesets/cli@2.31.1': - resolution: {integrity: sha512-uO05WTcRBwuVOJVSW8Cmpqw6q0WDL53ajGCMyszutvOe5toOnunbpM4jZzf+qxBOz7i0AzopZ8diBuewjmF40w==} - hasBin: true - - '@changesets/config@3.1.4': - resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} - - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - - '@changesets/get-dependents-graph@2.1.4': - resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} - - '@changesets/get-github-info@0.8.0': - resolution: {integrity: sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==} - - '@changesets/get-release-plan@4.0.16': - resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} - - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - - '@changesets/git@3.0.4': - resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} - - '@changesets/logger@0.1.1': - resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - - '@changesets/parse@0.4.3': - resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} - - '@changesets/pre@2.0.2': - resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - - '@changesets/read@0.6.7': - resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} - - '@changesets/should-skip-package@0.1.2': - resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} - - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - - '@changesets/types@6.1.0': - resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} - - '@changesets/write@0.4.0': - resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@commitlint/cli@21.2.1': resolution: {integrity: sha512-blsZGe29hJ72VGEFVl72IVYX+1vsfINpjA9yWQA6i7OKD/McGEOXg08sKIRKjFk4JvzhV/9n0l3i6NooPLTNfg==} engines: {node: '>=22.12.0'} @@ -812,15 +742,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -935,12 +856,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} - - '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@microsoft/api-extractor-model@7.33.8': resolution: {integrity: sha512-aIcoQggPyer3B6Ze3usz0YWC/oBwUHfRH5ETUsr+oT2BRA6SfTJl7IKPcPZkX4UR+PohowzW4uMxsvjrn8vm+w==} @@ -1344,9 +1259,6 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@26.2.0': resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} @@ -1649,10 +1561,6 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1797,10 +1705,6 @@ packages: bent@7.3.12: resolution: {integrity: sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==} - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1883,9 +1787,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - chardet@2.2.0: - resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2025,9 +1926,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dataloader@1.4.0: - resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -2083,10 +1981,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -2110,10 +2004,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dotenv@8.6.0: - resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} - engines: {node: '>=10'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2137,10 +2027,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -2460,9 +2346,6 @@ packages: exsolve@1.1.0: resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2540,14 +2423,6 @@ packages: resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} engines: {node: '>=14.14'} - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2711,10 +2586,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - human-id@4.2.0: - resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} - hasBin: true - human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2732,10 +2603,6 @@ packages: engines: {node: '>=18'} hasBin: true - iconv-lite@0.7.3: - resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} - engines: {node: '>=0.10.0'} - ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} @@ -2927,10 +2794,6 @@ packages: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} @@ -2955,10 +2818,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -3170,9 +3029,6 @@ packages: jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} @@ -3241,9 +3097,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -3332,10 +3185,6 @@ packages: mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3359,15 +3208,6 @@ packages: resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} engines: {node: '>= 0.4'} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -3455,9 +3295,6 @@ packages: resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} engines: {node: '>=20'} - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} @@ -3465,10 +3302,6 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3485,10 +3318,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -3496,9 +3325,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.11: - resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3567,10 +3393,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -3601,11 +3423,6 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - prettier@3.9.6: resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} engines: {node: '>=14'} @@ -3671,10 +3488,6 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} - readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -3786,9 +3599,6 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3880,9 +3690,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4007,10 +3814,6 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -4050,9 +3853,6 @@ packages: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -4155,10 +3955,6 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -4237,12 +4033,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -4546,164 +4336,6 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@changesets/apply-release-plan@7.1.1': - dependencies: - '@changesets/config': 3.1.4 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.8.5 - - '@changesets/assemble-release-plan@6.0.10': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.8.5 - - '@changesets/changelog-git@0.2.1': - dependencies: - '@changesets/types': 6.1.0 - - '@changesets/changelog-github@0.7.0': - dependencies: - '@changesets/get-github-info': 0.8.0 - '@changesets/types': 6.1.0 - dotenv: 8.6.0 - transitivePeerDependencies: - - encoding - - '@changesets/cli@2.31.1(@types/node@26.2.0)': - dependencies: - '@changesets/apply-release-plan': 7.1.1 - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.4 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/get-release-plan': 4.0.16 - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@26.2.0) - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - enquirer: 2.4.1 - fs-extra: 7.0.1 - mri: 1.2.0 - package-manager-detector: 0.2.11 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.8.5 - spawndamnit: 3.0.1 - term-size: 2.2.1 - transitivePeerDependencies: - - '@types/node' - - '@changesets/config@3.1.4': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/logger': 0.1.1 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 - - '@changesets/errors@0.2.0': - dependencies: - extendable-error: 0.1.7 - - '@changesets/get-dependents-graph@2.1.4': - dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 - semver: 7.8.5 - - '@changesets/get-github-info@0.8.0': - dependencies: - dataloader: 1.4.0 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - '@changesets/get-release-plan@4.0.16': - dependencies: - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/config': 3.1.4 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/get-version-range-type@0.4.0': {} - - '@changesets/git@3.0.4': - dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 - - '@changesets/logger@0.1.1': - dependencies: - picocolors: 1.1.1 - - '@changesets/parse@0.4.3': - dependencies: - '@changesets/types': 6.1.0 - js-yaml: 4.3.0 - - '@changesets/pre@2.0.2': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - - '@changesets/read@0.6.7': - dependencies: - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.3 - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 - - '@changesets/should-skip-package@0.1.2': - dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/types@4.1.0': {} - - '@changesets/types@6.1.0': {} - - '@changesets/write@0.4.0': - dependencies: - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - human-id: 4.2.0 - prettier: 2.8.8 - '@commitlint/cli@21.2.1(@types/node@26.2.0)(conventional-commits-parser@7.1.0)(typescript@5.9.3)': dependencies: '@commitlint/config-conventional': 21.2.0 @@ -5030,13 +4662,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@inquirer/external-editor@1.0.3(@types/node@26.2.0)': - dependencies: - chardet: 2.2.0 - iconv-lite: 0.7.3 - optionalDependencies: - '@types/node': 26.2.0 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -5257,22 +4882,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@manypkg/find-root@1.1.0': - dependencies: - '@babel/runtime': 7.29.7 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 - - '@manypkg/get-packages@1.1.3': - dependencies: - '@babel/runtime': 7.29.7 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 - '@microsoft/api-extractor-model@7.33.8(@types/node@26.2.0)': dependencies: '@microsoft/tsdoc': 0.16.0 @@ -5661,8 +5270,6 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@12.20.55': {} - '@types/node@26.2.0': dependencies: undici-types: 8.3.0 @@ -5986,8 +5593,6 @@ snapshots: dependencies: string-width: 4.2.3 - ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -6172,10 +5777,6 @@ snapshots: caseless: 0.12.0 is-stream: 2.0.1 - better-path-resolve@1.0.0: - dependencies: - is-windows: 1.0.2 - binary-extensions@2.3.0: {} boxen@8.0.1: @@ -6260,8 +5861,6 @@ snapshots: char-regex@1.0.2: {} - chardet@2.2.0: {} - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -6402,8 +6001,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dataloader@1.4.0: {} - de-indent@1.0.2: {} debug@3.2.7: @@ -6461,8 +6058,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - detect-indent@6.1.0: {} - detect-newline@3.1.0: {} diff@8.0.4: {} @@ -6481,8 +6076,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dotenv@8.6.0: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -6501,11 +6094,6 @@ snapshots: emoji-regex@9.2.2: {} - enquirer@2.4.1: - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - entities@7.0.1: {} env-paths@2.2.1: {} @@ -7058,8 +6646,6 @@ snapshots: exsolve@1.1.0: {} - extendable-error@0.1.7: {} - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -7137,18 +6723,6 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -7324,8 +6898,6 @@ snapshots: html-escaper@2.0.2: {} - human-id@4.2.0: {} - human-signals@2.1.0: {} human-signals@5.0.0: {} @@ -7334,10 +6906,6 @@ snapshots: husky@9.1.7: {} - iconv-lite@0.7.3: - dependencies: - safer-buffer: 2.1.2 - ignore-by-default@1.0.1: {} ignore@5.3.2: {} @@ -7509,10 +7077,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-subdir@1.2.0: - dependencies: - better-path-resolve: 1.0.0 - is-symbol@1.1.1: dependencies: call-bound: 1.0.4 @@ -7536,8 +7100,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-windows@1.0.2: {} - isarray@2.0.5: {} isexe@2.0.0: {} @@ -7934,10 +7496,6 @@ snapshots: jsonc-parser@3.3.1: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - jsonfile@6.2.1: dependencies: universalify: 2.0.1 @@ -8024,8 +7582,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.startcase@4.4.0: {} - log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -8109,8 +7665,6 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - mri@1.2.0: {} - ms@2.1.3: {} muggle-string@0.4.1: {} @@ -8128,10 +7682,6 @@ snapshots: object.entries: 1.1.9 semver: 6.3.1 - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - node-int64@0.4.0: {} node-releases@2.0.50: {} @@ -8247,8 +7797,6 @@ snapshots: stdin-discarder: 0.3.2 string-width: 8.2.1 - outdent@0.5.0: {} - outdent@0.8.0: {} own-keys@1.0.1: @@ -8257,10 +7805,6 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - p-filter@2.1.0: - dependencies: - p-map: 2.1.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -8277,16 +7821,10 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@2.1.0: {} - p-try@2.2.0: {} package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.11: - dependencies: - quansync: 0.2.11 - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -8338,8 +7876,6 @@ snapshots: pidtree@0.6.1: {} - pify@4.0.1: {} - pirates@4.0.7: {} pkg-dir@4.2.0: @@ -8372,8 +7908,6 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@2.8.8: {} - prettier@3.9.6: {} pretty-format@27.5.1: @@ -8430,13 +7964,6 @@ snapshots: react-refresh@0.18.0: {} - read-yaml-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.15.0 - pify: 4.0.1 - strip-bom: 3.0.0 - readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -8595,8 +8122,6 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safer-buffer@2.1.2: {} - semver@6.3.1: {} semver@7.7.4: {} @@ -8692,11 +8217,6 @@ snapshots: source-map@0.6.1: {} - spawndamnit@3.0.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - sprintf-js@1.0.3: {} stable-hash@0.0.5: {} @@ -8837,8 +8357,6 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 - term-size@2.2.1: {} - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.6 @@ -8872,8 +8390,6 @@ snapshots: touch@3.1.1: {} - tr46@0.0.3: {} - tree-kill@1.2.2: {} ts-api-utils@1.4.3(typescript@5.9.3): @@ -8977,8 +8493,6 @@ snapshots: unicorn-magic@0.3.0: {} - universalify@0.1.2: {} - universalify@2.0.1: {} unrs-resolver@1.12.2: @@ -9066,13 +8580,6 @@ snapshots: dependencies: makeerror: 1.0.12 - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 From 97bf4e0ebe90e051d982dfb3f2e7c2054ea4b54a Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Fri, 23 Oct 2026 12:36:53 +0200 Subject: [PATCH 2/3] fix(test): unit tests fail on node 22 when jest workers are reused prepack runs the unit tests during npm publish. The Release workflow uses Node 22, where a reused Jest worker throws "import after teardown". --- .github/workflows/tests.yml | 13 +++-------- jest.config.mjs | 43 ++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 085418c..487e247 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -67,13 +67,6 @@ jobs: name: Restore build output with: name: build-output-node-${{ matrix.node }} - # On Node < 24.9, Jest can't load pure-ESM deps (commander 15) via its normal - # import, so we fall back to a native dynamic import that escapes Jest's per-file - # environment. If a worker is reused across test files, a later file's import hits - # the previous file's torn-down environment ("import after teardown"). Forcing one - # worker per suite (we have 8) prevents reuse. Node 24/26 load ESM natively and - # don't need this. - - if: matrix.node == 22 - run: pnpm test:unit --maxWorkers=8 - - if: matrix.node != 22 - run: pnpm test:unit + # Node < 24.9 needs one Jest worker per suite (see jest.config.mjs). The config + # sets that; do not pass a smaller --maxWorkers here. + - run: pnpm test:unit diff --git a/jest.config.mjs b/jest.config.mjs index 5895fbb..124a420 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -1,7 +1,42 @@ +import { readdirSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const rootDir = path.dirname(fileURLToPath(import.meta.url)); + +/** + * Suites Jest will actually run. On Node < 24.9 each one needs its own worker. + */ +const countTestFiles = (dir) => { + let count = 0; + + for (const entry of readdirSync(dir, { withFileTypes: true })) { + if (entry.name !== 'fixtures' && entry.name !== 'node_modules') { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + count += countTestFiles(fullPath); + } else if (entry.isFile() && /\.test\.(js|ts)$/.test(entry.name)) { + count += 1; + } + } + } + + return count; +}; + +const [nodeMajor = 0, nodeMinor = 0] = process.versions.node.split('.').map(Number); +// Same cutoff as src/cli/commands/utils/esm-interop.ts. Below it, commander is loaded +// with a native dynamic import that escapes Jest's per-file environment. Reusing a +// worker for the next file throws "import after teardown". `npm publish` runs these +// tests from `prepack` on the Release workflow's Node 22 image, which has fewer +// cores than test files, so the default worker count is not enough. +const isolateEsmWorkers = nodeMajor < 24 || (nodeMajor === 24 && nodeMinor < 9); + /** * @type {import('jest').Config} */ -export default { +const config = { modulePathIgnorePatterns: ['dist'], testMatch: ['**/__tests__/**/*.test.{js,ts}'], testPathIgnorePatterns: ['__tests__/fixtures/'], @@ -11,3 +46,9 @@ export default { displayName: 'Plugin CLI', collectCoverageFrom: ['src/**/*.ts'], }; + +if (isolateEsmWorkers) { + config.maxWorkers = Math.max(countTestFiles(path.join(rootDir, 'src', '__tests__')), 1); +} + +export default config; From 4ec14c6df138a7b7ff023d041ba0063fc8d79fb5 Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Fri, 23 Oct 2026 16:04:27 +0200 Subject: [PATCH 3/3] ci: pin third-party release actions to commit SHAs SonarCloud fails the new-code security rating when the release workflow uses floating tags for the pnpm and Slack actions. --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1d2d7e8..58d0eb2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: fetch-depth: 0 - name: Install pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6 with: version: 9.1.0 @@ -65,7 +65,7 @@ jobs: permissions: {} steps: - name: send message to slack - uses: slackapi/slack-github-action@v1.24.0 + uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 with: payload: | { @@ -113,7 +113,7 @@ jobs: permissions: {} steps: - name: send message to slack - uses: slackapi/slack-github-action@v1.24.0 + uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 with: payload: | {