diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json new file mode 100644 index 0000000000..d8bd46360b --- /dev/null +++ b/.codesandbox/ci.json @@ -0,0 +1,5 @@ +{ + "node": "18", + "packages": ["@alias/*", "@commitlint/*"], + "sandboxes": [] +} diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index b1e8dbd975..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -lib/ -coverage/ -node_modules/ -fixtures/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 38db2dd88a..0000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,75 +0,0 @@ -module.exports = { - root: true, - plugins: ['@typescript-eslint', 'jest', 'import'], - env: { - es6: true, - node: true, - }, - parserOptions: { - sourceType: 'module', - ecmaVersion: 11, - ecmaFeatures: { - jsx: false, - }, - }, - extends: ['eslint:recommended', 'prettier'], - rules: { - // disallow non-import statements appearing before import statements - 'import/first': 'error', - // Forbid import of modules using absolute paths - 'import/no-absolute-path': 'error', - // disallow AMD require/define - 'import/no-amd': 'error', - // Forbid mutable exports - 'import/no-mutable-exports': 'error', - // Prevent importing the default as if it were named - 'import/no-named-default': 'error', - // Forbid a module from importing itself - 'import/no-self-import': 'error', - - // Forbid the use of extraneous packages - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: ['**/*.test.js', '**/*.test.ts', 'vitest'], - }, - ], - }, - overrides: [ - { - files: ['*.ts'], - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], - rules: { - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/triple-slash-reference': 'off', - - // TODO: enable those rules? - 'no-empty': 'off', - 'no-var': 'off', - }, - }, - { - files: ['*.test.ts', '*.test.js'], - extends: ['plugin:jest/recommended'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', - // disallow non-import statements appearing before import statements - 'import/first': 'off', - 'import/no-extraneous-dependencies': 'off', - 'jest/no-deprecated-functions': 'off' - }, - }, - ], -}; diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b8c3f856ea..be7921be0c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -144,15 +144,17 @@ yarn clean yarn install yarn build yarn test -npx lerna publish --conventional-commits --dist-tag [`next` | `[PATCH_RELEASE_VERSION]`] --otp +npx lerna publish --conventional-commits --dist-tag [`next` | `next` | `[release-vXX(BRANCH)]`] --otp ``` If for some reason this stops in between, you can manually publish missing packages like this: ```sh -npm publish --tag [`next` | `[PATCH_RELEASE_VERSION]`] --otp +npm publish --tag [`latest` | `next` | `[release-vXX(BRANCH)]`] --otp ``` +Depending on the state of the packages you might need to run `npm pack` in each failed package and then publish it. + #### Publishing (new) packages for the first time ```sh diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index 2ab9c36039..7e1df48553 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -1,31 +1,42 @@ -name: '🐛 Bug Report' +name: "🐛 Bug Report" description: Create a new ticket for a bug. -title: 'fix: ' -labels: ['bug'] +title: "fix: <title>" +labels: ["bug"] body: - type: markdown attributes: value: | Provide a general summary of the issue in the Title above - type: textarea - id: expected-behavior + id: steps-to-reproduce attributes: - label: 'Expected Behavior' - description: Tell us what should happen - placeholder: Short and explicit description of your incident... + label: "Steps to Reproduce" + description: Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant + value: | + 1. First step + 2. Second step + render: bash validations: required: true - type: textarea id: current-behavior attributes: - label: 'Current Behavior' + label: "Current Behavior" description: Tell us what happens instead of the expected behavior validations: required: false + - type: textarea + id: expected-behavior + attributes: + label: "Expected Behavior" + description: Tell us what should happen + placeholder: Short and explicit description of your incident... + validations: + required: true - type: checkboxes id: affected-packages attributes: - label: 'Affected packages' + label: "Affected packages" options: - label: cli - label: core @@ -34,25 +45,14 @@ body: - type: textarea id: possible-solution attributes: - label: 'Possible Solution' + label: "Possible Solution" description: Not obligatory, but suggest a fix/reason for the bug, or ideas how to implement the addition or change validations: required: false - - type: textarea - id: steps-to-reproduce - attributes: - label: 'Steps to Reproduce' - description: Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant - value: | - 1. First step - 2. Second step - render: bash - validations: - required: true - type: textarea id: context attributes: - label: 'Context' + label: "Context" description: | How has this issue affected you? What are you trying to accomplish? Providing context helps us come up with a solution that is most useful in the real world @@ -61,21 +61,21 @@ body: - type: input id: commitlint-version attributes: - label: 'commitlint --version' - placeholder: '@commitlint/cli@x.x.x' + label: "commitlint --version" + placeholder: "@commitlint/cli@x.x.x" validations: required: true - type: input id: git-version attributes: - label: 'git --version' + label: "git --version" placeholder: vx.x.x validations: required: true - type: input id: node-version attributes: - label: 'node --version' + label: "node --version" placeholder: vx.x.x validations: required: true diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml index bf4e9609df..063dd15fe4 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -1,7 +1,7 @@ -name: '✨ Feature Request' +name: "✨ Feature Request" description: Create a new ticket for a new feature request -title: 'feat: <title>' -labels: ['feature'] +title: "feat: <title>" +labels: ["feature"] body: - type: markdown attributes: @@ -10,7 +10,7 @@ body: - type: textarea id: expected-behavior attributes: - label: 'Expected Behavior' + label: "Expected Behavior" description: Tell us how it should work placeholder: Short and explicit description of your request... validations: @@ -18,14 +18,14 @@ body: - type: textarea id: current-behavior attributes: - label: 'Current Behavior' + label: "Current Behavior" description: Explain the difference from current behavior validations: required: false - type: checkboxes id: affected-packages attributes: - label: 'Affected packages' + label: "Affected packages" options: - label: cli - label: core @@ -34,14 +34,14 @@ body: - type: textarea id: possible-solution attributes: - label: 'Possible Solution' + label: "Possible Solution" description: Ideas how to implement the addition or change validations: required: false - type: textarea id: context attributes: - label: 'Context' + label: "Context" description: | How has this issue affected you? What are you trying to accomplish? Providing context helps us come up with a solution that is most useful in the real world diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 975ccd12ea..37c47808a9 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -3,10 +3,16 @@ name: CI on: push: branches: - - '**' + - "**" pull_request: types: [opened, synchronize] + workflow_dispatch: + + # to execute once a day (more info see https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule ) + schedule: + - cron: "0 0 * * *" + jobs: build: strategy: @@ -15,9 +21,9 @@ jobs: node: [18, 20] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: ${{ matrix.node }} cache: yarn @@ -34,11 +40,11 @@ jobs: codeQuality: name: Code quality needs: [build] - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20 cache: yarn @@ -47,23 +53,22 @@ jobs: run: yarn install --ignore-engines --frozen-lockfile - name: Check format - run: yarn format + run: yarn format || (yarn format-fix; git diff --exit-code) - name: Lint run: yarn lint nodeJsBaselineAptCompatibility: name: NodeJS installed from stock Ubuntu-LTS packages (not external sources) - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 container: - image: 'ubuntu:24.04' + image: "ubuntu:24.04" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install dependencies run: | apt update --yes - apt upgrade --yes # NOTE: do not change the below with an `actions/setup-node` step! or it # would make this CI job entirely pointless @@ -72,6 +77,9 @@ jobs: npm install --global yarn yarn install + - name: Print versions + run: node --version && npm --version && yarn --version + - name: Build run: yarn build diff --git a/.github/workflows/container-build.yml b/.github/workflows/container-build.yml index 84244d68ac..83aab40930 100644 --- a/.github/workflows/container-build.yml +++ b/.github/workflows/container-build.yml @@ -2,30 +2,31 @@ name: container build on: push: tags: - - '**' + - "**" schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" pull_request: paths: - - 'Dockerfile.ci' + - "Dockerfile.ci" jobs: container-build: + if: github.repository == 'conventional-changelog/commitlint' runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 - name: Log into registry - uses: docker/login-action@v3 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 with: images: commitlint/commitlint tags: | @@ -34,12 +35,11 @@ jobs: type=ref,event=branch type=sha,prefix=,format=short - name: Build and push container image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: . file: Dockerfile.ci push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - # disable arm build for now, because of https://github.com/nodejs/docker-node/issues/1335 - platforms: linux/amd64 #,linux/arm64 + platforms: linux/amd64,linux/arm64 diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index 46da066cbe..ecc1581a0e 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -18,21 +18,22 @@ concurrency: jobs: # Build job build: + if: github.repository == 'conventional-changelog/commitlint' runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 18 cache: yarn - name: Setup Pages - uses: actions/configure-pages@v4 + uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0 - name: Install dependencies run: yarn install @@ -43,12 +44,13 @@ jobs: touch ./docs/.vitepress/dist/.nojekyll - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 with: path: ./docs/.vitepress/dist # Deployment job deploy: + if: github.repository == 'conventional-changelog/commitlint' environment: name: docs url: ${{ steps.deployment.outputs.page_url }} @@ -58,4 +60,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 diff --git a/.nxignore b/.nxignore new file mode 100644 index 0000000000..5758b6a456 --- /dev/null +++ b/.nxignore @@ -0,0 +1,3 @@ +# Having fixtures with a package.json and project.json leads to a duplicate package resolution issue. +# see https://github.com/nrwl/nx/issues/20959 +@commitlint/*/fixtures/** diff --git a/.tool-versions b/.tool-versions index 19ac4b9972..0e9804f101 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 18.19.1 +nodejs 18.20.8 diff --git a/@alias/commitlint-config-angular/CHANGELOG.md b/@alias/commitlint-config-angular/CHANGELOG.md index a3d1edacd0..31190da981 100644 --- a/@alias/commitlint-config-angular/CHANGELOG.md +++ b/@alias/commitlint-config-angular/CHANGELOG.md @@ -3,6 +3,86 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package commitlint-config-angular + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@alias/commitlint-config-angular/index.js b/@alias/commitlint-config-angular/index.js index 772977fc4c..0598f27f73 100644 --- a/@alias/commitlint-config-angular/index.js +++ b/@alias/commitlint-config-angular/index.js @@ -1 +1 @@ -export {default} from '@commitlint/config-angular'; +export { default } from "@commitlint/config-angular"; diff --git a/@alias/commitlint-config-angular/package.json b/@alias/commitlint-config-angular/package.json index 38f5f5f50c..42291ec715 100644 --- a/@alias/commitlint-config-angular/package.json +++ b/@alias/commitlint-config-angular/package.json @@ -1,7 +1,7 @@ { "name": "commitlint-config-angular", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing the angular commit convention", "files": [ "index.js" @@ -31,10 +31,10 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/config-angular": "^19.0.0" + "@commitlint/config-angular": "^19.8.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint-config-lerna-scopes/CHANGELOG.md b/@alias/commitlint-config-lerna-scopes/CHANGELOG.md index 4e42c02d57..759065a561 100644 --- a/@alias/commitlint-config-lerna-scopes/CHANGELOG.md +++ b/@alias/commitlint-config-lerna-scopes/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@alias/commitlint-config-lerna-scopes/index.js b/@alias/commitlint-config-lerna-scopes/index.js index 0cfd98ac94..000c9673ee 100644 --- a/@alias/commitlint-config-lerna-scopes/index.js +++ b/@alias/commitlint-config-lerna-scopes/index.js @@ -1 +1 @@ -export {default} from '@commitlint/config-lerna-scopes'; +export { default } from "@commitlint/config-lerna-scopes"; diff --git a/@alias/commitlint-config-lerna-scopes/package.json b/@alias/commitlint-config-lerna-scopes/package.json index b58a5d0270..34066eacb8 100644 --- a/@alias/commitlint-config-lerna-scopes/package.json +++ b/@alias/commitlint-config-lerna-scopes/package.json @@ -1,7 +1,7 @@ { "name": "commitlint-config-lerna-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing lerna package names as scopes", "files": [ "index.js" @@ -31,10 +31,10 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/config-lerna-scopes": "^19.0.0" + "@commitlint/config-lerna-scopes": "^19.8.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint-config-nx-scopes/CHANGELOG.md b/@alias/commitlint-config-nx-scopes/CHANGELOG.md index f76d3a3f4d..b958f0679e 100644 --- a/@alias/commitlint-config-nx-scopes/CHANGELOG.md +++ b/@alias/commitlint-config-nx-scopes/CHANGELOG.md @@ -3,6 +3,70 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [19.3.1](https://github.com/conventional-changelog/commitlint/compare/v19.3.0...v19.3.1) (2024-05-13) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@alias/commitlint-config-nx-scopes/index.js b/@alias/commitlint-config-nx-scopes/index.js index 3e6a1de683..2ba02e27da 100644 --- a/@alias/commitlint-config-nx-scopes/index.js +++ b/@alias/commitlint-config-nx-scopes/index.js @@ -1 +1 @@ -export {default} from '@commitlint/config-nx-scopes'; +export { default } from "@commitlint/config-nx-scopes"; diff --git a/@alias/commitlint-config-nx-scopes/package.json b/@alias/commitlint-config-nx-scopes/package.json index d6ebe11586..cbc236f842 100644 --- a/@alias/commitlint-config-nx-scopes/package.json +++ b/@alias/commitlint-config-nx-scopes/package.json @@ -1,7 +1,7 @@ { "name": "commitlint-config-nx-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing nx project names as scopes", "files": [ "index.js" @@ -31,10 +31,10 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/config-nx-scopes": "^19.0.0" + "@commitlint/config-nx-scopes": "^19.8.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint-config-patternplate/CHANGELOG.md b/@alias/commitlint-config-patternplate/CHANGELOG.md index 0ae07e7715..d4c249a07e 100644 --- a/@alias/commitlint-config-patternplate/CHANGELOG.md +++ b/@alias/commitlint-config-patternplate/CHANGELOG.md @@ -3,6 +3,86 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@alias/commitlint-config-patternplate/index.js b/@alias/commitlint-config-patternplate/index.js index 085cdbe448..d95944f6eb 100644 --- a/@alias/commitlint-config-patternplate/index.js +++ b/@alias/commitlint-config-patternplate/index.js @@ -1 +1 @@ -export {default} from '@commitlint/config-patternplate'; +export { default } from "@commitlint/config-patternplate"; diff --git a/@alias/commitlint-config-patternplate/package.json b/@alias/commitlint-config-patternplate/package.json index 678c32f5a2..b63e465285 100644 --- a/@alias/commitlint-config-patternplate/package.json +++ b/@alias/commitlint-config-patternplate/package.json @@ -1,7 +1,7 @@ { "name": "commitlint-config-patternplate", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commits, patternplate-style", "files": [ "index.js" @@ -31,10 +31,10 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/config-patternplate": "^19.0.0" + "@commitlint/config-patternplate": "^19.8.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint/CHANGELOG.md b/@alias/commitlint/CHANGELOG.md index 4b3d35ccec..9a9ac1876c 100644 --- a/@alias/commitlint/CHANGELOG.md +++ b/@alias/commitlint/CHANGELOG.md @@ -3,6 +3,129 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package commitlint + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package commitlint + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package commitlint + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package commitlint + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package commitlint + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package commitlint + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package commitlint + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package commitlint + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package commitlint + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package commitlint + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package commitlint + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package commitlint + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package commitlint + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package commitlint + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@alias/commitlint/cli.js b/@alias/commitlint/cli.js index 3a54821b24..4b917c9cf5 100755 --- a/@alias/commitlint/cli.js +++ b/@alias/commitlint/cli.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import '@commitlint/cli/cli.js'; +import "@commitlint/cli/cli.js"; diff --git a/@alias/commitlint/cli.test.js b/@alias/commitlint/cli.test.js index debea53ba2..ff28c511b3 100644 --- a/@alias/commitlint/cli.test.js +++ b/@alias/commitlint/cli.test.js @@ -1,37 +1,42 @@ -import {test, expect} from 'vitest'; -import {createRequire} from 'module'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {execa} from 'execa'; -import {fix} from '@commitlint/test'; +import { x } from "tinyexec"; +import { fix } from "@commitlint/test"; const require = createRequire(import.meta.url); -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -const bin = require.resolve('./cli.js'); +const bin = require.resolve("./cli.js"); function cli(args, options, input) { - const c = execa(bin, args, { - cwd: options.cwd, - env: options.env, - input: input, + const result = x(bin, args, { + nodeOptions: { + cwd: options.cwd, + env: options.env, + }, }); - return c.catch((err) => err); + + result.process.stdin.write(input); + result.process.stdin.end(); + + return result; } const fixBootstrap = (fixture) => fix.bootstrap(fixture, __dirname); -test('should reprint input from stdin', async () => { - const cwd = await fixBootstrap('fixtures/default'); - const actual = await cli([], {cwd}, 'foo: bar'); - expect(actual.stdout).toContain('foo: bar'); +test("should reprint input from stdin", async () => { + const cwd = await fixBootstrap("fixtures/default"); + const actual = await cli([], { cwd }, "foo: bar"); + expect(actual.stdout).toContain("foo: bar"); }); -test('should produce success output with --verbose flag', async () => { - const cwd = await fixBootstrap('fixtures/default'); - const actual = await cli(['--verbose'], {cwd}, 'type: bar'); - expect(actual.stdout).toContain('0 problems, 0 warnings'); - expect(actual.stderr).toEqual(''); +test("should produce success output with --verbose flag", async () => { + const cwd = await fixBootstrap("fixtures/default"); + const actual = await cli(["--verbose"], { cwd }, "type: bar"); + expect(actual.stdout).toContain("0 problems, 0 warnings"); + expect(actual.stderr).toEqual(""); }); diff --git a/@alias/commitlint/package.json b/@alias/commitlint/package.json index f76d3245ee..fc02e50a89 100644 --- a/@alias/commitlint/package.json +++ b/@alias/commitlint/package.json @@ -1,7 +1,7 @@ { "name": "commitlint", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "files": [ "cli.js" @@ -36,13 +36,13 @@ }, "license": "MIT", "dependencies": { - "@commitlint/cli": "^19.0.0", - "@commitlint/types": "^19.0.0" + "@commitlint/cli": "^19.8.0", + "@commitlint/types": "^19.8.0" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", - "execa": "^8.0.1" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", + "tinyexec": "^1.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/cli/CHANGELOG.md b/@commitlint/cli/CHANGELOG.md index 1f6b14d353..dec6150ff1 100644 --- a/@commitlint/cli/CHANGELOG.md +++ b/@commitlint/cli/CHANGELOG.md @@ -3,6 +3,142 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/cli + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/cli + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + + +### Features + +* **cli:** use special errorCode for missing rules/config [#4142](https://github.com/conventional-changelog/commitlint/issues/4142) ([#4143](https://github.com/conventional-changelog/commitlint/issues/4143)) ([d7070d8](https://github.com/conventional-changelog/commitlint/commit/d7070d8a4905da7834a018825b37d52c2dd29f62)) + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/cli + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + + +### Features + +* support command line options from a file ([#4109](https://github.com/conventional-changelog/commitlint/issues/4109)) ([a20e890](https://github.com/conventional-changelog/commitlint/commit/a20e890f6b6c8bacdc511d40cb41f29415bdd044)) +* support linting from the last tag ([#4110](https://github.com/conventional-changelog/commitlint/issues/4110)) ([4b204ec](https://github.com/conventional-changelog/commitlint/commit/4b204ecfb43dd6a00e24b51111aadbd78f9d58e1)) + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package @commitlint/cli + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + + +### Features + +* **cli:** introduce new --last flag, to stop recommending HEAD~1 ([#3916](https://github.com/conventional-changelog/commitlint/issues/3916)) ([99f4f3f](https://github.com/conventional-changelog/commitlint/commit/99f4f3f4839190a2758083df7ba20b988e7b68a6)) + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/cli + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + + +### Bug Fixes + +* drop `resolve-from`, `resolve-global` and `import-fresh`, resolve global packages correctly ([#3939](https://github.com/conventional-changelog/commitlint/issues/3939)) ([8793c63](https://github.com/conventional-changelog/commitlint/commit/8793c639c083c33714da0a29429b338776813d0c)), closes [#3938](https://github.com/conventional-changelog/commitlint/issues/3938) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/cli/cli.js b/@commitlint/cli/cli.js index 1bda77159f..940e27804b 100755 --- a/@commitlint/cli/cli.js +++ b/@commitlint/cli/cli.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import './lib/cli.js'; +import "./lib/cli.js"; diff --git a/@commitlint/cli/fixtures/last-flag-regression/commitlint.config.js b/@commitlint/cli/fixtures/last-flag-regression/commitlint.config.js new file mode 100644 index 0000000000..3230d4c57e --- /dev/null +++ b/@commitlint/cli/fixtures/last-flag-regression/commitlint.config.js @@ -0,0 +1,9 @@ +module.exports = { + rules: { + 'subject-empty': [2, 'never'], + 'type-empty': [2, 'never'], + 'type-enum': [2, 'always', [ + 'test' + ]] + } +}; diff --git a/@commitlint/cli/index.cjs b/@commitlint/cli/index.cjs index bc56366369..6d5d6c0e62 100644 --- a/@commitlint/cli/index.cjs +++ b/@commitlint/cli/index.cjs @@ -1,3 +1,5 @@ -const path = require('path'); +'use strict'; + +const path = require('node:path'); module.exports = path.join(__dirname, 'cli.js'); diff --git a/@commitlint/cli/package.json b/@commitlint/cli/package.json index b846aab378..bef2f3a0be 100644 --- a/@commitlint/cli/package.json +++ b/@commitlint/cli/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/cli", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "files": [ "index.cjs", @@ -39,8 +39,8 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", "@types/lodash.merge": "^4.6.8", "@types/node": "^18.19.17", "@types/yargs": "^17.0.29", @@ -48,15 +48,13 @@ "lodash.merge": "^4.6.2" }, "dependencies": { - "@commitlint/format": "^19.0.0", - "@commitlint/lint": "^19.0.0", - "@commitlint/load": "^19.0.0", - "@commitlint/read": "^19.0.0", - "@commitlint/types": "^19.0.0", - "execa": "^8.0.1", - "resolve-from": "^5.0.0", - "resolve-global": "^2.0.0", + "@commitlint/format": "^19.8.0", + "@commitlint/lint": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/read": "^19.8.0", + "@commitlint/types": "^19.8.0", + "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/cli/src/cli-error.ts b/@commitlint/cli/src/cli-error.ts index eb1c985179..8b21ae31ee 100644 --- a/@commitlint/cli/src/cli-error.ts +++ b/@commitlint/cli/src/cli-error.ts @@ -1,10 +1,22 @@ +export enum ExitCode { + CommitlintDefault = 0, + CommitlintErrorDefault = 1, + CommitLintWarning = 2, + CommitLintError = 3, + CommitlintInvalidArgument = 9, +} + export class CliError extends Error { __proto__ = Error; public type: string; - public error_code: number; + public error_code: ExitCode; - constructor(message: string, type: string, error_code = 1) { + constructor( + message: string, + type: string, + error_code = ExitCode.CommitlintErrorDefault, + ) { super(message); this.type = type; diff --git a/@commitlint/cli/src/cli.test.ts b/@commitlint/cli/src/cli.test.ts index 846869d5e8..d65a5e57ab 100644 --- a/@commitlint/cli/src/cli.test.ts +++ b/@commitlint/cli/src/cli.test.ts @@ -1,18 +1,18 @@ -import {describe, test, expect} from 'vitest'; -import {createRequire} from 'module'; -import path from 'path'; -import {fileURLToPath} from 'url'; - -import {fix, git} from '@commitlint/test'; -import {execa} from 'execa'; -import fs from 'fs-extra'; -import merge from 'lodash.merge'; +import { describe, test, expect } from "vitest"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { fix, git } from "@commitlint/test"; +import fs from "fs-extra"; +import merge from "lodash.merge"; +import { x } from "tinyexec"; +import { ExitCode } from "./cli-error.js"; const require = createRequire(import.meta.url); -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -const bin = require.resolve('../cli.js'); +const bin = require.resolve("../cli.js"); interface TestOptions { cwd: string; @@ -20,499 +20,569 @@ interface TestOptions { } const cli = (args: string[], options: TestOptions) => { - return (input = '') => { - return execa(bin, args, { - cwd: options.cwd, - env: options.env, - input: input, - reject: false, + return (input = "") => { + const result = x(bin, args, { + nodeOptions: { + cwd: options.cwd, + env: options.env, + }, }); + + result.process?.stdin?.write(input); + result.process?.stdin?.end(); + + return result; }; }; const gitBootstrap = (fixture: string) => git.bootstrap(fixture, __dirname); const fixBootstrap = (fixture: string) => fix.bootstrap(fixture, __dirname); -test('should throw when called without [input]', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli([], {cwd})(); - expect(actual.exitCode).toBe(1); -}); - -test('should reprint input from stdin', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain('foo: bar'); -}); - -test('should produce success output with --verbose flag', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--verbose'], {cwd})('type: bar'); - expect(actual.stdout).toContain('0 problems, 0 warnings'); - expect(actual.stderr).toEqual(''); -}); - -test('should produce no output with --quiet flag', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--quiet'], {cwd})('foo: bar'); - expect(actual.stdout).toEqual(''); - expect(actual.stderr).toEqual(''); +test("should throw when called without [input]", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli([], { cwd })(); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should produce no output with -q flag', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['-q'], {cwd})('foo: bar'); - expect(actual.stdout).toEqual(''); - expect(actual.stderr).toEqual(''); +test("should reprint input from stdin", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("foo: bar"); }); -test('should produce help for empty config', async () => { - const cwd = await gitBootstrap('fixtures/empty'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain('Please add rules'); - expect(actual.exitCode).toBe(1); +test("should produce success output with --verbose flag", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--verbose"], { cwd })("type: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("0 problems, 0 warnings"); + expect(output.stderr).toEqual(""); }); -test('should produce help for problems', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain( - 'Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint' +test("should produce last commit and success output with --verbose flag", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + await x("git", ["add", "commitlint.config.js"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); + const result = cli(["--last", "--verbose"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toContain("0 problems, 0 warnings"); + expect(output.stdout.trim()).toContain("test: this should work"); + expect(output.stderr).toEqual(""); +}); + +test("regression test for running with --last flag", async () => { + const cwd = await gitBootstrap("fixtures/last-flag-regression"); + await x("git", ["add", "commitlint.config.js"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); + const result = cli(["--last", "--verbose"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toContain("0 problems, 0 warnings"); + expect(output.stdout.trim()).toContain("test: this should work"); + expect(output.stderr).toEqual(""); +}); + +test("should produce no output with --quiet flag", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--quiet"], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toEqual(""); + expect(output.stderr).toEqual(""); +}); + +test("should produce no output with -q flag", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["-q"], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toEqual(""); + expect(output.stderr).toEqual(""); +}); + +test("should produce help for empty config", async () => { + const cwd = await gitBootstrap("fixtures/empty"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("Please add rules"); + expect(result.exitCode).toBe(ExitCode.CommitlintInvalidArgument); +}); + +test("should produce help for problems", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain( + "Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint", ); - expect(actual.exitCode).toBe(1); -}); - -test('should produce help for problems with correct helpurl', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli( - ['-H https://github.com/conventional-changelog/commitlint/#testhelpurl'], - {cwd} - )('foo: bar'); - expect(actual.stdout).toContain( - 'Get help: https://github.com/conventional-changelog/commitlint/#testhelpurl' + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); +}); + +test("should produce help for problems with correct helpurl", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli( + ["-H https://github.com/conventional-changelog/commitlint/#testhelpurl"], + { cwd }, + )("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain( + "Get help: https://github.com/conventional-changelog/commitlint/#testhelpurl", ); - expect(actual.exitCode).toBe(1); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should fail for input from stdin without rules', async () => { - const cwd = await gitBootstrap('fixtures/empty'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.exitCode).toBe(1); +test("should fail for input from stdin without rules", async () => { + const cwd = await gitBootstrap("fixtures/empty"); + const result = cli([], { cwd })("foo: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintInvalidArgument); }); -test('should succeed for input from stdin with rules', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli([], {cwd})('type: bar'); - expect(actual.exitCode).toBe(0); +test("should succeed for input from stdin with rules", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli([], { cwd })("type: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should fail for input from stdin with rule from rc', async () => { - const cwd = await gitBootstrap('fixtures/simple'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain('type must not be one of [foo]'); - expect(actual.exitCode).toBe(1); +test("should fail for input from stdin with rule from rc", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("type must not be one of [foo]"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should work with --config option', async () => { - const file = 'config/commitlint.config.js'; - const cwd = await gitBootstrap('fixtures/specify-config-file'); - const actual = await cli(['--config', file], {cwd})('foo: bar'); - expect(actual.stdout).toContain('type must not be one of [foo]'); - expect(actual.exitCode).toBe(1); +test("should work with --config option", async () => { + const file = "config/commitlint.config.js"; + const cwd = await gitBootstrap("fixtures/specify-config-file"); + const result = cli(["--config", file], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("type must not be one of [foo]"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should fail for input from stdin with rule from js', async () => { - const cwd = await gitBootstrap('fixtures/extends-root'); - const actual = await cli(['--extends', './extended'], {cwd})('foo: bar'); - expect(actual.stdout).toContain('type must not be one of [foo]'); - expect(actual.exitCode).toBe(1); +test("should fail for input from stdin with rule from js", async () => { + const cwd = await gitBootstrap("fixtures/extends-root"); + const result = cli(["--extends", "./extended"], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain("type must not be one of [foo]"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should output help URL defined in config file', async () => { - const cwd = await gitBootstrap('fixtures/help-url'); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain('Get help: https://www.example.com/foo'); - expect(actual.exitCode).toBe(1); +test("should output help URL defined in config file", async () => { + const cwd = await gitBootstrap("fixtures/help-url"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toContain( + "Get help: https://www.example.com/foo", + ); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should produce no error output with --quiet flag', async () => { - const cwd = await gitBootstrap('fixtures/simple'); - const actual = await cli(['--quiet'], {cwd})('foo: bar'); - expect(actual.stdout).toEqual(''); - expect(actual.stderr).toEqual(''); - expect(actual.exitCode).toBe(1); +test("should produce no error output with --quiet flag", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + const result = cli(["--quiet"], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toEqual(""); + expect(output.stderr).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should produce no error output with -q flag', async () => { - const cwd = await gitBootstrap('fixtures/simple'); - const actual = await cli(['-q'], {cwd})('foo: bar'); - expect(actual.stdout).toEqual(''); - expect(actual.stderr).toEqual(''); - expect(actual.exitCode).toBe(1); +test("should produce no error output with -q flag", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + const result = cli(["-q"], { cwd })("foo: bar"); + const output = await result; + expect(output.stdout.trim()).toEqual(""); + expect(output.stderr).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should work with husky commitmsg hook and git commit', async () => { - const cwd = await gitBootstrap('fixtures/husky/integration'); - await writePkg({husky: {hooks: {'commit-msg': `'${bin}' -e`}}}, {cwd}); - - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} +test("should work with husky commitmsg hook and git commit", async () => { + const cwd = await gitBootstrap("fixtures/husky/integration"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e` } } }, + { cwd }, ); + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); + expect(commit).toBeTruthy(); }); -test('should work with husky commitmsg hook in sub packages', async () => { - const upper = await gitBootstrap('fixtures/husky'); - const cwd = path.join(upper, 'integration'); - await writePkg({husky: {hooks: {'commit-msg': `'${bin}' -e`}}}, {cwd: upper}); - - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} +test("should work with husky commitmsg hook in sub packages", async () => { + const upper = await gitBootstrap("fixtures/husky"); + const cwd = path.join(upper, "integration"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e` } } }, + { cwd: upper }, ); + + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }); -test('should work with husky via commitlint -e $GIT_PARAMS', async () => { - const cwd = await gitBootstrap('fixtures/husky/integration'); +test("should work with husky via commitlint -e $GIT_PARAMS", async () => { + const cwd = await gitBootstrap("fixtures/husky/integration"); await writePkg( - {husky: {hooks: {'commit-msg': `'${bin}' -e $GIT_PARAMS`}}}, - {cwd} + { husky: { hooks: { "commit-msg": `'${bin}' -e $GIT_PARAMS` } } }, + { cwd }, ); - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} - ); + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }); -test('should work with husky via commitlint -e %GIT_PARAMS%', async () => { - const cwd = await gitBootstrap('fixtures/husky/integration'); +test("should work with husky via commitlint -e %GIT_PARAMS%", async () => { + const cwd = await gitBootstrap("fixtures/husky/integration"); await writePkg( - {husky: {hooks: {'commit-msg': `'${bin}' -e %GIT_PARAMS%`}}}, - {cwd} + { husky: { hooks: { "commit-msg": `'${bin}' -e %GIT_PARAMS%` } } }, + { cwd }, ); - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} - ); + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }); -test('should work with husky via commitlint -e $HUSKY_GIT_PARAMS', async () => { - const cwd = await gitBootstrap('fixtures/husky/integration'); +test("should work with husky via commitlint -e $HUSKY_GIT_PARAMS", async () => { + const cwd = await gitBootstrap("fixtures/husky/integration"); await writePkg( - {husky: {hooks: {'commit-msg': `'${bin}' -e $HUSKY_GIT_PARAMS`}}}, - {cwd} + { husky: { hooks: { "commit-msg": `'${bin}' -e $HUSKY_GIT_PARAMS` } } }, + { cwd }, ); - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} - ); + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }); -test('should work with husky via commitlint -e %HUSKY_GIT_PARAMS%', async () => { - const cwd = await gitBootstrap('fixtures/husky/integration'); +test("should work with husky via commitlint -e %HUSKY_GIT_PARAMS%", async () => { + const cwd = await gitBootstrap("fixtures/husky/integration"); await writePkg( - {husky: {hooks: {'commit-msg': `'${bin}' -e %HUSKY_GIT_PARAMS%`}}}, - {cwd} + { husky: { hooks: { "commit-msg": `'${bin}' -e %HUSKY_GIT_PARAMS%` } } }, + { cwd }, ); - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - const commit = await execa( - 'git', - ['commit', '-m', '"test: this should work"'], - {cwd} - ); + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + const commit = await x("git", ["commit", "-m", '"test: this should work"'], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }); -test('should allow reading of environment variables for edit file, succeeding if valid', async () => { - const cwd = await gitBootstrap('fixtures/simple'); - await fs.writeFile(path.join(cwd, 'commit-msg-file'), 'foo'); - const actual = await cli(['--env', 'variable'], { +test("should allow reading of environment variables for edit file, succeeding if valid", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + await fs.writeFile(path.join(cwd, "commit-msg-file"), "foo"); + const result = cli(["--env", "variable"], { cwd, - env: {variable: 'commit-msg-file'}, + env: { variable: "commit-msg-file" }, })(); - expect(actual.exitCode).toBe(0); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should allow reading of environment variables for edit file, failing if invalid', async () => { - const cwd = await gitBootstrap('fixtures/simple'); +test("should allow reading of environment variables for edit file, failing if invalid", async () => { + const cwd = await gitBootstrap("fixtures/simple"); await fs.writeFile( - path.join(cwd, 'commit-msg-file'), - 'foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.' + path.join(cwd, "commit-msg-file"), + "foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.", ); - const actual = await cli(['--env', 'variable'], { + const result = cli(["--env", "variable"], { cwd, - env: {variable: 'commit-msg-file'}, + env: { variable: "commit-msg-file" }, })(); - expect(actual.exitCode).toBe(1); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should pick up parser preset and fail accordingly', async () => { - const cwd = await gitBootstrap('fixtures/parser-preset'); - const actual = await cli(['--parser-preset', './parser-preset'], {cwd})( - 'type(scope): subject' +test("should pick up parser preset and fail accordingly", async () => { + const cwd = await gitBootstrap("fixtures/parser-preset"); + const result = cli(["--parser-preset", "./parser-preset"], { cwd })( + "type(scope): subject", ); - expect(actual.exitCode).toBe(1); - expect(actual.stdout).toContain('may not be empty'); + const output = await result; + expect(output.stdout.trim()).toContain("may not be empty"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should pick up parser preset and succeed accordingly', async () => { - const cwd = await gitBootstrap('fixtures/parser-preset'); - const actual = await cli(['--parser-preset', './parser-preset'], {cwd})( - '----type(scope): subject' +test("should pick up parser preset and succeed accordingly", async () => { + const cwd = await gitBootstrap("fixtures/parser-preset"); + const result = cli(["--parser-preset", "./parser-preset"], { cwd })( + "----type(scope): subject", ); - expect(actual.exitCode).toBe(0); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should pick up config from outside git repo and fail accordingly', async () => { - const outer = await fixBootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); +test("should pick up config from outside git repo and fail accordingly", async () => { + const outer = await fixBootstrap("fixtures/outer-scope"); + const cwd = await git.init(path.join(outer, "inner-scope")); - const actual = await cli([], {cwd})('inner: bar'); - expect(actual.exitCode).toBe(1); + const result = cli([], { cwd })("inner: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should pick up config from outside git repo and succeed accordingly', async () => { - const outer = await fixBootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); +test("should pick up config from outside git repo and succeed accordingly", async () => { + const outer = await fixBootstrap("fixtures/outer-scope"); + const cwd = await git.init(path.join(outer, "inner-scope")); - const actual = await cli([], {cwd})('outer: bar'); - expect(actual.exitCode).toBe(0); + const result = cli([], { cwd })("outer: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should pick up config from inside git repo with precedence and succeed accordingly', async () => { - const outer = await fixBootstrap('fixtures/inner-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); +test("should pick up config from inside git repo with precedence and succeed accordingly", async () => { + const outer = await fixBootstrap("fixtures/inner-scope"); + const cwd = await git.init(path.join(outer, "inner-scope")); - const actual = await cli([], {cwd})('inner: bar'); - expect(actual.exitCode).toBe(0); + const result = cli([], { cwd })("inner: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should pick up config from inside git repo with precedence and fail accordingly', async () => { - const outer = await fixBootstrap('fixtures/inner-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); +test("should pick up config from inside git repo with precedence and fail accordingly", async () => { + const outer = await fixBootstrap("fixtures/inner-scope"); + const cwd = await git.init(path.join(outer, "inner-scope")); - const actual = await cli([], {cwd})('outer: bar'); - expect(actual.exitCode).toBe(1); + const result = cli([], { cwd })("outer: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should handle --amend with signoff', async () => { - const cwd = await gitBootstrap('fixtures/signoff'); - await writePkg({husky: {hooks: {'commit-msg': `'${bin}' -e`}}}, {cwd}); - - // await execa('npm', ['install'], {cwd}); // npm install is failing on windows machines - await execa('git', ['add', 'package.json'], {cwd}); - await execa( - 'git', - ['commit', '-m', '"test: this should work"', '--signoff'], - {cwd} +test("should handle --amend with signoff", async () => { + const cwd = await gitBootstrap("fixtures/signoff"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e` } } }, + { cwd }, ); - const commit = await execa('git', ['commit', '--amend', '--no-edit'], {cwd}); + + // await x('npm', ['install'], { nodeOptions: {cwd}}); // npm install is failing on windows machines + await x("git", ["add", "package.json"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", '"test: this should work"', "--signoff"], { + nodeOptions: { cwd }, + }); + const commit = await x("git", ["commit", "--amend", "--no-edit"], { + nodeOptions: { cwd }, + }); expect(commit).toBeTruthy(); }, 10000); -test('it uses parserOpts.commentChar when not using edit mode', async () => { - const cwd = await gitBootstrap('fixtures/comment-char'); - const input = 'header: foo\n$body\n'; +test("it uses parserOpts.commentChar when not using edit mode", async () => { + const cwd = await gitBootstrap("fixtures/comment-char"); + const input = "header: foo\n$body\n"; - const actual = await cli([], {cwd})(input); - expect(actual.stdout).toContain('[body-empty]'); - expect(actual.exitCode).toBe(1); + const result = cli([], { cwd })(input); + const output = await result; + expect(output.stdout.trim()).toContain("[body-empty]"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); test("it doesn't use parserOpts.commentChar when using edit mode", async () => { - const cwd = await gitBootstrap('fixtures/comment-char'); + const cwd = await gitBootstrap("fixtures/comment-char"); await fs.writeFile( - path.join(cwd, '.git', 'COMMIT_EDITMSG'), - 'header: foo\n\n$body\n' + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n$body\n", ); - const actual = await cli(['--edit', '.git/COMMIT_EDITMSG'], {cwd})(); - expect(actual.stdout).not.toContain('[body-empty]'); - expect(actual.exitCode).toBe(0); + const result = cli(["--edit", ".git/COMMIT_EDITMSG"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).not.toContain("[body-empty]"); + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('it uses core.commentChar git config when using edit mode', async () => { - const cwd = await gitBootstrap('fixtures/comment-char'); - await execa('git', ['config', '--local', 'core.commentChar', '$'], {cwd}); +test("it uses core.commentChar git config when using edit mode", async () => { + const cwd = await gitBootstrap("fixtures/comment-char"); + await x("git", ["config", "--local", "core.commentChar", "$"], { + nodeOptions: { cwd }, + }); await fs.writeFile( - path.join(cwd, '.git', 'COMMIT_EDITMSG'), - 'header: foo\n\n$body\n' + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n$body\n", ); - const actual = await cli(['--edit', '.git/COMMIT_EDITMSG'], {cwd})(); - expect(actual.stdout).toContain('[body-empty]'); - expect(actual.exitCode).toBe(1); + const result = cli(["--edit", ".git/COMMIT_EDITMSG"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toContain("[body-empty]"); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('it falls back to # for core.commentChar when using edit mode', async () => { - const cwd = await gitBootstrap('fixtures/comment-char'); +test("it falls back to # for core.commentChar when using edit mode", async () => { + const cwd = await gitBootstrap("fixtures/comment-char"); await fs.writeFile( - path.join(cwd, '.git', 'COMMIT_EDITMSG'), - 'header: foo\n\n#body\n' + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n#body\n", ); - const actual = await cli(['--edit', '.git/COMMIT_EDITMSG'], {cwd})(); - expect(actual.stdout).toContain('[body-empty]'); - expect(actual.stderr).toEqual(''); - expect(actual.exitCode).toBe(1); + const result = cli(["--edit", ".git/COMMIT_EDITMSG"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toContain("[body-empty]"); + expect(output.stderr).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should handle linting with issue prefixes', async () => { - const cwd = await gitBootstrap('fixtures/issue-prefixes'); - const actual = await cli([], {cwd})('foobar REF-1'); - expect(actual.exitCode).toBe(0); +test("should handle linting with issue prefixes", async () => { + const cwd = await gitBootstrap("fixtures/issue-prefixes"); + const result = cli([], { cwd })("foobar REF-1"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }, 10000); -test('should print full commit message when input from stdin fails', async () => { - const cwd = await gitBootstrap('fixtures/simple'); - const input = 'foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.'; +test("should print full commit message when input from stdin fails", async () => { + const cwd = await gitBootstrap("fixtures/simple"); + const input = "foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123."; // output text in plain text so we can compare it - const actual = await cli(['--color=false'], {cwd})(input); - - expect(actual.stdout).toContain(input); - expect(actual.exitCode).toBe(1); + const result = cli(["--color=false"], { cwd })(input); + const output = await result; + expect(output.stdout.trim()).toContain(input); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should not print commit message fully or partially when input succeeds', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const message = 'type: bar\n\nFoo bar bizz buzz.\n\nCloses #123.'; +test("should not print commit message fully or partially when input succeeds", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const message = "type: bar\n\nFoo bar bizz buzz.\n\nCloses #123."; // output text in plain text so we can compare it - const actual = await cli(['--color=false'], {cwd})(message); - - expect(actual.stdout).not.toContain(message); - expect(actual.stdout).not.toContain(message.split('\n')[0]); - expect(actual.exitCode).toBe(0); -}); - -test('should fail for invalid formatters from configuration', async () => { - const cwd = await gitBootstrap('fixtures/custom-formatter'); - const actual = await cli([], {cwd})('foo: bar'); - - expect(actual.stderr).toContain( - 'Using format custom-formatter, but cannot find the module' + const result = cli(["--color=false"], { cwd })(message); + const output = await result; + expect(output.stdout.trim()).not.toContain(message); + expect(output.stdout.trim()).not.toContain(message.split("\n")[0]); + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); +}); + +test("should fail for invalid formatters from configuration", async () => { + const cwd = await gitBootstrap("fixtures/custom-formatter"); + const result = cli([], { cwd })("foo: bar"); + const output = await result; + expect(output.stderr).toContain( + "Using format custom-formatter, but cannot find the module", ); - expect(actual.stdout).toEqual(''); - expect(actual.exitCode).toBe(1); + expect(output.stdout.trim()).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should skip linting if message matches ignores config', async () => { - const cwd = await gitBootstrap('fixtures/ignores'); - const actual = await cli([], {cwd})('WIP'); - expect(actual.exitCode).toBe(0); +test("should skip linting if message matches ignores config", async () => { + const cwd = await gitBootstrap("fixtures/ignores"); + const result = cli([], { cwd })("WIP"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should not skip linting if message does not match ignores config', async () => { - const cwd = await gitBootstrap('fixtures/ignores'); - const actual = await cli([], {cwd})('foo'); - expect(actual.exitCode).toBe(1); +test("should not skip linting if message does not match ignores config", async () => { + const cwd = await gitBootstrap("fixtures/ignores"); + const result = cli([], { cwd })("foo"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should not skip linting if defaultIgnores is false', async () => { - const cwd = await gitBootstrap('fixtures/default-ignores-false'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - expect(actual.exitCode).toBe(1); +test("should not skip linting if defaultIgnores is false", async () => { + const cwd = await gitBootstrap("fixtures/default-ignores-false"); + const result = cli([], { cwd })("fixup! foo: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should skip linting if defaultIgnores is true', async () => { - const cwd = await gitBootstrap('fixtures/default-ignores-true'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - expect(actual.exitCode).toBe(0); +test("should skip linting if defaultIgnores is true", async () => { + const cwd = await gitBootstrap("fixtures/default-ignores-true"); + const result = cli([], { cwd })("fixup! foo: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should skip linting if defaultIgnores is unset', async () => { - const cwd = await gitBootstrap('fixtures/default-ignores-unset'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - expect(actual.exitCode).toBe(0); +test("should skip linting if defaultIgnores is unset", async () => { + const cwd = await gitBootstrap("fixtures/default-ignores-unset"); + const result = cli([], { cwd })("fixup! foo: bar"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should fail for invalid formatters from flags', async () => { - const cwd = await gitBootstrap('fixtures/custom-formatter'); - const actual = await cli(['--format', 'through-flag'], {cwd})('foo: bar'); - - expect(actual.stderr).toContain( - 'Using format through-flag, but cannot find the module' +test("should fail for invalid formatters from flags", async () => { + const cwd = await gitBootstrap("fixtures/custom-formatter"); + const result = cli(["--format", "through-flag"], { cwd })("foo: bar"); + const output = await result; + expect(output.stderr).toContain( + "Using format through-flag, but cannot find the module", ); - expect(actual.stdout).toEqual(''); - expect(actual.exitCode).toBe(1); + expect(output.stdout.trim()).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); }); -test('should work with absolute formatter path', async () => { +test("should work with absolute formatter path", async () => { const formatterPath = path.resolve( __dirname, - '../fixtures/custom-formatter/formatters/custom.js' + "../fixtures/custom-formatter/formatters/custom.js", ); - const cwd = await gitBootstrap('fixtures/custom-formatter'); - const actual = await cli(['--format', formatterPath], {cwd})( - 'test: this should work' + const cwd = await gitBootstrap("fixtures/custom-formatter"); + const result = cli(["--format", formatterPath], { cwd })( + "test: this should work", ); - - expect(actual.stdout).toContain('custom-formatter-ok'); - expect(actual.exitCode).toBe(0); + const output = await result; + expect(output.stdout.trim()).toContain("custom-formatter-ok"); + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should work with relative formatter path', async () => { +test("should work with relative formatter path", async () => { const cwd = path.resolve( - await gitBootstrap('fixtures/custom-formatter'), - './formatters' + await gitBootstrap("fixtures/custom-formatter"), + "./formatters", ); - const actual = await cli(['--format', './custom.js'], {cwd})( - 'test: this should work' + const result = cli(["--format", "./custom.js"], { cwd })( + "test: this should work", ); - - expect(actual.stdout).toContain('custom-formatter-ok'); - expect(actual.exitCode).toBe(0); + const output = await result; + expect(output.stdout.trim()).toContain("custom-formatter-ok"); + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('strict: should exit with 3 on error', async () => { - const cwd = await gitBootstrap('fixtures/warning'); - const actual = await cli(['--strict'], {cwd})('foo: abcdef'); - expect(actual.exitCode).toBe(3); +test("strict: should exit with 3 on error", async () => { + const cwd = await gitBootstrap("fixtures/warning"); + const result = cli(["--strict"], { cwd })("foo: abcdef"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitLintError); }); -test('strict: should exit with 2 on warning', async () => { - const cwd = await gitBootstrap('fixtures/warning'); - const actual = await cli(['--strict'], {cwd})('feat: abcdef'); - expect(actual.exitCode).toBe(2); +test("strict: should exit with 2 on warning", async () => { + const cwd = await gitBootstrap("fixtures/warning"); + const result = cli(["--strict"], { cwd })("feat: abcdef"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitLintWarning); }); -test('strict: should exit with 0 on success', async () => { - const cwd = await gitBootstrap('fixtures/warning'); - const actual = await cli(['--strict'], {cwd})('feat: abc'); - expect(actual.exitCode).toBe(0); +test("strict: should exit with 0 on success", async () => { + const cwd = await gitBootstrap("fixtures/warning"); + const result = cli(["--strict"], { cwd })("feat: abc"); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintDefault); }); -test('should print help', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--help'], {cwd})(); - const version = require('../package.json').version; - const stdout = actual.stdout.replace(`@${version}`, '@dev'); +test("should print help", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--help"], { cwd })(); + const output = await result; + const version = require("../package.json").version; + const stdout = output.stdout.trim().replace(`@${version}`, "@dev"); expect(stdout).toMatchInlineSnapshot(` "@commitlint/cli@dev - Lint your commit messages @@ -520,7 +590,7 @@ test('should print help', async () => { Options: -c, --color toggle colored output [boolean] [default: true] - -g, --config path to the config file [string] + -g, --config path to the config file; result code 9 if config is missing [string] --print-config print resolved config [string] [choices: "", "text", "json"] -d, --cwd directory to execute in [string] [default: (Working Directory)] -e, --edit read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG [string] @@ -528,33 +598,38 @@ test('should print help', async () => { -x, --extends array of shareable configurations to extend [array] -H, --help-url help url in error message [string] -f, --from lower end of the commit range to lint; applies if edit=false [string] + --from-last-tag uses the last tag as the lower end of the commit range to lint; applies if edit=false and from is not set [boolean] --git-log-args additional git log arguments as space separated string, example '--first-parent --cherry-pick' [string] + -l, --last just analyze the last commit; applies if edit=false [boolean] -o, --format output format of the results [string] -p, --parser-preset configuration preset to use for conventional-commits-parser [string] -q, --quiet toggle console output [boolean] [default: false] -t, --to upper end of the commit range to lint; applies if edit=false [string] -V, --verbose enable verbose output for reports without problems [boolean] -s, --strict enable strict mode; result code 2 for warnings, 3 for errors [boolean] + --options path to a JSON file or Common.js module containing CLI options -v, --version display version information [boolean] -h, --help Show help [boolean]" `); }); -test('should print version', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--version'], {cwd})(); - expect(actual.stdout).toMatch('@commitlint/cli@'); +test("should print version", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--version"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toMatch("@commitlint/cli@"); }); -describe('should print config', () => { - test('should print config when flag is present but without value', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--print-config', 'text', '--no-color'], {cwd})(); - - const stdout = actual.stdout - .replace(/^{[^\n]/g, '{\n ') - .replace(/[^\n]}$/g, '\n}') - .replace(/(helpUrl:)\n[ ]+/, '$1 '); +describe("should print config", () => { + test("should print config when flag is present but without value", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--print-config", "text", "--no-color"], { cwd })(); + const output = await result; + const stdout = output.stdout + .trim() + .replace(/^{[^\n]/g, "{\n ") + .replace(/[^\n]}$/g, "\n}") + .replace(/(helpUrl:)\n[ ]+/, "$1 "); expect(stdout).toMatchInlineSnapshot(` "{ extends: [], @@ -570,14 +645,15 @@ describe('should print config', () => { `); }); - test('should print config when flag has `text` value', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--print-config=text', '--no-color'], {cwd})(); - - const stdout = actual.stdout - .replace(/^{[^\n]/g, '{\n ') - .replace(/[^\n]}$/g, '\n}') - .replace(/(helpUrl:)\n[ ]+/, '$1 '); + test("should print config when flag has `text` value", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--print-config=text", "--no-color"], { cwd })(); + const output = await result; + const stdout = output.stdout + .trim() + .replace(/^{[^\n]/g, "{\n ") + .replace(/[^\n]}$/g, "\n}") + .replace(/(helpUrl:)\n[ ]+/, "$1 "); expect(stdout).toMatchInlineSnapshot(` "{ extends: [], @@ -593,19 +669,19 @@ describe('should print config', () => { `); }); - test('should print config when flag has `json` value', async () => { - const cwd = await gitBootstrap('fixtures/default'); - const actual = await cli(['--print-config=json', '--no-color'], {cwd})(); - - expect(actual.stdout).toMatchInlineSnapshot( - `"{"extends":[],"formatter":"@commitlint/format","plugins":{},"rules":{"type-enum":[2,"never",["foo"]]},"helpUrl":"https://github.com/conventional-changelog/commitlint/#what-is-commitlint","prompt":{}}"` + test("should print config when flag has `json` value", async () => { + const cwd = await gitBootstrap("fixtures/default"); + const result = cli(["--print-config=json", "--no-color"], { cwd })(); + const output = await result; + expect(output.stdout.trim()).toMatchInlineSnapshot( + `"{"extends":[],"formatter":"@commitlint/format","plugins":{},"rules":{"type-enum":[2,"never",["foo"]]},"helpUrl":"https://github.com/conventional-changelog/commitlint/#what-is-commitlint","prompt":{}}"`, ); }); }); async function writePkg(payload: unknown, options: TestOptions) { - const pkgPath = path.join(options.cwd, 'package.json'); - const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf-8')); + const pkgPath = path.join(options.cwd, "package.json"); + const pkg = JSON.parse(await fs.readFile(pkgPath, "utf-8")); const result = merge(pkg, payload); - await fs.writeFile(pkgPath, JSON.stringify(result, null, ' ')); + await fs.writeFile(pkgPath, JSON.stringify(result, null, " ")); } diff --git a/@commitlint/cli/src/cli.ts b/@commitlint/cli/src/cli.ts index 367a5186d5..50cfed53f9 100644 --- a/@commitlint/cli/src/cli.ts +++ b/@commitlint/cli/src/cli.ts @@ -1,11 +1,11 @@ -import {createRequire} from 'module'; -import path from 'path'; -import {fileURLToPath, pathToFileURL} from 'url'; -import util from 'util'; - -import lint from '@commitlint/lint'; -import load from '@commitlint/load'; -import read from '@commitlint/read'; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import util from "node:util"; + +import lint from "@commitlint/lint"; +import load, { resolveFromSilent, resolveGlobalSilent } from "@commitlint/load"; +import read from "@commitlint/read"; import type { Formatter, LintOptions, @@ -13,136 +13,150 @@ import type { ParserPreset, QualifiedConfig, UserConfig, -} from '@commitlint/types'; -import type {Options} from 'conventional-commits-parser'; -import {execa, type ExecaError} from 'execa'; -import resolveFrom from 'resolve-from'; -import {resolveGlobalSilent} from 'resolve-global'; -import yargs, {type Arguments} from 'yargs'; +} from "@commitlint/types"; +import type { Options } from "conventional-commits-parser"; +import { x } from "tinyexec"; +import yargs, { type Arguments } from "yargs"; -import {CliFlags} from './types.js'; +import { CliFlags } from "./types.js"; -import {CliError} from './cli-error.js'; +import { CliError, ExitCode } from "./cli-error.js"; const require = createRequire(import.meta.url); -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); const dynamicImport = async <T>(id: string): Promise<T> => { const imported = await import( path.isAbsolute(id) ? pathToFileURL(id).toString() : id ); - return ('default' in imported && imported.default) || imported; + return ("default" in imported && imported.default) || imported; }; -const pkg: typeof import('../package.json') = require('../package.json'); +const pkg: typeof import("../package.json") = require("../package.json"); -const gitDefaultCommentChar = '#'; +const gitDefaultCommentChar = "#"; const cli = yargs(process.argv.slice(2)) .options({ color: { - alias: 'c', + alias: "c", default: true, - description: 'toggle colored output', - type: 'boolean', + description: "toggle colored output", + type: "boolean", }, config: { - alias: 'g', - description: 'path to the config file', - type: 'string', + alias: "g", + description: + "path to the config file; result code 9 if config is missing", + type: "string", }, - 'print-config': { - choices: ['', 'text', 'json'], - description: 'print resolved config', - type: 'string', + "print-config": { + choices: ["", "text", "json"], + description: "print resolved config", + type: "string", }, cwd: { - alias: 'd', + alias: "d", default: process.cwd(), - defaultDescription: '(Working Directory)', - description: 'directory to execute in', - type: 'string', + defaultDescription: "(Working Directory)", + description: "directory to execute in", + type: "string", }, edit: { - alias: 'e', + alias: "e", description: - 'read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG', - type: 'string', + "read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG", + type: "string", }, env: { - alias: 'E', + alias: "E", description: - 'check message in the file at path given by environment variable value', - type: 'string', + "check message in the file at path given by environment variable value", + type: "string", }, extends: { - alias: 'x', - description: 'array of shareable configurations to extend', - type: 'array', + alias: "x", + description: "array of shareable configurations to extend", + type: "array", }, - 'help-url': { - alias: 'H', - type: 'string', - description: 'help url in error message', + "help-url": { + alias: "H", + type: "string", + description: "help url in error message", }, from: { - alias: 'f', + alias: "f", + description: + "lower end of the commit range to lint; applies if edit=false", + type: "string", + }, + "from-last-tag": { description: - 'lower end of the commit range to lint; applies if edit=false', - type: 'string', + "uses the last tag as the lower end of the commit range to lint; applies if edit=false and from is not set", + type: "boolean", }, - 'git-log-args': { + "git-log-args": { description: "additional git log arguments as space separated string, example '--first-parent --cherry-pick'", - type: 'string', + type: "string", + }, + last: { + alias: "l", + description: "just analyze the last commit; applies if edit=false", + type: "boolean", }, format: { - alias: 'o', - description: 'output format of the results', - type: 'string', + alias: "o", + description: "output format of the results", + type: "string", }, - 'parser-preset': { - alias: 'p', + "parser-preset": { + alias: "p", description: - 'configuration preset to use for conventional-commits-parser', - type: 'string', + "configuration preset to use for conventional-commits-parser", + type: "string", }, quiet: { - alias: 'q', + alias: "q", default: false, - description: 'toggle console output', - type: 'boolean', + description: "toggle console output", + type: "boolean", }, to: { - alias: 't', + alias: "t", description: - 'upper end of the commit range to lint; applies if edit=false', - type: 'string', + "upper end of the commit range to lint; applies if edit=false", + type: "string", }, verbose: { - alias: 'V', - type: 'boolean', - description: 'enable verbose output for reports without problems', + alias: "V", + type: "boolean", + description: "enable verbose output for reports without problems", }, strict: { - alias: 's', - type: 'boolean', + alias: "s", + type: "boolean", description: - 'enable strict mode; result code 2 for warnings, 3 for errors', + "enable strict mode; result code 2 for warnings, 3 for errors", }, }) .version( - 'version', - 'display version information', - `${pkg.name}@${pkg.version}` + "version", + "display version information", + `${pkg.name}@${pkg.version}`, + ) + .alias("v", "version") + .help("help") + .alias("h", "help") + .config( + "options", + "path to a JSON file or Common.js module containing CLI options", + require, ) - .alias('v', 'version') - .help('help') - .alias('h', 'help') .usage(`${pkg.name}@${pkg.version} - ${pkg.description}\n`) .usage( - `[input] reads from stdin if --edit, --env, --from and --to are omitted` + `[input] reads from stdin if --edit, --env, --from and --to are omitted`, ) .strict(); @@ -162,13 +176,13 @@ main(cli.argv).catch((err) => { }); async function stdin() { - let result = ''; + let result = ""; if (process.stdin.isTTY) { return result; } - process.stdin.setEncoding('utf8'); + process.stdin.setEncoding("utf8"); for await (const chunk of process.stdin) { result += chunk; @@ -184,30 +198,30 @@ type MainArgsPromise = Promise<MainArgsObject>; type MainArgs = MainArgsObject | MainArgsPromise; async function resolveArgs(args: MainArgs): Promise<MainArgsObject> { - return typeof args.then === 'function' ? await args : args; + return typeof args.then === "function" ? await args : args; } async function main(args: MainArgs): Promise<void> { const options = await resolveArgs(args); - if (typeof options.edit === 'undefined') { + if (typeof options.edit === "undefined") { options.edit = false; } const raw = options._; const flags = normalizeFlags(options); - if (typeof options['print-config'] === 'string') { + if (typeof options["print-config"] === "string") { const loaded = await load(getSeed(flags), { cwd: flags.cwd, file: flags.config, }); - switch (options['print-config']) { - case 'json': + switch (options["print-config"]) { + case "json": console.log(JSON.stringify(loaded)); return; - case 'text': + case "text": default: console.log(util.inspect(loaded, false, null, options.color)); return; @@ -216,27 +230,42 @@ async function main(args: MainArgs): Promise<void> { const fromStdin = checkFromStdin(raw, flags); + if ( + Object.hasOwn(flags, "last") && + (Object.hasOwn(flags, "from") || Object.hasOwn(flags, "to") || flags.edit) + ) { + const err = new CliError( + "Please use the --last flag alone. The --last flag should not be used with --to or --from or --edit.", + pkg.name, + ); + cli.showHelp("log"); + console.log(err.message); + throw err; + } + const input = await (fromStdin ? stdin() : read({ to: flags.to, from: flags.from, + fromLastTag: flags["from-last-tag"], + last: flags.last, edit: flags.edit, cwd: flags.cwd, - gitLogArgs: flags['git-log-args'], - })); + gitLogArgs: flags["git-log-args"], + })); const messages = (Array.isArray(input) ? input : [input]) - .filter((message) => typeof message === 'string') - .filter((message) => message.trim() !== '') + .filter((message) => typeof message === "string") + .filter((message) => message.trim() !== "") .filter(Boolean); if (messages.length === 0 && !checkFromRepository(flags)) { const err = new CliError( - '[input] is required: supply via stdin, or --env or --edit or --from and --to', - pkg.name + "[input] is required: supply via stdin, or --env or --edit or --last or --from and --to", + pkg.name, ); - cli.showHelp('log'); + cli.showHelp("log"); console.log(err.message); throw err; } @@ -246,7 +275,7 @@ async function main(args: MainArgs): Promise<void> { file: flags.config, }); const parserOpts = selectParserOpts(loaded.parserPreset); - const opts: LintOptions & {parserOpts: Options} = { + const opts: LintOptions & { parserOpts: Options } = { parserOpts: {}, plugins: {}, ignores: [], @@ -269,29 +298,28 @@ async function main(args: MainArgs): Promise<void> { // If reading from `.git/COMMIT_EDIT_MSG`, strip comments using // core.commentChar from git configuration, falling back to '#'. if (flags.edit) { - try { - const {stdout} = await execa('git', ['config', 'core.commentChar']); - opts.parserOpts.commentChar = stdout.trim() || gitDefaultCommentChar; - } catch (e) { - const execaError = e as ExecaError; - // git config returns exit code 1 when the setting is unset, - // don't warn in this case. - if (!execaError.failed || execaError.exitCode !== 1) { - console.warn( - 'Could not determine core.commentChar git configuration', - e - ); - } + const result = x("git", ["config", "core.commentChar"]); + const output = await result; + + if (result.exitCode && result.exitCode > 1) { + console.warn( + "Could not determine core.commentChar git configuration", + output.stderr, + ); opts.parserOpts.commentChar = gitDefaultCommentChar; + } else { + opts.parserOpts.commentChar = + output.stdout.trim() || gitDefaultCommentChar; } } const results = await Promise.all( - messages.map((message) => lint(message, loaded.rules, opts)) + messages.map((message) => lint(message, loaded.rules, opts)), ); + let isRulesEmpty = false; if (Object.keys(loaded.rules).length === 0) { - let input = ''; + let input = ""; if (results.length !== 0) { input = results[0].input; @@ -303,17 +331,19 @@ async function main(args: MainArgs): Promise<void> { { level: 2, valid: false, - name: 'empty-rules', + name: "empty-rules", message: [ - 'Please add rules to your `commitlint.config.js`', - ' - Getting started guide: https://commitlint.js.org/guides/getting-started', - ' - Example config: https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/config-conventional/src/index.ts', - ].join('\n'), + "Please add rules to your `commitlint.config.js`", + " - Getting started guide: https://commitlint.js.org/guides/getting-started", + " - Example config: https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/config-conventional/src/index.ts", + ].join("\n"), }, ], warnings: [], input, }); + + isRulesEmpty = true; } const report = results.reduce<{ @@ -335,10 +365,10 @@ async function main(args: MainArgs): Promise<void> { errorCount: 0, warningCount: 0, results: [], - } + }, ); - const helpUrl = flags['help-url']?.trim() || loaded.helpUrl; + const helpUrl = flags["help-url"]?.trim() || loaded.helpUrl; const output = format(report, { color: flags.color, @@ -346,18 +376,21 @@ async function main(args: MainArgs): Promise<void> { helpUrl, }); - if (!flags.quiet && output !== '') { + if (!flags.quiet && output !== "") { console.log(output); } if (flags.strict) { if (report.errorCount > 0) { - throw new CliError(output, pkg.name, 3); + throw new CliError(output, pkg.name, ExitCode.CommitLintError); } if (report.warningCount > 0) { - throw new CliError(output, pkg.name, 2); + throw new CliError(output, pkg.name, ExitCode.CommitLintWarning); } } + if (isRulesEmpty) { + throw new CliError(output, pkg.name, ExitCode.CommitlintInvalidArgument); + } if (!report.valid) { throw new CliError(output, pkg.name); } @@ -376,7 +409,12 @@ function checkFromEdit(flags: CliFlags): boolean { } function checkFromHistory(flags: CliFlags): boolean { - return typeof flags.from === 'string' || typeof flags.to === 'string'; + return ( + typeof flags.from === "string" || + typeof flags["from-last-tag"] === "boolean" || + typeof flags.to === "string" || + typeof flags.last === "boolean" + ); } function normalizeFlags(flags: CliFlags): CliFlags { @@ -391,18 +429,18 @@ function getEditValue(flags: CliFlags) { if (flags.env) { if (!(flags.env in process.env)) { throw new Error( - `Received '${flags.env}' as value for -E | --env, but environment variable '${flags.env}' is not available globally` + `Received '${flags.env}' as value for -E | --env, but environment variable '${flags.env}' is not available globally`, ); } return process.env[flags.env]; } - const {edit} = flags; + const { edit } = flags; // If the edit flag is set but empty (i.e '-e') we default // to .git/COMMIT_EDITMSG - if (edit === '') { + if (edit === "") { return true; } - if (typeof edit === 'boolean') { + if (typeof edit === "boolean") { return edit; } // The recommended method to specify -e with husky was `commitlint -e $HUSKY_GIT_PARAMS` @@ -410,22 +448,22 @@ function getEditValue(flags: CliFlags) { // use a different syntax // See https://github.com/conventional-changelog/commitlint/issues/103 for details // This has been superceded by the `-E GIT_PARAMS` / `-E HUSKY_GIT_PARAMS` - const isGitParams = edit === '$GIT_PARAMS' || edit === '%GIT_PARAMS%'; + const isGitParams = edit === "$GIT_PARAMS" || edit === "%GIT_PARAMS%"; const isHuskyParams = - edit === '$HUSKY_GIT_PARAMS' || edit === '%HUSKY_GIT_PARAMS%'; + edit === "$HUSKY_GIT_PARAMS" || edit === "%HUSKY_GIT_PARAMS%"; if (isGitParams || isHuskyParams) { console.warn(`Using environment variable syntax (${edit}) in -e |\ --edit is deprecated. Use '{-E|--env} HUSKY_GIT_PARAMS instead'`); - if (isGitParams && 'GIT_PARAMS' in process.env) { + if (isGitParams && "GIT_PARAMS" in process.env) { return process.env.GIT_PARAMS; } - if ('HUSKY_GIT_PARAMS' in process.env) { + if ("HUSKY_GIT_PARAMS" in process.env) { return process.env.HUSKY_GIT_PARAMS; } throw new Error( - `Received ${edit} as value for -e | --edit, but GIT_PARAMS or HUSKY_GIT_PARAMS are not available globally.` + `Received ${edit} as value for -e | --edit, but GIT_PARAMS or HUSKY_GIT_PARAMS are not available globally.`, ); } return edit; @@ -433,19 +471,19 @@ function getEditValue(flags: CliFlags) { function getSeed(flags: CliFlags): UserConfig { const n = (flags.extends || []).filter( - (i): i is string => typeof i === 'string' + (i): i is string => typeof i === "string", ); return n.length > 0 - ? {extends: n, parserPreset: flags['parser-preset']} - : {parserPreset: flags['parser-preset']}; + ? { extends: n, parserPreset: flags["parser-preset"] } + : { parserPreset: flags["parser-preset"] }; } function selectParserOpts(parserPreset: ParserPreset | undefined) { - if (typeof parserPreset !== 'object') { + if (typeof parserPreset !== "object") { return undefined; } - if (typeof parserPreset.parserOpts !== 'object') { + if (typeof parserPreset.parserOpts !== "object") { return undefined; } @@ -454,12 +492,12 @@ function selectParserOpts(parserPreset: ParserPreset | undefined) { function loadFormatter( config: QualifiedConfig, - flags: CliFlags + flags: CliFlags, ): Promise<Formatter> { - const moduleName = flags.format || config.formatter || '@commitlint/format'; + const moduleName = flags.format || config.formatter || "@commitlint/format"; const modulePath = - resolveFrom.silent(__dirname, moduleName) || - resolveFrom.silent(flags.cwd, moduleName) || + resolveFromSilent(moduleName, __dirname) || + resolveFromSilent(moduleName, flags.cwd) || resolveGlobalSilent(moduleName); if (modulePath) { @@ -470,7 +508,7 @@ function loadFormatter( } // Catch unhandled rejections globally -process.on('unhandledRejection', (reason, promise) => { - console.log('Unhandled Rejection at: Promise ', promise, ' reason: ', reason); +process.on("unhandledRejection", (reason, promise) => { + console.log("Unhandled Rejection at: Promise ", promise, " reason: ", reason); throw reason; }); diff --git a/@commitlint/cli/src/types.ts b/@commitlint/cli/src/types.ts index a622cb05fe..cbc9a8956a 100644 --- a/@commitlint/cli/src/types.ts +++ b/@commitlint/cli/src/types.ts @@ -6,17 +6,19 @@ export interface CliFlags { env?: string; extends?: (string | number)[]; help?: boolean; - 'help-url'?: string; + "help-url"?: string; from?: string; - 'git-log-args'?: string; + "from-last-tag"?: boolean; + "git-log-args"?: string; + last?: boolean; format?: string; - 'parser-preset'?: string; + "parser-preset"?: string; quiet: boolean; to?: string; version?: boolean; verbose?: boolean; /** @type {'' | 'text' | 'json'} */ - 'print-config'?: string; + "print-config"?: string; strict?: boolean; _: (string | number)[]; $0: string; diff --git a/@commitlint/config-angular-type-enum/CHANGELOG.md b/@commitlint/config-angular-type-enum/CHANGELOG.md index eb6eb69b82..40e8a025b5 100644 --- a/@commitlint/config-angular-type-enum/CHANGELOG.md +++ b/@commitlint/config-angular-type-enum/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-angular-type-enum/README.md b/@commitlint/config-angular-type-enum/README.md index 6ffd9dd17e..09df8aa8de 100644 --- a/@commitlint/config-angular-type-enum/README.md +++ b/@commitlint/config-angular-type-enum/README.md @@ -23,7 +23,7 @@ echo "build: bar" | commitlint # passes ```js // commitlint.config.js -const types = require('@commitlint/config-angular-type-enum'); +const types = require("@commitlint/config-angular-type-enum"); // Use as rule creating errors for non-allowed types module.exports = { @@ -35,7 +35,7 @@ module.exports = { // Warn for non-allowed types module.exports = { rules: { - 'type-enum': [1, 'always', types.values()], + "type-enum": [1, "always", types.values()], }, }; ``` diff --git a/@commitlint/config-angular-type-enum/index.js b/@commitlint/config-angular-type-enum/index.js index 485701638c..658d6259d2 100644 --- a/@commitlint/config-angular-type-enum/index.js +++ b/@commitlint/config-angular-type-enum/index.js @@ -1,19 +1,19 @@ const types = [ - 'build', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test', + "build", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", ]; export default { rules: { - 'type-enum': [2, 'always', types], + "type-enum": [2, "always", types], }, value: () => types, }; diff --git a/@commitlint/config-angular-type-enum/package.json b/@commitlint/config-angular-type-enum/package.json index fb4d4f5dca..738e26f96f 100644 --- a/@commitlint/config-angular-type-enum/package.json +++ b/@commitlint/config-angular-type-enum/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/config-angular-type-enum", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing the angular commit convention types", + "main": "index.js", "files": [ "index.js" ], @@ -31,7 +32,7 @@ "node": ">=v18" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-angular/CHANGELOG.md b/@commitlint/config-angular/CHANGELOG.md index 048adfe266..bcbc765e49 100644 --- a/@commitlint/config-angular/CHANGELOG.md +++ b/@commitlint/config-angular/CHANGELOG.md @@ -3,6 +3,86 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-angular/README.md b/@commitlint/config-angular/README.md index 43d0d7731f..49bfc60726 100644 --- a/@commitlint/config-angular/README.md +++ b/@commitlint/config-angular/README.md @@ -2,7 +2,7 @@ Lint your commits, angular-style -Shareable `commitlint` config enforcing the [Angular commit convention](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit). +Shareable `commitlint` config enforcing the [Angular commit convention](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit). Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). ## Getting started @@ -128,7 +128,7 @@ echo "fix: some message" # passes - **rule**: `never` The [angular commit -convention](hhttps://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit) +convention](hhttps://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit) does not use a `!` to define a breaking change in the commit subject. If you want to use this feature please consider using the [conventional commit config](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional#commitlintconfig-conventional). diff --git a/@commitlint/config-angular/index.js b/@commitlint/config-angular/index.js index c433e75baf..81848fb82c 100644 --- a/@commitlint/config-angular/index.js +++ b/@commitlint/config-angular/index.js @@ -1,22 +1,24 @@ -import typeEnum from '@commitlint/config-angular-type-enum'; +import typeEnum from "@commitlint/config-angular-type-enum"; export default { - parserPreset: {parserOpts: {headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/}}, + parserPreset: { + parserOpts: { headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/ }, + }, rules: { - 'subject-exclamation-mark': [2, 'never'], - 'body-leading-blank': [1, 'always'], - 'footer-leading-blank': [1, 'always'], - 'header-max-length': [2, 'always', 72], - 'scope-case': [2, 'always', 'lower-case'], - 'subject-case': [ + "subject-exclamation-mark": [2, "never"], + "body-leading-blank": [1, "always"], + "footer-leading-blank": [1, "always"], + "header-max-length": [2, "always", 72], + "scope-case": [2, "always", "lower-case"], + "subject-case": [ 2, - 'never', - ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + "never", + ["sentence-case", "start-case", "pascal-case", "upper-case"], ], - 'subject-empty': [2, 'never'], - 'subject-full-stop': [2, 'never', '.'], - 'type-case': [2, 'always', 'lower-case'], - 'type-empty': [2, 'never'], - 'type-enum': typeEnum.rules['type-enum'], + "subject-empty": [2, "never"], + "subject-full-stop": [2, "never", "."], + "type-case": [2, "always", "lower-case"], + "type-empty": [2, "never"], + "type-enum": typeEnum.rules["type-enum"], }, }; diff --git a/@commitlint/config-angular/index.test.js b/@commitlint/config-angular/index.test.js index 607b12e8fc..d76a84c585 100644 --- a/@commitlint/config-angular/index.test.js +++ b/@commitlint/config-angular/index.test.js @@ -1,108 +1,108 @@ -import {test, expect} from 'vitest'; -import lint from '@commitlint/lint'; +import { test, expect } from "vitest"; +import lint from "@commitlint/lint"; -import config from './index.js'; +import config from "./index.js"; -const {rules, parserPreset} = config; +const { rules, parserPreset } = config; const lintMessage = async (message) => { const parserOpts = parserPreset.parserOpts; - const m = message.replace(/^\s+/, '').trim(); - const result = await lint(m, rules, {parserOpts}); + const m = message.replace(/^\s+/, "").trim(); + const result = await lint(m, rules, { parserOpts }); if (result.errors.length > 1) { throw new Error( - 'Commit test should only have one error message to validate against' + "Commit test should only have one error message to validate against", ); } if (result.warnings.length > 1) { throw new Error( - 'Commit test should only have one warning message to validate against' + "Commit test should only have one warning message to validate against", ); } return result; }; -test('a valid commit message', async () => { - const result = await lintMessage('test: a valid angular commit'); +test("a valid commit message", async () => { + const result = await lintMessage("test: a valid angular commit"); expect(result.valid).toBe(true); expect(result.errors).toStrictEqual([]); expect(result.warnings).toStrictEqual([]); }); -test('a valid message with a scope', async () => { +test("a valid message with a scope", async () => { const result = await lintMessage( - 'test(scope): a valid angular commit with a scope' + "test(scope): a valid angular commit with a scope", ); expect(result.valid).toBe(true); expect(result.errors).toStrictEqual([]); expect(result.warnings).toStrictEqual([]); }); -test('a valid multi line commit', async () => { +test("a valid multi line commit", async () => { const result = await lintMessage( `test(scope): a valid angular commit with a scope - Some content in the body` + Some content in the body`, ); expect(result.valid).toBe(true); expect(result.errors).toStrictEqual([]); expect(result.warnings).toStrictEqual([]); }); -test('a leading blank line after header', async () => { +test("a leading blank line after header", async () => { const result = await lintMessage( `test(scope): a valid angular commit with a scope - Some content in the body` + Some content in the body`, ); expect(result.valid).toBe(true); expect(result.errors).toStrictEqual([]); - expect(result.warnings[0].message).toBe('body must have leading blank line'); + expect(result.warnings[0].message).toBe("body must have leading blank line"); }); -test('an invalid scope', async () => { - const result = await lintMessage(`no: no is not not an invalid commit type`); +test("an invalid scope", async () => { + const result = await lintMessage(`no: no is not an invalid commit type`); expect(result.valid).toBe(false); expect(result.errors[0].message).toBe( - 'type must be one of [build, ci, docs, feat, fix, perf, refactor, revert, style, test]' + "type must be one of [build, ci, docs, feat, fix, perf, refactor, revert, style, test]", ); expect(result.warnings).toStrictEqual([]); }); -test('a long header', async () => { +test("a long header", async () => { const result = await lintMessage( - `test: that its an error when there is ia realllllllllllllllllllllly long header` + `test: that its an error when there is ia realllllllllllllllllllllly long header`, ); expect(result.valid).toBe(false); expect(result.errors[0].message).toBe( - 'header must not be longer than 72 characters, current length is 79' + "header must not be longer than 72 characters, current length is 79", ); expect(result.warnings).toStrictEqual([]); }); -test('message header with ! in it', async () => { +test("message header with ! in it", async () => { const result = await lintMessage(`test!: with a breaking change in the type`); expect(result.valid).toBe(false); expect(result.errors[0].message).toBe( - 'subject must not have an exclamation mark in the subject to identify a breaking change' + "subject must not have an exclamation mark in the subject to identify a breaking change", ); expect(result.warnings).toStrictEqual([]); }); -test('message header with ! in it and a scope', async () => { +test("message header with ! in it and a scope", async () => { const result = await lintMessage( - `test(scope)!: with a breaking change in the type` + `test(scope)!: with a breaking change in the type`, ); expect(result.valid).toBe(false); expect(result.errors[0].message).toBe( - 'subject must not have an exclamation mark in the subject to identify a breaking change' + "subject must not have an exclamation mark in the subject to identify a breaking change", ); expect(result.warnings).toStrictEqual([]); }); diff --git a/@commitlint/config-angular/package.json b/@commitlint/config-angular/package.json index ee4ba3dd98..1f801a47df 100644 --- a/@commitlint/config-angular/package.json +++ b/@commitlint/config-angular/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/config-angular", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing the angular commit convention", "main": "index.js", "files": [ @@ -32,11 +32,11 @@ "node": ">=v18" }, "devDependencies": { - "@commitlint/lint": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/lint": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/config-angular-type-enum": "^19.0.0" + "@commitlint/config-angular-type-enum": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-conventional/CHANGELOG.md b/@commitlint/config-conventional/CHANGELOG.md index cb5d0a0680..ab54bcc927 100644 --- a/@commitlint/config-conventional/CHANGELOG.md +++ b/@commitlint/config-conventional/CHANGELOG.md @@ -3,6 +3,73 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) @@ -66,6 +133,17 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline +## [18.6.3](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v18.6.3) (2024-03-11) + + +### Bug Fixes + +* add missing entry `wrapper.mjs` ([#3966](https://github.com/conventional-changelog/commitlint/issues/3966)) ([c2c3c7c](https://github.com/conventional-changelog/commitlint/commit/c2c3c7cdc05c07c185cc2c2635a06835352c4504)), closes [#3958](https://github.com/conventional-changelog/commitlint/issues/3958) + + + + + ## [18.6.2](https://github.com/conventional-changelog/commitlint/compare/v18.6.1...v18.6.2) (2024-02-14) diff --git a/@commitlint/config-conventional/package.json b/@commitlint/config-conventional/package.json index 95b13c058c..bb71215c86 100644 --- a/@commitlint/config-conventional/package.json +++ b/@commitlint/config-conventional/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/config-conventional", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing conventional commits", "main": "lib/index.js", "files": [ @@ -35,12 +35,12 @@ "node": ">=v18" }, "devDependencies": { - "@commitlint/lint": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/lint": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "conventional-changelog-conventionalcommits": "^7.0.2" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-conventional/src/index.test.ts b/@commitlint/config-conventional/src/index.test.ts index 683c401754..3603fe74f6 100644 --- a/@commitlint/config-conventional/src/index.test.ts +++ b/@commitlint/config-conventional/src/index.test.ts @@ -1,53 +1,53 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {pathToFileURL} from 'url'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; -import lint from '@commitlint/lint'; +import lint from "@commitlint/lint"; -import config from './index.js'; +import config from "./index.js"; -const {rules, parserPreset} = config; +const { rules, parserPreset } = config; const dynamicImport = async (id: string) => { const imported = await import( path.isAbsolute(id) ? pathToFileURL(id).toString() : id ); - return ('default' in imported && imported.default) || imported; + return ("default" in imported && imported.default) || imported; }; const commitLint = async (message: string) => { const preset = await (await dynamicImport(parserPreset))(); - return lint(message, rules, {...preset}); + return lint(message, rules, { ...preset }); }; const messages = { - invalidTypeEnum: 'foo: some message', - invalidTypeCase: 'FIX: some message', - invalidTypeEmpty: ': some message', + invalidTypeEnum: "foo: some message", + invalidTypeCase: "FIX: some message", + invalidTypeEmpty: ": some message", invalidSubjectCases: [ - 'fix(scope): Some message', - 'fix(scope): Some Message', - 'fix(scope): SomeMessage', - 'fix(scope): SOMEMESSAGE', + "fix(scope): Some message", + "fix(scope): Some Message", + "fix(scope): SomeMessage", + "fix(scope): SOMEMESSAGE", ], - invalidSubjectEmpty: 'fix:', - invalidSubjectFullStop: 'fix: some message.', + invalidSubjectEmpty: "fix:", + invalidSubjectFullStop: "fix: some message.", invalidHeaderMaxLength: - 'fix: some message that is way too long and breaks the line max-length by several characters since the max is 100', + "fix: some message that is way too long and breaks the line max-length by several characters since the max is 100", warningFooterLeadingBlank: - 'fix: some message\n\nbody\nBREAKING CHANGE: It will be significant', + "fix: some message\n\nbody\nBREAKING CHANGE: It will be significant", invalidFooterMaxLineLength: 'fix: some message\n\nbody\n\nBREAKING CHANGE: footer with multiple lines\nhas a message that is way too long and will break the line rule "line-max-length" by several characters', - warningBodyLeadingBlank: 'fix: some message\nbody', + warningBodyLeadingBlank: "fix: some message\nbody", invalidBodyMaxLineLength: 'fix: some message\n\nbody with multiple lines\nhas a message that is way too long and will break the line rule "line-max-length" by several characters', validMessages: [ - 'fix: some message', - 'fix(scope): some message', - 'fix(scope): some Message', - 'fix(scope): some message\n\nBREAKING CHANGE: it will be significant!', - 'fix(scope): some message\n\nbody', - 'fix(scope)!: some message\n\nbody', + "fix: some message", + "fix(scope): some message", + "fix(scope): some Message", + "fix(scope): some message\n\nBREAKING CHANGE: it will be significant!", + "fix(scope): some message\n\nbody", + "fix(scope)!: some message\n\nbody", ], }; @@ -55,58 +55,58 @@ const errors = { typeEnum: { level: 2, message: - 'type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]', - name: 'type-enum', + "type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]", + name: "type-enum", valid: false, }, typeCase: { level: 2, - message: 'type must be lower-case', - name: 'type-case', + message: "type must be lower-case", + name: "type-case", valid: false, }, typeEmpty: { level: 2, - message: 'type may not be empty', - name: 'type-empty', + message: "type may not be empty", + name: "type-empty", valid: false, }, subjectCase: { level: 2, message: - 'subject must not be sentence-case, start-case, pascal-case, upper-case', - name: 'subject-case', + "subject must not be sentence-case, start-case, pascal-case, upper-case", + name: "subject-case", valid: false, }, subjectEmpty: { level: 2, - message: 'subject may not be empty', - name: 'subject-empty', + message: "subject may not be empty", + name: "subject-empty", valid: false, }, subjectFullStop: { level: 2, - message: 'subject may not end with full stop', - name: 'subject-full-stop', + message: "subject may not end with full stop", + name: "subject-full-stop", valid: false, }, headerMaxLength: { level: 2, message: - 'header must not be longer than 100 characters, current length is 112', - name: 'header-max-length', + "header must not be longer than 100 characters, current length is 112", + name: "header-max-length", valid: false, }, footerMaxLineLength: { level: 2, message: "footer's lines must not be longer than 100 characters", - name: 'footer-max-line-length', + name: "footer-max-line-length", valid: false, }, bodyMaxLineLength: { level: 2, message: "body's lines must not be longer than 100 characters", - name: 'body-max-line-length', + name: "body-max-line-length", valid: false, }, }; @@ -114,42 +114,44 @@ const errors = { const warnings = { footerLeadingBlank: { level: 1, - message: 'footer must have leading blank line', - name: 'footer-leading-blank', + message: "footer must have leading blank line", + name: "footer-leading-blank", valid: false, }, bodyLeadingBlank: { level: 1, - message: 'body must have leading blank line', - name: 'body-leading-blank', + message: "body must have leading blank line", + name: "body-leading-blank", valid: false, }, }; -test('type-enum', async () => { +test("type-enum", async () => { const result = await commitLint(messages.invalidTypeEnum); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.typeEnum]); }); -test('type-case', async () => { +test("type-case", async () => { const result = await commitLint(messages.invalidTypeCase); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.typeCase, errors.typeEnum]); }); -test('type-empty', async () => { +test("type-empty", async () => { const result = await commitLint(messages.invalidTypeEmpty); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.typeEmpty]); }); -test('subject-case', async () => { +test("subject-case", async () => { const invalidInputs = await Promise.all( - messages.invalidSubjectCases.map((invalidInput) => commitLint(invalidInput)) + messages.invalidSubjectCases.map((invalidInput) => + commitLint(invalidInput), + ), ); invalidInputs.forEach((result) => { @@ -158,58 +160,58 @@ test('subject-case', async () => { }); }); -test('subject-empty', async () => { +test("subject-empty", async () => { const result = await commitLint(messages.invalidSubjectEmpty); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.subjectEmpty, errors.typeEmpty]); }); -test('subject-full-stop', async () => { +test("subject-full-stop", async () => { const result = await commitLint(messages.invalidSubjectFullStop); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.subjectFullStop]); }); -test('header-max-length', async () => { +test("header-max-length", async () => { const result = await commitLint(messages.invalidHeaderMaxLength); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.headerMaxLength]); }); -test('footer-leading-blank', async () => { +test("footer-leading-blank", async () => { const result = await commitLint(messages.warningFooterLeadingBlank); expect(result.valid).toBe(true); expect(result.warnings).toEqual([warnings.footerLeadingBlank]); }); -test('footer-max-line-length', async () => { +test("footer-max-line-length", async () => { const result = await commitLint(messages.invalidFooterMaxLineLength); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.footerMaxLineLength]); }); -test('body-leading-blank', async () => { +test("body-leading-blank", async () => { const result = await commitLint(messages.warningBodyLeadingBlank); expect(result.valid).toBe(true); expect(result.warnings).toEqual([warnings.bodyLeadingBlank]); }); -test('body-max-line-length', async () => { +test("body-max-line-length", async () => { const result = await commitLint(messages.invalidBodyMaxLineLength); expect(result.valid).toBe(false); expect(result.errors).toEqual([errors.bodyMaxLineLength]); }); -test('valid messages', async () => { +test("valid messages", async () => { const validInputs = await Promise.all( - messages.validMessages.map((input) => commitLint(input)) + messages.validMessages.map((input) => commitLint(input)), ); validInputs.forEach((result) => { diff --git a/@commitlint/config-conventional/src/index.ts b/@commitlint/config-conventional/src/index.ts index f07f233f0e..09ee1c9a67 100644 --- a/@commitlint/config-conventional/src/index.ts +++ b/@commitlint/config-conventional/src/index.ts @@ -2,45 +2,45 @@ import { RuleConfigCondition, RuleConfigSeverity, TargetCaseType, -} from '@commitlint/types'; +} from "@commitlint/types"; export default { - parserPreset: 'conventional-changelog-conventionalcommits', + parserPreset: "conventional-changelog-conventionalcommits", rules: { - 'body-leading-blank': [RuleConfigSeverity.Warning, 'always'] as const, - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 100] as const, - 'footer-leading-blank': [RuleConfigSeverity.Warning, 'always'] as const, - 'footer-max-line-length': [ + "body-leading-blank": [RuleConfigSeverity.Warning, "always"] as const, + "body-max-line-length": [RuleConfigSeverity.Error, "always", 100] as const, + "footer-leading-blank": [RuleConfigSeverity.Warning, "always"] as const, + "footer-max-line-length": [ RuleConfigSeverity.Error, - 'always', + "always", 100, ] as const, - 'header-max-length': [RuleConfigSeverity.Error, 'always', 100] as const, - 'header-trim': [RuleConfigSeverity.Error, 'always'] as const, - 'subject-case': [ + "header-max-length": [RuleConfigSeverity.Error, "always", 100] as const, + "header-trim": [RuleConfigSeverity.Error, "always"] as const, + "subject-case": [ RuleConfigSeverity.Error, - 'never', - ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + "never", + ["sentence-case", "start-case", "pascal-case", "upper-case"], ] as [RuleConfigSeverity, RuleConfigCondition, TargetCaseType[]], - 'subject-empty': [RuleConfigSeverity.Error, 'never'] as const, - 'subject-full-stop': [RuleConfigSeverity.Error, 'never', '.'] as const, - 'type-case': [RuleConfigSeverity.Error, 'always', 'lower-case'] as const, - 'type-empty': [RuleConfigSeverity.Error, 'never'] as const, - 'type-enum': [ + "subject-empty": [RuleConfigSeverity.Error, "never"] as const, + "subject-full-stop": [RuleConfigSeverity.Error, "never", "."] as const, + "type-case": [RuleConfigSeverity.Error, "always", "lower-case"] as const, + "type-empty": [RuleConfigSeverity.Error, "never"] as const, + "type-enum": [ RuleConfigSeverity.Error, - 'always', + "always", [ - 'build', - 'chore', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test', + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", ], ] as [RuleConfigSeverity, RuleConfigCondition, string[]], }, @@ -50,93 +50,93 @@ export default { description: "Select the type of change that you're committing", enum: { feat: { - description: 'A new feature', - title: 'Features', - emoji: '✨', + description: "A new feature", + title: "Features", + emoji: "✨", }, fix: { - description: 'A bug fix', - title: 'Bug Fixes', - emoji: '🐛', + description: "A bug fix", + title: "Bug Fixes", + emoji: "🐛", }, docs: { - description: 'Documentation only changes', - title: 'Documentation', - emoji: '📚', + description: "Documentation only changes", + title: "Documentation", + emoji: "📚", }, style: { description: - 'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)', - title: 'Styles', - emoji: '💎', + "Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)", + title: "Styles", + emoji: "💎", }, refactor: { description: - 'A code change that neither fixes a bug nor adds a feature', - title: 'Code Refactoring', - emoji: '📦', + "A code change that neither fixes a bug nor adds a feature", + title: "Code Refactoring", + emoji: "📦", }, perf: { - description: 'A code change that improves performance', - title: 'Performance Improvements', - emoji: '🚀', + description: "A code change that improves performance", + title: "Performance Improvements", + emoji: "🚀", }, test: { - description: 'Adding missing tests or correcting existing tests', - title: 'Tests', - emoji: '🚨', + description: "Adding missing tests or correcting existing tests", + title: "Tests", + emoji: "🚨", }, build: { description: - 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)', - title: 'Builds', - emoji: '🛠', + "Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)", + title: "Builds", + emoji: "🛠", }, ci: { description: - 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)', - title: 'Continuous Integrations', - emoji: '⚙️', + "Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)", + title: "Continuous Integrations", + emoji: "⚙️", }, chore: { description: "Other changes that don't modify src or test files", - title: 'Chores', - emoji: '♻️', + title: "Chores", + emoji: "♻️", }, revert: { - description: 'Reverts a previous commit', - title: 'Reverts', - emoji: '🗑', + description: "Reverts a previous commit", + title: "Reverts", + emoji: "🗑", }, }, }, scope: { description: - 'What is the scope of this change (e.g. component or file name)', + "What is the scope of this change (e.g. component or file name)", }, subject: { description: - 'Write a short, imperative tense description of the change', + "Write a short, imperative tense description of the change", }, body: { - description: 'Provide a longer description of the change', + description: "Provide a longer description of the change", }, isBreaking: { - description: 'Are there any breaking changes?', + description: "Are there any breaking changes?", }, breakingBody: { description: - 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself', + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", }, breaking: { - description: 'Describe the breaking changes', + description: "Describe the breaking changes", }, isIssueAffected: { - description: 'Does this change affect any open issues?', + description: "Does this change affect any open issues?", }, issuesBody: { description: - 'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself', + "If issues are closed, the commit requires a body. Please enter a longer description of the commit itself", }, issues: { description: 'Add issue references (e.g. "fix #123", "re #123".)', diff --git a/@commitlint/config-lerna-scopes/CHANGELOG.md b/@commitlint/config-lerna-scopes/CHANGELOG.md index 7228504c8a..1b9e447aa0 100644 --- a/@commitlint/config-lerna-scopes/CHANGELOG.md +++ b/@commitlint/config-lerna-scopes/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Bug Fixes + +* **config-lerna-scopes:** remove deprecated @lerna/project dependency ([#4284](https://github.com/conventional-changelog/commitlint/issues/4284)) ([f2f78f1](https://github.com/conventional-changelog/commitlint/commit/f2f78f105a32d040d8eb7e340f59a1d50fad9ac0)) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + + +### Features + +* support lerna 7 and 8 ([#4221](https://github.com/conventional-changelog/commitlint/issues/4221)) ([3b8da63](https://github.com/conventional-changelog/commitlint/commit/3b8da63f50f868555a3f026a76e96cd8d20638de)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json b/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json index 41c31e2033..743ceadeaa 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json @@ -1,5 +1,4 @@ { - "lerna": "4", "version": "1.0.0", "packages": ["packages/*"] } diff --git a/@commitlint/config-lerna-scopes/fixtures/basic/package.json b/@commitlint/config-lerna-scopes/fixtures/basic/package.json index 85a312021c..7b7c45507d 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/package.json @@ -1,8 +1,4 @@ { "name": "basic", - "version": "1.0.0", - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - } + "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/basic/packages/a/package.json b/@commitlint/config-lerna-scopes/fixtures/basic/packages/a/package.json index 9113c2528e..9a71b5dd55 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/packages/a/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/packages/a/package.json @@ -1,4 +1,4 @@ { - "name": "a", + "name": "@commitlint-lerna-scopes/basic-a", "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/basic/packages/b/package.json b/@commitlint/config-lerna-scopes/fixtures/basic/packages/b/package.json index c2d84cc127..7b724bdb22 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/packages/b/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/packages/b/package.json @@ -1,4 +1,4 @@ { - "name": "b", + "name": "@commitlint-lerna-scopes/basic-b", "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json b/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json index 41c31e2033..743ceadeaa 100644 --- a/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json @@ -1,5 +1,4 @@ { - "lerna": "4", "version": "1.0.0", "packages": ["packages/*"] } diff --git a/@commitlint/config-lerna-scopes/fixtures/empty/package.json b/@commitlint/config-lerna-scopes/fixtures/empty/package.json index 345438e0ac..a0d311fba7 100644 --- a/@commitlint/config-lerna-scopes/fixtures/empty/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/empty/package.json @@ -1,8 +1,4 @@ { "name": "empty", - "version": "1.0.0", - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - } + "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json b/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json index 41c31e2033..743ceadeaa 100644 --- a/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json @@ -1,5 +1,4 @@ { - "lerna": "4", "version": "1.0.0", "packages": ["packages/*"] } diff --git a/@commitlint/config-lerna-scopes/fixtures/modules/package.json b/@commitlint/config-lerna-scopes/fixtures/modules/package.json index 85a312021c..7b7c45507d 100644 --- a/@commitlint/config-lerna-scopes/fixtures/modules/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/modules/package.json @@ -1,8 +1,4 @@ { "name": "basic", - "version": "1.0.0", - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - } + "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/modules/packages/a/package.json b/@commitlint/config-lerna-scopes/fixtures/modules/packages/a/package.json index 9113c2528e..1c6951c9b1 100644 --- a/@commitlint/config-lerna-scopes/fixtures/modules/packages/a/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/modules/packages/a/package.json @@ -1,4 +1,4 @@ { - "name": "a", + "name": "@commitlint-lerna-scopes/modules-a", "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/a/nested-a/node_modules/dependency-a/package.json b/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/a/nested-a/node_modules/dependency-a/package.json deleted file mode 100644 index 2d821efc58..0000000000 --- a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/a/nested-a/node_modules/dependency-a/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "@packages/dependency-a", - "version": "1.0.0" -} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/b/nested-b/node_modules/dependency-b/package.json b/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/b/nested-b/node_modules/dependency-b/package.json deleted file mode 100644 index f3a1a9b5e9..0000000000 --- a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/b/nested-b/node_modules/dependency-b/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "@packages/dependency-b", - "version": "1.0.0" -} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested/lerna.json b/@commitlint/config-lerna-scopes/fixtures/nested/lerna.json new file mode 100644 index 0000000000..8dec4c2731 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/nested/lerna.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "packages": ["packages/**"] +} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested/package.json b/@commitlint/config-lerna-scopes/fixtures/nested/package.json new file mode 100644 index 0000000000..548079cf10 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/nested/package.json @@ -0,0 +1,4 @@ +{ + "name": "nested-workspaces", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested/packages/a/nested-a/package.json b/@commitlint/config-lerna-scopes/fixtures/nested/packages/a/nested-a/package.json new file mode 100644 index 0000000000..6a56f652a6 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/nested/packages/a/nested-a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/nested-a", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested/packages/b/nested-b/package.json b/@commitlint/config-lerna-scopes/fixtures/nested/packages/b/nested-b/package.json new file mode 100644 index 0000000000..542bd9f25f --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/nested/packages/b/nested-b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/nested-b", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested/packages/c/package.json b/@commitlint/config-lerna-scopes/fixtures/nested/packages/c/package.json new file mode 100644 index 0000000000..982a03ea31 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/nested/packages/c/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/nested-c", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/lerna.json b/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/lerna.json new file mode 100644 index 0000000000..1587a66968 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/lerna.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/package.json b/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/package.json new file mode 100644 index 0000000000..434d703596 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/no-packages-declaration/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/no-packages-declaration", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/a/package.json b/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/a/package.json index 7ba283037e..d33e5bda39 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/a/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/a/package.json @@ -1,4 +1,4 @@ { - "name": "@packages/a", + "name": "@commitlint-lerna-scopes/scoped-a", "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/b/package.json b/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/b/package.json index 3fd2cf7616..bcc30a0a61 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/b/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/@packages/b/package.json @@ -1,4 +1,4 @@ { - "name": "@packages/b", + "name": "@commitlint-lerna-scopes/scoped-b", "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json b/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json index 8e0ca65b2e..daafb8e8db 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json @@ -1,5 +1,4 @@ { - "lerna": "4", "version": "1.0.0", - "packages": ["@packages/*"] + "packages": ["@packages/**"] } diff --git a/@commitlint/config-lerna-scopes/fixtures/scoped/package.json b/@commitlint/config-lerna-scopes/fixtures/scoped/package.json index 5ede29c62c..3981adbef6 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/package.json @@ -1,8 +1,4 @@ { "name": "scoped", - "version": "1.0.0", - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - } + "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/lerna.json b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/lerna.json new file mode 100644 index 0000000000..1587a66968 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/lerna.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/package.json b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/package.json new file mode 100644 index 0000000000..c0ed8f8e23 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/package.json @@ -0,0 +1,5 @@ +{ + "name": "@commitlint-lerna-scopes/transition-to-workspace-scopes", + "version": "1.0.0", + "workspaces": ["./packages/*"] +} diff --git a/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/packages/workspace-package/package.json b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/packages/workspace-package/package.json new file mode 100644 index 0000000000..2039be51ea --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/transition-to-workspace-scopes/packages/workspace-package/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/workspace-package", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/index.js b/@commitlint/config-lerna-scopes/index.js index b1476cb250..a24642b5ae 100644 --- a/@commitlint/config-lerna-scopes/index.js +++ b/@commitlint/config-lerna-scopes/index.js @@ -1,70 +1,89 @@ -import {createRequire} from 'module'; -import Path from 'path'; - -import {globSync} from 'glob'; -import importFrom from 'import-from'; -import semver from 'semver'; - -const require = createRequire(import.meta.url); +import path from "node:path"; +import fs from "node:fs/promises"; +import fg from "fast-glob"; +import configWorkspaceScopes from "@commitlint/config-workspace-scopes"; export default { - utils: {getPackages}, + utils: { getProjects }, rules: { - 'scope-enum': (ctx) => - getPackages(ctx).then((packages) => [2, 'always', packages]), + "scope-enum": (ctx) => + getProjects(ctx).then((packages) => [2, "always", packages]), }, }; -function getPackages(context) { - return Promise.resolve() - .then(() => { - const ctx = context || {}; - const cwd = ctx.cwd || process.cwd(); - - const {workspaces} = require(Path.join(cwd, 'package.json')); - if (Array.isArray(workspaces) && workspaces.length) { - // use yarn workspaces +/** + * Turn glob paths with potential 'package.json' ending always into paths + * with a package.json ending to find monorepo packages + * @param {string[]} patterns + * @returns A list of glob paths to resolve package.json files + */ +function normalizePatterns(patterns) { + const normalizedPatterns = []; + for (const pattern of patterns) { + normalizedPatterns.push(pattern.replace(/\/?$/, "/package.json")); + } + return normalizedPatterns; +} - const wsGlobs = workspaces.flatMap((ws) => { - const path = Path.posix.join(ws, 'package.json'); - return globSync(path, {cwd, ignore: ['**/node_modules/**']}); - }); +/** + * Find all package.json contents in the defined cwd + * @param {string} cwd + * @returns A list of parsed package.json files as objects + */ +async function findPackages(cwd) { + const json = await fs.readFile(path.join(cwd, "lerna.json"), { + encoding: "utf-8", + }); - return wsGlobs.map((pJson) => require(Path.join(cwd, pJson))); - } + const packages = JSON.parse(json)?.packages || []; + if (packages.length === 0) { + return []; + } - const lernaVersion = getLernaVersion(cwd); - if (semver.lt(lernaVersion, '3.0.0')) { - const Repository = importFrom(cwd, 'lerna/lib/Repository'); - const PackageUtilities = importFrom(cwd, 'lerna/lib/PackageUtilities'); + const patterns = normalizePatterns(packages); + const entries = await fg(patterns, { + cwd, + ignore: ["**/node_modules/**", "**/bower_components/**"], + }); - const repository = new Repository(cwd); - return PackageUtilities.getPackages({ - packageConfigs: repository.packageConfigs, - rootPath: cwd, - }); - } + const pkgJsons = await Promise.all( + Array.from(new Set(entries.map((entry) => path.join(cwd, entry)))).map( + (pkgPath) => fs.readFile(pkgPath, { encoding: "utf-8" }), + ), + ); - const {getPackages} = importFrom(cwd, '@lerna/project'); - return getPackages(cwd); - }) - .then((packages) => { - return packages - .map((pkg) => pkg.name) - .filter(Boolean) - .map((name) => (name.charAt(0) === '@' ? name.split('/')[1] : name)); - }); + return pkgJsons.map((pkgJson) => JSON.parse(pkgJson) || {}); } -function getLernaVersion(cwd) { - const moduleEntrypoint = require.resolve('lerna', { - paths: [cwd], +async function getProjects(context) { + const ctx = context || {}; + const cwd = ctx.cwd || process.cwd(); + + // try to read workspaces for backwards compatibility + const workspacePackages = await configWorkspaceScopes.utils.getPackages({ + cwd, }); - const moduleDir = Path.join( - moduleEntrypoint.slice(0, moduleEntrypoint.lastIndexOf('node_modules')), - 'node_modules', - 'lerna' - ); - const modulePackageJson = Path.join(moduleDir, 'package.json'); - return require(modulePackageJson).version; + // native npm/yarn workspaces detected, inform user to use new package instead + if (workspacePackages.length > 0) { + console.warn( + [ + `It seems that you are using npm/yarn workspaces instead of lernas "packages" declaration.`, + `Support for workspaces will be removed in a future major version of this package.`, + `Please make sure to transition to "@commitlint/config-workspace-scopes" in the near future.`, + ].join("\n"), + ); + return workspacePackages; + } + + const packages = await findPackages(cwd); + + return packages + .reduce((pkgNames, pkg) => { + const name = pkg.name; + if (name) { + pkgNames.push(name.charAt(0) === "@" ? name.split("/")[1] : name); + } + return pkgNames; + }, []) + .sort(); } diff --git a/@commitlint/config-lerna-scopes/index.test.js b/@commitlint/config-lerna-scopes/index.test.js index c8428419ad..3de602d281 100644 --- a/@commitlint/config-lerna-scopes/index.test.js +++ b/@commitlint/config-lerna-scopes/index.test.js @@ -1,101 +1,119 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect, vi } from "vitest"; +import path from "path"; +import { fileURLToPath } from "url"; -import {npm} from '@commitlint/test'; +import { npm } from "@commitlint/test"; -import config from './index.js'; +import config from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports rules key', () => { - expect(config).toHaveProperty('rules'); +test("exports rules key", () => { + expect(config).toHaveProperty("rules"); }); -test('rules hold object', () => { +test("rules hold object", () => { expect(config).toMatchObject({ rules: expect.any(Object), }); }); -test('rules contain scope-enum', () => { +test("rules contain scope-enum", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.anything(), + "scope-enum": expect.anything(), }, }); }); -test('scope-enum is function', () => { +test("scope-enum is function", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.any(Function), + "scope-enum": expect.any(Function), }, }); }); -test('scope-enum does not throw for missing context', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum does not throw for missing context", async () => { + const { "scope-enum": fn } = config.rules; await expect(fn()).resolves.toBeTruthy(); }); -test('scope-enum has expected severity', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected severity", async () => { + const { "scope-enum": fn } = config.rules; const [severity] = await fn(); expect(severity).toBe(2); }); -test('scope-enum has expected modifier', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected modifier", async () => { + const { "scope-enum": fn } = config.rules; const [, modifier] = await fn(); - expect(modifier).toBe('always'); + expect(modifier).toBe("always"); }); -test('returns empty value for empty lerna repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/empty', __dirname); - const [, , value] = await fn({cwd}); +test("returns empty value for empty lerna repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/empty", __dirname); + const [, , value] = await fn({ cwd }); expect(value).toEqual([]); }); -test('returns expected value for basic lerna repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/basic', __dirname); +test("returns all packages for nested lerna packages repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/nested", __dirname); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["nested-a", "nested-b", "nested-c"]); +}); + +test("returns expected value for basic lerna repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/basic", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a', 'b']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["basic-a", "basic-b"]); }); -test('returns expected value for lerna repository containing modules', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/modules', __dirname); +test("returns expected value for lerna repository containing modules", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/modules", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["modules-a"]); }); -test('returns expected value for scoped lerna repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/scoped', __dirname); +test("returns expected value for scoped lerna repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/scoped", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a', 'b']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["scoped-a", "scoped-b"]); }); -test('returns expected value for yarn workspaces', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = path.join(__dirname, 'fixtures', 'yarn'); - const [, , value] = await fn({cwd}); - expect(value.sort()).toEqual(['a', 'b']); +test("work with no declared packages", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap( + "fixtures/no-packages-declaration", + __dirname, + ); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual([]); }); -test('returns expected value for yarn workspaces has nested packages', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/nested-workspaces', __dirname); +test("inform the user about the transition to config-workspace-scopes if the project is using native workspaces", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap( + "fixtures/transition-to-workspace-scopes", + __dirname, + ); + + const consoleWarnSpy = vi.spyOn(console, "warn"); - const [, , value] = await fn({cwd}); - expect(value).toEqual(expect.arrayContaining(['nested-a', 'nested-b'])); - expect(value).toEqual( - expect.not.arrayContaining(['dependency-a', 'dependency-b']) + const [, , value] = await fn({ cwd }); + + expect(consoleWarnSpy).toHaveBeenCalledWith( + expect.stringContaining(`It seems that you are using npm/yarn workspaces`), ); + + expect(value).toEqual(["workspace-package"]); }); diff --git a/@commitlint/config-lerna-scopes/package.json b/@commitlint/config-lerna-scopes/package.json index 3f9daa6d63..980b8988ff 100644 --- a/@commitlint/config-lerna-scopes/package.json +++ b/@commitlint/config-lerna-scopes/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/config-lerna-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing lerna package and workspace names as scopes", "main": "index.js", "files": [ @@ -22,14 +22,14 @@ "commitlint-config", "lerna" ], - "author": "Mario Nebl <hello@herebecode.com>", + "author": "Jan Biasi (https://github.com/janbiasi)", "license": "MIT", "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, "homepage": "https://commitlint.js.org/", "peerDependencies": { - "lerna": "^5.0.0 || ^6" + "lerna": "*" }, "peerDependenciesMeta": { "lerna": { @@ -40,15 +40,12 @@ "node": ">=v18" }, "dependencies": { - "@lerna/project": "^6.0.0", - "glob": "^10.3.10", - "import-from": "^4.0.0", - "semver": "^7.6.0" + "@commitlint/config-workspace-scopes": "^19.8.0", + "fast-glob": "^3.3.3" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", - "@types/glob": "^8.1.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-lerna-scopes/readme.md b/@commitlint/config-lerna-scopes/readme.md index ef818933d5..3d9d9ee3ee 100644 --- a/@commitlint/config-lerna-scopes/readme.md +++ b/@commitlint/config-lerna-scopes/readme.md @@ -2,9 +2,12 @@ Lint your lerna project commits -Shareable `commitlint` config enforcing lerna package and workspace names as scopes. +Shareable `commitlint` config enforcing lerna package scopes. Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). +> [!IMPORTANT] +> If you are using NPM or Yarn workspaces, please use the [@commitlint/config-workspace-scopes](../config-workspace-scopes/) package instead. Support for workspaces will be removed from this package in a future major version. + ## Getting started ```sh diff --git a/@commitlint/config-nx-scopes/CHANGELOG.md b/@commitlint/config-nx-scopes/CHANGELOG.md index fec89c133a..2a47bb8200 100644 --- a/@commitlint/config-nx-scopes/CHANGELOG.md +++ b/@commitlint/config-nx-scopes/CHANGELOG.md @@ -3,6 +3,82 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + + +### Bug Fixes + +* **config-nx-scopes:** fix for projects without explicit targets ([#4261](https://github.com/conventional-changelog/commitlint/issues/4261)) ([25bb2cd](https://github.com/conventional-changelog/commitlint/commit/25bb2cd8c70353637f77d471e39f4e4b17fa4cae)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [19.3.1](https://github.com/conventional-changelog/commitlint/compare/v19.3.0...v19.3.1) (2024-05-13) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + + +### Bug Fixes + +* **config-nx-scopes:** include file extension in nx imports ([#3979](https://github.com/conventional-changelog/commitlint/issues/3979)) ([583250b](https://github.com/conventional-changelog/commitlint/commit/583250b919cf1eb338de3e3f5c848fff611a6212)) + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-nx-scopes/index.js b/@commitlint/config-nx-scopes/index.js index 2d839b7f3e..25debbeba3 100644 --- a/@commitlint/config-nx-scopes/index.js +++ b/@commitlint/config-nx-scopes/index.js @@ -1,12 +1,12 @@ -import {RuleConfigSeverity} from '@commitlint/types'; -import {getProjects as getNXProjects} from 'nx/src/generators/utils/project-configuration'; -import {FsTree} from 'nx/src/generators/tree'; +import { RuleConfigSeverity } from "@commitlint/types"; +import { getProjects as getNXProjects } from "nx/src/generators/utils/project-configuration.js"; +import { FsTree } from "nx/src/generators/tree.js"; export default { - utils: {getProjects}, + utils: { getProjects }, rules: { - 'scope-enum': (ctx) => - Promise.resolve([RuleConfigSeverity.Error, 'always', getProjects(ctx)]), + "scope-enum": (ctx) => + Promise.resolve([RuleConfigSeverity.Error, "always", getProjects(ctx)]), }, }; @@ -28,9 +28,8 @@ function getProjects(context, selector = () => true) { name: project.name, projectType: project.projectType, tags: project.tags, - }) + }), ) - .filter((project) => project.targets) .map((project) => project.name) - .map((name) => (name.charAt(0) === '@' ? name.split('/')[1] : name)); + .map((name) => (name.charAt(0) === "@" ? name.split("/")[1] : name)); } diff --git a/@commitlint/config-nx-scopes/index.test.js b/@commitlint/config-nx-scopes/index.test.js index 1d9e030c94..1a6f863ef3 100644 --- a/@commitlint/config-nx-scopes/index.test.js +++ b/@commitlint/config-nx-scopes/index.test.js @@ -1,91 +1,91 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {npm} from '@commitlint/test'; +import { npm } from "@commitlint/test"; -import config from './index.js'; +import config from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports rules key', () => { - expect(config).toHaveProperty('rules'); +test("exports rules key", () => { + expect(config).toHaveProperty("rules"); }); -test('rules hold object', () => { +test("rules hold object", () => { expect(config).toMatchObject({ rules: expect.any(Object), }); }); -test('rules contain scope-enum', () => { +test("rules contain scope-enum", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.anything(), + "scope-enum": expect.anything(), }, }); }); -test('scope-enum is function', () => { +test("scope-enum is function", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.any(Function), + "scope-enum": expect.any(Function), }, }); }); -test('scope-enum does not throw for missing context', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum does not throw for missing context", async () => { + const { "scope-enum": fn } = config.rules; await expect(fn()).resolves.toBeTruthy(); }); -test('scope-enum has expected severity', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected severity", async () => { + const { "scope-enum": fn } = config.rules; const [severity] = await fn(); expect(severity).toBe(2); }); -test('scope-enum has expected modifier', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected modifier", async () => { + const { "scope-enum": fn } = config.rules; const [, modifier] = await fn(); - expect(modifier).toBe('always'); + expect(modifier).toBe("always"); }); -test('returns empty value for empty nx repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/empty', __dirname); - const [, , value] = await fn({cwd}); +test("returns empty value for empty nx repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/empty", __dirname); + const [, , value] = await fn({ cwd }); expect(value).toEqual([]); }); -test('returns expected value for basic nx repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/basic', __dirname); +test("returns expected value for basic nx repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/basic", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a', 'b']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["a", "b"]); }); -test('expect correct result from Nx 14', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/nx14', __dirname); +test("expect correct result from Nx 14", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/nx14", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['c', 'd']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["c", "d"]); }); -test('expect correct result from Nx 15', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/nx15', __dirname); +test("expect correct result from Nx 15", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/nx15", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['e', 'f']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["e", "f"]); }); -test('expect correct result from Nx 17', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/nx17', __dirname); +test("expect correct result from Nx 17", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/nx17", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['g', 'h']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["g", "h"]); }); diff --git a/@commitlint/config-nx-scopes/package.json b/@commitlint/config-nx-scopes/package.json index 428c183fea..16d64533b8 100644 --- a/@commitlint/config-nx-scopes/package.json +++ b/@commitlint/config-nx-scopes/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/config-nx-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing nx project names as scopes", + "main": "index.js", "files": [ "index.js" ], @@ -28,7 +29,7 @@ }, "homepage": "https://commitlint.js.org/", "peerDependencies": { - "nx": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "nx": ">=14.0.0" }, "peerDependenciesMeta": { "nx": { @@ -39,11 +40,11 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/types": "^19.0.0" + "@commitlint/types": "^19.8.0" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-nx-scopes/readme.md b/@commitlint/config-nx-scopes/readme.md index a8fba5c400..2890f85872 100644 --- a/@commitlint/config-nx-scopes/readme.md +++ b/@commitlint/config-nx-scopes/readme.md @@ -21,26 +21,32 @@ As an example, the following code demonstrates how to select only applications t In your .commitlintrc.js file: ```javascript -const { - utils: {getProjects}, -} = require('@commitlint/config-nx-scopes'); - -module.exports = { - rules: { - 'scope-enum': async (ctx) => [ - 2, - 'always', - [ - ...(await getProjects( - ctx, - ({name, projectType}) => - !name.includes('e2e') && projectType == 'application' - )), +async function getConfig() { + const { + default: { + utils: { getProjects }, + }, + } = await import("@commitlint/config-nx-scopes"); + + return { + rules: { + "scope-enum": async (ctx) => [ + 2, + "always", + [ + ...(await getProjects( + ctx, + ({ name, projectType }) => + !name.includes("e2e") && projectType == "application", + )), + ], ], - ], - }, - // . . . -}; + }, + // . . . + }; +} + +module.exports = getConfig(); ``` Here is another example where projects tagged with 'stage:end-of-life' are not allowed to be used as the scope for a commit. @@ -48,25 +54,31 @@ Here is another example where projects tagged with 'stage:end-of-life' are not a In your .commitlintrc.js file: ```javascript -const { - utils: {getProjects}, -} = require('@commitlint/config-nx-scopes'); - -module.exports = { - rules: { - 'scope-enum': async (ctx) => [ - 2, - 'always', - [ - ...(await getProjects( - ctx, - ({tags}) => !tags.includes('stage:end-of-life') - )), +async function getConfig() { + const { + default: { + utils: { getProjects }, + }, + } = await import("@commitlint/config-nx-scopes"); + + return { + rules: { + "scope-enum": async (ctx) => [ + 2, + "always", + [ + ...(await getProjects( + ctx, + ({ tags }) => !tags.includes("stage:end-of-life"), + )), + ], ], - ], - }, - // . . . -}; + }, + // . . . + }; +} + +module.exports = getConfig(); ``` ## Examples diff --git a/@commitlint/config-patternplate/CHANGELOG.md b/@commitlint/config-patternplate/CHANGELOG.md index b8b6036714..52e15f5b21 100644 --- a/@commitlint/config-patternplate/CHANGELOG.md +++ b/@commitlint/config-patternplate/CHANGELOG.md @@ -3,6 +3,92 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-patternplate/index.js b/@commitlint/config-patternplate/index.js index 46d403b4db..240efb9655 100644 --- a/@commitlint/config-patternplate/index.js +++ b/@commitlint/config-patternplate/index.js @@ -1,24 +1,24 @@ -import path from 'path'; +import path from "node:path"; -import configAngular from '@commitlint/config-angular'; -import {glob} from 'glob'; -import merge from 'lodash.merge'; +import configAngular from "@commitlint/config-angular"; +import { glob } from "glob"; +import merge from "lodash.merge"; function pathToId(root, filePath) { const relativePath = path.relative(root, filePath); - return path.dirname(relativePath).split(path.sep).join('/'); + return path.dirname(relativePath).split(path.sep).join("/"); } async function getPatternIDs() { - const root = path.resolve(process.cwd(), './patterns'); - const pattern = path.resolve(root, '**/pattern.json'); + const root = path.resolve(process.cwd(), "./patterns"); + const pattern = path.resolve(root, "**/pattern.json"); const files = glob(pattern); return files.map((result) => pathToId(root, result)); } export default merge(configAngular, { rules: { - 'scope-enum': () => - getPatternIDs().then((ids) => [2, 'always', ids.concat(['system'])]), + "scope-enum": () => + getPatternIDs().then((ids) => [2, "always", ids.concat(["system"])]), }, }); diff --git a/@commitlint/config-patternplate/package.json b/@commitlint/config-patternplate/package.json index 6d57263b80..184db9a74a 100644 --- a/@commitlint/config-patternplate/package.json +++ b/@commitlint/config-patternplate/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/config-patternplate", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commits, patternplate-style", + "main": "index.js", "files": [ "index.js" ], @@ -31,13 +32,13 @@ "node": ">=v18" }, "dependencies": { - "@commitlint/config-angular": "^19.0.0", + "@commitlint/config-angular": "^19.8.0", "glob": "^10.3.10", "lodash.merge": "^4.6.2" }, "devDependencies": { - "@commitlint/utils": "^19.0.0", + "@commitlint/utils": "^19.8.0", "@types/lodash.merge": "^4.6.8" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-pnpm-scopes/CHANGELOG.md b/@commitlint/config-pnpm-scopes/CHANGELOG.md index 6d89ae0e17..585c6b0434 100644 --- a/@commitlint/config-pnpm-scopes/CHANGELOG.md +++ b/@commitlint/config-pnpm-scopes/CHANGELOG.md @@ -3,6 +3,36 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-pnpm-scopes/index.js b/@commitlint/config-pnpm-scopes/index.js index a4f38d4159..eb93cce86e 100644 --- a/@commitlint/config-pnpm-scopes/index.js +++ b/@commitlint/config-pnpm-scopes/index.js @@ -1,20 +1,20 @@ -import path from 'path'; +import path from "node:path"; -import fg from 'fast-glob'; -import readYamlFile from 'read-yaml-file'; -import {readExactProjectManifest} from '@pnpm/read-project-manifest'; +import fg from "fast-glob"; +import readYamlFile from "read-yaml-file"; +import { readExactProjectManifest } from "@pnpm/read-project-manifest"; export default { - utils: {getProjects}, + utils: { getProjects }, rules: { - 'scope-enum': (ctx) => - getProjects(ctx).then((packages) => [2, 'always', packages]), + "scope-enum": (ctx) => + getProjects(ctx).then((packages) => [2, "always", packages]), }, }; function requirePackagesManifest(dir) { - return readYamlFile(path.join(dir, 'pnpm-workspace.yaml')).catch((err) => { - if (err.code === 'ENOENT') { + return readYamlFile(path.join(dir, "pnpm-workspace.yaml")).catch((err) => { + if (err.code === "ENOENT") { return null; } @@ -25,9 +25,9 @@ function requirePackagesManifest(dir) { function normalizePatterns(patterns) { const normalizedPatterns = []; for (const pattern of patterns) { - normalizedPatterns.push(pattern.replace(/\/?$/, '/package.json')); - normalizedPatterns.push(pattern.replace(/\/?$/, '/package.json5')); - normalizedPatterns.push(pattern.replace(/\/?$/, '/package.yaml')); + normalizedPatterns.push(pattern.replace(/\/?$/, "/package.json")); + normalizedPatterns.push(pattern.replace(/\/?$/, "/package.json5")); + normalizedPatterns.push(pattern.replace(/\/?$/, "/package.yaml")); } return normalizedPatterns; } @@ -36,22 +36,22 @@ function findWorkspacePackages(cwd) { return requirePackagesManifest(cwd) .then((manifest) => { const patterns = normalizePatterns( - (manifest && manifest.packages) || ['**'] + (manifest && manifest.packages) || ["**"], ); const opts = { cwd, - ignore: ['**/node_modules/**', '**/bower_components/**'], + ignore: ["**/node_modules/**", "**/bower_components/**"], }; return fg(patterns, opts); }) .then((entries) => { const paths = Array.from( - new Set(entries.map((entry) => path.join(cwd, entry))) + new Set(entries.map((entry) => path.join(cwd, entry))), ); return Promise.all( - paths.map((manifestPath) => readExactProjectManifest(manifestPath)) + paths.map((manifestPath) => readExactProjectManifest(manifestPath)), ); }) .then((manifests) => { @@ -69,7 +69,7 @@ function getProjects(context) { const name = project.name; if (name) { - projects.push(name.charAt(0) === '@' ? name.split('/')[1] : name); + projects.push(name.charAt(0) === "@" ? name.split("/")[1] : name); } return projects; diff --git a/@commitlint/config-pnpm-scopes/index.test.js b/@commitlint/config-pnpm-scopes/index.test.js index 8607209607..5b28bf7d1e 100644 --- a/@commitlint/config-pnpm-scopes/index.test.js +++ b/@commitlint/config-pnpm-scopes/index.test.js @@ -1,76 +1,76 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {npm} from '@commitlint/test'; +import { npm } from "@commitlint/test"; -import config from './index.js'; +import config from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports rules key', () => { - expect(config).toHaveProperty('rules'); +test("exports rules key", () => { + expect(config).toHaveProperty("rules"); }); -test('rules hold object', () => { +test("rules hold object", () => { expect(config).toMatchObject({ rules: expect.any(Object), }); }); -test('rules contain scope-enum', () => { +test("rules contain scope-enum", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.anything(), + "scope-enum": expect.anything(), }, }); }); -test('scope-enum is function', () => { +test("scope-enum is function", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.any(Function), + "scope-enum": expect.any(Function), }, }); }); -test('scope-enum does not throw for missing context', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum does not throw for missing context", async () => { + const { "scope-enum": fn } = config.rules; await expect(fn()).resolves.toBeTruthy(); }); -test('scope-enum has expected severity', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected severity", async () => { + const { "scope-enum": fn } = config.rules; const [severity] = await fn(); expect(severity).toBe(2); }); -test('scope-enum has expected modifier', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected modifier", async () => { + const { "scope-enum": fn } = config.rules; const [, modifier] = await fn(); - expect(modifier).toBe('always'); + expect(modifier).toBe("always"); }); -test('returns empty value for empty pnpm repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/empty', __dirname); - const [, , value] = await fn({cwd}); +test("returns empty value for empty pnpm repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/empty", __dirname); + const [, , value] = await fn({ cwd }); expect(value).toEqual([]); }); -test('returns expected value for basic pnpm repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/basic', __dirname); +test("returns expected value for basic pnpm repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/basic", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a', 'b']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["a", "b"]); }); -test('returns expected value for scoped pnpm repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/scoped', __dirname); +test("returns expected value for scoped pnpm repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/scoped", __dirname); - const [, , value] = await fn({cwd}); + const [, , value] = await fn({ cwd }); - expect(value).toEqual(['a', 'b']); + expect(value).toEqual(["a", "b"]); }); diff --git a/@commitlint/config-pnpm-scopes/package.json b/@commitlint/config-pnpm-scopes/package.json index 166e463894..6242f91595 100644 --- a/@commitlint/config-pnpm-scopes/package.json +++ b/@commitlint/config-pnpm-scopes/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/config-pnpm-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing pnpm workspaces names as scopes", + "main": "index.js", "files": [ "index.js" ], @@ -36,7 +37,8 @@ "read-yaml-file": "^2.1.0" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" - } + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-rush-scopes/CHANGELOG.md b/@commitlint/config-rush-scopes/CHANGELOG.md index 5020338a12..9ec96e882f 100644 --- a/@commitlint/config-rush-scopes/CHANGELOG.md +++ b/@commitlint/config-rush-scopes/CHANGELOG.md @@ -3,6 +3,36 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-rush-scopes/index.js b/@commitlint/config-rush-scopes/index.js index 2a79997cd5..07fc2e1d07 100644 --- a/@commitlint/config-rush-scopes/index.js +++ b/@commitlint/config-rush-scopes/index.js @@ -1,13 +1,13 @@ -import Path from 'path'; -import fs from 'fs/promises'; +import Path from "node:path"; +import fs from "fs/promises"; -import jsonc from 'jsonc'; +import jsonc from "jsonc"; export default { - utils: {getPackages}, + utils: { getPackages }, rules: { - 'scope-enum': (ctx) => - getPackages(ctx).then((packages) => [2, 'always', packages]), + "scope-enum": (ctx) => + getPackages(ctx).then((packages) => [2, "always", packages]), }, }; @@ -18,15 +18,15 @@ function getPackages(context) { const cwd = ctx.cwd || process.cwd(); return fs - .readFile(Path.join(cwd, 'rush.json'), {encoding: 'utf8'}) + .readFile(Path.join(cwd, "rush.json"), { encoding: "utf8" }) .then((content) => jsonc.parse(content)) - .then(({projects}) => projects) + .then(({ projects }) => projects) .catch(() => []); }) .then((packages) => { return packages .map((pkg) => pkg.packageName) .filter(Boolean) - .map((name) => (name.charAt(0) === '@' ? name.split('/')[1] : name)); + .map((name) => (name.charAt(0) === "@" ? name.split("/")[1] : name)); }); } diff --git a/@commitlint/config-rush-scopes/index.test.js b/@commitlint/config-rush-scopes/index.test.js index 2eb65bdf84..a5ce89033e 100644 --- a/@commitlint/config-rush-scopes/index.test.js +++ b/@commitlint/config-rush-scopes/index.test.js @@ -1,76 +1,76 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {npm} from '@commitlint/test'; +import { npm } from "@commitlint/test"; -import config from './index.js'; +import config from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports rules key', () => { - expect(config).toHaveProperty('rules'); +test("exports rules key", () => { + expect(config).toHaveProperty("rules"); }); -test('rules hold object', () => { +test("rules hold object", () => { expect(config).toMatchObject({ rules: expect.any(Object), }); }); -test('rules contain scope-enum', () => { +test("rules contain scope-enum", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.anything(), + "scope-enum": expect.anything(), }, }); }); -test('scope-enum is function', () => { +test("scope-enum is function", () => { expect(config).toMatchObject({ rules: { - 'scope-enum': expect.any(Function), + "scope-enum": expect.any(Function), }, }); }); -test('scope-enum does not throw for missing context', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum does not throw for missing context", async () => { + const { "scope-enum": fn } = config.rules; await expect(fn()).resolves.toBeTruthy(); }); -test('scope-enum has expected severity', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected severity", async () => { + const { "scope-enum": fn } = config.rules; const [severity] = await fn(); expect(severity).toBe(2); }); -test('scope-enum has expected modifier', async () => { - const {'scope-enum': fn} = config.rules; +test("scope-enum has expected modifier", async () => { + const { "scope-enum": fn } = config.rules; const [, modifier] = await fn(); - expect(modifier).toBe('always'); + expect(modifier).toBe("always"); }); -test('returns empty value for empty rush repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/empty', __dirname); - const [, , value] = await fn({cwd}); +test("returns empty value for empty rush repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/empty", __dirname); + const [, , value] = await fn({ cwd }); expect(value).toEqual([]); }); -test('returns expected value for basic rush repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/basic', __dirname); +test("returns expected value for basic rush repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/basic", __dirname); - const [, , value] = await fn({cwd}); - expect(value).toEqual(['a', 'b']); + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["a", "b"]); }); -test('returns expected value for scoped lerna repository', async () => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/scoped', __dirname); +test("returns expected value for scoped lerna repository", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/scoped", __dirname); - const [, , value] = await fn({cwd}); + const [, , value] = await fn({ cwd }); - expect(value).toEqual(['a', 'b']); + expect(value).toEqual(["a", "b"]); }); diff --git a/@commitlint/config-rush-scopes/package.json b/@commitlint/config-rush-scopes/package.json index 30b439c131..8a5d275577 100644 --- a/@commitlint/config-rush-scopes/package.json +++ b/@commitlint/config-rush-scopes/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/config-rush-scopes", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shareable commitlint config enforcing rush package and workspace names as scopes", + "main": "index.js", "files": [ "index.js" ], @@ -37,7 +38,8 @@ "jsonc": "^2.0.0" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" - } + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-validator/CHANGELOG.md b/@commitlint/config-validator/CHANGELOG.md index 3094525ffa..04f11d91c0 100644 --- a/@commitlint/config-validator/CHANGELOG.md +++ b/@commitlint/config-validator/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/config-validator/package.json b/@commitlint/config-validator/package.json index 3229bfb183..6df8c83a60 100644 --- a/@commitlint/config-validator/package.json +++ b/@commitlint/config-validator/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/config-validator", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "config validator for commitlint.config.js", "main": "lib/validate.js", "types": "lib/validate.d.ts", @@ -36,11 +36,11 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "ajv": "^8.11.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-validator/src/commitlint.schema.json b/@commitlint/config-validator/src/commitlint.schema.json index 12998f4f49..2c6d2075a9 100644 --- a/@commitlint/config-validator/src/commitlint.schema.json +++ b/@commitlint/config-validator/src/commitlint.schema.json @@ -39,25 +39,25 @@ "oneOf": [ { "type": "array", - "items": {"type": "string"} + "items": { "type": "string" } }, - {"type": "string"} + { "type": "string" } ] }, "parserPreset": { "description": "Resolveable id to conventional-changelog parser preset to import and use", "oneOf": [ - {"type": "string"}, + { "type": "string" }, { "type": "object", "properties": { - "name": {"type": "string"}, - "path": {"type": "string"}, + "name": { "type": "string" }, + "path": { "type": "string" }, "parserOpts": {} }, "additionalProperties": true }, - {"typeof": "function"} + { "typeof": "function" } ] }, "helpUrl": { @@ -71,15 +71,15 @@ "rules": { "description": "Rules to check against", "type": "object", - "propertyNames": {"type": "string"}, - "additionalProperties": {"$ref": "#/definitions/rule"} + "propertyNames": { "type": "string" }, + "additionalProperties": { "$ref": "#/definitions/rule" } }, "plugins": { "description": "Resolveable ids of commitlint plugins from node_modules", "type": "array", "items": { "anyOf": [ - {"type": "string"}, + { "type": "string" }, { "type": "object", "required": ["rules"], @@ -94,7 +94,7 @@ }, "ignores": { "type": "array", - "items": {"typeof": "function"}, + "items": { "typeof": "function" }, "description": "Additional commits to ignore, defined by ignore matchers" }, "defaultIgnores": { diff --git a/@commitlint/config-validator/src/formatErrors.ts b/@commitlint/config-validator/src/formatErrors.ts index 3ca61d39a9..1021c92eb8 100644 --- a/@commitlint/config-validator/src/formatErrors.ts +++ b/@commitlint/config-validator/src/formatErrors.ts @@ -1,4 +1,4 @@ -import type {ErrorObject} from 'ajv'; +import type { ErrorObject } from "ajv"; /** * Formats an array of schema validation errors. @@ -10,8 +10,8 @@ export function formatErrors(errors: ErrorObject[]): string { return errors .map((error) => { if ( - error.keyword === 'additionalProperties' && - 'additionalProperty' in error.params + error.keyword === "additionalProperties" && + "additionalProperty" in error.params ) { const formattedPropertyPath = error.instancePath.length ? `${error.instancePath.slice(1)}.${error.params.additionalProperty}` @@ -19,7 +19,7 @@ export function formatErrors(errors: ErrorObject[]): string { return `Unexpected top-level property "${formattedPropertyPath}"`; } - if (error.keyword === 'type') { + if (error.keyword === "type") { const formattedField = error.instancePath.slice(1); if (!formattedField) { return `Config has the wrong type - ${error.message}`; @@ -27,19 +27,19 @@ export function formatErrors(errors: ErrorObject[]): string { return `Property "${formattedField}" has the wrong type - ${error.message}`; } const field = - (error.instancePath[0] === '.' + (error.instancePath[0] === "." ? error.instancePath.slice(1) - : error.instancePath) || 'Config'; - if (error.keyword === 'typeof') { + : error.instancePath) || "Config"; + if (error.keyword === "typeof") { return `"${field}" should be a ${error.schema}. Value: ${JSON.stringify( - error.data + error.data, )}`; } return `"${field}" ${error.message}. Value: ${JSON.stringify( - error.data + error.data, )}`; }) .map((message) => `\t- ${message}.\n`) - .join(''); + .join(""); } diff --git a/@commitlint/config-validator/src/validate.test.ts b/@commitlint/config-validator/src/validate.test.ts index f8e61e069c..1a3c402c4b 100644 --- a/@commitlint/config-validator/src/validate.test.ts +++ b/@commitlint/config-validator/src/validate.test.ts @@ -1,75 +1,75 @@ -import {describe, test, expect} from 'vitest'; -import {RuleConfigSeverity, UserConfig} from '@commitlint/types'; +import { describe, test, expect } from "vitest"; +import { RuleConfigSeverity, UserConfig } from "@commitlint/types"; -import {validateConfig} from './validate.js'; +import { validateConfig } from "./validate.js"; const validSchemas: Record<string, UserConfig> = { empty: {}, - withEmptyExtends: {extends: []}, - withStringExtends: {extends: 'test'}, - withSingleExtends: {extends: ['test']}, - withMultipleExtends: {extends: ['test', 'test2']}, - withFormatter: {formatter: ''}, - withHelpUrl: {helpUrl: ''}, + withEmptyExtends: { extends: [] }, + withStringExtends: { extends: "test" }, + withSingleExtends: { extends: ["test"] }, + withMultipleExtends: { extends: ["test", "test2"] }, + withFormatter: { formatter: "" }, + withHelpUrl: { helpUrl: "" }, withRules: { rules: { a: [RuleConfigSeverity.Disabled], - b: [RuleConfigSeverity.Warning, 'never'], - c: [RuleConfigSeverity.Error, 'never', true], + b: [RuleConfigSeverity.Warning, "never"], + c: [RuleConfigSeverity.Error, "never", true], }, }, - withParserPresetString: {parserPreset: 'test'}, - withParserPresetObject: {parserPreset: {}}, - withParserPresetObject2: {parserPreset: {name: 'string', path: 'string'}}, + withParserPresetString: { parserPreset: "test" }, + withParserPresetObject: { parserPreset: {} }, + withParserPresetObject2: { parserPreset: { name: "string", path: "string" } }, withParserPresetObjectPromise: { - parserPreset: Promise.resolve({name: 'string'}), + parserPreset: Promise.resolve({ name: "string" }), }, - withParserPresetOpts: {parserPreset: {parserOpts: {test: 1}}}, + withParserPresetOpts: { parserPreset: { parserOpts: { test: 1 } } }, withParserPresetOptsPromise: { - parserPreset: {parserOpts: Promise.resolve({test: 1})}, + parserPreset: { parserOpts: Promise.resolve({ test: 1 }) }, }, - withEmptyIgnores: {ignores: []}, - withIgnores: {ignores: [() => true]}, - withDefaultIgnoresTrue: {defaultIgnores: true}, - withDefaultIgnoresFalse: {defaultIgnores: false}, - withEmptyPlugins: {plugins: []}, - withPluginsAsString: {plugins: ['test']}, - withPluginsAsObject: {plugins: [{rules: {}}]}, - shouldSkipAllowAdditionalProperties: {foo: 1}, + withEmptyIgnores: { ignores: [] }, + withIgnores: { ignores: [() => true] }, + withDefaultIgnoresTrue: { defaultIgnores: true }, + withDefaultIgnoresFalse: { defaultIgnores: false }, + withEmptyPlugins: { plugins: [] }, + withPluginsAsString: { plugins: ["test"] }, + withPluginsAsObject: { plugins: [{ rules: {} }] }, + shouldSkipAllowAdditionalProperties: { foo: 1 }, }; const invalidSchemas: Record<string, any> = { whenConfigIsNotObject: [], - whenConfigIsNotObject2: '', - extendsAsObject: {extends: {test: 1}}, - extendsWithFunction: {extends: [() => true]}, - formatterAsObject: {formatter: {}}, - helpUrlAsArray: {helpUrl: []}, - rulesAsArray: {rules: ['a']}, - rules1: {rules: {a: [3]}}, - rules2: {rules: {b: [1, 'test', 2, 2]}}, - rules3: {rules: {c: []}}, - rules4: {rules: {d: [[], [], []]}}, - rules5: {rules: {e: {}}}, - parserPreset: {parserPreset: []}, - ignoresFunction: {ignores: () => true}, - ignoresNotFunction: {ignores: [1]}, - defaultIgnoresNotBoolean: {defaultIgnores: 'true'}, - pluginsNotArray: {plugins: 'test'}, - withPluginsAsObject: {plugins: [{}]}, - helpUrlNotString: {helpUrl: {}}, + whenConfigIsNotObject2: "", + extendsAsObject: { extends: { test: 1 } }, + extendsWithFunction: { extends: [() => true] }, + formatterAsObject: { formatter: {} }, + helpUrlAsArray: { helpUrl: [] }, + rulesAsArray: { rules: ["a"] }, + rules1: { rules: { a: [3] } }, + rules2: { rules: { b: [1, "test", 2, 2] } }, + rules3: { rules: { c: [] } }, + rules4: { rules: { d: [[], [], []] } }, + rules5: { rules: { e: {} } }, + parserPreset: { parserPreset: [] }, + ignoresFunction: { ignores: () => true }, + ignoresNotFunction: { ignores: [1] }, + defaultIgnoresNotBoolean: { defaultIgnores: "true" }, + pluginsNotArray: { plugins: "test" }, + withPluginsAsObject: { plugins: [{}] }, + helpUrlNotString: { helpUrl: {} }, }; -describe('validation should pass for', () => { - test.each(Object.entries(validSchemas))('%s', (file, config) => { +describe("validation should pass for", () => { + test.each(Object.entries(validSchemas))("%s", (file, config) => { expect(() => validateConfig(`${file}.js`, config)).not.toThrow(); }); }); -describe('validation should fail for', () => { - test.each(Object.entries(invalidSchemas))('%s', (file, config) => { +describe("validation should fail for", () => { + test.each(Object.entries(invalidSchemas))("%s", (file, config) => { expect(() => - validateConfig(`${file}.js`, config) + validateConfig(`${file}.js`, config), ).toThrowErrorMatchingSnapshot(); }); }); diff --git a/@commitlint/config-validator/src/validate.ts b/@commitlint/config-validator/src/validate.ts index 47867a3bf7..d4c28a2c7a 100644 --- a/@commitlint/config-validator/src/validate.ts +++ b/@commitlint/config-validator/src/validate.ts @@ -1,22 +1,22 @@ -import {createRequire} from 'module'; +import { createRequire } from "node:module"; -import {UserConfig} from '@commitlint/types'; -import _Ajv from 'ajv'; +import { UserConfig } from "@commitlint/types"; +import _Ajv from "ajv"; -import {formatErrors} from './formatErrors.js'; +import { formatErrors } from "./formatErrors.js"; const require = createRequire(import.meta.url); -const schema: typeof import('./commitlint.schema.json') = require('./commitlint.schema.json'); +const schema: typeof import("./commitlint.schema.json") = require("./commitlint.schema.json"); const TYPE_OF = [ - 'undefined', - 'string', - 'number', - 'object', - 'function', - 'boolean', - 'symbol', + "undefined", + "string", + "number", + "object", + "function", + "boolean", + "symbol", ]; // FIXME: https://github.com/ajv-validator/ajv/issues/2132 @@ -24,7 +24,7 @@ const Ajv = _Ajv as unknown as typeof _Ajv.default; export function validateConfig( source: string, - config: unknown + config: unknown, ): asserts config is UserConfig { const ajv = new Ajv({ meta: false, @@ -35,11 +35,11 @@ export function validateConfig( }); ajv.addKeyword({ - keyword: 'typeof', + keyword: "typeof", validate: function typeOfFunc(schema: any, data: any) { return typeof data === schema; }, - metaSchema: {type: 'string', enum: TYPE_OF}, + metaSchema: { type: "string", enum: TYPE_OF }, schema: true, }); @@ -49,8 +49,8 @@ export function validateConfig( if (!isValid && validate.errors && validate.errors.length) { throw new Error( `Commitlint configuration in ${source} is invalid:\n${formatErrors( - validate.errors - )}` + validate.errors, + )}`, ); } } diff --git a/@commitlint/config-validator/tsconfig.json b/@commitlint/config-validator/tsconfig.json index 65f2e6c397..5ef37ea5e3 100644 --- a/@commitlint/config-validator/tsconfig.json +++ b/@commitlint/config-validator/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src/**/*.ts", "./src/**/*.json"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}] + "references": [{ "path": "../types" }] } diff --git a/@commitlint/config-workspace-scopes/CHANGELOG.md b/@commitlint/config-workspace-scopes/CHANGELOG.md new file mode 100644 index 0000000000..470560df6b --- /dev/null +++ b/@commitlint/config-workspace-scopes/CHANGELOG.md @@ -0,0 +1,21 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Bug Fixes + +* **config-lerna-scopes:** remove deprecated @lerna/project dependency ([#4284](https://github.com/conventional-changelog/commitlint/issues/4284)) ([f2f78f1](https://github.com/conventional-changelog/commitlint/commit/f2f78f105a32d040d8eb7e340f59a1d50fad9ac0)) + + +### Features + +* **config-workspace-scopes:** add config preset for npm and yarn workspaces ([#4269](https://github.com/conventional-changelog/commitlint/issues/4269)) ([67ff9e8](https://github.com/conventional-changelog/commitlint/commit/67ff9e82c10898757052df1d4233566b0b2cb433)) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) diff --git a/@commitlint/config-lerna-scopes/fixtures/yarn/@packages/a/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/a/package.json similarity index 100% rename from @commitlint/config-lerna-scopes/fixtures/yarn/@packages/a/package.json rename to @commitlint/config-workspace-scopes/fixtures/basic/@packages/a/package.json diff --git a/@commitlint/config-lerna-scopes/fixtures/yarn/@packages/b/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/b/package.json similarity index 100% rename from @commitlint/config-lerna-scopes/fixtures/yarn/@packages/b/package.json rename to @commitlint/config-workspace-scopes/fixtures/basic/@packages/b/package.json diff --git a/@commitlint/config-lerna-scopes/fixtures/yarn/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/package.json similarity index 50% rename from @commitlint/config-lerna-scopes/fixtures/yarn/package.json rename to @commitlint/config-workspace-scopes/fixtures/basic/package.json index 086ff7756b..1a28bd53f8 100644 --- a/@commitlint/config-lerna-scopes/fixtures/yarn/package.json +++ b/@commitlint/config-workspace-scopes/fixtures/basic/package.json @@ -1,10 +1,6 @@ { "name": "yarn", "version": "1.0.0", - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - }, "workspaces": [ "@packages/*" ] diff --git a/@commitlint/config-workspace-scopes/fixtures/empty/package.json b/@commitlint/config-workspace-scopes/fixtures/empty/package.json new file mode 100644 index 0000000000..a0d311fba7 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/empty/package.json @@ -0,0 +1,4 @@ +{ + "name": "empty", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json similarity index 100% rename from @commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json rename to @commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json diff --git a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json similarity index 100% rename from @commitlint/config-lerna-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json rename to @commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json diff --git a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json similarity index 52% rename from @commitlint/config-lerna-scopes/fixtures/nested-workspaces/package.json rename to @commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json index 628cdcdbe0..21e671fb54 100644 --- a/@commitlint/config-lerna-scopes/fixtures/nested-workspaces/package.json +++ b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json @@ -3,9 +3,5 @@ "version": "1.0.0", "workspaces": [ "@packages/**" - ], - "devDependencies": { - "lerna": "^4.0.0", - "@lerna/project": "^4.0.0" - } + ] } diff --git a/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/a/package.json b/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/a/package.json new file mode 100644 index 0000000000..7ba283037e --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/a", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/b/package.json b/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/b/package.json new file mode 100644 index 0000000000..3fd2cf7616 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/scoped/@packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/b", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/scoped/lerna.json b/@commitlint/config-workspace-scopes/fixtures/scoped/lerna.json new file mode 100644 index 0000000000..8e0ca65b2e --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/scoped/lerna.json @@ -0,0 +1,5 @@ +{ + "lerna": "4", + "version": "1.0.0", + "packages": ["@packages/*"] +} diff --git a/@commitlint/config-workspace-scopes/fixtures/scoped/package.json b/@commitlint/config-workspace-scopes/fixtures/scoped/package.json new file mode 100644 index 0000000000..2d12e9469c --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/scoped/package.json @@ -0,0 +1,7 @@ +{ + "name": "scoped", + "version": "1.0.0", + "workspaces": [ + "@packages/**" + ] +} diff --git a/@commitlint/config-workspace-scopes/index.js b/@commitlint/config-workspace-scopes/index.js new file mode 100644 index 0000000000..e4fc5ea0f3 --- /dev/null +++ b/@commitlint/config-workspace-scopes/index.js @@ -0,0 +1,41 @@ +import { createRequire } from "node:module"; +import Path from "node:path"; + +import { globSync } from "glob"; + +const require = createRequire(import.meta.url); + +export default { + utils: { getPackages }, + rules: { + "scope-enum": (ctx) => + getPackages(ctx).then((packages) => [2, "always", packages]), + }, +}; + +function getPackages(context) { + return Promise.resolve() + .then(() => { + const ctx = context || {}; + const cwd = ctx.cwd || process.cwd(); + + const { workspaces } = require(Path.join(cwd, "package.json")); + if (!Array.isArray(workspaces)) { + // no workspaces configured, skipping + return []; + } + + const wsGlobs = workspaces.flatMap((ws) => { + const path = Path.posix.join(ws, "package.json"); + return globSync(path, { cwd, ignore: ["**/node_modules/**"] }); + }); + + return wsGlobs.sort().map((pJson) => require(Path.join(cwd, pJson))); + }) + .then((packages) => { + return packages + .map((pkg) => pkg.name) + .filter(Boolean) + .map((name) => (name.charAt(0) === "@" ? name.split("/")[1] : name)); + }); +} diff --git a/@commitlint/config-workspace-scopes/index.test.js b/@commitlint/config-workspace-scopes/index.test.js new file mode 100644 index 0000000000..a7d09239a0 --- /dev/null +++ b/@commitlint/config-workspace-scopes/index.test.js @@ -0,0 +1,86 @@ +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { npm } from "@commitlint/test"; + +import config from "./index.js"; + +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); + +test("exports rules key", () => { + expect(config).toHaveProperty("rules"); +}); + +test("rules hold object", () => { + expect(config).toMatchObject({ + rules: expect.any(Object), + }); +}); + +test("rules contain scope-enum", () => { + expect(config).toMatchObject({ + rules: { + "scope-enum": expect.anything(), + }, + }); +}); + +test("scope-enum is function", () => { + expect(config).toMatchObject({ + rules: { + "scope-enum": expect.any(Function), + }, + }); +}); + +test("scope-enum does not throw for missing context", async () => { + const { "scope-enum": fn } = config.rules; + await expect(fn()).resolves.toBeTruthy(); +}); + +test("scope-enum has expected severity", async () => { + const { "scope-enum": fn } = config.rules; + const [severity] = await fn(); + expect(severity).toBe(2); +}); + +test("scope-enum has expected modifier", async () => { + const { "scope-enum": fn } = config.rules; + const [, modifier] = await fn(); + expect(modifier).toBe("always"); +}); + +test("returns empty value for empty workspaces", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/empty", __dirname); + const [, , value] = await fn({ cwd }); + expect(value).toEqual([]); +}); + +test("returns expected value for basic workspaces", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/basic", __dirname); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["a", "b"]); +}); + +test("returns expected value for scoped workspaces", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/scoped", __dirname); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["a", "b"]); +}); + +test("returns expected value for workspaces has nested packages", async () => { + const { "scope-enum": fn } = config.rules; + const cwd = await npm.bootstrap("fixtures/nested-workspaces", __dirname); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual(expect.arrayContaining(["nested-a", "nested-b"])); + expect(value).toEqual( + expect.not.arrayContaining(["dependency-a", "dependency-b"]), + ); +}); diff --git a/@commitlint/config-workspace-scopes/license.md b/@commitlint/config-workspace-scopes/license.md new file mode 100644 index 0000000000..678b1e6e32 --- /dev/null +++ b/@commitlint/config-workspace-scopes/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2024 - present Jan Biasi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/@commitlint/config-workspace-scopes/package.json b/@commitlint/config-workspace-scopes/package.json new file mode 100644 index 0000000000..a7385f7ce5 --- /dev/null +++ b/@commitlint/config-workspace-scopes/package.json @@ -0,0 +1,41 @@ +{ + "name": "@commitlint/config-workspace-scopes", + "type": "module", + "version": "19.8.0", + "description": "Shareable commitlint config enforcing workspace names as scopes", + "main": "index.js", + "scripts": { + "deps": "dep-check", + "pkg": "pkg-check" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-lerna-scopes" + }, + "keywords": [ + "conventional-changelog", + "commitlint", + "commitlint-config", + "npm-workspaces", + "yarn-workspaces" + ], + "author": "Jan Biasi (https://github.com/janbiasi)", + "license": "MIT", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, + "dependencies": { + "glob": "^10.3.10" + }, + "devDependencies": { + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", + "@types/glob": "^8.1.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/config-workspace-scopes/readme.md b/@commitlint/config-workspace-scopes/readme.md new file mode 100644 index 0000000000..05f70a8826 --- /dev/null +++ b/@commitlint/config-workspace-scopes/readme.md @@ -0,0 +1,47 @@ +# @commitlint/config-workspace-scopes + +Shareable `commitlint` config enforcing workspace names as scopes. +Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). + +## Getting started + +```sh +npm install --save-dev @commitlint/config-workspace-scopes @commitlint/cli +echo "export default {extends: ['@commitlint/config-workspace-scopes']};" > commitlint.config.js +``` + +## Examples + +```text +❯ cat package.json +{ + "workspaces": ["packages/*"] +} + +❯ cat commitlint.config.js +{ + extends: ['@commitlint/config-workspace-scopes'] +} + +❯ tree packages + +packages +├── api +├── app +└── web + +❯ echo "build(api): change something in api's build" | commitlint +⧗ input: build(api): change something in api's build +✔ found 0 problems, 0 warnings + +❯ echo "test(foo): this won't pass" | commitlint +⧗ input: test(foo): this won't pass +✖ scope must be one of [api, app, web] [scope-enum] +✖ found 1 problems, 0 warnings + +❯ echo "ci: do some general maintenance" | commitlint +⧗ input: ci: do some general maintenance +✔ found 0 problems, 0 warnings +``` + +Consult [Rules reference](https://commitlint.js.org/reference/rules) for a list of available rules. diff --git a/@commitlint/core/CHANGELOG.md b/@commitlint/core/CHANGELOG.md index 0f6a2e2cd2..e4ec5b98e7 100644 --- a/@commitlint/core/CHANGELOG.md +++ b/@commitlint/core/CHANGELOG.md @@ -3,6 +3,126 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package @commitlint/core + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/core/package.json b/@commitlint/core/package.json index 0dc554b2bc..c4aa9eaed1 100644 --- a/@commitlint/core/package.json +++ b/@commitlint/core/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/core", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/core.js", "types": "lib/core.d.ts", @@ -36,13 +36,13 @@ }, "license": "MIT", "dependencies": { - "@commitlint/format": "^19.0.0", - "@commitlint/lint": "^19.0.0", - "@commitlint/load": "^19.0.0", - "@commitlint/read": "^19.0.0" + "@commitlint/format": "^19.8.0", + "@commitlint/lint": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/read": "^19.8.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/core/src/core.ts b/@commitlint/core/src/core.ts index eeee4f41b5..3181e0ac71 100644 --- a/@commitlint/core/src/core.ts +++ b/@commitlint/core/src/core.ts @@ -1,6 +1,6 @@ -import format from '@commitlint/format'; -import load from '@commitlint/load'; -import lint from '@commitlint/lint'; -import read from '@commitlint/read'; +import format from "@commitlint/format"; +import load from "@commitlint/load"; +import lint from "@commitlint/lint"; +import read from "@commitlint/read"; -export {format, load, lint, read}; +export { format, load, lint, read }; diff --git a/@commitlint/cz-commitlint/CHANGELOG.md b/@commitlint/cz-commitlint/CHANGELOG.md index 1fd893b969..4ce0fff26c 100644 --- a/@commitlint/cz-commitlint/CHANGELOG.md +++ b/@commitlint/cz-commitlint/CHANGELOG.md @@ -3,6 +3,86 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add missing cjs entry in package ([#3967](https://github.com/conventional-changelog/commitlint/issues/3967)) ([9cea6fd](https://github.com/conventional-changelog/commitlint/commit/9cea6fdb7b1bf7cfc9a86e882e2742379b4b6aec)) + + +### Features + +* add CJS export for cz-commitlint ([#3963](https://github.com/conventional-changelog/commitlint/issues/3963)) ([6ae3c6a](https://github.com/conventional-changelog/commitlint/commit/6ae3c6a827de8622d827146ffb0984a9e62fe505)), closes [/github.com/conventional-changelog/commitlint/pull/3850#issuecomment-1984932236](https://github.com//github.com/conventional-changelog/commitlint/pull/3850/issues/issuecomment-1984932236) [#3949](https://github.com/conventional-changelog/commitlint/issues/3949) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/cz-commitlint/README.md b/@commitlint/cz-commitlint/README.md index 4f01db7e8e..fa92c1fe73 100644 --- a/@commitlint/cz-commitlint/README.md +++ b/@commitlint/cz-commitlint/README.md @@ -13,9 +13,9 @@ The interactive process is inspired by [cz-conventional-changelog](https://githu ### Configure commitizen adapter ```bash -npm install --save-dev @commitlint/cz-commitlint commitizen inquirer@8 # inquirer is required as peer dependency +npm install --save-dev @commitlint/cz-commitlint commitizen inquirer@9 # inquirer is required as peer dependency # or yarn -yarn add -D @commitlint/cz-commitlint commitizen inquirer@8 # inquirer is required as peer dependency +yarn add -D @commitlint/cz-commitlint commitizen inquirer@9 # inquirer is required as peer dependency ``` In package.json diff --git a/@commitlint/cz-commitlint/index.cjs b/@commitlint/cz-commitlint/index.cjs new file mode 100644 index 0000000000..b5614ae470 --- /dev/null +++ b/@commitlint/cz-commitlint/index.cjs @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {Awaited<typeof import('./lib/index.js')>['prompter']} */ +exports.prompter = async (...args) => { + (await import('./lib/index.js')).prompter(...args); +}; diff --git a/@commitlint/cz-commitlint/package.json b/@commitlint/cz-commitlint/package.json index 43a2a527f4..82cb2c0a93 100644 --- a/@commitlint/cz-commitlint/package.json +++ b/@commitlint/cz-commitlint/package.json @@ -1,10 +1,15 @@ { "name": "@commitlint/cz-commitlint", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Commitizen adapter using the commitlint.config.js", "main": "./lib/index.js", + "exports": { + "import": "./lib/index.js", + "require": "./index.cjs" + }, "files": [ + "index.cjs", "lib" ], "keywords": [ @@ -38,9 +43,9 @@ } }, "dependencies": { - "@commitlint/ensure": "^19.0.0", - "@commitlint/load": "^19.0.0", - "@commitlint/types": "^19.0.0", + "@commitlint/ensure": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/types": "^19.8.0", "chalk": "^5.3.0", "lodash.isplainobject": "^4.0.6", "word-wrap": "^1.2.5" @@ -55,5 +60,6 @@ "@types/lodash.isplainobject": "^4.0.8", "commitizen": "^4.2.4", "lodash.isfunction": "^3.0.9" - } + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/cz-commitlint/src/Process.test.ts b/@commitlint/cz-commitlint/src/Process.test.ts index 7c6def0f1e..fefca0c40a 100644 --- a/@commitlint/cz-commitlint/src/Process.test.ts +++ b/@commitlint/cz-commitlint/src/Process.test.ts @@ -1,13 +1,13 @@ -import {describe, test, expect, vi, beforeEach, afterEach} from 'vitest'; +import { describe, test, expect, vi, beforeEach, afterEach } from "vitest"; import { QualifiedRules, RuleConfigSeverity, UserPromptConfig, -} from '@commitlint/types'; -import {Answers, DistinctQuestion} from 'inquirer'; -import isFunction from 'lodash.isfunction'; +} from "@commitlint/types"; +import { Answers, DistinctQuestion } from "inquirer"; +import isFunction from "lodash.isfunction"; -import process from './Process.js'; +import process from "./Process.js"; const mockShowTitle = vi.fn(); const mockShowValidation = vi.fn((message) => message); @@ -15,23 +15,23 @@ const mockShowValidation = vi.fn((message) => message); // mock inquirer const mockPrompt = vi.fn(async function ( questions: DistinctQuestion[], - answers: Answers + answers: Answers, ) { - for (const {name, message, when, filter, validate} of questions) { - if (typeof when !== 'function' || (await when(answers))) { + for (const { name, message, when, filter, validate } of questions) { + if (typeof when !== "function" || (await when(answers))) { const title = message && isFunction(message) ? await message(answers) - : typeof message === 'string' - ? message - : ''; + : typeof message === "string" + ? message + : ""; mockShowTitle(title); const validation = - typeof validate !== 'function' || - (await validate((name && answers[name]) ?? '', answers)); + typeof validate !== "function" || + (await validate((name && answers[name]) ?? "", answers)); - if (typeof validation === 'string') { + if (typeof validation === "string") { mockShowValidation(validation); break; } else if (filter && name && answers[name]) { @@ -53,12 +53,12 @@ function InquirerFactory(answers: Answers) { } const MESSAGES = { - skip: '(press enter to skip)', - max: 'upper %d chars', - min: '%d chars at least', - emptyWarning: '%s can not be empty', - upperLimitWarning: '%s: %s over limit %d', - lowerLimitWarning: '%s: %s below limit %d', + skip: "(press enter to skip)", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "%s can not be empty", + upperLimitWarning: "%s: %s over limit %d", + lowerLimitWarning: "%s: %s below limit %d", }; let rules: QualifiedRules; @@ -69,38 +69,38 @@ afterEach(() => { mockShowValidation.mockClear(); }); -describe('conventional-changlog', () => { +describe("conventional-changlog", () => { beforeEach(() => { rules = { - 'body-leading-blank': [RuleConfigSeverity.Warning, 'always'], - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 100], - 'footer-leading-blank': [RuleConfigSeverity.Warning, 'always'], - 'footer-max-line-length': [RuleConfigSeverity.Error, 'always', 100], - 'header-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'subject-case': [ + "body-leading-blank": [RuleConfigSeverity.Warning, "always"], + "body-max-line-length": [RuleConfigSeverity.Error, "always", 100], + "footer-leading-blank": [RuleConfigSeverity.Warning, "always"], + "footer-max-line-length": [RuleConfigSeverity.Error, "always", 100], + "header-max-length": [RuleConfigSeverity.Error, "always", 100], + "subject-case": [ RuleConfigSeverity.Error, - 'never', - ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + "never", + ["sentence-case", "start-case", "pascal-case", "upper-case"], ], - 'subject-empty': [RuleConfigSeverity.Error, 'never'], - 'subject-full-stop': [RuleConfigSeverity.Error, 'never', '.'], - 'type-case': [RuleConfigSeverity.Error, 'always', 'lower-case'], - 'type-empty': [RuleConfigSeverity.Error, 'never'], - 'type-enum': [ + "subject-empty": [RuleConfigSeverity.Error, "never"], + "subject-full-stop": [RuleConfigSeverity.Error, "never", "."], + "type-case": [RuleConfigSeverity.Error, "always", "lower-case"], + "type-empty": [RuleConfigSeverity.Error, "never"], + "type-enum": [ RuleConfigSeverity.Error, - 'always', + "always", [ - 'build', - 'chore', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test', + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", ], ], }; @@ -111,93 +111,93 @@ describe('conventional-changlog', () => { description: "Select the type of change that you're committing:", enum: { feat: { - description: 'A new feature', - title: 'Features', - emoji: '✨', + description: "A new feature", + title: "Features", + emoji: "✨", }, fix: { - description: 'A bug fix', - title: 'Bug Fixes', - emoji: '🐛', + description: "A bug fix", + title: "Bug Fixes", + emoji: "🐛", }, docs: { - description: 'Documentation only changes', - title: 'Documentation', - emoji: '📚', + description: "Documentation only changes", + title: "Documentation", + emoji: "📚", }, style: { description: - 'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)', - title: 'Styles', - emoji: '💎', + "Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)", + title: "Styles", + emoji: "💎", }, refactor: { description: - 'A code change that neither fixes a bug nor adds a feature', - title: 'Code Refactoring', - emoji: '📦', + "A code change that neither fixes a bug nor adds a feature", + title: "Code Refactoring", + emoji: "📦", }, perf: { - description: 'A code change that improves performance', - title: 'Performance Improvements', - emoji: '🚀', + description: "A code change that improves performance", + title: "Performance Improvements", + emoji: "🚀", }, test: { - description: 'Adding missing tests or correcting existing tests', - title: 'Tests', - emoji: '🚨', + description: "Adding missing tests or correcting existing tests", + title: "Tests", + emoji: "🚨", }, build: { description: - 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)', - title: 'Builds', - emoji: '🛠', + "Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)", + title: "Builds", + emoji: "🛠", }, ci: { description: - 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)', - title: 'Continuous Integrations', - emoji: '⚙️', + "Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)", + title: "Continuous Integrations", + emoji: "⚙️", }, chore: { description: "Other changes that don't modify src or test files", - title: 'Chores', - emoji: '♻️', + title: "Chores", + emoji: "♻️", }, revert: { - description: 'Reverts a previous commit', - title: 'Reverts', - emoji: '🗑', + description: "Reverts a previous commit", + title: "Reverts", + emoji: "🗑", }, }, }, scope: { description: - 'What is the scope of this change (e.g. component or file name)', + "What is the scope of this change (e.g. component or file name)", }, subject: { description: - 'Write a short, imperative tense description of the change', + "Write a short, imperative tense description of the change", }, body: { - description: 'Provide a longer description of the change', + description: "Provide a longer description of the change", }, isBreaking: { - description: 'Are there any breaking changes?', + description: "Are there any breaking changes?", }, breakingBody: { description: - 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself', + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", }, breaking: { - description: 'Describe the breaking changes', + description: "Describe the breaking changes", }, isIssueAffected: { - description: 'Does this change affect any open issues?', + description: "Does this change affect any open issues?", }, issuesBody: { description: - 'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself', + "If issues are closed, the commit requires a body. Please enter a longer description of the commit itself", }, issues: { description: 'Add issue references (e.g. "fix #123", "re #123".)', @@ -205,39 +205,39 @@ describe('conventional-changlog', () => { }, }; }); - test('should process works well', () => { + test("should process works well", () => { const answers = { - type: 'refactor', - scope: 'prompt', - subject: 'refactor prompt based on inquirer', - body: 'inspired by commitizen/cz-conventional-changelog', + type: "refactor", + scope: "prompt", + subject: "refactor prompt based on inquirer", + body: "inspired by commitizen/cz-conventional-changelog", isBreaking: true, - breaking: 'refactor types', + breaking: "refactor types", isIssueAffected: true, - issues: 'https://github.com/conventional-changelog/commitlint/issues/94', + issues: "https://github.com/conventional-changelog/commitlint/issues/94", }; return process(rules, prompts, InquirerFactory(answers)).then( (commitMessage) => { expect(commitMessage).toBe( - 'refactor(prompt): refactor prompt based on inquirer\n\ninspired by commitizen/cz-conventional-changelog\n\nBREAKING CHANGE: refactor types\nhttps://github.com/conventional-changelog/commitlint/issues/94' + "refactor(prompt): refactor prompt based on inquirer\n\ninspired by commitizen/cz-conventional-changelog\n\nBREAKING CHANGE: refactor types\nhttps://github.com/conventional-changelog/commitlint/issues/94", ); - } + }, ); }); - test('should show validation and stop process when subject is empty', () => { + test("should show validation and stop process when subject is empty", () => { const answers = { - type: 'refactor', - scope: 'prompt', - body: 'inspired by commitizen/cz-conventional-changelog', + type: "refactor", + scope: "prompt", + body: "inspired by commitizen/cz-conventional-changelog", isBreaking: true, - breaking: 'refactor types', + breaking: "refactor types", isIssueAffected: true, - issues: 'https://github.com/conventional-changelog/commitlint/issues/94', + issues: "https://github.com/conventional-changelog/commitlint/issues/94", }; return process(rules, prompts, InquirerFactory(answers)).then(() => { expect(mockShowValidation).toHaveBeenCalledWith( - 'subject can not be empty' + "subject can not be empty", ); expect(mockShowTitle).toHaveBeenCalledTimes(3); }); diff --git a/@commitlint/cz-commitlint/src/Process.ts b/@commitlint/cz-commitlint/src/Process.ts index 4023477bff..48ec039d6f 100644 --- a/@commitlint/cz-commitlint/src/Process.ts +++ b/@commitlint/cz-commitlint/src/Process.ts @@ -1,27 +1,27 @@ -import {QualifiedRules, UserPromptConfig} from '@commitlint/types'; -import type {Answers, DistinctQuestion} from 'inquirer'; +import { QualifiedRules, UserPromptConfig } from "@commitlint/types"; +import type { Answers, DistinctQuestion } from "inquirer"; import { combineCommitMessage as combineBody, getQuestions as getBodyQuestions, -} from './SectionBody.js'; +} from "./SectionBody.js"; import { combineCommitMessage as combineFooter, getQuestions as getFooterQuestions, -} from './SectionFooter.js'; +} from "./SectionFooter.js"; import { combineCommitMessage as combineHeader, getQuestions as getHeaderQuestions, -} from './SectionHeader.js'; -import {setPromptConfig} from './store/prompts.js'; -import {setRules} from './store/rules.js'; +} from "./SectionHeader.js"; +import { setPromptConfig } from "./store/prompts.js"; +import { setRules } from "./store/rules.js"; export default async function ( rules: QualifiedRules, prompts: UserPromptConfig, inquirer: { prompt(questions: DistinctQuestion[]): Promise<Answers>; - } + }, ): Promise<string> { setRules(rules); setPromptConfig(prompts); @@ -35,5 +35,5 @@ export default async function ( const body = combineBody(answers); const footer = combineFooter(answers); - return [header, body, footer].filter(Boolean).join('\n'); + return [header, body, footer].filter(Boolean).join("\n"); } diff --git a/@commitlint/cz-commitlint/src/Question.test.ts b/@commitlint/cz-commitlint/src/Question.test.ts index fd9ea3eb7f..d04ba708fb 100644 --- a/@commitlint/cz-commitlint/src/Question.test.ts +++ b/@commitlint/cz-commitlint/src/Question.test.ts @@ -1,19 +1,19 @@ -import {describe, test, expect, vi} from 'vitest'; -import chalk from 'chalk'; -import inquirer, {Answers, InputQuestionOptions} from 'inquirer'; +import { describe, test, expect, vi } from "vitest"; +import chalk from "chalk"; +import inquirer, { Answers, InputQuestionOptions } from "inquirer"; -import Question from './Question.js'; +import Question from "./Question.js"; const MESSAGES = { - skip: '(press enter to skip)', - max: 'upper %d chars', - min: '%d chars at least', - emptyWarning: '%s can not be empty', - upperLimitWarning: '%s: %s over limit %d', - lowerLimitWarning: '%s: %s below limit %d', + skip: "(press enter to skip)", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "%s can not be empty", + upperLimitWarning: "%s: %s over limit %d", + lowerLimitWarning: "%s: %s below limit %d", }; const QUESTION_CONFIG = { - title: 'please input', + title: "please input", messages: MESSAGES, }; @@ -22,347 +22,347 @@ const caseFn = (input: string | string[], delimiter?: string) => .map((segment) => segment[0].toUpperCase() + segment.slice(1)) .join(delimiter); -describe('name', () => { - test('should throw error when name is not a meaningful string', () => { +describe("name", () => { + test("should throw error when name is not a meaningful string", () => { expect( () => - new Question('' as any, { + new Question("" as any, { ...QUESTION_CONFIG, - }) + }), ).toThrow(); expect( () => new Question( function () { - return 'scope'; + return "scope"; } as any, { ...QUESTION_CONFIG, - } - ) + }, + ), ).toThrow(); }); - test('should set name when name is valid', () => { + test("should set name when name is valid", () => { expect( - new Question('test' as any, { + new Question("test" as any, { ...QUESTION_CONFIG, - }).question - ).toHaveProperty('name', 'test'); + }).question, + ).toHaveProperty("name", "test"); }); }); -describe('type', () => { +describe("type", () => { test('should return "list" type when enumList is array and multipleSelectDefaultDelimiter is undefined', () => { - const question = new Question('scope', { + const question = new Question("scope", { ...QUESTION_CONFIG, - enumList: ['cli', 'core'], + enumList: ["cli", "core"], }).question; - expect(question).toHaveProperty('type', 'list'); - expect(question).toHaveProperty('choices', ['cli', 'core']); - expect(question).not.toHaveProperty('transformer'); + expect(question).toHaveProperty("type", "list"); + expect(question).toHaveProperty("choices", ["cli", "core"]); + expect(question).not.toHaveProperty("transformer"); }); test('should return "checkbox" type when enumList is array and multipleSelectDefaultDelimiter is defined', () => { - const question = new Question('scope', { + const question = new Question("scope", { ...QUESTION_CONFIG, - enumList: ['cli', 'core'], - multipleSelectDefaultDelimiter: ',', + enumList: ["cli", "core"], + multipleSelectDefaultDelimiter: ",", }).question; - expect(question).toHaveProperty('type', 'checkbox'); - expect(question).toHaveProperty('choices', ['cli', 'core']); - expect(question).not.toHaveProperty('transformer'); + expect(question).toHaveProperty("type", "checkbox"); + expect(question).toHaveProperty("choices", ["cli", "core"]); + expect(question).not.toHaveProperty("transformer"); }); test('should contain "skip" list item when enumList is array and skip is true', () => { - const question = new Question('scope', { + const question = new Question("scope", { ...QUESTION_CONFIG, - enumList: ['cli', 'core'], + enumList: ["cli", "core"], skip: true, }).question; - expect(question).toHaveProperty('type', 'list'); - expect(question).toHaveProperty('choices', [ - 'cli', - 'core', + expect(question).toHaveProperty("type", "list"); + expect(question).toHaveProperty("choices", [ + "cli", + "core", new inquirer.Separator(), { - name: 'empty', - value: '', + name: "empty", + value: "", }, ]); - expect(question).not.toHaveProperty('transformer'); + expect(question).not.toHaveProperty("transformer"); }); test('should return "confirm" type when name is start with "is"', () => { - const question = new Question('isSubmit' as any, { + const question = new Question("isSubmit" as any, { ...QUESTION_CONFIG, }).question; - expect(question).toHaveProperty('type', 'confirm'); - expect(question).not.toHaveProperty('choices'); - expect(question).not.toHaveProperty('transformer'); + expect(question).toHaveProperty("type", "confirm"); + expect(question).not.toHaveProperty("choices"); + expect(question).not.toHaveProperty("transformer"); }); test('should return "input" type in other cases', () => { - const question = new Question('body', { + const question = new Question("body", { ...QUESTION_CONFIG, }).question; - expect(question).toHaveProperty('type', 'input'); - expect(question).not.toHaveProperty('choices'); - expect(question).toHaveProperty('transformer', expect.any(Function)); + expect(question).toHaveProperty("type", "input"); + expect(question).not.toHaveProperty("choices"); + expect(question).toHaveProperty("transformer", expect.any(Function)); }); }); -describe('message', () => { - test('should display title when it is not input', () => { - const question = new Question('body', { +describe("message", () => { + test("should display title when it is not input", () => { + const question = new Question("body", { ...QUESTION_CONFIG, - enumList: ['cli', 'core'], + enumList: ["cli", "core"], }).question; - expect(question).toHaveProperty('message', expect.any(Function)); - expect((question.message as any)()).toBe('please input:'); + expect(question).toHaveProperty("message", expect.any(Function)); + expect((question.message as any)()).toBe("please input:"); }); - test('should display skip hint when it is input and can skip', () => { - const question = new Question('body' as any, { + test("should display skip hint when it is input and can skip", () => { + const question = new Question("body" as any, { ...QUESTION_CONFIG, skip: true, }).question; - expect(question).toHaveProperty('message', expect.any(Function)); + expect(question).toHaveProperty("message", expect.any(Function)); expect((question.message as any)()).toBe( - 'please input (press enter to skip):\n' + "please input (press enter to skip):\n", ); }); - test('should not display skip hint when it is input and without skip string', () => { - const question = new Question('scope', { + test("should not display skip hint when it is input and without skip string", () => { + const question = new Question("scope", { ...QUESTION_CONFIG, messages: {}, skip: true, } as any).question; - expect(question).toHaveProperty('message', expect.any(Function)); - expect((question.message as any)()).toBe('please input:\n'); + expect(question).toHaveProperty("message", expect.any(Function)); + expect((question.message as any)()).toBe("please input:\n"); }); - test('should display upper limit hint when it is input and has max length', () => { - const question = new Question('scope', { + test("should display upper limit hint when it is input and has max length", () => { + const question = new Question("scope", { ...QUESTION_CONFIG, maxLength: 80, } as any).question; - expect(question).toHaveProperty('message', expect.any(Function)); - expect((question.message as any)()).toBe('please input: upper 80 chars\n'); + expect(question).toHaveProperty("message", expect.any(Function)); + expect((question.message as any)()).toBe("please input: upper 80 chars\n"); }); - test('should display lower limit hint when it is input and has min length', () => { - const question = new Question('scope', { + test("should display lower limit hint when it is input and has min length", () => { + const question = new Question("scope", { ...QUESTION_CONFIG, minLength: 10, } as any).question; - expect(question).toHaveProperty('message', expect.any(Function)); + expect(question).toHaveProperty("message", expect.any(Function)); expect((question.message as any)()).toBe( - 'please input: 10 chars at least\n' + "please input: 10 chars at least\n", ); }); - test('should display hints with correct format', () => { - const question = new Question('scope', { + test("should display hints with correct format", () => { + const question = new Question("scope", { ...QUESTION_CONFIG, minLength: 10, maxLength: 80, skip: true, } as any).question; - expect(question).toHaveProperty('message', expect.any(Function)); + expect(question).toHaveProperty("message", expect.any(Function)); expect((question.message as any)()).toBe( - 'please input (press enter to skip): 10 chars at least, upper 80 chars\n' + "please input (press enter to skip): 10 chars at least, upper 80 chars\n", ); }); - test('should execute function beforeQuestionStart when init message', () => { + test("should execute function beforeQuestionStart when init message", () => { const mockFn = vi.fn(); class CustomQuestion extends Question { beforeQuestionStart(answers: Answers): void { mockFn(answers); } } - const question = new CustomQuestion('body', { + const question = new CustomQuestion("body", { ...QUESTION_CONFIG, } as any).question; - expect(question).toHaveProperty('message', expect.any(Function)); + expect(question).toHaveProperty("message", expect.any(Function)); const answers = { - header: 'This is header', - footer: 'This is footer', + header: "This is header", + footer: "This is footer", }; (question.message as any)(answers); expect(mockFn).toHaveBeenCalledWith(answers); }); }); -describe('filter', () => { - test('should auto fix case and full-stop', () => { - const question = new Question('body', { +describe("filter", () => { + test("should auto fix case and full-stop", () => { + const question = new Question("body", { ...QUESTION_CONFIG, caseFn, - fullStopFn: (input: string) => input + '!', + fullStopFn: (input: string) => input + "!", }).question; - expect(question.filter?.('xxxx', {})).toBe('Xxxx!'); + expect(question.filter?.("xxxx", {})).toBe("Xxxx!"); }); - test('should transform each item with same case when input is array', () => { - const question = new Question('body', { + test("should transform each item with same case when input is array", () => { + const question = new Question("body", { ...QUESTION_CONFIG, caseFn, - fullStopFn: (input: string) => input + '!', + fullStopFn: (input: string) => input + "!", }).question; - expect(question.filter?.(['xxxx', 'yyyy'], {})).toBe('Xxxx,Yyyy!'); + expect(question.filter?.(["xxxx", "yyyy"], {})).toBe("Xxxx,Yyyy!"); }); - test('should concat items with multipleSelectDefaultDelimiter when input is array', () => { - const question = new Question('body', { + test("should concat items with multipleSelectDefaultDelimiter when input is array", () => { + const question = new Question("body", { ...QUESTION_CONFIG, caseFn, - fullStopFn: (input: string) => input + '!', - multipleSelectDefaultDelimiter: '|', + fullStopFn: (input: string) => input + "!", + multipleSelectDefaultDelimiter: "|", }).question; - expect(question.filter?.(['xxxx', 'yyyy'], {})).toBe('Xxxx|Yyyy!'); + expect(question.filter?.(["xxxx", "yyyy"], {})).toBe("Xxxx|Yyyy!"); }); - test('should split the string to items when multipleValueDelimiters is defined', () => { - const question = new Question('body', { + test("should split the string to items when multipleValueDelimiters is defined", () => { + const question = new Question("body", { ...QUESTION_CONFIG, caseFn, - fullStopFn: (input: string) => input + '!', + fullStopFn: (input: string) => input + "!", multipleValueDelimiters: /,|\|/g, }).question; - expect(question.filter?.('xxxx,yyyy|zzzz', {})).toBe('Xxxx,Yyyy|Zzzz!'); - expect(question.filter?.('xxxx-yyyy-zzzz', {})).toBe('Xxxx-yyyy-zzzz!'); + expect(question.filter?.("xxxx,yyyy|zzzz", {})).toBe("Xxxx,Yyyy|Zzzz!"); + expect(question.filter?.("xxxx-yyyy-zzzz", {})).toBe("Xxxx-yyyy-zzzz!"); }); - test('should works well when does not pass caseFn/fullStopFn', () => { - const question = new Question('body', { + test("should works well when does not pass caseFn/fullStopFn", () => { + const question = new Question("body", { ...QUESTION_CONFIG, }).question; - expect(question.filter?.('xxxx', {})).toBe('xxxx'); + expect(question.filter?.("xxxx", {})).toBe("xxxx"); }); }); -describe('validate', () => { - test('should display empty warning when can not skip but string is empty', () => { - const question = new Question('body', { +describe("validate", () => { + test("should display empty warning when can not skip but string is empty", () => { + const question = new Question("body", { ...QUESTION_CONFIG, skip: false, }).question; - expect(question.validate?.('')).toBe('body can not be empty'); + expect(question.validate?.("")).toBe("body can not be empty"); }); - test('should ignore empty validation when can skip', () => { - const question = new Question('body', { + test("should ignore empty validation when can skip", () => { + const question = new Question("body", { ...QUESTION_CONFIG, skip: true, }).question; - expect(question.validate?.('')).toBe(true); + expect(question.validate?.("")).toBe(true); }); - test('should display upper limit warning when char count is over upper limit', () => { - const question = new Question('body', { + test("should display upper limit warning when char count is over upper limit", () => { + const question = new Question("body", { ...QUESTION_CONFIG, maxLength: 5, }).question; - expect(question.validate?.('xxxxxx')).toBe('body: body over limit 1'); + expect(question.validate?.("xxxxxx")).toBe("body: body over limit 1"); }); - test('should display lower limit warning when char count is less than lower limit', () => { - const question = new Question('body', { + test("should display lower limit warning when char count is less than lower limit", () => { + const question = new Question("body", { ...QUESTION_CONFIG, minLength: 5, }).question; - expect(question.validate?.('xxx')).toBe('body: body below limit 2'); + expect(question.validate?.("xxx")).toBe("body: body below limit 2"); }); - test('should validate the final submit string', () => { - const question = new Question('body', { + test("should validate the final submit string", () => { + const question = new Question("body", { ...QUESTION_CONFIG, - caseFn: () => '', + caseFn: () => "", skip: false, }).question; - expect(question.validate?.('xxxx')).not.toBe(true); + expect(question.validate?.("xxxx")).not.toBe(true); }); }); -describe('transformer', () => { - test('should auto transform case and full-stop', () => { - const question = new Question('body', { +describe("transformer", () => { + test("should auto transform case and full-stop", () => { + const question = new Question("body", { ...QUESTION_CONFIG, caseFn, - fullStopFn: (input: string) => input + '!', + fullStopFn: (input: string) => input + "!", }).question; expect( - (question as InputQuestionOptions)?.transformer?.('xxxx', {}, {}) - ).toBe('Xxxx!'); + (question as InputQuestionOptions)?.transformer?.("xxxx", {}, {}), + ).toBe("Xxxx!"); }); - test('should char count with green color when in the limit range', () => { - let question = new Question('body', { + test("should char count with green color when in the limit range", () => { + let question = new Question("body", { ...QUESTION_CONFIG, maxLength: 5, }).question; expect( - (question as InputQuestionOptions)?.transformer?.('xxx', {}, {}) + (question as InputQuestionOptions)?.transformer?.("xxx", {}, {}), ).toEqual(chalk.green(`(3) xxx`)); - question = new Question('body', { + question = new Question("body", { ...QUESTION_CONFIG, minLength: 2, }).question; expect( - (question as InputQuestionOptions)?.transformer?.('xxx', {}, {}) + (question as InputQuestionOptions)?.transformer?.("xxx", {}, {}), ).toEqual(chalk.green(`(3) xxx`)); }); - test('should char count with red color when over the limit range', () => { - let question = new Question('body', { + test("should char count with red color when over the limit range", () => { + let question = new Question("body", { ...QUESTION_CONFIG, maxLength: 5, }).question; expect( - (question as InputQuestionOptions)?.transformer?.('xxxxxx', {}, {}) + (question as InputQuestionOptions)?.transformer?.("xxxxxx", {}, {}), ).toEqual(chalk.red(`(6) xxxxxx`)); - question = new Question('body', { + question = new Question("body", { ...QUESTION_CONFIG, minLength: 2, }).question; expect( - (question as InputQuestionOptions)?.transformer?.('x', {}, {}) + (question as InputQuestionOptions)?.transformer?.("x", {}, {}), ).toEqual(chalk.red(`(1) x`)); }); }); -describe('inquirer question', () => { +describe("inquirer question", () => { test('should pass "when" and "default" field to inquirer question', () => { const when = (answers: Answers) => !!answers.header; - const question = new Question('body', { + const question = new Question("body", { ...QUESTION_CONFIG, when, - defaultValue: 'update', + defaultValue: "update", }).question; - expect(question).toHaveProperty('default', 'update'); - expect(question).toHaveProperty('when', when); + expect(question).toHaveProperty("default", "update"); + expect(question).toHaveProperty("when", when); }); }); diff --git a/@commitlint/cz-commitlint/src/Question.ts b/@commitlint/cz-commitlint/src/Question.ts index 58546c260e..c6a7ab24ad 100644 --- a/@commitlint/cz-commitlint/src/Question.ts +++ b/@commitlint/cz-commitlint/src/Question.ts @@ -1,9 +1,13 @@ -import {PromptMessages, PromptName} from '@commitlint/types'; -import chalk from 'chalk'; -import inquirer, {Answers, ChoiceCollection, DistinctQuestion} from 'inquirer'; +import { PromptMessages, PromptName } from "@commitlint/types"; +import chalk from "chalk"; +import inquirer, { + Answers, + ChoiceCollection, + DistinctQuestion, +} from "inquirer"; -import {CaseFn} from './utils/case-fn.js'; -import {FullStopFn} from './utils/full-stop-fn.js'; +import { CaseFn } from "./utils/case-fn.js"; +import { FullStopFn } from "./utils/full-stop-fn.js"; export type QuestionConfig = { title: string; @@ -11,7 +15,7 @@ export type QuestionConfig = { maxLength?: number; minLength?: number; defaultValue?: string; - when?: DistinctQuestion['when']; + when?: DistinctQuestion["when"]; skip?: boolean; enumList?: ChoiceCollection<{ name: string; @@ -49,15 +53,15 @@ export default class Question { minLength, multipleValueDelimiters, multipleSelectDefaultDelimiter, - }: QuestionConfig + }: QuestionConfig, ) { - if (!name || typeof name !== 'string') - throw new Error('Question: name is required'); + if (!name || typeof name !== "string") + throw new Error("Question: name is required"); this._maxLength = maxLength ?? Infinity; this._minLength = minLength ?? 0; this.messages = messages; - this.title = title ?? ''; + this.title = title ?? ""; this.skip = skip ?? false; this.fullStopFn = fullStopFn ?? ((_: string) => _); this.caseFn = @@ -69,25 +73,25 @@ export default class Question { if (enumList && Array.isArray(enumList)) { this._question = { - type: multipleSelectDefaultDelimiter ? 'checkbox' : 'list', + type: multipleSelectDefaultDelimiter ? "checkbox" : "list", choices: skip ? [ ...enumList, new inquirer.Separator(), { - name: 'empty', - value: '', + name: "empty", + value: "", }, - ] + ] : [...enumList], }; } else if (/^is[A-Z]/.test(name)) { this._question = { - type: 'confirm', + type: "confirm", }; } else { this._question = { - type: 'input', + type: "input", transformer: this.transformer.bind(this), }; } @@ -103,7 +107,7 @@ export default class Question { } getMessage(key: string): string { - return this.messages[key] ?? ''; + return this.messages[key] ?? ""; } get question(): Readonly<DistinctQuestion> { @@ -132,19 +136,19 @@ export default class Question { protected validate(input: string): boolean | string { const output = this.filter(input); - const questionName = this.question.name ?? ''; + const questionName = this.question.name ?? ""; if (!this.skip && output.length === 0) { - return this.getMessage('emptyWarning').replace(/%s/g, questionName); + return this.getMessage("emptyWarning").replace(/%s/g, questionName); } if (output.length > this.maxLength) { - return this.getMessage('upperLimitWarning') + return this.getMessage("upperLimitWarning") .replace(/%s/g, questionName) .replace(/%d/g, `${output.length - this.maxLength}`); } if (output.length < this.minLength) { - return this.getMessage('lowerLimitWarning') + return this.getMessage("lowerLimitWarning") .replace(/%s/g, questionName) .replace(/%d/g, `${this.minLength - output.length}`); } @@ -158,13 +162,13 @@ export default class Question { toCased = this.caseFn(input, this.multipleSelectDefaultDelimiter); } else if (this.multipleValueDelimiters) { const segments = input.split(this.multipleValueDelimiters); - const casedString = this.caseFn(segments, ','); - const casedSegments = casedString.split(','); + const casedString = this.caseFn(segments, ","); + const casedSegments = casedString.split(","); toCased = input.replace( - new RegExp(`[^${this.multipleValueDelimiters.source}]+`, 'g'), + new RegExp(`[^${this.multipleValueDelimiters.source}]+`, "g"), (segment) => { return casedSegments[segments.indexOf(segment)]; - } + }, ); } else { toCased = this.caseFn(input); @@ -183,36 +187,38 @@ export default class Question { output.length <= this.maxLength && output.length >= this.minLength ? chalk.green : chalk.red; - return color('(' + output.length + ') ' + output); + return color("(" + output.length + ") " + output); } protected decorateMessage(_answers: Answers): string { - this.beforeQuestionStart && this.beforeQuestionStart(_answers); - if (this.question.type === 'input') { + if (this.beforeQuestionStart) { + this.beforeQuestionStart(_answers); + } + if (this.question.type === "input") { const countLimitMessage = (() => { const messages = []; - if (this.minLength > 0 && this.getMessage('min')) { + if (this.minLength > 0 && this.getMessage("min")) { messages.push( - this.getMessage('min').replace(/%d/g, this.minLength + '') + this.getMessage("min").replace(/%d/g, this.minLength + ""), ); } - if (this.maxLength < Infinity && this.getMessage('max')) { + if (this.maxLength < Infinity && this.getMessage("max")) { messages.push( - this.getMessage('max').replace(/%d/g, this.maxLength + '') + this.getMessage("max").replace(/%d/g, this.maxLength + ""), ); } - return messages.join(', '); + return messages.join(", "); })(); - const skipMessage = this.skip && this.getMessage('skip'); + const skipMessage = this.skip && this.getMessage("skip"); return ( this.title + - (skipMessage ? ` ${skipMessage}` : '') + - ':' + - (countLimitMessage ? ` ${countLimitMessage}` : '') + - '\n' + (skipMessage ? ` ${skipMessage}` : "") + + ":" + + (countLimitMessage ? ` ${countLimitMessage}` : "") + + "\n" ); } else { return `${this.title}:`; diff --git a/@commitlint/cz-commitlint/src/SectionBody.test.ts b/@commitlint/cz-commitlint/src/SectionBody.test.ts index 5846ff6129..0d7e2bf9c9 100644 --- a/@commitlint/cz-commitlint/src/SectionBody.test.ts +++ b/@commitlint/cz-commitlint/src/SectionBody.test.ts @@ -1,96 +1,96 @@ -import {describe, test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { describe, test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import {combineCommitMessage, getQuestions} from './SectionBody.js'; -import {setRules} from './store/rules.js'; +import { combineCommitMessage, getQuestions } from "./SectionBody.js"; +import { setRules } from "./store/rules.js"; -describe('getQuestions', () => { - test('should exclude question when body must be empty', () => { +describe("getQuestions", () => { + test("should exclude question when body must be empty", () => { setRules({ - 'body-empty': [RuleConfigSeverity.Error, 'always'], + "body-empty": [RuleConfigSeverity.Error, "always"], }); const questions = getQuestions(); expect(questions).toHaveLength(0); }); - test('should only return body question', () => { + test("should only return body question", () => { setRules({}); const questions = getQuestions(); expect(questions).toHaveLength(1); expect(questions).toEqual([ expect.objectContaining({ - name: 'body', + name: "body", }), ]); }); }); -describe('combineCommitMessage', () => { - test('should wrap message to multi lines when max-line-length set', () => { +describe("combineCommitMessage", () => { + test("should wrap message to multi lines when max-line-length set", () => { setRules({ - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 10], + "body-max-line-length": [RuleConfigSeverity.Error, "always", 10], }); const commitMessage = combineCommitMessage({ - body: 'This is the body message.', + body: "This is the body message.", }); - expect(commitMessage).toBe('This is\nthe body\nmessage.'); + expect(commitMessage).toBe("This is\nthe body\nmessage."); }); - test('should auto apply leading blank', () => { + test("should auto apply leading blank", () => { setRules({ - 'body-leading-blank': [RuleConfigSeverity.Error, 'always'], + "body-leading-blank": [RuleConfigSeverity.Error, "always"], }); const commitMessage = combineCommitMessage({ - body: 'This is the body message.', + body: "This is the body message.", }); - expect(commitMessage).toBe('\nThis is the body message.'); + expect(commitMessage).toBe("\nThis is the body message."); }); - test('should return correct string when leading-blank and max-line-length both set', () => { + test("should return correct string when leading-blank and max-line-length both set", () => { setRules({ - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 10], - 'body-leading-blank': [RuleConfigSeverity.Error, 'always'], + "body-max-line-length": [RuleConfigSeverity.Error, "always", 10], + "body-leading-blank": [RuleConfigSeverity.Error, "always"], }); const commitMessage = combineCommitMessage({ - body: 'This is the body message.', + body: "This is the body message.", }); - expect(commitMessage).toBe('\nThis is\nthe body\nmessage.'); + expect(commitMessage).toBe("\nThis is\nthe body\nmessage."); }); - test('should use breakingBody when body message is empty but commit has BREAK CHANGE', () => { + test("should use breakingBody when body message is empty but commit has BREAK CHANGE", () => { setRules({}); const commitMessage = combineCommitMessage({ - breakingBody: 'This is breaking body message.', + breakingBody: "This is breaking body message.", }); - expect(commitMessage).toBe('This is breaking body message.'); + expect(commitMessage).toBe("This is breaking body message."); }); - test('should use issueBody when body message is empty but commit has issue note', () => { + test("should use issueBody when body message is empty but commit has issue note", () => { setRules({}); const commitMessage = combineCommitMessage({ - issuesBody: 'This is issue body message.', + issuesBody: "This is issue body message.", }); - expect(commitMessage).toBe('This is issue body message.'); + expect(commitMessage).toBe("This is issue body message."); }); - test('should use issueBody when body message is empty string but commit has issue note', () => { + test("should use issueBody when body message is empty string but commit has issue note", () => { setRules({}); const commitMessage = combineCommitMessage({ - body: '', - issuesBody: 'This is issue body message.', + body: "", + issuesBody: "This is issue body message.", }); - expect(commitMessage).toBe('This is issue body message.'); + expect(commitMessage).toBe("This is issue body message."); }); - test('should return empty message when body is empty', () => { + test("should return empty message when body is empty", () => { setRules({}); const commitMessage = combineCommitMessage({ - body: '', + body: "", }); - expect(commitMessage).toBe(''); + expect(commitMessage).toBe(""); }); }); diff --git a/@commitlint/cz-commitlint/src/SectionBody.ts b/@commitlint/cz-commitlint/src/SectionBody.ts index 68fa78a433..07f1c22cd0 100644 --- a/@commitlint/cz-commitlint/src/SectionBody.ts +++ b/@commitlint/cz-commitlint/src/SectionBody.ts @@ -1,26 +1,26 @@ -import {Answers, DistinctQuestion} from 'inquirer'; -import wrap from 'word-wrap'; +import { Answers, DistinctQuestion } from "inquirer"; +import wrap from "word-wrap"; -import Question from './Question.js'; -import getRuleQuestionConfig from './services/getRuleQuestionConfig.js'; -import {getRule} from './store/rules.js'; -import getLeadingBlankFn from './utils/leading-blank-fn.js'; -import {getMaxLength} from './utils/rules.js'; +import Question from "./Question.js"; +import getRuleQuestionConfig from "./services/getRuleQuestionConfig.js"; +import { getRule } from "./store/rules.js"; +import getLeadingBlankFn from "./utils/leading-blank-fn.js"; +import { getMaxLength } from "./utils/rules.js"; export function getQuestions(): Array<DistinctQuestion> { // body - const questionConfig = getRuleQuestionConfig('body'); + const questionConfig = getRuleQuestionConfig("body"); if (!questionConfig) return []; - else return [new Question('body', questionConfig).question]; + else return [new Question("body", questionConfig).question]; } export function combineCommitMessage(answers: Answers): string { - const maxLineLength = getMaxLength(getRule('body', 'max-line-length')); - const leadingBlankFn = getLeadingBlankFn(getRule('body', 'leading-blank')); - const {body, breakingBody, issuesBody} = answers; + const maxLineLength = getMaxLength(getRule("body", "max-line-length")); + const leadingBlankFn = getLeadingBlankFn(getRule("body", "leading-blank")); + const { body, breakingBody, issuesBody } = answers; - const commitBody = body || breakingBody || issuesBody || ''; + const commitBody = body || breakingBody || issuesBody || ""; if (commitBody) { return leadingBlankFn( @@ -28,11 +28,11 @@ export function combineCommitMessage(answers: Answers): string { ? wrap(commitBody, { width: maxLineLength, trim: true, - indent: '', - }) - : commitBody.trim() + indent: "", + }) + : commitBody.trim(), ); } else { - return ''; + return ""; } } diff --git a/@commitlint/cz-commitlint/src/SectionFooter.test.ts b/@commitlint/cz-commitlint/src/SectionFooter.test.ts index 6e1c497958..e16c9fadc8 100644 --- a/@commitlint/cz-commitlint/src/SectionFooter.test.ts +++ b/@commitlint/cz-commitlint/src/SectionFooter.test.ts @@ -1,24 +1,24 @@ -import {describe, test, expect, beforeEach} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { describe, test, expect, beforeEach } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import {combineCommitMessage, getQuestions} from './SectionFooter.js'; -import {setPromptConfig} from './store/prompts.js'; -import {setRules} from './store/rules.js'; +import { combineCommitMessage, getQuestions } from "./SectionFooter.js"; +import { setPromptConfig } from "./store/prompts.js"; +import { setRules } from "./store/rules.js"; beforeEach(() => { setRules({}); setPromptConfig({}); }); -describe('getQuestions', () => { - test('should only ask questions that listed in prompt question config', () => { +describe("getQuestions", () => { + test("should only ask questions that listed in prompt question config", () => { setPromptConfig({ questions: { footer: { description: - '<footer> holds further meta data, such as breaking changes and issue ids', + "<footer> holds further meta data, such as breaking changes and issue ids", }, issues: { - description: '<issues> link', + description: "<issues> link", }, }, }); @@ -28,19 +28,19 @@ describe('getQuestions', () => { expect(questions).toHaveLength(2); expect(questions).toEqual([ expect.objectContaining({ - name: 'issues', + name: "issues", }), expect.objectContaining({ - name: 'footer', + name: "footer", }), ]); }); - test('should not have break change as default', () => { + test("should not have break change as default", () => { setPromptConfig({ questions: { isBreaking: { - description: 'Are there any breaking changes?', + description: "Are there any breaking changes?", }, }, }); @@ -48,20 +48,20 @@ describe('getQuestions', () => { const questions = getQuestions(); expect(questions).toEqual([ expect.objectContaining({ - name: 'isBreaking', + name: "isBreaking", default: false, }), ]); }); - test('should ask for break change info when have break change', () => { + test("should ask for break change info when have break change", () => { setPromptConfig({ questions: { isBreaking: { - description: 'Are there any breaking changes?', + description: "Are there any breaking changes?", }, breaking: { - description: 'Describe the breaking changes', + description: "Describe the breaking changes", }, }, }); @@ -70,24 +70,24 @@ describe('getQuestions', () => { expect( (questions[1].when as any)({ isBreaking: false, - }) + }), ).toBe(false); expect( (questions[1].when as any)({ isBreaking: true, - }) + }), ).toBe(true); }); - test('should ask for body info when have break change but does not have body message', () => { + test("should ask for body info when have break change but does not have body message", () => { setPromptConfig({ questions: { isBreaking: { - description: 'Describe the breaking changes', + description: "Describe the breaking changes", }, breakingBody: { description: - 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself', + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", }, }, }); @@ -97,28 +97,28 @@ describe('getQuestions', () => { expect( (questions[1].when as any)({ isBreaking: true, - }) + }), ).toBe(true); expect( (questions[1].when as any)({ isBreaking: true, - body: 'xxx', - }) + body: "xxx", + }), ).toBe(false); expect( (questions[1].when as any)({ isBreaking: false, - }) + }), ).toBe(false); }); - test('should change does not affect any issues as default', () => { + test("should change does not affect any issues as default", () => { setPromptConfig({ questions: { isIssueAffected: { - description: 'Does this change affect any open issues?', + description: "Does this change affect any open issues?", }, }, }); @@ -126,17 +126,17 @@ describe('getQuestions', () => { const questions = getQuestions(); expect(questions).toEqual([ expect.objectContaining({ - name: 'isIssueAffected', + name: "isIssueAffected", default: false, }), ]); }); - test('should ask for issue info when have issue affected', () => { + test("should ask for issue info when have issue affected", () => { setPromptConfig({ questions: { isIssueAffected: { - description: 'Does this change affect any open issues?', + description: "Does this change affect any open issues?", }, issues: { description: 'Add issue references (e.g. "fix #123", "re #123".)', @@ -148,24 +148,24 @@ describe('getQuestions', () => { expect( (questions[1].when as any)({ isIssueAffected: false, - }) + }), ).toBe(false); expect( (questions[1].when as any)({ isIssueAffected: true, - }) + }), ).toBe(true); }); - test('should ask for body info when have issue affected but does not have body message', () => { + test("should ask for body info when have issue affected but does not have body message", () => { setPromptConfig({ questions: { isIssueAffected: { - description: 'Does this change affect any open issues?', + description: "Does this change affect any open issues?", }, issuesBody: { description: - 'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself', + "If issues are closed, the commit requires a body. Please enter a longer description of the commit itself", }, issues: { description: 'Add issue references (e.g. "fix #123", "re #123".)', @@ -178,139 +178,139 @@ describe('getQuestions', () => { expect( (questions[1].when as any)({ isIssueAffected: true, - }) + }), ).toBe(true); expect( (questions[1].when as any)({ isIssueAffected: true, - body: 'xxx', - }) + body: "xxx", + }), ).toBe(false); expect( (questions[1].when as any)({ isIssueAffected: false, - breaking: 'xxxxx', - }) + breaking: "xxxxx", + }), ).toBe(false); }); }); -describe('combineCommitMessage', () => { +describe("combineCommitMessage", () => { test('should return BreakChange start with "BREAKING CHANGE: "', () => { let commitMessage = combineCommitMessage({ - breaking: 'BREAKING CHANGE: xxxxxx', + breaking: "BREAKING CHANGE: xxxxxx", }); - expect(commitMessage).toBe('BREAKING CHANGE: xxxxxx'); + expect(commitMessage).toBe("BREAKING CHANGE: xxxxxx"); commitMessage = combineCommitMessage({ - breaking: 'xxxxxx', + breaking: "xxxxxx", }); - expect(commitMessage).toBe('BREAKING CHANGE: xxxxxx'); + expect(commitMessage).toBe("BREAKING CHANGE: xxxxxx"); }); - test('should return correct string with BreakChange,issue,footer', () => { + test("should return correct string with BreakChange,issue,footer", () => { const commitMessage = combineCommitMessage({ issues: - 'https://github.com/conventional-changelog/commitlint/issues/2507', - breaking: 'BREAKING CHANGE: xxxxxx', - footer: 'Other footer information.', + "https://github.com/conventional-changelog/commitlint/issues/2507", + breaking: "BREAKING CHANGE: xxxxxx", + footer: "Other footer information.", }); expect(commitMessage).toBe( - 'BREAKING CHANGE: xxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther footer information.' + "BREAKING CHANGE: xxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther footer information.", ); }); - test('should return wrap string with footer-max-line-length', () => { + test("should return wrap string with footer-max-line-length", () => { setRules({ - 'footer-max-line-length': [RuleConfigSeverity.Error, 'always', 10], + "footer-max-line-length": [RuleConfigSeverity.Error, "always", 10], }); const commitMessage = combineCommitMessage({ issues: - 'https://github.com/conventional-changelog/commitlint/issues/2507', - breaking: 'BREAKING CHANGE: xxxxxx', - footer: 'Other footer information.', + "https://github.com/conventional-changelog/commitlint/issues/2507", + breaking: "BREAKING CHANGE: xxxxxx", + footer: "Other footer information.", }); expect(commitMessage).toBe( - 'BREAKING\nCHANGE:\nxxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther\nfooter\ninformation.' + "BREAKING\nCHANGE:\nxxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther\nfooter\ninformation.", ); }); - test('should auto leading blank when footer-leading-blank is set', () => { + test("should auto leading blank when footer-leading-blank is set", () => { setRules({ - 'footer-max-line-length': [RuleConfigSeverity.Error, 'always', 10], - 'footer-leading-blank': [RuleConfigSeverity.Error, 'always'], + "footer-max-line-length": [RuleConfigSeverity.Error, "always", 10], + "footer-leading-blank": [RuleConfigSeverity.Error, "always"], }); const commitMessage = combineCommitMessage({ issues: - 'https://github.com/conventional-changelog/commitlint/issues/2507', - breaking: 'BREAKING CHANGE: xxxxxx', - footer: 'Other footer information.', + "https://github.com/conventional-changelog/commitlint/issues/2507", + breaking: "BREAKING CHANGE: xxxxxx", + footer: "Other footer information.", }); expect(commitMessage).toBe( - '\nBREAKING\nCHANGE:\nxxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther\nfooter\ninformation.' + "\nBREAKING\nCHANGE:\nxxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther\nfooter\ninformation.", ); }); - test('when does not have break change', () => { + test("when does not have break change", () => { const commitMessage = combineCommitMessage({ issues: - 'https://github.com/conventional-changelog/commitlint/issues/2507', - footer: 'Other footer information.', + "https://github.com/conventional-changelog/commitlint/issues/2507", + footer: "Other footer information.", }); expect(commitMessage).toBe( - 'https://github.com/conventional-changelog/commitlint/issues/2507\nOther footer information.' + "https://github.com/conventional-changelog/commitlint/issues/2507\nOther footer information.", ); }); - test('when does not have issue', () => { + test("when does not have issue", () => { const commitMessage = combineCommitMessage({ - footer: 'Other footer information.', + footer: "Other footer information.", }); - expect(commitMessage).toBe('Other footer information.'); + expect(commitMessage).toBe("Other footer information."); }); }); -describe('FooterQuestion', () => { - test('should limited by footer maxLength and minLength', () => { +describe("FooterQuestion", () => { + test("should limited by footer maxLength and minLength", () => { setRules({ - 'footer-max-length': [RuleConfigSeverity.Error, 'always', 30], - 'footer-min-length': [RuleConfigSeverity.Error, 'always', 10], + "footer-max-length": [RuleConfigSeverity.Error, "always", 30], + "footer-min-length": [RuleConfigSeverity.Error, "always", 10], }); setPromptConfig({ messages: { - skip: '(press enter to skip)', - max: 'upper %d chars', - min: '%d chars at least', - emptyWarning: '%s can not be empty', - upperLimitWarning: '%s: %s over limit %d', - lowerLimitWarning: '%s: %s below limit %d', + skip: "(press enter to skip)", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "%s can not be empty", + upperLimitWarning: "%s: %s over limit %d", + lowerLimitWarning: "%s: %s below limit %d", }, questions: { breaking: { - description: 'Describe the breaking changes', + description: "Describe the breaking changes", }, issues: { - description: '<issues> link', + description: "<issues> link", }, footer: { description: - '<footer> holds further meta data, such as breaking changes and issue ids', + "<footer> holds further meta data, such as breaking changes and issue ids", }, }, }); const questions = getQuestions(); const answers = { - breaking: 'BREAKING CHANGE: xxxxxx', - issues: ''.padEnd(6, 'y'), + breaking: "BREAKING CHANGE: xxxxxx", + issues: "".padEnd(6, "y"), }; const lastQuestion = questions[2]; (lastQuestion.message as any)(answers); - expect(lastQuestion?.validate?.(''.padEnd(10, 'z'), answers)).toBe( - 'footer: footer over limit 11' + expect(lastQuestion?.validate?.("".padEnd(10, "z"), answers)).toBe( + "footer: footer over limit 11", ); }); }); diff --git a/@commitlint/cz-commitlint/src/SectionFooter.ts b/@commitlint/cz-commitlint/src/SectionFooter.ts index 620bca2d05..f278e226eb 100644 --- a/@commitlint/cz-commitlint/src/SectionFooter.ts +++ b/@commitlint/cz-commitlint/src/SectionFooter.ts @@ -1,13 +1,13 @@ -import {PromptName} from '@commitlint/types'; -import {Answers, DistinctQuestion} from 'inquirer'; -import wrap from 'word-wrap'; +import { PromptName } from "@commitlint/types"; +import { Answers, DistinctQuestion } from "inquirer"; +import wrap from "word-wrap"; -import Question, {QuestionConfig} from './Question.js'; -import getRuleQuestionConfig from './services/getRuleQuestionConfig.js'; -import {getPromptMessages, getPromptQuestions} from './store/prompts.js'; -import {getRule} from './store/rules.js'; -import getLeadingBlankFn from './utils/leading-blank-fn.js'; -import {getMaxLength} from './utils/rules.js'; +import Question, { QuestionConfig } from "./Question.js"; +import getRuleQuestionConfig from "./services/getRuleQuestionConfig.js"; +import { getPromptMessages, getPromptQuestions } from "./store/prompts.js"; +import { getRule } from "./store/rules.js"; +import getLeadingBlankFn from "./utils/leading-blank-fn.js"; +import { getMaxLength } from "./utils/rules.js"; export class FooterQuestion extends Question { footerMaxLength: number; @@ -16,7 +16,7 @@ export class FooterQuestion extends Question { name: PromptName, questionConfig: QuestionConfig, footerMaxLength?: number, - footerMinLength?: number + footerMinLength?: number, ) { super(name, questionConfig); this.footerMaxLength = footerMaxLength ?? Infinity; @@ -24,14 +24,14 @@ export class FooterQuestion extends Question { } beforeQuestionStart(answers: Answers): void { const footerRemainLength = - this.footerMaxLength - combineCommitMessage(answers).length - '\n'.length; + this.footerMaxLength - combineCommitMessage(answers).length - "\n".length; this.maxLength = Math.min(this.maxLength, footerRemainLength); this.minLength = Math.min(this.minLength, this.footerMinLength); } } export function getQuestions(): Array<DistinctQuestion> { - const footerQuestionConfig = getRuleQuestionConfig('footer'); + const footerQuestionConfig = getRuleQuestionConfig("footer"); if (!footerQuestionConfig) return []; @@ -39,13 +39,13 @@ export function getQuestions(): Array<DistinctQuestion> { const footerMinLength = footerQuestionConfig.minLength; const fields: PromptName[] = [ - 'isBreaking', - 'breakingBody', - 'breaking', - 'isIssueAffected', - 'issuesBody', - 'issues', - 'footer', + "isBreaking", + "breakingBody", + "breaking", + "isIssueAffected", + "issuesBody", + "issues", + "footer", ]; return fields @@ -54,19 +54,19 @@ export function getQuestions(): Array<DistinctQuestion> { const questions = getPromptQuestions(); const questionConfigs = { - title: questions[name]?.description ?? '', + title: questions[name]?.description ?? "", messages: getPromptMessages(), footerMaxLength, footerMinLength, }; - if (name === 'isBreaking') { + if (name === "isBreaking") { Object.assign(questionConfigs, { defaultValue: false, }); } - if (name === 'breakingBody') { + if (name === "breakingBody") { Object.assign(questionConfigs, { when: (answers: Answers) => { return answers.isBreaking && !answers.body; @@ -74,7 +74,7 @@ export function getQuestions(): Array<DistinctQuestion> { }); } - if (name === 'breaking') { + if (name === "breaking") { Object.assign(questionConfigs, { when: (answers: Answers) => { return answers.isBreaking; @@ -82,13 +82,13 @@ export function getQuestions(): Array<DistinctQuestion> { }); } - if (name === 'isIssueAffected') { + if (name === "isIssueAffected") { Object.assign(questionConfigs, { defaultValue: false, }); } - if (name === 'issuesBody') { + if (name === "issuesBody") { Object.assign(questionConfigs, { when: (answers: Answers) => { return ( @@ -98,7 +98,7 @@ export function getQuestions(): Array<DistinctQuestion> { }); } - if (name === 'issues') { + if (name === "issues") { Object.assign(questionConfigs, { when: (answers: Answers) => { return answers.isIssueAffected; @@ -106,7 +106,7 @@ export function getQuestions(): Array<DistinctQuestion> { }); } - if (name === 'footer') { + if (name === "footer") { Object.assign(questionConfigs, { ...footerQuestionConfig, }); @@ -116,7 +116,7 @@ export function getQuestions(): Array<DistinctQuestion> { name, questionConfigs, footerMaxLength, - footerMinLength + footerMinLength, ); return instance.question; @@ -126,24 +126,24 @@ export function getQuestions(): Array<DistinctQuestion> { export function combineCommitMessage(answers: Answers): string { // TODO references-empty // TODO signed-off-by - const maxLineLength = getMaxLength(getRule('footer', 'max-line-length')); - const leadingBlankFn = getLeadingBlankFn(getRule('footer', 'leading-blank')); + const maxLineLength = getMaxLength(getRule("footer", "max-line-length")); + const leadingBlankFn = getLeadingBlankFn(getRule("footer", "leading-blank")); - const {footer, breaking, issues} = answers; + const { footer, breaking, issues } = answers; const footerNotes: string[] = []; if (breaking) { - const BREAKING_CHANGE = 'BREAKING CHANGE: '; + const BREAKING_CHANGE = "BREAKING CHANGE: "; const message = - BREAKING_CHANGE + breaking.replace(new RegExp(`^${BREAKING_CHANGE}`), ''); + BREAKING_CHANGE + breaking.replace(new RegExp(`^${BREAKING_CHANGE}`), ""); footerNotes.push( maxLineLength < Infinity ? wrap(message, { width: maxLineLength, trim: true, - indent: '', - }) - : message.trim() + indent: "", + }) + : message.trim(), ); } @@ -153,9 +153,9 @@ export function combineCommitMessage(answers: Answers): string { ? wrap(issues, { width: maxLineLength, trim: true, - indent: '', - }) - : issues.trim() + indent: "", + }) + : issues.trim(), ); } @@ -165,11 +165,11 @@ export function combineCommitMessage(answers: Answers): string { ? wrap(footer, { width: maxLineLength, trim: true, - indent: '', - }) - : footer + indent: "", + }) + : footer, ); } - return leadingBlankFn(footerNotes.join('\n')); + return leadingBlankFn(footerNotes.join("\n")); } diff --git a/@commitlint/cz-commitlint/src/SectionHeader.test.ts b/@commitlint/cz-commitlint/src/SectionHeader.test.ts index 5ff96f2c83..350c1fe746 100644 --- a/@commitlint/cz-commitlint/src/SectionHeader.test.ts +++ b/@commitlint/cz-commitlint/src/SectionHeader.test.ts @@ -1,156 +1,156 @@ -import {describe, test, expect, beforeEach} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { describe, test, expect, beforeEach } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; import { combineCommitMessage, getQuestions, getQuestionConfig, -} from './SectionHeader.js'; -import {setPromptConfig} from './store/prompts.js'; -import {setRules} from './store/rules.js'; +} from "./SectionHeader.js"; +import { setPromptConfig } from "./store/prompts.js"; +import { setRules } from "./store/rules.js"; beforeEach(() => { setRules({}); setPromptConfig({}); }); -describe('getQuestions', () => { +describe("getQuestions", () => { test("should contain 'type','scope','subject'", () => { const questions = getQuestions(); expect(questions).toHaveLength(3); expect(questions).toEqual([ expect.objectContaining({ - name: 'type', + name: "type", }), expect.objectContaining({ - name: 'scope', + name: "scope", }), expect.objectContaining({ - name: 'subject', + name: "subject", }), ]); }); - test('should exclude question when must be empty', () => { + test("should exclude question when must be empty", () => { setRules({ - 'scope-empty': [RuleConfigSeverity.Error, 'always'], + "scope-empty": [RuleConfigSeverity.Error, "always"], }); const questions = getQuestions(); expect(questions).toHaveLength(2); expect(questions).toEqual([ expect.objectContaining({ - name: 'type', + name: "type", }), expect.objectContaining({ - name: 'subject', + name: "subject", }), ]); }); }); -describe('getQuestionConfig', () => { +describe("getQuestionConfig", () => { test("should 'scope' supports multiple items separated with ',\\/'", () => { - const config = getQuestionConfig('scope'); + const config = getQuestionConfig("scope"); expect(config).toEqual( expect.objectContaining({ multipleValueDelimiters: /\/|\\|,/g, - }) + }), ); }); test("should 'scope' supports multiple select separated with settings.scopeEnumSeparator and enableMultipleScopes", () => { setPromptConfig({ settings: { - scopeEnumSeparator: '/', + scopeEnumSeparator: "/", enableMultipleScopes: true, }, }); - const config = getQuestionConfig('scope'); + const config = getQuestionConfig("scope"); expect(config).toEqual( expect.objectContaining({ - multipleSelectDefaultDelimiter: '/', - }) + multipleSelectDefaultDelimiter: "/", + }), ); }); test("should 'scope' disable multiple select by default", () => { - const config = getQuestionConfig('scope'); - expect(config).not.toContain('multipleSelectDefaultDelimiter'); + const config = getQuestionConfig("scope"); + expect(config).not.toContain("multipleSelectDefaultDelimiter"); }); }); -describe('combineCommitMessage', () => { - test('should return correct string when type,scope,subject are not empty', () => { +describe("combineCommitMessage", () => { + test("should return correct string when type,scope,subject are not empty", () => { const commitMessage = combineCommitMessage({ - type: 'build', - scope: 'typescript', - subject: 'update tsconfig.json', + type: "build", + scope: "typescript", + subject: "update tsconfig.json", }); - expect(commitMessage).toBe('build(typescript): update tsconfig.json'); + expect(commitMessage).toBe("build(typescript): update tsconfig.json"); }); - test('when type is empty', () => { + test("when type is empty", () => { let commitMessage = combineCommitMessage({ - scope: 'typescript', - subject: 'update tsconfig.json', + scope: "typescript", + subject: "update tsconfig.json", }); - expect(commitMessage).toBe('(typescript): update tsconfig.json'); + expect(commitMessage).toBe("(typescript): update tsconfig.json"); commitMessage = combineCommitMessage({ - scope: 'typescript', + scope: "typescript", }); - expect(commitMessage).toBe('(typescript)'); + expect(commitMessage).toBe("(typescript)"); }); - test('when scope is empty', () => { + test("when scope is empty", () => { let commitMessage = combineCommitMessage({ - type: 'build', - subject: 'update tsconfig.json', + type: "build", + subject: "update tsconfig.json", }); - expect(commitMessage).toBe('build: update tsconfig.json'); + expect(commitMessage).toBe("build: update tsconfig.json"); commitMessage = combineCommitMessage({ - subject: 'update tsconfig.json', + subject: "update tsconfig.json", }); - expect(commitMessage).toBe('update tsconfig.json'); + expect(commitMessage).toBe("update tsconfig.json"); }); - test('when subject is empty', () => { + test("when subject is empty", () => { const commitMessage = combineCommitMessage({ - type: 'build', - scope: 'typescript', + type: "build", + scope: "typescript", }); - expect(commitMessage).toBe('build(typescript)'); + expect(commitMessage).toBe("build(typescript)"); }); }); -describe('HeaderQuestion', () => { - test('should limited by header maxLength and minLength', () => { +describe("HeaderQuestion", () => { + test("should limited by header maxLength and minLength", () => { setRules({ - 'header-max-length': [RuleConfigSeverity.Error, 'always', 20], - 'header-min-length': [RuleConfigSeverity.Error, 'always', 10], - 'subject-max-length': [RuleConfigSeverity.Error, 'always', 10], - 'subject-min-length': [RuleConfigSeverity.Error, 'always', 5], + "header-max-length": [RuleConfigSeverity.Error, "always", 20], + "header-min-length": [RuleConfigSeverity.Error, "always", 10], + "subject-max-length": [RuleConfigSeverity.Error, "always", 10], + "subject-min-length": [RuleConfigSeverity.Error, "always", 5], }); setPromptConfig({ messages: { - skip: '(press enter to skip)', - max: 'upper %d chars', - min: '%d chars at least', - emptyWarning: '%s can not be empty', - upperLimitWarning: '%s: %s over limit %d', - lowerLimitWarning: '%s: %s below limit %d', + skip: "(press enter to skip)", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "%s can not be empty", + upperLimitWarning: "%s: %s over limit %d", + lowerLimitWarning: "%s: %s below limit %d", }, }); const questions = getQuestions(); const answers = { - type: ''.padEnd(8, 'x'), - scope: ''.padEnd(6, 'y'), + type: "".padEnd(8, "x"), + scope: "".padEnd(6, "y"), }; const lastQuestion = questions[2]; (lastQuestion.message as any)(answers); - expect(lastQuestion?.validate?.(''.padEnd(10, 'z'), answers)).toBe( - 'subject: subject over limit 6' + expect(lastQuestion?.validate?.("".padEnd(10, "z"), answers)).toBe( + "subject: subject over limit 6", ); }); }); diff --git a/@commitlint/cz-commitlint/src/SectionHeader.ts b/@commitlint/cz-commitlint/src/SectionHeader.ts index 1952db3c70..bf43f0a2a3 100644 --- a/@commitlint/cz-commitlint/src/SectionHeader.ts +++ b/@commitlint/cz-commitlint/src/SectionHeader.ts @@ -1,9 +1,9 @@ -import {PromptName, RuleField} from '@commitlint/types'; -import {Answers, DistinctQuestion} from 'inquirer'; +import { PromptName, RuleField } from "@commitlint/types"; +import { Answers, DistinctQuestion } from "inquirer"; -import Question, {QuestionConfig} from './Question.js'; -import getRuleQuestionConfig from './services/getRuleQuestionConfig.js'; -import {getPromptSettings} from './store/prompts.js'; +import Question, { QuestionConfig } from "./Question.js"; +import getRuleQuestionConfig from "./services/getRuleQuestionConfig.js"; +import { getPromptSettings } from "./store/prompts.js"; export class HeaderQuestion extends Question { headerMaxLength: number; @@ -12,7 +12,7 @@ export class HeaderQuestion extends Question { name: PromptName, questionConfig: QuestionConfig, headerMaxLength?: number, - headerMinLength?: number + headerMinLength?: number, ) { super(name, questionConfig); this.headerMaxLength = headerMaxLength ?? Infinity; @@ -27,11 +27,11 @@ export class HeaderQuestion extends Question { } export function combineCommitMessage(answers: Answers): string { - const {type = '', scope = '', subject = ''} = answers; - const prefix = `${type}${scope ? `(${scope})` : ''}`; + const { type = "", scope = "", subject = "" } = answers; + const prefix = `${type}${scope ? `(${scope})` : ""}`; if (subject) { - return ((prefix ? prefix + ': ' : '') + subject).trim(); + return ((prefix ? prefix + ": " : "") + subject).trim(); } else { return prefix.trim(); } @@ -41,8 +41,8 @@ export function getQuestions(): Array<DistinctQuestion> { // header: type, scope, subject const questions: Array<DistinctQuestion> = []; - const headerRuleFields: RuleField[] = ['type', 'scope', 'subject']; - const headerRuleQuestionConfig = getRuleQuestionConfig('header'); + const headerRuleFields: RuleField[] = ["type", "scope", "subject"]; + const headerRuleQuestionConfig = getRuleQuestionConfig("header"); if (!headerRuleQuestionConfig) { return []; @@ -55,7 +55,7 @@ export function getQuestions(): Array<DistinctQuestion> { name, questionConfig, headerRuleQuestionConfig.maxLength, - headerRuleQuestionConfig.minLength + headerRuleQuestionConfig.minLength, ); questions.push(instance.question); } @@ -64,15 +64,15 @@ export function getQuestions(): Array<DistinctQuestion> { } export function getQuestionConfig( - name: RuleField + name: RuleField, ): ReturnType<typeof getRuleQuestionConfig> { const questionConfig = getRuleQuestionConfig(name); if (questionConfig) { - if (name === 'scope') { - if (getPromptSettings()['enableMultipleScopes']) { + if (name === "scope") { + if (getPromptSettings()["enableMultipleScopes"]) { questionConfig.multipleSelectDefaultDelimiter = - getPromptSettings()['scopeEnumSeparator']; + getPromptSettings()["scopeEnumSeparator"]; } // split scope string to segments, match commitlint rules questionConfig.multipleValueDelimiters = /\/|\\|,/g; diff --git a/@commitlint/cz-commitlint/src/index.ts b/@commitlint/cz-commitlint/src/index.ts index 6011d5b4c5..0baeefbf2c 100644 --- a/@commitlint/cz-commitlint/src/index.ts +++ b/@commitlint/cz-commitlint/src/index.ts @@ -1,7 +1,7 @@ -import load from '@commitlint/load'; -import type {Answers, DistinctQuestion} from 'inquirer'; +import load from "@commitlint/load"; +import type { Answers, DistinctQuestion } from "inquirer"; -import process from './Process.js'; +import process from "./Process.js"; type Commit = (message: string) => void; /** @@ -14,9 +14,9 @@ export function prompter( inquirerIns: { prompt(questions: DistinctQuestion[]): Promise<Answers>; }, - commit: Commit + commit: Commit, ): void { - load().then(({rules, prompt = {}}) => { + load().then(({ rules, prompt = {} }) => { process(rules, prompt, inquirerIns).then(commit); }); } diff --git a/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts index 338f323c8f..e28879f546 100644 --- a/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts +++ b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts @@ -1,60 +1,60 @@ -import {describe, test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { describe, test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import {setPromptConfig} from '../store/prompts.js'; -import {setRules} from '../store/rules.js'; -import getRuleQuestionConfig from './getRuleQuestionConfig.js'; +import { setPromptConfig } from "../store/prompts.js"; +import { setRules } from "../store/rules.js"; +import getRuleQuestionConfig from "./getRuleQuestionConfig.js"; // let rules = {}; // let rules: QualifiedRules = {}; // const getRules = jest.fn().mockReturnValue(rules); -describe('empty rule', () => { - test('should return null when must be empty', () => { +describe("empty rule", () => { + test("should return null when must be empty", () => { setRules({ - 'body-empty': [RuleConfigSeverity.Error, 'always'], + "body-empty": [RuleConfigSeverity.Error, "always"], }); - expect(getRuleQuestionConfig('body')).toBe(null); + expect(getRuleQuestionConfig("body")).toBe(null); }); test("should field 'skip' be false when can not be empty", () => { setRules({ - 'body-empty': [RuleConfigSeverity.Error, 'never'], + "body-empty": [RuleConfigSeverity.Error, "never"], }); - expect(getRuleQuestionConfig('body')?.skip).toBe(false); + expect(getRuleQuestionConfig("body")?.skip).toBe(false); }); test('should field "skip" be true when not set empty rule', () => { setRules({ - 'body-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'], - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], }); - expect(getRuleQuestionConfig('body')?.skip).toBe(true); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); }); test('should field "skip" be true when disable empty rule', () => { setRules({ - 'body-empty': [RuleConfigSeverity.Disabled], + "body-empty": [RuleConfigSeverity.Disabled], }); - expect(getRuleQuestionConfig('body')?.skip).toBe(true); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); setRules({ - 'body-empty': [RuleConfigSeverity.Disabled, 'always'], + "body-empty": [RuleConfigSeverity.Disabled, "always"], }); - expect(getRuleQuestionConfig('body')?.skip).toBe(true); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); setRules({ - 'body-empty': [RuleConfigSeverity.Disabled, 'never'], + "body-empty": [RuleConfigSeverity.Disabled, "never"], }); - expect(getRuleQuestionConfig('body')?.skip).toBe(true); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); }); }); -describe('title', () => { +describe("title", () => { test("should field 'title' set by 'description config'", () => { - const TEST_DESC = 'test the description'; + const TEST_DESC = "test the description"; setPromptConfig({ questions: { body: { @@ -63,7 +63,7 @@ describe('title', () => { }, }); - expect(getRuleQuestionConfig('body')?.title).toBe(TEST_DESC); + expect(getRuleQuestionConfig("body")?.title).toBe(TEST_DESC); }); test("should field 'title' be default string when without 'description' config", () => { @@ -73,83 +73,83 @@ describe('title', () => { }, }); - expect(getRuleQuestionConfig('body')?.title).toBe('body:'); + expect(getRuleQuestionConfig("body")?.title).toBe("body:"); }); }); -describe('enum list', () => { - test('should enumList be undefined when without enum rule', () => { +describe("enum list", () => { + test("should enumList be undefined when without enum rule", () => { setRules({ - 'scope-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'], + "scope-case": [RuleConfigSeverity.Warning, "never", "camel-case"], }); - expect(getRuleQuestionConfig('scope')?.enumList).toBeUndefined(); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); }); - test('should enumList be undefined when enum rule is not active', () => { + test("should enumList be undefined when enum rule is not active", () => { setRules({ - 'scope-enum': [RuleConfigSeverity.Disabled], + "scope-enum": [RuleConfigSeverity.Disabled], }); - expect(getRuleQuestionConfig('scope')?.enumList).toBeUndefined(); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); setRules({ - 'scope-enum': [ + "scope-enum": [ RuleConfigSeverity.Error, - 'never', - ['cli', 'core', 'lint'], + "never", + ["cli", "core", "lint"], ], }); - expect(getRuleQuestionConfig('scope')?.enumList).toBeUndefined(); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always'], + "scope-enum": [RuleConfigSeverity.Error, "always"], } as any); - expect(getRuleQuestionConfig('scope')?.enumList).toBeUndefined(); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); }); - test('should enumList be undefined when enum rule is not a array', () => { + test("should enumList be undefined when enum rule is not a array", () => { setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always', {}], + "scope-enum": [RuleConfigSeverity.Error, "always", {}], } as any); - expect(getRuleQuestionConfig('scope')?.enumList).toBeUndefined(); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); }); test("should enumList same with enum rule when without 'enum' config", () => { - const ENUM_RULE_LIST = ['cli', 'core', 'lint']; + const ENUM_RULE_LIST = ["cli", "core", "lint"]; setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always', ENUM_RULE_LIST], + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], } as any); setPromptConfig({ questions: { scope: { - description: 'test scope', + description: "test scope", }, }, }); - const enumList = getRuleQuestionConfig('scope')?.enumList; + const enumList = getRuleQuestionConfig("scope")?.enumList; expect(enumList).not.toBe(ENUM_RULE_LIST); expect(enumList).toEqual(ENUM_RULE_LIST); }); - test('should enumList item concat description', () => { - const ENUM_RULE_LIST = ['cli', 'core', 'lint']; + test("should enumList item concat description", () => { + const ENUM_RULE_LIST = ["cli", "core", "lint"]; setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always', ENUM_RULE_LIST], + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], } as any); setPromptConfig({ questions: { scope: { - description: 'test scope', + description: "test scope", enum: { cli: { - description: 'CLI', + description: "CLI", }, core: { - description: 'CORE', + description: "CORE", }, lint: {}, }, @@ -157,70 +157,70 @@ describe('enum list', () => { }, }); - const enumList = getRuleQuestionConfig('scope')?.enumList; + const enumList = getRuleQuestionConfig("scope")?.enumList; expect(enumList).toHaveLength(3); expect(enumList).toEqual([ { name: expect.stringMatching(/cli:[\s]*CLI/), - value: 'cli', - short: 'cli', + value: "cli", + short: "cli", }, { name: expect.stringMatching(/core:[\s]*CORE/), - value: 'core', - short: 'core', + value: "core", + short: "core", }, - 'lint', + "lint", ]); }); - test('should enumList item padding format with 4 blank', () => { + test("should enumList item padding format with 4 blank", () => { const LONGEST = 12; - const longestItem = ''.padEnd(LONGEST, 'x'); - const enumRuleList = ['cli', 'core', longestItem]; + const longestItem = "".padEnd(LONGEST, "x"); + const enumRuleList = ["cli", "core", longestItem]; setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always', enumRuleList], + "scope-enum": [RuleConfigSeverity.Error, "always", enumRuleList], } as any); setPromptConfig({ questions: { scope: { - description: 'test scope', + description: "test scope", enum: { cli: { - description: 'Test CLI', + description: "Test CLI", }, core: { - description: 'Test CORE', + description: "Test CORE", }, [longestItem]: { - description: 'Test', + description: "Test", }, }, }, }, }); - const enumList = getRuleQuestionConfig('scope')?.enumList; + const enumList = getRuleQuestionConfig("scope")?.enumList; expect(enumList).toHaveLength(3); expect(enumList).toEqual([ { name: expect.stringMatching( - new RegExp(`^cli:[\\s]{${LONGEST - 4 + 4}}Test CLI$`) + new RegExp(`^cli:[\\s]{${LONGEST - 4 + 4}}Test CLI$`), ), - value: 'cli', - short: 'cli', + value: "cli", + short: "cli", }, { name: expect.stringMatching( - new RegExp(`^core:[\\s]{${LONGEST - 5 + 4}}Test CORE$`) + new RegExp(`^core:[\\s]{${LONGEST - 5 + 4}}Test CORE$`), ), - value: 'core', - short: 'core', + value: "core", + short: "core", }, { name: expect.stringMatching( - new RegExp(`^${longestItem}:[\\s]{${-1 + 4}}Test$`) + new RegExp(`^${longestItem}:[\\s]{${-1 + 4}}Test$`), ), value: longestItem, short: longestItem, @@ -229,15 +229,15 @@ describe('enum list', () => { }); test("should enumList item sorted by 'enum' config order", () => { - const ENUM_RULE_LIST = ['cli', 'core', 'lint']; + const ENUM_RULE_LIST = ["cli", "core", "lint"]; setRules({ - 'scope-enum': [RuleConfigSeverity.Error, 'always', ENUM_RULE_LIST], + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], } as any); setPromptConfig({ questions: { scope: { - description: 'test scope', + description: "test scope", enum: { core: {}, lint: {}, @@ -247,89 +247,89 @@ describe('enum list', () => { }, }); - const enumList = getRuleQuestionConfig('scope')?.enumList; + const enumList = getRuleQuestionConfig("scope")?.enumList; expect(enumList).toHaveLength(3); - expect(enumList?.[0]).toBe('core'); - expect(enumList?.[1]).toBe('lint'); - expect(enumList?.[2]).toBe('cli'); + expect(enumList?.[0]).toBe("core"); + expect(enumList?.[1]).toBe("lint"); + expect(enumList?.[2]).toBe("cli"); }); }); -test('should return correct question config', () => { +test("should return correct question config", () => { setRules({ - 'body-empty': [RuleConfigSeverity.Error, 'never'], - 'body-case': [RuleConfigSeverity.Error, 'always', 'sentence-case'], - 'body-full-stop': [RuleConfigSeverity.Error, 'always', '!'], - 'body-min-length': [RuleConfigSeverity.Error, 'always', 10], - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'scope-enum': [RuleConfigSeverity.Error, 'always', ['cli', 'core', 'lint']], + "body-empty": [RuleConfigSeverity.Error, "never"], + "body-case": [RuleConfigSeverity.Error, "always", "sentence-case"], + "body-full-stop": [RuleConfigSeverity.Error, "always", "!"], + "body-min-length": [RuleConfigSeverity.Error, "always", 10], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], + "scope-enum": [RuleConfigSeverity.Error, "always", ["cli", "core", "lint"]], } as any); const MESSAGES = { - skip: ':skip', - max: 'upper %d chars', - min: '%d chars at least', - emptyWarning: 'can not be empty', - upperLimitWarning: 'over limit', - lowerLimitWarning: 'below limit', + skip: ":skip", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "can not be empty", + upperLimitWarning: "over limit", + lowerLimitWarning: "below limit", }; setPromptConfig({ messages: MESSAGES, questions: { body: { - description: 'please input body: (Test)', + description: "please input body: (Test)", }, scope: { - description: 'please choose the scope: (Test)', + description: "please choose the scope: (Test)", enum: { core: { - description: 'CORE', + description: "CORE", }, lint: { - description: 'LINT', + description: "LINT", }, cli: { - description: 'CLI', + description: "CLI", }, }, }, }, }); - const scopeQuestionConfig = getRuleQuestionConfig('scope'); + const scopeQuestionConfig = getRuleQuestionConfig("scope"); expect(scopeQuestionConfig).toEqual({ skip: true, - title: 'please choose the scope: (Test)', + title: "please choose the scope: (Test)", messages: MESSAGES, minLength: 0, maxLength: Infinity, enumList: [ { - name: 'core: CORE', - value: 'core', - short: 'core', + name: "core: CORE", + value: "core", + short: "core", }, { - name: 'lint: LINT', - value: 'lint', - short: 'lint', + name: "lint: LINT", + value: "lint", + short: "lint", }, { - name: 'cli: CLI', - value: 'cli', - short: 'cli', + name: "cli: CLI", + value: "cli", + short: "cli", }, ], caseFn: expect.any(Function), fullStopFn: expect.any(Function), }); - expect(scopeQuestionConfig?.caseFn?.('xxxx')).toBe('xxxx'); - expect(scopeQuestionConfig?.fullStopFn?.('xxxx')).toBe('xxxx'); + expect(scopeQuestionConfig?.caseFn?.("xxxx")).toBe("xxxx"); + expect(scopeQuestionConfig?.fullStopFn?.("xxxx")).toBe("xxxx"); - const bodyQuestionConfig = getRuleQuestionConfig('body'); + const bodyQuestionConfig = getRuleQuestionConfig("body"); expect(bodyQuestionConfig).toEqual({ skip: false, - title: 'please input body: (Test)', + title: "please input body: (Test)", messages: MESSAGES, minLength: 10, maxLength: 100, @@ -337,6 +337,6 @@ test('should return correct question config', () => { caseFn: expect.any(Function), fullStopFn: expect.any(Function), }); - expect(bodyQuestionConfig?.caseFn?.('xxxx')).toBe('Xxxx'); - expect(bodyQuestionConfig?.fullStopFn?.('xxxx')).toBe('xxxx!'); + expect(bodyQuestionConfig?.caseFn?.("xxxx")).toBe("Xxxx"); + expect(bodyQuestionConfig?.fullStopFn?.("xxxx")).toBe("xxxx!"); }); diff --git a/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts index f1f146fbe6..7cc85fe7fc 100644 --- a/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts +++ b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts @@ -1,9 +1,9 @@ -import {RuleField} from '@commitlint/types'; -import {QuestionConfig} from '../Question.js'; -import {getPromptMessages, getPromptQuestions} from '../store/prompts.js'; -import {getRule} from '../store/rules.js'; -import getCaseFn from '../utils/case-fn.js'; -import getFullStopFn from '../utils/full-stop-fn.js'; +import { RuleField } from "@commitlint/types"; +import { QuestionConfig } from "../Question.js"; +import { getPromptMessages, getPromptQuestions } from "../store/prompts.js"; +import { getRule } from "../store/rules.js"; +import getCaseFn from "../utils/case-fn.js"; +import getFullStopFn from "../utils/full-stop-fn.js"; import { enumRuleIsActive, getEnumList, @@ -12,12 +12,12 @@ import { ruleIsActive, ruleIsApplicable, ruleIsDisabled, -} from '../utils/rules.js'; +} from "../utils/rules.js"; export default function (rulePrefix: RuleField): QuestionConfig | null { const questions = getPromptQuestions(); const questionSettings = questions[rulePrefix]; - const emptyRule = getRule(rulePrefix, 'empty'); + const emptyRule = getRule(rulePrefix, "empty"); const mustBeEmpty = emptyRule && ruleIsActive(emptyRule) && ruleIsApplicable(emptyRule); @@ -28,18 +28,18 @@ export default function (rulePrefix: RuleField): QuestionConfig | null { const canBeSkip = !emptyRule || ruleIsDisabled(emptyRule); - const enumRule = getRule(rulePrefix, 'enum'); + const enumRule = getRule(rulePrefix, "enum"); const enumRuleList = enumRule && enumRuleIsActive(enumRule) ? getEnumList(enumRule) : null; let enumList; if (enumRuleList) { - const enumDescriptions = questionSettings?.['enum']; + const enumDescriptions = questionSettings?.["enum"]; if (enumDescriptions) { const enumNames = Object.keys(enumDescriptions); const longest = Math.max( - ...enumRuleList.map((enumName) => enumName.length) + ...enumRuleList.map((enumName) => enumName.length), ); // TODO emoji + title enumList = enumRuleList @@ -64,11 +64,11 @@ export default function (rulePrefix: RuleField): QuestionConfig | null { return { skip: canBeSkip, enumList, - title: questionSettings?.['description'] ?? `${rulePrefix}:`, - caseFn: getCaseFn(getRule(rulePrefix, 'case')), - fullStopFn: getFullStopFn(getRule(rulePrefix, 'full-stop')), - minLength: getMinLength(getRule(rulePrefix, 'min-length')), - maxLength: getMaxLength(getRule(rulePrefix, 'max-length')), + title: questionSettings?.["description"] ?? `${rulePrefix}:`, + caseFn: getCaseFn(getRule(rulePrefix, "case")), + fullStopFn: getFullStopFn(getRule(rulePrefix, "full-stop")), + minLength: getMinLength(getRule(rulePrefix, "min-length")), + maxLength: getMaxLength(getRule(rulePrefix, "max-length")), messages: getPromptMessages(), }; } diff --git a/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts b/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts index e4a4ce8998..650b3762d8 100644 --- a/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts +++ b/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts @@ -1,33 +1,33 @@ export default { settings: { - scopeEnumSeparator: ',', + scopeEnumSeparator: ",", enableMultipleScopes: false, }, messages: { - skip: '(press enter to skip)', - max: '(max %d chars)', - min: '(min %d chars)', - emptyWarning: '(%s is required)', - upperLimitWarning: '%s is %d characters longer than the upper limit', - lowerLimitWarning: '%s is %d characters less than the lower limit', + skip: "(press enter to skip)", + max: "(max %d chars)", + min: "(min %d chars)", + emptyWarning: "(%s is required)", + upperLimitWarning: "%s is %d characters longer than the upper limit", + lowerLimitWarning: "%s is %d characters less than the lower limit", }, questions: { type: { - description: '<type> holds information about the goal of a change.', + description: "<type> holds information about the goal of a change.", }, scope: { description: - '<scope> marks which sub-component of the project is affected', + "<scope> marks which sub-component of the project is affected", }, subject: { - description: '<subject> is a short, high-level description of the change', + description: "<subject> is a short, high-level description of the change", }, body: { - description: '<body> holds additional information about the change', + description: "<body> holds additional information about the change", }, footer: { description: - '<footer> holds further meta data, such as breaking changes and issue ids', + "<footer> holds further meta data, such as breaking changes and issue ids", }, }, }; diff --git a/@commitlint/cz-commitlint/src/store/prompts.test.ts b/@commitlint/cz-commitlint/src/store/prompts.test.ts index 37e1ceeaa0..9d378b4ed5 100644 --- a/@commitlint/cz-commitlint/src/store/prompts.test.ts +++ b/@commitlint/cz-commitlint/src/store/prompts.test.ts @@ -1,5 +1,5 @@ -import {describe, test, expect, vi, beforeEach} from 'vitest'; -import * as prompts from './prompts.js'; +import { describe, test, expect, vi, beforeEach } from "vitest"; +import * as prompts from "./prompts.js"; let getPromptQuestions: typeof prompts.getPromptQuestions; let getPromptMessages: typeof prompts.getPromptMessages; @@ -8,16 +8,20 @@ let setPromptConfig: typeof prompts.setPromptConfig; beforeEach(async () => { vi.resetModules(); - ({getPromptQuestions, getPromptMessages, getPromptSettings, setPromptConfig} = - await import('./prompts.js')); + ({ + getPromptQuestions, + getPromptMessages, + getPromptSettings, + setPromptConfig, + } = await import("./prompts.js")); }); -describe('setPromptConfig', () => { - test('should cover questions when prompt config questions is plain object', () => { +describe("setPromptConfig", () => { + test("should cover questions when prompt config questions is plain object", () => { const promptConfig = { questions: { type: { - description: 'input type', + description: "input type", }, }, }; @@ -25,15 +29,15 @@ describe('setPromptConfig', () => { expect(getPromptQuestions()).toBe(promptConfig.questions); }); - test('should not set questions when prompt config questions is not a plain object', () => { - const initialQuestions = {...getPromptQuestions()}; + test("should not set questions when prompt config questions is not a plain object", () => { + const initialQuestions = { ...getPromptQuestions() }; setPromptConfig({ questions: null, } as any); expect(getPromptQuestions()).toEqual(initialQuestions); setPromptConfig({ - questions: 'questions', + questions: "questions", } as any); expect(getPromptQuestions()).toEqual(initialQuestions); @@ -43,66 +47,66 @@ describe('setPromptConfig', () => { expect(getPromptQuestions()).toEqual(initialQuestions); }); - test('should merge message when prompt config message is string', () => { - const initialMessages = {...getPromptMessages()}; + test("should merge message when prompt config message is string", () => { + const initialMessages = { ...getPromptMessages() }; const promptConfig = { messages: { - emptyWarning: '(%s can not be empty)', + emptyWarning: "(%s can not be empty)", }, }; setPromptConfig(promptConfig); - expect(getPromptMessages()['emptyWarning']).toBe( - promptConfig.messages.emptyWarning + expect(getPromptMessages()["emptyWarning"]).toBe( + promptConfig.messages.emptyWarning, ); - expect(getPromptMessages()['lowerLimitWarning']).toBe( - initialMessages['lowerLimitWarning'] + expect(getPromptMessages()["lowerLimitWarning"]).toBe( + initialMessages["lowerLimitWarning"], ); }); - test('should not merge message when prompt config message is not a string', () => { - const initialMessages = {...getPromptMessages()}; + test("should not merge message when prompt config message is not a string", () => { + const initialMessages = { ...getPromptMessages() }; const promptConfig = { messages: { - emptyWarning: '(%s can not be empty)', + emptyWarning: "(%s can not be empty)", min: function () { - return 'min:'; + return "min:"; }, }, }; setPromptConfig(promptConfig as any); - expect(getPromptMessages()['emptyWarning']).toBe( - promptConfig.messages.emptyWarning + expect(getPromptMessages()["emptyWarning"]).toBe( + promptConfig.messages.emptyWarning, ); - expect(getPromptMessages()['min']).toBe(initialMessages['min']); + expect(getPromptMessages()["min"]).toBe(initialMessages["min"]); }); - test('should ignore non-essential message', () => { - const initialMessages = {...getPromptMessages()}; + test("should ignore non-essential message", () => { + const initialMessages = { ...getPromptMessages() }; const promptConfig = { messages: { - more: 'learn more', + more: "learn more", }, }; setPromptConfig(promptConfig); expect(getPromptMessages()).toEqual(initialMessages); }); - test('should fields be independent', () => { - const initialQuestions = {...getPromptQuestions()}; + test("should fields be independent", () => { + const initialQuestions = { ...getPromptQuestions() }; setPromptConfig({ messages: { - emptyWarning: '(%s can not be empty)', + emptyWarning: "(%s can not be empty)", }, }); expect(getPromptQuestions()).toEqual(initialQuestions); - const initialMessages = {...getPromptMessages()}; + const initialMessages = { ...getPromptMessages() }; setPromptConfig({ questions: { type: { - description: 'input type', + description: "input type", }, }, }); @@ -112,29 +116,29 @@ describe('setPromptConfig', () => { test('should settings scopeEnumSeparator be set when value is ",\\/"', () => { setPromptConfig({ settings: { - scopeEnumSeparator: '/', + scopeEnumSeparator: "/", }, }); - expect(getPromptSettings()['scopeEnumSeparator']).toEqual('/'); + expect(getPromptSettings()["scopeEnumSeparator"]).toEqual("/"); const processExit = vi - .spyOn(process, 'exit') + .spyOn(process, "exit") .mockImplementation(() => undefined as never); setPromptConfig({ settings: { - scopeEnumSeparator: '-', + scopeEnumSeparator: "-", }, }); expect(processExit).toHaveBeenCalledWith(1); processExit.mockClear(); }); - test('should pass on settings', () => { + test("should pass on settings", () => { setPromptConfig({ settings: { enableMultipleScopes: true, }, }); - expect(getPromptSettings()['enableMultipleScopes']).toEqual(true); + expect(getPromptSettings()["enableMultipleScopes"]).toEqual(true); }); }); diff --git a/@commitlint/cz-commitlint/src/store/prompts.ts b/@commitlint/cz-commitlint/src/store/prompts.ts index 87faf0e047..dfa1846833 100644 --- a/@commitlint/cz-commitlint/src/store/prompts.ts +++ b/@commitlint/cz-commitlint/src/store/prompts.ts @@ -1,9 +1,9 @@ -import type {PromptConfig, UserPromptConfig} from '@commitlint/types'; -import isPlainObject from 'lodash.isplainobject'; +import type { PromptConfig, UserPromptConfig } from "@commitlint/types"; +import isPlainObject from "lodash.isplainobject"; -import defaultPromptConfigs from './defaultPromptConfigs.js'; +import defaultPromptConfigs from "./defaultPromptConfigs.js"; -const storeKey = Symbol('promptConfig'); +const storeKey = Symbol("promptConfig"); const store: { [storeKey]: PromptConfig; @@ -12,46 +12,46 @@ const store: { }; export function setPromptConfig(newPromptConfig: UserPromptConfig): void { - const {settings, messages, questions} = newPromptConfig; + const { settings, messages, questions } = newPromptConfig; if (messages) { const requiredMessageKeys = Object.keys(defaultPromptConfigs.messages); requiredMessageKeys.forEach((key: string) => { const message = messages[key]; - if (typeof message === 'string') { - store[storeKey]['messages'][key] = message; + if (typeof message === "string") { + store[storeKey]["messages"][key] = message; } }); } if (questions && isPlainObject(questions)) { - store[storeKey]['questions'] = questions; + store[storeKey]["questions"] = questions; } if (settings && isPlainObject(settings)) { if ( - settings['scopeEnumSeparator'] && - !/^\/|\\|,$/.test(settings['scopeEnumSeparator']) + settings["scopeEnumSeparator"] && + !/^\/|\\|,$/.test(settings["scopeEnumSeparator"]) ) { console.log( - `prompt.settings.scopeEnumSeparator must be one of ',', '\\', '/'.` + `prompt.settings.scopeEnumSeparator must be one of ',', '\\', '/'.`, ); process.exit(1); } - store[storeKey]['settings'] = { + store[storeKey]["settings"] = { ...defaultPromptConfigs.settings, ...settings, }; } } -export function getPromptMessages(): Readonly<PromptConfig['messages']> { - return (store[storeKey] && store[storeKey]['messages']) ?? {}; +export function getPromptMessages(): Readonly<PromptConfig["messages"]> { + return (store[storeKey] && store[storeKey]["messages"]) ?? {}; } -export function getPromptQuestions(): Readonly<PromptConfig['questions']> { - return (store[storeKey] && store[storeKey]['questions']) ?? {}; +export function getPromptQuestions(): Readonly<PromptConfig["questions"]> { + return (store[storeKey] && store[storeKey]["questions"]) ?? {}; } -export function getPromptSettings(): Readonly<PromptConfig['settings']> { - return (store[storeKey] && store[storeKey]['settings']) ?? {}; +export function getPromptSettings(): Readonly<PromptConfig["settings"]> { + return (store[storeKey] && store[storeKey]["settings"]) ?? {}; } diff --git a/@commitlint/cz-commitlint/src/store/rules.test.ts b/@commitlint/cz-commitlint/src/store/rules.test.ts index 9fb5280943..373dd6f101 100644 --- a/@commitlint/cz-commitlint/src/store/rules.test.ts +++ b/@commitlint/cz-commitlint/src/store/rules.test.ts @@ -1,70 +1,70 @@ -import {describe, test, expect, vi, beforeEach} from 'vitest'; -import {QualifiedRules, RuleConfigSeverity} from '@commitlint/types'; +import { describe, test, expect, vi, beforeEach } from "vitest"; +import { QualifiedRules, RuleConfigSeverity } from "@commitlint/types"; -import {GetRuleMethod, SetRulesMethod} from './rules.js'; +import { GetRuleMethod, SetRulesMethod } from "./rules.js"; let getRule: GetRuleMethod; let setRules: SetRulesMethod; beforeEach(async () => { vi.resetModules(); - ({getRule, setRules} = await import('./rules.js')); + ({ getRule, setRules } = await import("./rules.js")); }); -describe('getRule', () => { - test('should get rule when prefix and property strict match', () => { +describe("getRule", () => { + test("should get rule when prefix and property strict match", () => { const rules: QualifiedRules = { - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'footer-max-line-length': [RuleConfigSeverity.Error, 'always', 100], - 'subject-empty': [RuleConfigSeverity.Error, 'never'], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], + "footer-max-line-length": [RuleConfigSeverity.Error, "always", 100], + "subject-empty": [RuleConfigSeverity.Error, "never"], }; setRules(rules); - expect(getRule('body', 'max-length')).toBe(rules['body-max-length']); - expect(getRule('footer', 'max-line-length')).toBe( - rules['footer-max-line-length'] + expect(getRule("body", "max-length")).toBe(rules["body-max-length"]); + expect(getRule("footer", "max-line-length")).toBe( + rules["footer-max-line-length"], ); - expect(getRule('subject', 'empty')).toBe(rules['subject-empty']); + expect(getRule("subject", "empty")).toBe(rules["subject-empty"]); }); - test('should not get rule when prefix is invalid', () => { + test("should not get rule when prefix is invalid", () => { const rules: QualifiedRules = { - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], }; setRules(rules); - expect(getRule('body-max', 'length')).toBeUndefined(); - expect(getRule('body-max', 'max-length')).toBeUndefined(); - expect(getRule('', 'body-max-length')).toBeUndefined(); + expect(getRule("body-max", "length")).toBeUndefined(); + expect(getRule("body-max", "max-length")).toBeUndefined(); + expect(getRule("", "body-max-length")).toBeUndefined(); }); - test('should not get rule when property is partial match', () => { + test("should not get rule when property is partial match", () => { const rules: QualifiedRules = { - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'body-leading-blank': [RuleConfigSeverity.Warning, 'always'], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], + "body-leading-blank": [RuleConfigSeverity.Warning, "always"], }; setRules(rules); - expect(getRule('body', 'length')).toBeUndefined(); - expect(getRule('body', 'line-leading-blank')).toBeUndefined(); + expect(getRule("body", "length")).toBeUndefined(); + expect(getRule("body", "line-leading-blank")).toBeUndefined(); }); }); -describe('setRule', () => { - test('should overwrite all rules when setRule', () => { - expect(getRule('body', 'max-length')).toBeUndefined(); +describe("setRule", () => { + test("should overwrite all rules when setRule", () => { + expect(getRule("body", "max-length")).toBeUndefined(); let rules: QualifiedRules = { - 'body-max-length': [RuleConfigSeverity.Error, 'always', 100], + "body-max-length": [RuleConfigSeverity.Error, "always", 100], }; setRules(rules); - expect(getRule('body', 'max-length')).toBe(rules['body-max-length']); + expect(getRule("body", "max-length")).toBe(rules["body-max-length"]); rules = { - 'footer-max-length': [RuleConfigSeverity.Error, 'always', 100], + "footer-max-length": [RuleConfigSeverity.Error, "always", 100], }; setRules(rules); - expect(getRule('body', 'max-length')).toBeUndefined(); - expect(getRule('footer', 'max-length')).toBe(rules['footer-max-length']); + expect(getRule("body", "max-length")).toBeUndefined(); + expect(getRule("footer", "max-length")).toBe(rules["footer-max-length"]); }); }); diff --git a/@commitlint/cz-commitlint/src/store/rules.ts b/@commitlint/cz-commitlint/src/store/rules.ts index 5308b4fb9e..661d4e0ebd 100644 --- a/@commitlint/cz-commitlint/src/store/rules.ts +++ b/@commitlint/cz-commitlint/src/store/rules.ts @@ -1,8 +1,8 @@ -import {QualifiedRules} from '@commitlint/types'; +import { QualifiedRules } from "@commitlint/types"; -import type {Rule} from '../types.js'; +import type { Rule } from "../types.js"; -const storeKey = Symbol('rules'); +const storeKey = Symbol("rules"); const store: { [storeKey]: QualifiedRules; @@ -11,7 +11,7 @@ const store: { }; export function getRule(key: string, property: string): Rule | undefined { - if (key.split('-').length > 1) { + if (key.split("-").length > 1) { return; } return store[storeKey][`${key}-${property}`]; diff --git a/@commitlint/cz-commitlint/src/types.ts b/@commitlint/cz-commitlint/src/types.ts index fba53c54eb..b0c2d2c528 100644 --- a/@commitlint/cz-commitlint/src/types.ts +++ b/@commitlint/cz-commitlint/src/types.ts @@ -1,4 +1,4 @@ -import {RuleConfigCondition, RuleConfigSeverity} from '@commitlint/types'; +import { RuleConfigCondition, RuleConfigSeverity } from "@commitlint/types"; export type Rule = | Readonly<[RuleConfigSeverity.Disabled]> diff --git a/@commitlint/cz-commitlint/src/utils/case-fn.test.ts b/@commitlint/cz-commitlint/src/utils/case-fn.test.ts index 4861cb3462..a1c0a44f33 100644 --- a/@commitlint/cz-commitlint/src/utils/case-fn.test.ts +++ b/@commitlint/cz-commitlint/src/utils/case-fn.test.ts @@ -1,93 +1,93 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import getCaseFn from './case-fn.js'; +import getCaseFn from "./case-fn.js"; -test('should not transform when rule is disabled', () => { +test("should not transform when rule is disabled", () => { let rule = getCaseFn([RuleConfigSeverity.Disabled]); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); rule = getCaseFn(); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); - - rule = getCaseFn([RuleConfigSeverity.Warning, 'never']); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); + + rule = getCaseFn([RuleConfigSeverity.Warning, "never"]); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); }); -test('should throw error on invalid casing', () => { - let rule = getCaseFn([RuleConfigSeverity.Warning, 'always']); - expect(() => rule('test')).toThrow('Unknown target case "undefined"'); +test("should throw error on invalid casing", () => { + let rule = getCaseFn([RuleConfigSeverity.Warning, "always"]); + expect(() => rule("test")).toThrow('Unknown target case "undefined"'); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'foo']); - expect(() => rule('test')).toThrow('Unknown target case "foo"'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "foo"]); + expect(() => rule("test")).toThrow('Unknown target case "foo"'); }); -test('should transform text correctly with single case', () => { - let rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'camel-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('testFooBarBazBaz'); +test("should transform text correctly with single case", () => { + let rule = getCaseFn([RuleConfigSeverity.Warning, "always", "camel-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("testFooBarBazBaz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'kebab-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('test-foo-bar-baz-baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "kebab-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test-foo-bar-baz-baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'snake-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foo_bar_baz_baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "snake-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foo_bar_baz_baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'pascal-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('TestFooBarBazBaz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "pascal-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TestFooBarBazBaz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'start-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST FOO Bar Baz Baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "start-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST FOO Bar Baz Baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'upper-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBAR-BAZ BAZ'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "upper-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'uppercase']); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBAR-BAZ BAZ'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "uppercase"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'sentence-case']); - expect(rule('tEST_FOOBar-baz baz')).toBe('TEST_FOOBar-baz baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "sentence-case"]); + expect(rule("tEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'sentencecase']); - expect(rule('tEST_FOOBar-baz baz')).toBe('TEST_FOOBar-baz baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "sentencecase"]); + expect(rule("tEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'lower-case']); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "lower-case"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'lowercase']); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "lowercase"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'lowerCase']); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "lowerCase"]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'lowerCase']); - expect(rule(['TEST_FOOBar-baz', 'bAz'])).toBe('test_foobar-baz,baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "lowerCase"]); + expect(rule(["TEST_FOOBar-baz", "bAz"])).toBe("test_foobar-baz,baz"); - rule = getCaseFn([RuleConfigSeverity.Warning, 'always', 'lowerCase']); - expect(rule(['TEST_FOOBar-baz', 'bAz'], '|')).toBe('test_foobar-baz|baz'); + rule = getCaseFn([RuleConfigSeverity.Warning, "always", "lowerCase"]); + expect(rule(["TEST_FOOBar-baz", "bAz"], "|")).toBe("test_foobar-baz|baz"); }); -test('should transform text correctly with multiple cases', () => { +test("should transform text correctly with multiple cases", () => { const rule = getCaseFn([ RuleConfigSeverity.Warning, - 'always', - ['camel-case', 'lowercase'], + "always", + ["camel-case", "lowercase"], ]); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('testFoo'); - - expect(rule(['testFoo', 'test_foo'])).toBe('testFoo,testFoo'); - expect(rule(['TEST_foo', 'test_foo'])).toBe('test_foo,test_foo'); - expect(rule(['TEST_FOO', 'Test_foo'])).toBe('testFoo,testFoo'); - expect(rule(['TEST_FOO', 'Test_foo'], '|')).toBe('testFoo|testFoo'); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("testFoo"); + + expect(rule(["testFoo", "test_foo"])).toBe("testFoo,testFoo"); + expect(rule(["TEST_foo", "test_foo"])).toBe("test_foo,test_foo"); + expect(rule(["TEST_FOO", "Test_foo"])).toBe("testFoo,testFoo"); + expect(rule(["TEST_FOO", "Test_foo"], "|")).toBe("testFoo|testFoo"); }); diff --git a/@commitlint/cz-commitlint/src/utils/case-fn.ts b/@commitlint/cz-commitlint/src/utils/case-fn.ts index 394b786a0c..81723af7ca 100644 --- a/@commitlint/cz-commitlint/src/utils/case-fn.ts +++ b/@commitlint/cz-commitlint/src/utils/case-fn.ts @@ -1,8 +1,8 @@ -import {case as ensureCase, toCase} from '@commitlint/ensure'; -import {TargetCaseType} from '@commitlint/types'; +import { case as ensureCase, toCase } from "@commitlint/ensure"; +import { TargetCaseType } from "@commitlint/types"; -import {Rule} from '../types.js'; -import {ruleIsActive, ruleIsNotApplicable} from './rules.js'; +import { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; export type CaseFn = (input: string | string[], delimiter?: string) => string; diff --git a/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts b/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts index a70c2a0c18..418af8af35 100644 --- a/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts +++ b/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts @@ -1,69 +1,69 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import getFullStopFn from './full-stop-fn.js'; +import getFullStopFn from "./full-stop-fn.js"; -test('should not apply', () => { +test("should not apply", () => { let rule = getFullStopFn([RuleConfigSeverity.Disabled]); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); rule = getFullStopFn(); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); - rule = getFullStopFn([RuleConfigSeverity.Disabled, 'always']); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + rule = getFullStopFn([RuleConfigSeverity.Disabled, "always"]); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); - rule = getFullStopFn([RuleConfigSeverity.Disabled, 'always', 1]); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + rule = getFullStopFn([RuleConfigSeverity.Disabled, "always", 1]); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); - rule = getFullStopFn([RuleConfigSeverity.Disabled, 'never']); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + rule = getFullStopFn([RuleConfigSeverity.Disabled, "never"]); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); - rule = getFullStopFn([RuleConfigSeverity.Disabled, 'never', ['.']]); - expect(rule('test.')).toBe('test.'); - expect(rule('test')).toBe('test'); - expect(rule('test..')).toBe('test..'); - expect(rule('')).toBe(''); + rule = getFullStopFn([RuleConfigSeverity.Disabled, "never", ["."]]); + expect(rule("test.")).toBe("test."); + expect(rule("test")).toBe("test"); + expect(rule("test..")).toBe("test.."); + expect(rule("")).toBe(""); }); -test('should add full stop', () => { - let rule = getFullStopFn([RuleConfigSeverity.Error, 'always', '.']); - expect(rule('test')).toBe('test.'); - expect(rule('test.')).toBe('test.'); - expect(rule('')).toBe('.'); +test("should add full stop", () => { + let rule = getFullStopFn([RuleConfigSeverity.Error, "always", "."]); + expect(rule("test")).toBe("test."); + expect(rule("test.")).toBe("test."); + expect(rule("")).toBe("."); - rule = getFullStopFn([RuleConfigSeverity.Error, 'always', '\n']); - expect(rule('test')).toBe('test\n'); - expect(rule('test.')).toBe('test.\n'); - expect(rule('')).toBe('\n'); + rule = getFullStopFn([RuleConfigSeverity.Error, "always", "\n"]); + expect(rule("test")).toBe("test\n"); + expect(rule("test.")).toBe("test.\n"); + expect(rule("")).toBe("\n"); }); -test('should remove full stop', () => { - let rule = getFullStopFn([RuleConfigSeverity.Error, 'never', '.']); - expect(rule('test')).toBe('test'); - expect(rule('test.')).toBe('test'); - expect(rule('')).toBe(''); - expect(rule('test..')).toBe('test'); - expect(rule('test.end')).toBe('test.end'); +test("should remove full stop", () => { + let rule = getFullStopFn([RuleConfigSeverity.Error, "never", "."]); + expect(rule("test")).toBe("test"); + expect(rule("test.")).toBe("test"); + expect(rule("")).toBe(""); + expect(rule("test..")).toBe("test"); + expect(rule("test.end")).toBe("test.end"); - rule = getFullStopFn([RuleConfigSeverity.Error, 'never', '\n']); - expect(rule('test')).toBe('test'); - expect(rule('test.')).toBe('test.'); - expect(rule('test\n\n')).toBe('test'); - expect(rule('test.\n')).toBe('test.'); + rule = getFullStopFn([RuleConfigSeverity.Error, "never", "\n"]); + expect(rule("test")).toBe("test"); + expect(rule("test.")).toBe("test."); + expect(rule("test\n\n")).toBe("test"); + expect(rule("test.\n")).toBe("test."); }); diff --git a/@commitlint/cz-commitlint/src/utils/full-stop-fn.ts b/@commitlint/cz-commitlint/src/utils/full-stop-fn.ts index 9b219e0001..659a15e915 100644 --- a/@commitlint/cz-commitlint/src/utils/full-stop-fn.ts +++ b/@commitlint/cz-commitlint/src/utils/full-stop-fn.ts @@ -1,5 +1,5 @@ -import {Rule} from '../types.js'; -import {ruleIsActive, ruleIsNotApplicable} from './rules.js'; +import { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; export type FullStopFn = (input: string) => string; @@ -15,7 +15,7 @@ export default function getFullStopFn(rule?: Rule): FullStopFn { return noop; } - if (typeof rule[2] !== 'string') return noop; + if (typeof rule[2] !== "string") return noop; const symbol: string = rule[2]; diff --git a/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts index 9eb773b87c..c82893859c 100644 --- a/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts +++ b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts @@ -1,39 +1,39 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import getLeadingBlankFn from './leading-blank-fn.js'; +import getLeadingBlankFn from "./leading-blank-fn.js"; -test('should not apply', () => { +test("should not apply", () => { let rule = getLeadingBlankFn([RuleConfigSeverity.Disabled]); - expect(rule('test')).toBe('test'); - expect(rule('\ntest')).toBe('\ntest'); - expect(rule('aaa\ntest')).toBe('aaa\ntest'); - expect(rule('')).toBe(''); + expect(rule("test")).toBe("test"); + expect(rule("\ntest")).toBe("\ntest"); + expect(rule("aaa\ntest")).toBe("aaa\ntest"); + expect(rule("")).toBe(""); rule = getLeadingBlankFn(); - expect(rule('test')).toBe('test'); - expect(rule('\ntest')).toBe('\ntest'); - expect(rule('aaa\ntest')).toBe('aaa\ntest'); - expect(rule('')).toBe(''); + expect(rule("test")).toBe("test"); + expect(rule("\ntest")).toBe("\ntest"); + expect(rule("aaa\ntest")).toBe("aaa\ntest"); + expect(rule("")).toBe(""); }); -test('should add leading blank', () => { - const rule = getLeadingBlankFn([RuleConfigSeverity.Error, 'always']); - expect(rule('test')).toBe('\ntest'); - expect(rule('\ntest')).toBe('\ntest'); - expect(rule('\n\ntest')).toBe('\n\ntest'); - expect(rule('aaa\ntest')).toBe('\naaa\ntest'); - expect(rule('\naaa\ntest')).toBe('\naaa\ntest'); - expect(rule('')).toBe(''); +test("should add leading blank", () => { + const rule = getLeadingBlankFn([RuleConfigSeverity.Error, "always"]); + expect(rule("test")).toBe("\ntest"); + expect(rule("\ntest")).toBe("\ntest"); + expect(rule("\n\ntest")).toBe("\n\ntest"); + expect(rule("aaa\ntest")).toBe("\naaa\ntest"); + expect(rule("\naaa\ntest")).toBe("\naaa\ntest"); + expect(rule("")).toBe(""); }); -test('should remove leading blank', () => { - const rule = getLeadingBlankFn([RuleConfigSeverity.Error, 'never']); - expect(rule('test')).toBe('test'); - expect(rule('\ntest')).toBe('test'); - expect(rule('\n\ntest')).toBe('test'); - expect(rule('aaa\ntest')).toBe('aaa\ntest'); - expect(rule('\naaa\ntest')).toBe('aaa\ntest'); - expect(rule('\n\n\naaa\ntest')).toBe('aaa\ntest'); - expect(rule('')).toBe(''); +test("should remove leading blank", () => { + const rule = getLeadingBlankFn([RuleConfigSeverity.Error, "never"]); + expect(rule("test")).toBe("test"); + expect(rule("\ntest")).toBe("test"); + expect(rule("\n\ntest")).toBe("test"); + expect(rule("aaa\ntest")).toBe("aaa\ntest"); + expect(rule("\naaa\ntest")).toBe("aaa\ntest"); + expect(rule("\n\n\naaa\ntest")).toBe("aaa\ntest"); + expect(rule("")).toBe(""); }); diff --git a/@commitlint/cz-commitlint/src/utils/leading-blank-fn.ts b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.ts index c40e15637d..9400b8c1ed 100644 --- a/@commitlint/cz-commitlint/src/utils/leading-blank-fn.ts +++ b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.ts @@ -1,5 +1,5 @@ -import type {Rule} from '../types.js'; -import {ruleIsActive, ruleIsNotApplicable} from './rules.js'; +import type { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; /** * Get forced leading for rule @@ -7,22 +7,22 @@ import {ruleIsActive, ruleIsNotApplicable} from './rules.js'; * @return transform function applying the leading */ export default function getLeadingBlankFn( - rule?: Rule + rule?: Rule, ): (input: string) => string { if (!rule || !ruleIsActive(rule)) { return (input: string): string => input; } const remove = (input: string): string => { - const fragments = input.split('\n'); - while (fragments.length > 0 && fragments[0] === '') { + const fragments = input.split("\n"); + while (fragments.length > 0 && fragments[0] === "") { fragments.shift(); } - return fragments.join('\n'); + return fragments.join("\n"); }; const lead = (input: string): string => { - const fragments = input.split('\n'); - return fragments[0] === '' ? input : ['', ...fragments].join('\n'); + const fragments = input.split("\n"); + return fragments[0] === "" ? input : ["", ...fragments].join("\n"); }; return !ruleIsNotApplicable(rule) ? lead : remove; diff --git a/@commitlint/cz-commitlint/src/utils/rules.test.ts b/@commitlint/cz-commitlint/src/utils/rules.test.ts index af93a40f7d..4c9855078c 100644 --- a/@commitlint/cz-commitlint/src/utils/rules.test.ts +++ b/@commitlint/cz-commitlint/src/utils/rules.test.ts @@ -1,5 +1,5 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; import { enumRuleIsActive, @@ -10,118 +10,118 @@ import { ruleIsApplicable, ruleIsDisabled, ruleIsNotApplicable, -} from './rules.js'; +} from "./rules.js"; -test('ruleIsDisabled', () => { +test("ruleIsDisabled", () => { expect(ruleIsDisabled([RuleConfigSeverity.Disabled])).toBe(true); - expect(ruleIsDisabled([RuleConfigSeverity.Disabled, 'never'])).toBe(true); - expect(ruleIsDisabled([RuleConfigSeverity.Disabled, 'always'])).toBe(true); + expect(ruleIsDisabled([RuleConfigSeverity.Disabled, "never"])).toBe(true); + expect(ruleIsDisabled([RuleConfigSeverity.Disabled, "always"])).toBe(true); expect(ruleIsDisabled([RuleConfigSeverity.Error] as any)).toBe(false); - expect(ruleIsDisabled([RuleConfigSeverity.Error, 'always'] as any)).toBe( - false + expect(ruleIsDisabled([RuleConfigSeverity.Error, "always"] as any)).toBe( + false, ); }); -test('ruleIsActive', () => { - expect(ruleIsActive([RuleConfigSeverity.Error, 'always'])).toBe(true); - expect(ruleIsActive([RuleConfigSeverity.Warning, 'never'])).toBe(true); - expect(ruleIsActive([RuleConfigSeverity.Disabled, 'always'])).toBe(false); +test("ruleIsActive", () => { + expect(ruleIsActive([RuleConfigSeverity.Error, "always"])).toBe(true); + expect(ruleIsActive([RuleConfigSeverity.Warning, "never"])).toBe(true); + expect(ruleIsActive([RuleConfigSeverity.Disabled, "always"])).toBe(false); expect(ruleIsActive([RuleConfigSeverity.Error] as any)).toBe(true); }); -test('ruleIsApplicable', () => { - expect(ruleIsApplicable([RuleConfigSeverity.Error, 'always'])).toBe(true); - expect(ruleIsApplicable([RuleConfigSeverity.Warning, 'always'])).toBe(true); - expect(ruleIsApplicable([RuleConfigSeverity.Disabled, 'always'])).toBe(true); +test("ruleIsApplicable", () => { + expect(ruleIsApplicable([RuleConfigSeverity.Error, "always"])).toBe(true); + expect(ruleIsApplicable([RuleConfigSeverity.Warning, "always"])).toBe(true); + expect(ruleIsApplicable([RuleConfigSeverity.Disabled, "always"])).toBe(true); expect(ruleIsApplicable(undefined as any)).toBe(false); - expect(ruleIsApplicable('' as any)).toBe(false); + expect(ruleIsApplicable("" as any)).toBe(false); expect(ruleIsApplicable([RuleConfigSeverity.Disabled])).toBe(false); - expect(ruleIsApplicable([RuleConfigSeverity.Disabled, 'never'])).toBe(false); + expect(ruleIsApplicable([RuleConfigSeverity.Disabled, "never"])).toBe(false); }); -test('ruleIsNotApplicable', () => { - expect(ruleIsNotApplicable([RuleConfigSeverity.Error, 'never'])).toBe(true); - expect(ruleIsNotApplicable([RuleConfigSeverity.Warning, 'never'])).toBe(true); - expect(ruleIsNotApplicable([RuleConfigSeverity.Disabled, 'never'])).toBe( - true +test("ruleIsNotApplicable", () => { + expect(ruleIsNotApplicable([RuleConfigSeverity.Error, "never"])).toBe(true); + expect(ruleIsNotApplicable([RuleConfigSeverity.Warning, "never"])).toBe(true); + expect(ruleIsNotApplicable([RuleConfigSeverity.Disabled, "never"])).toBe( + true, ); expect(ruleIsNotApplicable(undefined as any)).toBe(false); - expect(ruleIsNotApplicable('' as any)).toBe(false); + expect(ruleIsNotApplicable("" as any)).toBe(false); expect(ruleIsNotApplicable([RuleConfigSeverity.Error] as any)).toBe(false); - expect(ruleIsNotApplicable([RuleConfigSeverity.Error, 'always'])).toBe(false); - expect(ruleIsNotApplicable([RuleConfigSeverity.Error, 'always', 100])).toBe( - false + expect(ruleIsNotApplicable([RuleConfigSeverity.Error, "always"])).toBe(false); + expect(ruleIsNotApplicable([RuleConfigSeverity.Error, "always", 100])).toBe( + false, ); }); -test('getMaxLength', () => { - expect(getMaxLength([RuleConfigSeverity.Error, 'always', 100])).toBe(100); - expect(getMaxLength([RuleConfigSeverity.Warning, 'never'])).toBe(Infinity); - expect(getMaxLength([RuleConfigSeverity.Disabled, 'always'])).toBe(Infinity); +test("getMaxLength", () => { + expect(getMaxLength([RuleConfigSeverity.Error, "always", 100])).toBe(100); + expect(getMaxLength([RuleConfigSeverity.Warning, "never"])).toBe(Infinity); + expect(getMaxLength([RuleConfigSeverity.Disabled, "always"])).toBe(Infinity); expect(getMaxLength([RuleConfigSeverity.Error] as any)).toBe(Infinity); const rules: any = { - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 100], - 'header-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'test-max-length': [RuleConfigSeverity.Disabled, 'always', 100], + "body-max-line-length": [RuleConfigSeverity.Error, "always", 100], + "header-max-length": [RuleConfigSeverity.Error, "always", 100], + "test-max-length": [RuleConfigSeverity.Disabled, "always", 100], }; - let lengthRule = rules['header-max-length']; + let lengthRule = rules["header-max-length"]; expect(getMaxLength(lengthRule)).toBe(100); - lengthRule = rules['body-max-line-length']; + lengthRule = rules["body-max-line-length"]; expect(getMaxLength(lengthRule)).toBe(100); - lengthRule = rules['body-max-length']; + lengthRule = rules["body-max-length"]; expect(getMaxLength(lengthRule)).toBe(Infinity); - lengthRule = rules['test-max-length']; + lengthRule = rules["test-max-length"]; expect(getMaxLength(lengthRule)).toBe(Infinity); }); -test('getMinLength', () => { - expect(getMinLength([RuleConfigSeverity.Error, 'always', 10])).toBe(10); - expect(getMinLength([RuleConfigSeverity.Warning, 'never'])).toBe(0); - expect(getMinLength([RuleConfigSeverity.Disabled, 'always'])).toBe(0); +test("getMinLength", () => { + expect(getMinLength([RuleConfigSeverity.Error, "always", 10])).toBe(10); + expect(getMinLength([RuleConfigSeverity.Warning, "never"])).toBe(0); + expect(getMinLength([RuleConfigSeverity.Disabled, "always"])).toBe(0); expect(getMinLength([RuleConfigSeverity.Error] as any)).toBe(0); const rules: any = { - 'body-min-length': [RuleConfigSeverity.Error, 'always', 10], - 'footer-min-length': [RuleConfigSeverity.Error, 'always', 20], - 'test-min-length': [RuleConfigSeverity.Disabled, 'always', 100], + "body-min-length": [RuleConfigSeverity.Error, "always", 10], + "footer-min-length": [RuleConfigSeverity.Error, "always", 20], + "test-min-length": [RuleConfigSeverity.Disabled, "always", 100], }; - let lengthRule = rules['header-min-length']; + let lengthRule = rules["header-min-length"]; expect(getMinLength(lengthRule)).toBe(0); - lengthRule = rules['body-min-length']; + lengthRule = rules["body-min-length"]; expect(getMinLength(lengthRule)).toBe(10); - lengthRule = rules['test-min-length']; + lengthRule = rules["test-min-length"]; expect(getMinLength(lengthRule)).toBe(0); }); -test('enumRuleIsActive', () => { +test("enumRuleIsActive", () => { const rules: any = { - 'enum-string': [RuleConfigSeverity.Warning, 'always', ['1', '2', '3']], - 'type-enum': [RuleConfigSeverity.Error, 'always', ['build', 'chore', 'ci']], - 'scope-enum': [RuleConfigSeverity.Error, 'never', ['cli', 'core', 'lint']], - 'bar-enum': [RuleConfigSeverity.Disabled, 'always', ['foo', 'bar', 'baz']], + "enum-string": [RuleConfigSeverity.Warning, "always", ["1", "2", "3"]], + "type-enum": [RuleConfigSeverity.Error, "always", ["build", "chore", "ci"]], + "scope-enum": [RuleConfigSeverity.Error, "never", ["cli", "core", "lint"]], + "bar-enum": [RuleConfigSeverity.Disabled, "always", ["foo", "bar", "baz"]], }; - expect(enumRuleIsActive(rules['type-enum'])).toBe(true); - expect(enumRuleIsActive(rules['string-enum'])).toBe(false); - expect(enumRuleIsActive(rules['enum-string'])).toBe(true); - expect(enumRuleIsActive(rules['bar-enum'])).toBe(false); - expect(enumRuleIsActive(rules['scope-enum'])).toBe(false); + expect(enumRuleIsActive(rules["type-enum"])).toBe(true); + expect(enumRuleIsActive(rules["string-enum"])).toBe(false); + expect(enumRuleIsActive(rules["enum-string"])).toBe(true); + expect(enumRuleIsActive(rules["bar-enum"])).toBe(false); + expect(enumRuleIsActive(rules["scope-enum"])).toBe(false); }); -test('getEnumList', () => { +test("getEnumList", () => { const rules: any = { - 'type-enum': [RuleConfigSeverity.Error, 'always', ['build', 'chore', 'ci']], - 'scope-enum': [RuleConfigSeverity.Error, 'never', ''], - 'bar-enum': [RuleConfigSeverity.Disabled, 'always'], + "type-enum": [RuleConfigSeverity.Error, "always", ["build", "chore", "ci"]], + "scope-enum": [RuleConfigSeverity.Error, "never", ""], + "bar-enum": [RuleConfigSeverity.Disabled, "always"], }; - expect(getEnumList(rules['type-enum'])).toEqual(['build', 'chore', 'ci']); - expect(getEnumList(rules['scope-enum'])).toEqual([]); - expect(getEnumList(rules['bar-enum'])).toEqual([]); + expect(getEnumList(rules["type-enum"])).toEqual(["build", "chore", "ci"]); + expect(getEnumList(rules["scope-enum"])).toEqual([]); + expect(getEnumList(rules["bar-enum"])).toEqual([]); }); diff --git a/@commitlint/cz-commitlint/src/utils/rules.ts b/@commitlint/cz-commitlint/src/utils/rules.ts index 03557c4eef..d2570cd392 100644 --- a/@commitlint/cz-commitlint/src/utils/rules.ts +++ b/@commitlint/cz-commitlint/src/utils/rules.ts @@ -1,8 +1,8 @@ -import {RuleConfigSeverity} from '@commitlint/types'; -import type {Rule} from '../types.js'; +import { RuleConfigSeverity } from "@commitlint/types"; +import type { Rule } from "../types.js"; export function ruleIsDisabled( - rule: Rule + rule: Rule, ): rule is Readonly<[RuleConfigSeverity.Disabled]> { if (rule && Array.isArray(rule) && rule[0] === RuleConfigSeverity.Disabled) { return true; @@ -16,7 +16,7 @@ export function ruleIsDisabled( * @return if the rule definition is active */ export function ruleIsActive<T extends Rule>( - rule: T + rule: T, ): rule is Exclude<T, Readonly<[RuleConfigSeverity.Disabled]>> { if (rule && Array.isArray(rule)) { return rule[0] > RuleConfigSeverity.Disabled; @@ -30,12 +30,12 @@ export function ruleIsActive<T extends Rule>( * @return if the rule definition is applicable */ export function ruleIsApplicable( - rule: Rule + rule: Rule, ): rule is - | Readonly<[RuleConfigSeverity, 'always']> - | Readonly<[RuleConfigSeverity, 'always', unknown]> { + | Readonly<[RuleConfigSeverity, "always"]> + | Readonly<[RuleConfigSeverity, "always", unknown]> { if (rule && Array.isArray(rule)) { - return rule[1] === 'always'; + return rule[1] === "always"; } return false; } @@ -46,20 +46,20 @@ export function ruleIsApplicable( * @return if the rule definition is applicable */ export function ruleIsNotApplicable( - rule: Rule + rule: Rule, ): rule is - | Readonly<[RuleConfigSeverity, 'never']> - | Readonly<[RuleConfigSeverity, 'never', unknown]> { + | Readonly<[RuleConfigSeverity, "never"]> + | Readonly<[RuleConfigSeverity, "never", unknown]> { if (rule && Array.isArray(rule)) { - return rule[1] === 'never'; + return rule[1] === "never"; } return false; } export function enumRuleIsActive( - rule: Rule + rule: Rule, ): rule is Readonly< - [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, 'always', string[]] + [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, "always", string[]] > { return ( ruleIsActive(rule) && @@ -78,7 +78,7 @@ export function getMaxLength(rule?: Rule): number { rule && ruleIsActive(rule) && ruleIsApplicable(rule) && - typeof rule[2] === 'number' + typeof rule[2] === "number" ) { return rule[2]; } @@ -90,7 +90,7 @@ export function getMinLength(rule?: Rule): number { rule && ruleIsActive(rule) && ruleIsApplicable(rule) && - typeof rule[2] === 'number' + typeof rule[2] === "number" ) { return rule[2]; } diff --git a/@commitlint/cz-commitlint/tsconfig.json b/@commitlint/cz-commitlint/tsconfig.json index ff127af5ca..47e6ae4531 100644 --- a/@commitlint/cz-commitlint/tsconfig.json +++ b/@commitlint/cz-commitlint/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./src/**/*-test.ts", "./lib/**/*"], - "references": [{"path": "../cli"}] + "references": [{ "path": "../cli" }] } diff --git a/@commitlint/ensure/CHANGELOG.md b/@commitlint/ensure/CHANGELOG.md index 98a555e6b0..cd04a0321a 100644 --- a/@commitlint/ensure/CHANGELOG.md +++ b/@commitlint/ensure/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/ensure + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/ensure + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/ensure/package.json b/@commitlint/ensure/package.json index 3f26ac6261..ca67c3a7f3 100644 --- a/@commitlint/ensure/package.json +++ b/@commitlint/ensure/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/ensure", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,7 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0", + "@commitlint/utils": "^19.8.0", "@types/lodash.camelcase": "^4.3.8", "@types/lodash.kebabcase": "^4.1.8", "@types/lodash.snakecase": "^4.1.8", @@ -45,12 +45,12 @@ "glob": "^10.3.10" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "lodash.upperfirst": "^4.3.1" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/ensure/src/case.test.ts b/@commitlint/ensure/src/case.test.ts index 19957b0fb0..d812da8bf4 100644 --- a/@commitlint/ensure/src/case.test.ts +++ b/@commitlint/ensure/src/case.test.ts @@ -1,340 +1,340 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './case.js'; +import ensure from "./case.js"; -test('true for no params', () => { +test("true for no params", () => { const actual = ensure(); expect(actual).toBe(true); }); -test('true for empty', () => { - const actual = ensure(''); +test("true for empty", () => { + const actual = ensure(""); expect(actual).toBe(true); }); -test('true for lowercase', () => { - const actual = ensure('a'); +test("true for lowercase", () => { + const actual = ensure("a"); expect(actual).toBe(true); }); -test('false for uppercase', () => { - const actual = ensure('A'); +test("false for uppercase", () => { + const actual = ensure("A"); expect(actual).toBe(false); }); -test('true for lowercase on lowercase', () => { - const actual = ensure('a', 'lowercase'); +test("true for lowercase on lowercase", () => { + const actual = ensure("a", "lowercase"); expect(actual).toBe(true); }); -test('false for uppercase on lowercase', () => { - const actual = ensure('A', 'lowercase'); +test("false for uppercase on lowercase", () => { + const actual = ensure("A", "lowercase"); expect(actual).toBe(false); }); -test('true for * on lowercase', () => { - const actual = ensure('*', 'lowercase'); +test("true for * on lowercase", () => { + const actual = ensure("*", "lowercase"); expect(actual).toBe(true); }); -test('true for uppercase on uppercase', () => { - const actual = ensure('A', 'uppercase'); +test("true for uppercase on uppercase", () => { + const actual = ensure("A", "uppercase"); expect(actual).toBe(true); }); -test('false for lowercase on uppercase', () => { - const actual = ensure('a', 'uppercase'); +test("false for lowercase on uppercase", () => { + const actual = ensure("a", "uppercase"); expect(actual).toBe(false); }); -test('true for * on uppercase', () => { - const actual = ensure('*', 'uppercase'); +test("true for * on uppercase", () => { + const actual = ensure("*", "uppercase"); expect(actual).toBe(true); }); -test('true for sentencecase on sentencecase', () => { - const actual = ensure('Sentence case', 'sentence-case'); +test("true for sentencecase on sentencecase", () => { + const actual = ensure("Sentence case", "sentence-case"); expect(actual).toBe(true); }); -test('false for lowercase on sentencecase', () => { - const actual = ensure('sentence case', 'sentence-case'); +test("false for lowercase on sentencecase", () => { + const actual = ensure("sentence case", "sentence-case"); expect(actual).toBe(false); }); -test('true for UPPERCASE on sentencecase', () => { - const actual = ensure('UPPERCASE', 'sentence-case'); +test("true for UPPERCASE on sentencecase", () => { + const actual = ensure("UPPERCASE", "sentence-case"); expect(actual).toBe(true); }); -test('true for Start Case on sentencecase', () => { - const actual = ensure('Start Case', 'sentence-case'); +test("true for Start Case on sentencecase", () => { + const actual = ensure("Start Case", "sentence-case"); expect(actual).toBe(true); }); -test('true for PascalCase on sentencecase', () => { - const actual = ensure('PascalCase', 'sentence-case'); +test("true for PascalCase on sentencecase", () => { + const actual = ensure("PascalCase", "sentence-case"); expect(actual).toBe(true); }); -test('false for kebab-case on sentencecase', () => { - const actual = ensure('kebab-case', 'sentence-case'); +test("false for kebab-case on sentencecase", () => { + const actual = ensure("kebab-case", "sentence-case"); expect(actual).toBe(false); }); -test('false for snake_case on sentencecase', () => { - const actual = ensure('snake_case', 'sentence-case'); +test("false for snake_case on sentencecase", () => { + const actual = ensure("snake_case", "sentence-case"); expect(actual).toBe(false); }); -test('false for camelCase on sentencecase', () => { - const actual = ensure('camelCase', 'sentence-case'); +test("false for camelCase on sentencecase", () => { + const actual = ensure("camelCase", "sentence-case"); expect(actual).toBe(false); }); -test('true for * on sentence-case', () => { - const actual = ensure('*', 'sentence-case'); +test("true for * on sentence-case", () => { + const actual = ensure("*", "sentence-case"); expect(actual).toBe(true); }); -test('true for * on camel-case', () => { - const actual = ensure('*', 'camel-case'); +test("true for * on camel-case", () => { + const actual = ensure("*", "camel-case"); expect(actual).toBe(true); }); -test('true for * on kebab-case', () => { - const actual = ensure('*', 'kebab-case'); +test("true for * on kebab-case", () => { + const actual = ensure("*", "kebab-case"); expect(actual).toBe(true); }); -test('true for * on snake-case', () => { - const actual = ensure('*', 'snake-case'); +test("true for * on snake-case", () => { + const actual = ensure("*", "snake-case"); expect(actual).toBe(true); }); -test('true for * on pascal-case', () => { - const actual = ensure('*', 'pascal-case'); +test("true for * on pascal-case", () => { + const actual = ensure("*", "pascal-case"); expect(actual).toBe(true); }); -test('true for * on start-case', () => { - const actual = ensure('*', 'start-case'); +test("true for * on start-case", () => { + const actual = ensure("*", "start-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on lowercase', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'lowercase'); +test("true for `Any_CASE_iN_back-quotes` on lowercase", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "lowercase"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on uppercase', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'uppercase'); +test("true for `Any_CASE_iN_back-quotes` on uppercase", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "uppercase"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on sentence-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'sentence-case'); +test("true for `Any_CASE_iN_back-quotes` on sentence-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "sentence-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on camel-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'camel-case'); +test("true for `Any_CASE_iN_back-quotes` on camel-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "camel-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on kebab-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'kebab-case'); +test("true for `Any_CASE_iN_back-quotes` on kebab-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "kebab-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on snake-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'snake-case'); +test("true for `Any_CASE_iN_back-quotes` on snake-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "snake-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on pascal-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'pascal-case'); +test("true for `Any_CASE_iN_back-quotes` on pascal-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "pascal-case"); expect(actual).toBe(true); }); -test('true for `Any_CASE_iN_back-quotes` on start-case', () => { - const actual = ensure('`Any_CASE_iN_back-quotes`', 'start-case'); +test("true for `Any_CASE_iN_back-quotes` on start-case", () => { + const actual = ensure("`Any_CASE_iN_back-quotes`", "start-case"); expect(actual).toBe(true); }); -test('true for lowercase `Any_CASE_iN_back-quotes` lowercase on lowercase', () => { +test("true for lowercase `Any_CASE_iN_back-quotes` lowercase on lowercase", () => { const actual = ensure( - 'lowercase `Any_CASE_iN_back-quotes` lowercase', - 'lowercase' + "lowercase `Any_CASE_iN_back-quotes` lowercase", + "lowercase", ); expect(actual).toBe(true); }); -test('false for UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE on lowercase', () => { +test("false for UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE on lowercase", () => { const actual = ensure( - 'UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE', - 'lowercase' + "UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE", + "lowercase", ); expect(actual).toBe(false); }); -test('true for UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE on uppercase', () => { +test("true for UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE on uppercase", () => { const actual = ensure( - 'UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE', - 'uppercase' + "UPPERCASE `Any_CASE_iN_back-quotes` UPPERCASE", + "uppercase", ); expect(actual).toBe(true); }); -test('false for lowercase `Any_CASE_iN_back-quotes` lowercase on uppercase', () => { +test("false for lowercase `Any_CASE_iN_back-quotes` lowercase on uppercase", () => { const actual = ensure( - 'lowercase `Any_CASE_iN_back-quotes` lowercase', - 'uppercase' + "lowercase `Any_CASE_iN_back-quotes` lowercase", + "uppercase", ); expect(actual).toBe(false); }); -test('true for fooBar`Any_CASE_iN_back-quotes`fooBar on camel-case', () => { - const actual = ensure('fooBar`Any_CASE_iN_back-quotes`fooBar', 'camel-case'); +test("true for fooBar`Any_CASE_iN_back-quotes`fooBar on camel-case", () => { + const actual = ensure("fooBar`Any_CASE_iN_back-quotes`fooBar", "camel-case"); expect(actual).toBe(true); }); -test('false for Foo Bar`Any_CASE_iN_back-quotes` Foo Bar on camel-case', () => { +test("false for Foo Bar`Any_CASE_iN_back-quotes` Foo Bar on camel-case", () => { const actual = ensure( - 'Foo Bar`Any_CASE_iN_back-quotes` Foo Bar', - 'camel-case' + "Foo Bar`Any_CASE_iN_back-quotes` Foo Bar", + "camel-case", ); expect(actual).toBe(false); }); -test('true for foo-bar`Any_CASE_iN_back-quotes`foo-bar on kebab-case', () => { +test("true for foo-bar`Any_CASE_iN_back-quotes`foo-bar on kebab-case", () => { const actual = ensure( - 'foo-bar`Any_CASE_iN_back-quotes`foo-bar', - 'kebab-case' + "foo-bar`Any_CASE_iN_back-quotes`foo-bar", + "kebab-case", ); expect(actual).toBe(true); }); -test('false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on kebab-case', () => { +test("false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on kebab-case", () => { const actual = ensure( - 'Foo Bar `Any_CASE_iN_back-quotes` Foo Bar', - 'kebab-case' + "Foo Bar `Any_CASE_iN_back-quotes` Foo Bar", + "kebab-case", ); expect(actual).toBe(false); }); -test('true for foo_bar`Any_CASE_iN_back-quotes`foo_bar on snake-case', () => { +test("true for foo_bar`Any_CASE_iN_back-quotes`foo_bar on snake-case", () => { const actual = ensure( - 'foo_bar`Any_CASE_iN_back-quotes`foo_bar', - 'snake-case' + "foo_bar`Any_CASE_iN_back-quotes`foo_bar", + "snake-case", ); expect(actual).toBe(true); }); -test('false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on snake-case', () => { +test("false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on snake-case", () => { const actual = ensure( - 'Foo Bar `Any_CASE_iN_back-quotes` Foo Bar', - 'snake-case' + "Foo Bar `Any_CASE_iN_back-quotes` Foo Bar", + "snake-case", ); expect(actual).toBe(false); }); -test('true for PascalCase`Any_CASE_iN_back-quotes`PascalCase on pascal-case', () => { +test("true for PascalCase`Any_CASE_iN_back-quotes`PascalCase on pascal-case", () => { const actual = ensure( - 'PascalCase`Any_CASE_iN_back-quotes`PascalCase', - 'pascal-case' + "PascalCase`Any_CASE_iN_back-quotes`PascalCase", + "pascal-case", ); expect(actual).toBe(true); }); -test('false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on pascal-case', () => { +test("false for Foo Bar `Any_CASE_iN_back-quotes` Foo Bar on pascal-case", () => { const actual = ensure( - 'Foo Bar `Any_CASE_iN_back-quotes` Foo Bar', - 'pascal-case' + "Foo Bar `Any_CASE_iN_back-quotes` Foo Bar", + "pascal-case", ); expect(actual).toBe(false); }); -test('true for Foo Bar`Any_CASE_iN_back-quotes` Foo Bar on start-case', () => { +test("true for Foo Bar`Any_CASE_iN_back-quotes` Foo Bar on start-case", () => { const actual = ensure( - 'Foo Bar `Any_CASE_iN_back-quotes`Foo Bar', - 'start-case' + "Foo Bar `Any_CASE_iN_back-quotes`Foo Bar", + "start-case", ); expect(actual).toBe(true); }); -test('false for foo_bar`Any_CASE_iN_back-quotes`foo_bar on start-case', () => { +test("false for foo_bar`Any_CASE_iN_back-quotes`foo_bar on start-case", () => { const actual = ensure( - 'foo_bar`Any_CASE_iN_back-quotes`foo_bar', - 'start-case' + "foo_bar`Any_CASE_iN_back-quotes`foo_bar", + "start-case", ); expect(actual).toBe(false); }); -test('true for lowercase `Any_CASE_iN_back-quotes` `Any_CASE_iN_back-quotes` lowercase on lowercase', () => { +test("true for lowercase `Any_CASE_iN_back-quotes` `Any_CASE_iN_back-quotes` lowercase on lowercase", () => { const actual = ensure( - 'lowercase `Any_CASE_iN_back-quotes` `Any_CASE_iN_back-quotes` lowercase', - 'lowercase' + "lowercase `Any_CASE_iN_back-quotes` `Any_CASE_iN_back-quotes` lowercase", + "lowercase", ); expect(actual).toBe(true); }); test("true for 'Any_CASE_iN_single-quotes' on lowercase", () => { - const actual = ensure("'Any_CASE_iN_single-quotes'", 'lowercase'); + const actual = ensure("'Any_CASE_iN_single-quotes'", "lowercase"); expect(actual).toBe(true); }); test('true for "Any_CASE_iN_double-quotes" on lowercase', () => { - const actual = ensure('"Any_CASE_iN_double-quotes"', 'lowercase'); + const actual = ensure('"Any_CASE_iN_double-quotes"', "lowercase"); expect(actual).toBe(true); }); -test('true for `lowercasel"\'` on lowercase', () => { - const actual = ensure('`lowercasel"\'`', 'lowercase'); +test("true for `lowercasel\"'` on lowercase", () => { + const actual = ensure("`lowercasel\"'`", "lowercase"); expect(actual).toBe(true); }); -test('false for `LOWERCASE on lowercase', () => { - const actual = ensure('`LOWERCASE', 'lowercase'); +test("false for `LOWERCASE on lowercase", () => { + const actual = ensure("`LOWERCASE", "lowercase"); expect(actual).toBe(false); }); -test('true for numeric on camel-case', () => { - const actual = ensure('1.0.0', 'camel-case'); +test("true for numeric on camel-case", () => { + const actual = ensure("1.0.0", "camel-case"); expect(actual).toBe(true); }); -test('true for numeric on kebab-case', () => { - const actual = ensure('1.0.0', 'kebab-case'); +test("true for numeric on kebab-case", () => { + const actual = ensure("1.0.0", "kebab-case"); expect(actual).toBe(true); }); -test('true for numeric on snake-case', () => { - const actual = ensure('1.0.0', 'snake-case'); +test("true for numeric on snake-case", () => { + const actual = ensure("1.0.0", "snake-case"); expect(actual).toBe(true); }); -test('true for numeric on pascal-case', () => { - const actual = ensure('1.0.0', 'pascal-case'); +test("true for numeric on pascal-case", () => { + const actual = ensure("1.0.0", "pascal-case"); expect(actual).toBe(true); }); -test('true for numeric on uppercase', () => { - const actual = ensure('1.0.0', 'uppercase'); +test("true for numeric on uppercase", () => { + const actual = ensure("1.0.0", "uppercase"); expect(actual).toBe(true); }); -test('true for numeric on sentencecase', () => { - const actual = ensure('1.0.0', 'sentencecase'); +test("true for numeric on sentencecase", () => { + const actual = ensure("1.0.0", "sentencecase"); expect(actual).toBe(true); }); -test('true for numeric on lowercase', () => { - const actual = ensure('1.0.0', 'lowercase'); +test("true for numeric on lowercase", () => { + const actual = ensure("1.0.0", "lowercase"); expect(actual).toBe(true); }); -test('throw TypeError for invalid case name', () => { - const actualFn = () => ensure('anything', 'someweirdcase' as any); +test("throw TypeError for invalid case name", () => { + const actualFn = () => ensure("anything", "someweirdcase" as any); expect(actualFn).toThrow(TypeError); }); diff --git a/@commitlint/ensure/src/case.ts b/@commitlint/ensure/src/case.ts index bae88a0bff..710f7e79b8 100644 --- a/@commitlint/ensure/src/case.ts +++ b/@commitlint/ensure/src/case.ts @@ -1,22 +1,22 @@ -import type {TargetCaseType} from '@commitlint/types'; +import type { TargetCaseType } from "@commitlint/types"; -import toCase from './to-case.js'; +import toCase from "./to-case.js"; export default ensureCase; function ensureCase( - raw: string = '', - target: TargetCaseType = 'lowercase' + raw: string = "", + target: TargetCaseType = "lowercase", ): boolean { // We delete any content together with quotes because he can contains proper names (example `refactor: `Eslint` configuration`). // We need trim string because content with quotes can be at the beginning or end of a line const input = String(raw) - .replace(/`.*?`|".*?"|'.*?'/g, '') + .replace(/`.*?`|".*?"|'.*?'/g, "") .trim(); const transformed = toCase(input, target); - if (transformed === '' || transformed.match(/^\d/)) { + if (transformed === "" || transformed.match(/^\d/)) { return true; } diff --git a/@commitlint/ensure/src/enum.test.ts b/@commitlint/ensure/src/enum.test.ts index a09b70bec2..817f2ce072 100644 --- a/@commitlint/ensure/src/enum.test.ts +++ b/@commitlint/ensure/src/enum.test.ts @@ -1,48 +1,48 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './enum.js'; +import ensure from "./enum.js"; -test('false for no params', () => { +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); -test('false for not array enums', () => { - const actual = ensure('a', 'a' as any); +test("false for not array enums", () => { + const actual = ensure("a", "a" as any); expect(actual).toBe(false); }); -test('true for a against a', () => { - const actual = ensure('a', ['a']); +test("true for a against a", () => { + const actual = ensure("a", ["a"]); expect(actual).toBe(true); }); -test('false for a against b', () => { - const actual = ensure('a', ['b']); +test("false for a against b", () => { + const actual = ensure("a", ["b"]); expect(actual).toBe(false); }); -test('true for a against a, b', () => { - const actual = ensure('a', ['a', 'b']); +test("true for a against a, b", () => { + const actual = ensure("a", ["a", "b"]); expect(actual).toBe(true); }); -test('false for b against a', () => { - const actual = ensure('b', ['a']); +test("false for b against a", () => { + const actual = ensure("b", ["a"]); expect(actual).toBe(false); }); -test('true for b against b', () => { - const actual = ensure('b', ['b']); +test("true for b against b", () => { + const actual = ensure("b", ["b"]); expect(actual).toBe(true); }); -test('true for b against a, b', () => { - const actual = ensure('b', ['a', 'b']); +test("true for b against a, b", () => { + const actual = ensure("b", ["a", "b"]); expect(actual).toBe(true); }); -test('false for c against a, b', () => { - const actual = ensure('c', ['a', 'b']); +test("false for c against a, b", () => { + const actual = ensure("c", ["a", "b"]); expect(actual).toBe(false); }); diff --git a/@commitlint/ensure/src/index.test.ts b/@commitlint/ensure/src/index.test.ts index 859ed49b3a..b58bb64adc 100644 --- a/@commitlint/ensure/src/index.test.ts +++ b/@commitlint/ensure/src/index.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {globSync} from 'glob'; -import camelCase from 'lodash.camelcase'; +import { globSync } from "glob"; +import camelCase from "lodash.camelcase"; -import * as ensure from './index.js'; +import * as ensure from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports all checkers', async () => { - const ignore = ['types']; - const expected = _glob('*.ts') +test("exports all checkers", async () => { + const ignore = ["types"]; + const expected = _glob("*.ts") .map((f) => camelCase(f)) .sort() .filter((item) => !ignore.includes(item)); @@ -19,14 +19,14 @@ test('exports all checkers', async () => { expect(actual).toEqual(expected); }); -test('rules export functions', () => { +test("rules export functions", () => { const actual = Object.values(ensure); - expect(actual.every((rule) => typeof rule === 'function')).toBe(true); + expect(actual.every((rule) => typeof rule === "function")).toBe(true); }); function _glob(pattern: string): string[] { const files = globSync(pattern, { - ignore: ['**/index.ts', '**/*.test.ts'], + ignore: ["**/index.ts", "**/*.test.ts"], cwd: __dirname, }); return files.map(relative).map(toExport); diff --git a/@commitlint/ensure/src/index.ts b/@commitlint/ensure/src/index.ts index 496832bf57..0590b145a3 100644 --- a/@commitlint/ensure/src/index.ts +++ b/@commitlint/ensure/src/index.ts @@ -1,11 +1,11 @@ -import ensureCase from './case.js'; -import ensureEnum from './enum.js'; -import maxLength from './max-length.js'; -import maxLineLength from './max-line-length.js'; -import minLength from './min-length.js'; -import notEmpty from './not-empty.js'; -import toCase from './to-case.js'; +import ensureCase from "./case.js"; +import ensureEnum from "./enum.js"; +import maxLength from "./max-length.js"; +import maxLineLength from "./max-line-length.js"; +import minLength from "./min-length.js"; +import notEmpty from "./not-empty.js"; +import toCase from "./to-case.js"; -export {ensureCase as case}; -export {ensureEnum as enum}; -export {maxLength, maxLineLength, minLength, notEmpty, toCase}; +export { ensureCase as case }; +export { ensureEnum as enum }; +export { maxLength, maxLineLength, minLength, notEmpty, toCase }; diff --git a/@commitlint/ensure/src/max-length.test.ts b/@commitlint/ensure/src/max-length.test.ts index 99c3813281..c18af918e8 100644 --- a/@commitlint/ensure/src/max-length.test.ts +++ b/@commitlint/ensure/src/max-length.test.ts @@ -1,28 +1,28 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './max-length.js'; +import ensure from "./max-length.js"; -test('false for no params', () => { +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); -test('true for a against 1', () => { - const actual = ensure('a', 1); +test("true for a against 1", () => { + const actual = ensure("a", 1); expect(actual).toBe(true); }); -test('false for ab against 0', () => { - const actual = ensure('a', 0); +test("false for ab against 0", () => { + const actual = ensure("a", 0); expect(actual).toBe(false); }); -test('true for a against 2', () => { - const actual = ensure('a', 2); +test("true for a against 2", () => { + const actual = ensure("a", 2); expect(actual).toBe(true); }); -test('true for ab against 2', () => { - const actual = ensure('ab', 2); +test("true for ab against 2", () => { + const actual = ensure("ab", 2); expect(actual).toBe(true); }); diff --git a/@commitlint/ensure/src/max-length.ts b/@commitlint/ensure/src/max-length.ts index 009ee0fa2e..2c78246b8a 100644 --- a/@commitlint/ensure/src/max-length.ts +++ b/@commitlint/ensure/src/max-length.ts @@ -1,2 +1,2 @@ export default (value: string | null, max: number): boolean => - typeof value === 'string' && value.length <= max; + typeof value === "string" && value.length <= max; diff --git a/@commitlint/ensure/src/max-line-length.test.ts b/@commitlint/ensure/src/max-line-length.test.ts index a51069a29a..8755824abd 100644 --- a/@commitlint/ensure/src/max-line-length.test.ts +++ b/@commitlint/ensure/src/max-line-length.test.ts @@ -1,49 +1,49 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './max-line-length.js'; +import ensure from "./max-line-length.js"; -test('false for no params', () => { +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); -test('true for a against 1', () => { - const actual = ensure('a', 1); +test("true for a against 1", () => { + const actual = ensure("a", 1); expect(actual).toBe(true); }); -test('false for ab against 0', () => { - const actual = ensure('a', 0); +test("false for ab against 0", () => { + const actual = ensure("a", 0); expect(actual).toBe(false); }); -test('true for a against 2', () => { - const actual = ensure('a', 2); +test("true for a against 2", () => { + const actual = ensure("a", 2); expect(actual).toBe(true); }); -test('true for ab against 2', () => { - const actual = ensure('ab', 2); +test("true for ab against 2", () => { + const actual = ensure("ab", 2); expect(actual).toBe(true); }); -test('false for ab/\nab/\nab 1', () => { +test("false for ab/\nab/\nab 1", () => { const actual = ensure( `ab ab ab`, - 2 + 2, ); expect(actual).toBe(true); }); -test('true for ab/\nab/\nab 2', () => { +test("true for ab/\nab/\nab 2", () => { const actual = ensure( `ab ab ab`, - 2 + 2, ); expect(actual).toBe(true); diff --git a/@commitlint/ensure/src/max-line-length.ts b/@commitlint/ensure/src/max-line-length.ts index 51f0bfaa4b..02f908c374 100644 --- a/@commitlint/ensure/src/max-line-length.ts +++ b/@commitlint/ensure/src/max-line-length.ts @@ -1,5 +1,5 @@ -import ensure from './max-length.js'; +import ensure from "./max-length.js"; export default (value: string, max: number): boolean => - typeof value === 'string' && + typeof value === "string" && value.split(/\r?\n/).every((line) => ensure(line, max)); diff --git a/@commitlint/ensure/src/min-length.test.ts b/@commitlint/ensure/src/min-length.test.ts index 8530b80811..a62395e3d1 100644 --- a/@commitlint/ensure/src/min-length.test.ts +++ b/@commitlint/ensure/src/min-length.test.ts @@ -1,28 +1,28 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './min-length.js'; +import ensure from "./min-length.js"; -test('false for no params', () => { +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); -test('true for a against 1', () => { - const actual = ensure('a', 1); +test("true for a against 1", () => { + const actual = ensure("a", 1); expect(actual).toBe(true); }); -test('false for ab against 0', () => { - const actual = ensure('a', 0); +test("false for ab against 0", () => { + const actual = ensure("a", 0); expect(actual).toBe(true); }); -test('true for a against 2', () => { - const actual = ensure('a', 2); +test("true for a against 2", () => { + const actual = ensure("a", 2); expect(actual).toBe(false); }); -test('true for ab against 2', () => { - const actual = ensure('ab', 2); +test("true for ab against 2", () => { + const actual = ensure("ab", 2); expect(actual).toBe(true); }); diff --git a/@commitlint/ensure/src/min-length.ts b/@commitlint/ensure/src/min-length.ts index 97ad15993e..e7a8186bbb 100644 --- a/@commitlint/ensure/src/min-length.ts +++ b/@commitlint/ensure/src/min-length.ts @@ -1,2 +1,2 @@ export default (value: string | null, min: number): boolean => - typeof value === 'string' && value.length >= min; + typeof value === "string" && value.length >= min; diff --git a/@commitlint/ensure/src/not-empty.test.ts b/@commitlint/ensure/src/not-empty.test.ts index 172a523caa..a0fa271b3d 100644 --- a/@commitlint/ensure/src/not-empty.test.ts +++ b/@commitlint/ensure/src/not-empty.test.ts @@ -1,18 +1,18 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import ensure from './not-empty.js'; +import ensure from "./not-empty.js"; -test('false for no params', () => { +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); test('false for ""', () => { - const actual = ensure(''); + const actual = ensure(""); expect(actual).toBe(false); }); -test('true for a', () => { - const actual = ensure('a'); +test("true for a", () => { + const actual = ensure("a"); expect(actual).toBe(true); }); diff --git a/@commitlint/ensure/src/not-empty.ts b/@commitlint/ensure/src/not-empty.ts index 540cf99a3f..008380de35 100644 --- a/@commitlint/ensure/src/not-empty.ts +++ b/@commitlint/ensure/src/not-empty.ts @@ -1,2 +1,2 @@ export default (value: string): boolean => - typeof value === 'string' && value.length > 0; + typeof value === "string" && value.length > 0; diff --git a/@commitlint/ensure/src/to-case.ts b/@commitlint/ensure/src/to-case.ts index e3490faf17..df41e0033e 100644 --- a/@commitlint/ensure/src/to-case.ts +++ b/@commitlint/ensure/src/to-case.ts @@ -1,31 +1,31 @@ -import {TargetCaseType} from '@commitlint/types'; -import camelCase from 'lodash.camelcase'; -import kebabCase from 'lodash.kebabcase'; -import snakeCase from 'lodash.snakecase'; -import upperFirst from 'lodash.upperfirst'; -import startCase from 'lodash.startcase'; +import { TargetCaseType } from "@commitlint/types"; +import camelCase from "lodash.camelcase"; +import kebabCase from "lodash.kebabcase"; +import snakeCase from "lodash.snakecase"; +import upperFirst from "lodash.upperfirst"; +import startCase from "lodash.startcase"; export default function toCase(input: string, target: TargetCaseType): string { switch (target) { - case 'camel-case': + case "camel-case": return camelCase(input); - case 'kebab-case': + case "kebab-case": return kebabCase(input); - case 'snake-case': + case "snake-case": return snakeCase(input); - case 'pascal-case': + case "pascal-case": return upperFirst(camelCase(input)); - case 'start-case': + case "start-case": return startCase(input); - case 'upper-case': - case 'uppercase': + case "upper-case": + case "uppercase": return input.toUpperCase(); - case 'sentence-case': - case 'sentencecase': + case "sentence-case": + case "sentencecase": return upperFirst(input); - case 'lower-case': - case 'lowercase': - case 'lowerCase': // Backwards compat config-angular v4 + case "lower-case": + case "lowercase": + case "lowerCase": // Backwards compat config-angular v4 return input.toLowerCase(); default: throw new TypeError(`to-case: Unknown target case "${target}"`); diff --git a/@commitlint/ensure/tsconfig.json b/@commitlint/ensure/tsconfig.json index f3092129e3..0cc393e13d 100644 --- a/@commitlint/ensure/tsconfig.json +++ b/@commitlint/ensure/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src/**/*.ts"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}] + "references": [{ "path": "../types" }] } diff --git a/@commitlint/execute-rule/CHANGELOG.md b/@commitlint/execute-rule/CHANGELOG.md index 4843c02143..39e78999fe 100644 --- a/@commitlint/execute-rule/CHANGELOG.md +++ b/@commitlint/execute-rule/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/execute-rule + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/execute-rule + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/execute-rule/package.json b/@commitlint/execute-rule/package.json index bd82517ae8..62bb3786fe 100644 --- a/@commitlint/execute-rule/package.json +++ b/@commitlint/execute-rule/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/execute-rule", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,7 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/execute-rule/src/index.test.ts b/@commitlint/execute-rule/src/index.test.ts index f3dfb34869..23a3259707 100644 --- a/@commitlint/execute-rule/src/index.test.ts +++ b/@commitlint/execute-rule/src/index.test.ts @@ -1,28 +1,28 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import execute from './index.js'; +import execute from "./index.js"; -test('does nothing without params', async () => { +test("does nothing without params", async () => { const exec = execute as any; expect(await exec()).toBeNull(); }); -test('returns plain config', async () => { - const actual = await execute(['name', 'config']); - expect(actual).toEqual(['name', 'config']); +test("returns plain config", async () => { + const actual = await execute(["name", "config"]); + expect(actual).toEqual(["name", "config"]); }); -test('unwraps promised config', async () => { - const actual = await execute(['name', Promise.resolve('config')]); - expect(actual).toEqual(['name', 'config']); +test("unwraps promised config", async () => { + const actual = await execute(["name", Promise.resolve("config")]); + expect(actual).toEqual(["name", "config"]); }); -test('executes config functions', async () => { - const actual = await execute(['name', () => 'config']); - expect(actual).toEqual(['name', 'config']); +test("executes config functions", async () => { + const actual = await execute(["name", () => "config"]); + expect(actual).toEqual(["name", "config"]); }); -test('executes async config functions', async () => { - const actual = await execute(['name', async () => 'config']); - expect(actual).toEqual(['name', 'config']); +test("executes async config functions", async () => { + const actual = await execute(["name", async () => "config"]); + expect(actual).toEqual(["name", "config"]); }); diff --git a/@commitlint/execute-rule/src/index.ts b/@commitlint/execute-rule/src/index.ts index 47029f4b89..4ef89f9275 100644 --- a/@commitlint/execute-rule/src/index.ts +++ b/@commitlint/execute-rule/src/index.ts @@ -7,7 +7,7 @@ type ExecutedRule<T> = readonly [string, T]; export default execute; export async function execute<T = unknown>( - rule?: Rule<T> + rule?: Rule<T>, ): Promise<ExecutedRule<T> | null> { if (!Array.isArray(rule)) { return null; @@ -21,5 +21,5 @@ export async function execute<T = unknown>( } function executable<T>(config: Config<T>): config is ExectableConfig<T> { - return typeof config === 'function'; + return typeof config === "function"; } diff --git a/@commitlint/format/CHANGELOG.md b/@commitlint/format/CHANGELOG.md index cd2e000c07..717cfef081 100644 --- a/@commitlint/format/CHANGELOG.md +++ b/@commitlint/format/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + + +### Features + +* **format:** print full commit message for valid commits if -V ([#4026](https://github.com/conventional-changelog/commitlint/issues/4026)) ([a7bbc49](https://github.com/conventional-changelog/commitlint/commit/a7bbc494e34885aba3f4b0c03b37d18ef2b8fbff)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/format + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/format/package.json b/@commitlint/format/package.json index 37de77a813..803649a7ce 100644 --- a/@commitlint/format/package.json +++ b/@commitlint/format/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/format", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Format commitlint reports", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,11 +36,11 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "chalk": "^5.3.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/format/src/format.test.ts b/@commitlint/format/src/format.test.ts index dd88fdabaa..3388e96afb 100644 --- a/@commitlint/format/src/format.test.ts +++ b/@commitlint/format/src/format.test.ts @@ -1,23 +1,23 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import {format, formatResult} from './index.js'; +import { format, formatResult } from "./index.js"; -test('does nothing without arguments', () => { +test("does nothing without arguments", () => { const actual = format(); - expect(actual).toEqual(''); + expect(actual).toEqual(""); }); -test('does nothing without report results', () => { - const actual = format({results: []}); - expect(actual).toEqual(''); +test("does nothing without report results", () => { + const actual = format({ results: [] }); + expect(actual).toEqual(""); }); -test('does nothing without .errors and .warnings', () => { - const actual = format({results: [{}]}); - expect(actual).toEqual(''); +test("does nothing without .errors and .warnings", () => { + const actual = format({ results: [{}] }); + expect(actual).toEqual(""); }); -test('returns empty summary if verbose', () => { +test("returns empty summary if verbose", () => { const actual = format( { results: [ @@ -29,21 +29,44 @@ test('returns empty summary if verbose', () => { }, { verbose: true, - } + }, + ); + + expect(actual).toContain("0 problems, 0 warnings"); +}); + +test("returns empty summary with full commit message if verbose", () => { + const actual = format( + { + results: [ + { + errors: [], + warnings: [], + input: + "feat(cli): this is a valid header\n\nThis is a valid body\n\nSigned-off-by: tester", + }, + ], + }, + { + verbose: true, + color: false, + }, ); - expect(actual).toContain('0 problems, 0 warnings'); + expect(actual).toStrictEqual( + "⧗ input: feat(cli): this is a valid header\n\nThis is a valid body\n\nSigned-off-by: tester\n✔ found 0 problems, 0 warnings", + ); }); -test('returns a correct summary of empty .errors and .warnings', () => { +test("returns a correct summary of empty .errors and .warnings", () => { const actualError = format({ results: [ { errors: [ { level: 2, - name: 'error-name', - message: 'There was an error', + name: "error-name", + message: "There was an error", }, ], }, @@ -56,29 +79,29 @@ test('returns a correct summary of empty .errors and .warnings', () => { warnings: [ { level: 1, - name: 'warning-name', - message: 'There was a problem', + name: "warning-name", + message: "There was a problem", }, ], }, ], }); - expect(actualError).toContain('There was an error'); - expect(actualError).toContain('1 problems, 0 warnings'); - expect(actualWarning).toContain('There was a problem'); - expect(actualWarning).toContain('0 problems, 1 warnings'); + expect(actualError).toContain("There was an error"); + expect(actualError).toContain("1 problems, 0 warnings"); + expect(actualWarning).toContain("There was a problem"); + expect(actualWarning).toContain("0 problems, 1 warnings"); }); -test('uses appropriate signs by default', () => { +test("uses appropriate signs by default", () => { const actualError = format({ results: [ { errors: [ { level: 2, - name: 'error-name', - message: 'There was an error', + name: "error-name", + message: "There was an error", }, ], }, @@ -91,20 +114,20 @@ test('uses appropriate signs by default', () => { warnings: [ { level: 1, - name: 'warning-name', - message: 'There was a problem', + name: "warning-name", + message: "There was a problem", }, ], }, ], }); - expect(actualError).toContain('✖'); - expect(actualWarning).toContain('⚠'); + expect(actualError).toContain("✖"); + expect(actualWarning).toContain("⚠"); }); -test('uses signs as configured', () => { - const options = {signs: ['HNT', 'WRN', 'ERR'] as [string, string, string]}; +test("uses signs as configured", () => { + const options = { signs: ["HNT", "WRN", "ERR"] as [string, string, string] }; const actualError = format( { results: [ @@ -112,14 +135,14 @@ test('uses signs as configured', () => { errors: [ { level: 2, - name: 'error-name', - message: 'There was an error', + name: "error-name", + message: "There was an error", }, ], }, ], }, - options + options, ); const actualWarning = format( @@ -129,154 +152,154 @@ test('uses signs as configured', () => { warnings: [ { level: 1, - name: 'warning-name', - message: 'There was a problem', + name: "warning-name", + message: "There was a problem", }, ], }, ], }, - options + options, ); - expect(actualError).toContain('ERR'); - expect(actualWarning).toContain('WRN'); + expect(actualError).toContain("ERR"); + expect(actualWarning).toContain("WRN"); }); -test('format result is empty without arguments', () => { +test("format result is empty without arguments", () => { const actual = formatResult(); - const actualText = actual.join('\n'); - expect(actualText).toBe(''); + const actualText = actual.join("\n"); + expect(actualText).toBe(""); }); -test('format result transforms error to text', () => { +test("format result transforms error to text", () => { const actual = formatResult({ errors: [ { level: 2, - name: 'error-name', - message: 'There was an error', + name: "error-name", + message: "There was an error", }, ], }); - const actualText = actual.join('\n'); + const actualText = actual.join("\n"); - expect(actualText).toContain('error-name'); - expect(actualText).toContain('There was an error'); - expect(actualText).toContain('1 problems, 0 warnings'); + expect(actualText).toContain("error-name"); + expect(actualText).toContain("There was an error"); + expect(actualText).toContain("1 problems, 0 warnings"); }); -test('format result transforms warning to text', () => { +test("format result transforms warning to text", () => { const actual = formatResult({ warnings: [ { level: 1, - name: 'warning-name', - message: 'There was a warning', + name: "warning-name", + message: "There was a warning", }, ], }); - const actualText = actual.join('\n'); + const actualText = actual.join("\n"); - expect(actualText).toContain('warning-name'); - expect(actualText).toContain('There was a warning'); - expect(actualText).toContain('0 problems, 1 warnings'); + expect(actualText).toContain("warning-name"); + expect(actualText).toContain("There was a warning"); + expect(actualText).toContain("0 problems, 1 warnings"); }); -test('format result prints help for errors', () => { +test("format result prints help for errors", () => { const actual = formatResult( { errors: [ { level: 2, - name: 'error-name', - message: 'There was an error', + name: "error-name", + message: "There was an error", }, ], }, { - helpUrl: 'https://example.com', - } + helpUrl: "https://example.com", + }, ); expect(actual).toEqual( - expect.arrayContaining([expect.stringContaining('Get help:')]) + expect.arrayContaining([expect.stringContaining("Get help:")]), ); }); -test('format result prints help for warnings', () => { +test("format result prints help for warnings", () => { const actual = formatResult( { warnings: [ { level: 2, - name: 'warning-name', - message: 'There was a warning', + name: "warning-name", + message: "There was a warning", }, ], }, { - helpUrl: 'https://example.com', - } + helpUrl: "https://example.com", + }, ); expect(actual).toEqual( - expect.arrayContaining([expect.stringContaining('Get help:')]) + expect.arrayContaining([expect.stringContaining("Get help:")]), ); }); -test('format result help cotains options.helpUrl', () => { - const helpUrl = 'https://example.com'; +test("format result help cotains options.helpUrl", () => { + const helpUrl = "https://example.com"; const actual = formatResult( { warnings: [ { level: 2, - name: 'warning-name', - message: 'There was a warning', + name: "warning-name", + message: "There was a warning", }, ], }, { helpUrl, - } + }, ); expect(actual).toEqual( - expect.arrayContaining([expect.stringContaining(helpUrl)]) + expect.arrayContaining([expect.stringContaining(helpUrl)]), ); }); -test('format result omits help for empty problems', () => { +test("format result omits help for empty problems", () => { const actual = formatResult({ warnings: [], }); expect(actual).not.toEqual( - expect.arrayContaining([expect.stringContaining('Get help:')]) + expect.arrayContaining([expect.stringContaining("Get help:")]), ); }); -test('format result should not contain `Get help` prefix if helpUrl is not provided', () => { +test("format result should not contain `Get help` prefix if helpUrl is not provided", () => { const actual = formatResult( { warnings: [ { level: 2, - name: 'warning-name', - message: 'There was a warning', + name: "warning-name", + message: "There was a warning", }, ], }, { - helpUrl: '', - } + helpUrl: "", + }, ); expect(actual).not.toEqual( - expect.arrayContaining([expect.stringContaining('Get help:')]) + expect.arrayContaining([expect.stringContaining("Get help:")]), ); }); diff --git a/@commitlint/format/src/format.ts b/@commitlint/format/src/format.ts index e3fa2dd266..8c43f74c64 100644 --- a/@commitlint/format/src/format.ts +++ b/@commitlint/format/src/format.ts @@ -1,20 +1,20 @@ -import chalk from 'chalk'; +import chalk from "chalk"; import { ChalkColor, FormattableReport, FormatOptions, FormattableResult, WithInput, -} from '@commitlint/types'; +} from "@commitlint/types"; -const DEFAULT_SIGNS = [' ', '⚠', '✖'] as const; -const DEFAULT_COLORS = ['white', 'yellow', 'red'] as const; +const DEFAULT_SIGNS = [" ", "⚠", "✖"] as const; +const DEFAULT_COLORS = ["white", "yellow", "red"] as const; export function format( report: FormattableReport = {}, - options: FormatOptions = {} + options: FormatOptions = {}, ): string { - const {results = []} = report; + const { results = [] } = report; const fi = (result: FormattableResult & WithInput) => formatInput(result, options); const fr = (result: FormattableResult) => formatResult(result, options); @@ -24,27 +24,26 @@ export function format( .map((result) => [...fi(result), ...fr(result)]) .reduce( (acc, item) => (Array.isArray(item) ? [...acc, ...item] : [...acc, item]), - [] + [], ) - .join('\n'); + .join("\n"); } function formatInput( result: FormattableResult & WithInput, - options: FormatOptions = {} + options: FormatOptions = {}, ): string[] { - const {color: enabled = true} = options; - const {errors = [], warnings = [], input = ''} = result; + const { color: enabled = true } = options; + const { errors = [], warnings = [], input = "" } = result; if (!input) { - return ['']; + return [""]; } - const sign = '⧗'; + const sign = "⧗"; const decoration = enabled ? chalk.gray(sign) : sign; - const commitText = errors.length > 0 ? input : input.split('\n')[0]; - const decoratedInput = enabled ? chalk.bold(commitText) : commitText; + const decoratedInput = enabled ? chalk.bold(input) : input; const hasProblems = errors.length > 0 || warnings.length > 0; return options.verbose || hasProblems @@ -54,18 +53,18 @@ function formatInput( export function formatResult( result: FormattableResult = {}, - options: FormatOptions = {} + options: FormatOptions = {}, ): string[] { const { signs = DEFAULT_SIGNS, colors = DEFAULT_COLORS, color: enabled = true, } = options; - const {errors = [], warnings = []} = result; + const { errors = [], warnings = [] } = result; const problems = [...errors, ...warnings].map((problem) => { - const sign = signs[problem.level] || ''; - const color: ChalkColor = colors[problem.level] || ('white' as const); + const sign = signs[problem.level] || ""; + const color: ChalkColor = colors[problem.level] || ("white" as const); const decoration = enabled ? chalk[color](sign) : sign; const name = enabled ? chalk.grey(`[${problem.name}]`) @@ -87,7 +86,7 @@ export function formatResult( : undefined; const fmtSummary = - enabled && typeof summary === 'string' ? chalk.bold(summary) : summary; + enabled && typeof summary === "string" ? chalk.bold(summary) : summary; const help = hasProblems && options.helpUrl @@ -96,25 +95,25 @@ export function formatResult( return [ ...problems, - hasProblems ? '' : undefined, + hasProblems ? "" : undefined, fmtSummary, help, - hasProblems ? '' : undefined, - ].filter((line): line is string => typeof line === 'string'); + hasProblems ? "" : undefined, + ].filter((line): line is string => typeof line === "string"); } export default format; function selectSign(result: FormattableResult): string { if ((result.errors || []).length > 0) { - return '✖'; + return "✖"; } - return (result.warnings || []).length ? '⚠' : '✔'; + return (result.warnings || []).length ? "⚠" : "✔"; } function selectColor(result: FormattableResult): ChalkColor { if ((result.errors || []).length > 0) { - return 'red'; + return "red"; } - return (result.warnings || []).length ? 'yellow' : 'green'; + return (result.warnings || []).length ? "yellow" : "green"; } diff --git a/@commitlint/format/src/index.ts b/@commitlint/format/src/index.ts index 9ec36ba06a..6f7327f1bb 100644 --- a/@commitlint/format/src/index.ts +++ b/@commitlint/format/src/index.ts @@ -1,2 +1,2 @@ -export {default} from './format.js'; -export * from './format.js'; +export { default } from "./format.js"; +export * from "./format.js"; diff --git a/@commitlint/format/tsconfig.json b/@commitlint/format/tsconfig.json index 119e645565..d691164788 100644 --- a/@commitlint/format/tsconfig.json +++ b/@commitlint/format/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}] + "references": [{ "path": "../types" }] } diff --git a/@commitlint/is-ignored/CHANGELOG.md b/@commitlint/is-ignored/CHANGELOG.md index 7a873283a8..bce6a2e575 100644 --- a/@commitlint/is-ignored/CHANGELOG.md +++ b/@commitlint/is-ignored/CHANGELOG.md @@ -3,6 +3,66 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Reverts + +* Revert "fix: improve security validation regex in is-ignored function (#4258)" (#4314) ([b27024a](https://github.com/conventional-changelog/commitlint/commit/b27024a5ae509d1df9373ed712f2279d0bc39170)), closes [#4258](https://github.com/conventional-changelog/commitlint/issues/4258) [#4314](https://github.com/conventional-changelog/commitlint/issues/4314) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + + +### Bug Fixes + +* improve security validation regex in is-ignored function ([#4258](https://github.com/conventional-changelog/commitlint/issues/4258)) ([7403d63](https://github.com/conventional-changelog/commitlint/commit/7403d6382cc2fb1f066a47d7229593eefe528561)) + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + + +### Features + +* **is-ignored:** ignore reapply commits ([#4186](https://github.com/conventional-changelog/commitlint/issues/4186)) ([49ba56d](https://github.com/conventional-changelog/commitlint/commit/49ba56d9dd4c72e918005e6ca62f110a393b8f07)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + + +### Bug Fixes + +* **is-ignored:** ignore "amend!" commits ([#4024](https://github.com/conventional-changelog/commitlint/issues/4024)) ([90078f6](https://github.com/conventional-changelog/commitlint/commit/90078f6a58523e0bde386b9b6aa3c05e8b916653)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/is-ignored/package.json b/@commitlint/is-ignored/package.json index fe071e1e59..7382d45d3c 100644 --- a/@commitlint/is-ignored/package.json +++ b/@commitlint/is-ignored/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/is-ignored", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,14 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^19.0.0", - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", + "@commitlint/parse": "^19.8.0", + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", "@types/semver": "^7.5.7" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "semver": "^7.6.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/is-ignored/src/defaults.ts b/@commitlint/is-ignored/src/defaults.ts index 8f04c18ed4..02fbcd6b46 100644 --- a/@commitlint/is-ignored/src/defaults.ts +++ b/@commitlint/is-ignored/src/defaults.ts @@ -1,14 +1,14 @@ -import semver from 'semver'; -import {Matcher} from '@commitlint/types'; +import semver from "semver"; +import { Matcher } from "@commitlint/types"; const isSemver = (c: string): boolean => { - const firstLine = c.split('\n').shift(); + const firstLine = c.split("\n").shift(); - if (typeof firstLine !== 'string') { + if (typeof firstLine !== "string") { return false; } - const stripped = firstLine.replace(/^chore(\([^)]+\))?:/, '').trim(); + const stripped = firstLine.replace(/^chore(\([^)]+\))?:/, "").trim(); return semver.valid(stripped) !== null; }; @@ -16,11 +16,12 @@ const test = (r: RegExp): ((c: string) => boolean) => r.test.bind(r); export const wildcards: Matcher[] = [ test( - /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m + /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m, ), test(/^(Merge tag (.*?))(?:\r?\n)*$/m), test(/^(R|r)evert (.*)/), - test(/^(fixup|squash)!/), + test(/^(R|r)eapply (.*)/), + test(/^(amend|fixup|squash)!/), isSemver, test(/^(Merged (.*?)(in|into) (.*)|Merged PR (.*): (.*))/), test(/^Merge remote-tracking branch(\s*)(.*)/), diff --git a/@commitlint/is-ignored/src/index.ts b/@commitlint/is-ignored/src/index.ts index 603f7c5fe0..1e53818df3 100644 --- a/@commitlint/is-ignored/src/index.ts +++ b/@commitlint/is-ignored/src/index.ts @@ -1,2 +1,2 @@ -export * from './is-ignored.js'; -export {default} from './is-ignored.js'; +export * from "./is-ignored.js"; +export { default } from "./is-ignored.js"; diff --git a/@commitlint/is-ignored/src/is-ignored.test.ts b/@commitlint/is-ignored/src/is-ignored.test.ts index 6f3179cf46..07e25d1267 100644 --- a/@commitlint/is-ignored/src/is-ignored.test.ts +++ b/@commitlint/is-ignored/src/is-ignored.test.ts @@ -1,28 +1,28 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import isIgnored from './is-ignored.js'; +import isIgnored from "./is-ignored.js"; const VERSION_MESSAGES = [ - '0.0.1', - '0.1.0', - '1.0.0', - '0.0.1-alpha', - '0.0.1-some-crazy-tag', - '0.0.1-0', - '0.0.1-999', - '0.0.1-alpha.0', - '0.0.1-alpha.999', - '0.0.1-some-crazy-tag.0', - '0.0.1-some-crazy-tag.999', - '0.0.1-1e69d54', - 'v0.0.1', - ' v3.0.0', + "0.0.1", + "0.1.0", + "1.0.0", + "0.0.1-alpha", + "0.0.1-some-crazy-tag", + "0.0.1-0", + "0.0.1-999", + "0.0.1-alpha.0", + "0.0.1-alpha.999", + "0.0.1-some-crazy-tag.0", + "0.0.1-some-crazy-tag.999", + "0.0.1-1e69d54", + "v0.0.1", + " v3.0.0", ]; const AMENDMENTS = [ - 'Signed-off-by: Developer <example@example.com>', - 'Change-Id: I895114872a515a269487a683124b63303818e19c', - 'Signed-off-by: Developer <example@example.com>\nChange-Id: I895114872a515a269487a683124b63303818e19c', + "Signed-off-by: Developer <example@example.com>", + "Change-Id: I895114872a515a269487a683124b63303818e19c", + "Signed-off-by: Developer <example@example.com>\nChange-Id: I895114872a515a269487a683124b63303818e19c", ]; const AMENDED_VERSION_MESSAGES = VERSION_MESSAGES.reduce<string[]>( @@ -32,172 +32,176 @@ const AMENDED_VERSION_MESSAGES = VERSION_MESSAGES.reduce<string[]>( ...AMENDMENTS.map((amendment) => `${message}\n\n${amendment}`), ]; }, - [] + [], ); -test('should return false when called without arguments', () => { +test("should return false when called without arguments", () => { expect(isIgnored()).toBe(false); }); -test('should return false when called with empty string', () => { - expect(isIgnored('')).toBe(false); +test("should return false when called with empty string", () => { + expect(isIgnored("")).toBe(false); }); -test('should return false for normal commit', () => { - expect(isIgnored('initial commit')).toBe(false); +test("should return false for normal commit", () => { + expect(isIgnored("initial commit")).toBe(false); }); -test('should return true for branch merges', () => { +test("should return true for branch merges", () => { expect(isIgnored("Merge branch 'iss53'")).toBe(true); }); -test('should return true for branch merges with newline characters', () => { +test("should return true for branch merges with newline characters", () => { expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n")).toBe(true); expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n")).toBe(true); }); -test('should return true for branch merges with multiple newline characters', () => { +test("should return true for branch merges with multiple newline characters", () => { expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n\n\n")).toBe(true); expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n\r\n\r\n")).toBe(true); }); -test('should return true for merged PRs', () => { - expect(isIgnored('Merge pull request #369')).toBe(true); +test("should return true for merged PRs", () => { + expect(isIgnored("Merge pull request #369")).toBe(true); }); -test('should return true for branch merges with newline characters and more characters after it', () => { +test("should return true for branch merges with newline characters and more characters after it", () => { expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n ")).toBe(true); expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n # some comment")).toBe( - true + true, ); }); -test('should return true for tag merges', () => { +test("should return true for tag merges", () => { expect(isIgnored("Merge tag '1.1.1'")).toBe(true); expect(isIgnored("Merge tag 'a tag'")).toBe(true); }); -test('should return true for tag merges with newline characters', () => { +test("should return true for tag merges with newline characters", () => { expect(isIgnored("Merge tag '1.1.1'\n")).toBe(true); expect(isIgnored("Merge tag '1.1.1'\r\n")).toBe(true); }); -test('should return true for tag merges with multiple newline characters', () => { +test("should return true for tag merges with multiple newline characters", () => { expect(isIgnored("Merge tag '1.1.1'\n\n\n")).toBe(true); expect(isIgnored("Merge tag '1.1.1'\r\n\r\n\r\n")).toBe(true); }); -test('should return true for tag merges with newline characters and more characters after it', () => { +test("should return true for tag merges with newline characters and more characters after it", () => { expect(isIgnored("Merge tag '1.1.1'\n ")).toBe(true); expect(isIgnored("Merge tag '1.1.1'\r\n # some comment")).toBe(true); }); -test('should return true for revert commits', () => { +test("should return true for revert commits", () => { expect( isIgnored( - `Revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` - ) + `Revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.`, + ), ).toBe(true); expect( isIgnored( - `revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` - ) + `revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.`, + ), ).toBe(true); }); -test('should ignore npm semver commits', () => { +test("should ignore npm semver commits", () => { VERSION_MESSAGES.forEach((message) => expect(isIgnored(message)).toBe(true)); }); -test('should ignore npm semver commits with chore', () => { +test("should ignore npm semver commits with chore", () => { VERSION_MESSAGES.forEach((message) => - expect(isIgnored(`chore: ${message}`)).toBe(true) + expect(isIgnored(`chore: ${message}`)).toBe(true), ); VERSION_MESSAGES.forEach((message) => - expect(isIgnored(`chore(release): ${message}`)).toBe(true) + expect(isIgnored(`chore(release): ${message}`)).toBe(true), ); }); -test('should ignore npm semver commits with footers', () => { +test("should ignore npm semver commits with footers", () => { AMENDED_VERSION_MESSAGES.forEach((message) => - expect(isIgnored(message)).toBe(true) + expect(isIgnored(message)).toBe(true), ); }); -test('should return true fixup commits', () => { - expect(isIgnored('fixup! initial commit')).toBe(true); +test("should return true amend commits", () => { + expect(isIgnored("amend! initial commit")).toBe(true); }); -test('should return true squash commits', () => { - expect(isIgnored('squash! initial commit')).toBe(true); +test("should return true fixup commits", () => { + expect(isIgnored("fixup! initial commit")).toBe(true); }); -test('should return true for bitbucket merge commits', () => { +test("should return true squash commits", () => { + expect(isIgnored("squash! initial commit")).toBe(true); +}); + +test("should return true for bitbucket merge commits", () => { expect( - isIgnored('Merged in feature/facebook-friends-sync (pull request #8)') + isIgnored("Merged in feature/facebook-friends-sync (pull request #8)"), ).toBe(true); expect( - isIgnored('Merged develop into feature/component-form-select-card') + isIgnored("Merged develop into feature/component-form-select-card"), ).toBe(true); - expect(isIgnored('Automatic merge')).toBe(true); + expect(isIgnored("Automatic merge")).toBe(true); }); -test('should return true for automatic merge commits', () => { - expect(isIgnored('Auto-merged develop into master')).toBe(true); - expect(isIgnored('Merge remote-tracking branch')).toBe(true); +test("should return true for automatic merge commits", () => { + expect(isIgnored("Auto-merged develop into master")).toBe(true); + expect(isIgnored("Merge remote-tracking branch")).toBe(true); }); -test('should return true for azure devops merge commits', () => { - expect(isIgnored('Merged PR 123: Description here')).toBe(true); +test("should return true for azure devops merge commits", () => { + expect(isIgnored("Merged PR 123: Description here")).toBe(true); }); -test('should return false for commits containing, but not starting, with merge branch', () => { - expect(isIgnored('foo bar Merge branch xxx')).toBe(false); +test("should return false for commits containing, but not starting, with merge branch", () => { + expect(isIgnored("foo bar Merge branch xxx")).toBe(false); }); -test('should return false for commits containing, but not starting, with merge tag', () => { +test("should return false for commits containing, but not starting, with merge tag", () => { expect(isIgnored("foo bar Merge tag '1.1.1'")).toBe(false); }); -test('should return false for ignored message if defaults is false', () => { +test("should return false for ignored message if defaults is false", () => { expect( - isIgnored('Auto-merged develop into master', { + isIgnored("Auto-merged develop into master", { defaults: false, - }) + }), ).toBe(false); }); -test('should return false for ignored message if custom ignores and defaults is false', () => { +test("should return false for ignored message if custom ignores and defaults is false", () => { expect( - isIgnored('Auto-merged develop into master', { + isIgnored("Auto-merged develop into master", { defaults: false, - }) + }), ).toBe(false); }); -test('should throw error if ignores is not an array', () => { - const ignoredString = 'this should be ignored'; +test("should throw error if ignores is not an array", () => { + const ignoredString = "this should be ignored"; expect(() => { isIgnored(ignoredString, { - ignores: 'throws error', + ignores: "throws error", } as any); - }).toThrow('ignores must be of type array, received '); + }).toThrow("ignores must be of type array, received "); }); -test('should return true for custom ignores as function', () => { - const ignoredString = 'this should be ignored'; +test("should return true for custom ignores as function", () => { + const ignoredString = "this should be ignored"; expect( isIgnored(ignoredString, { ignores: [(c) => c === ignoredString], - }) + }), ).toBe(true); }); -test('should throw error if any element of ignores is not a function', () => { - const ignoredString = 'this should be ignored'; +test("should throw error if any element of ignores is not a function", () => { + const ignoredString = "this should be ignored"; expect(() => { isIgnored(ignoredString, { - ignores: ['throws error'], + ignores: ["throws error"], } as any); - }).toThrow('ignores must be array of type function, received items of type:'); + }).toThrow("ignores must be array of type function, received items of type:"); }); diff --git a/@commitlint/is-ignored/src/is-ignored.ts b/@commitlint/is-ignored/src/is-ignored.ts index a3782b1f5b..98faa4c38f 100644 --- a/@commitlint/is-ignored/src/is-ignored.ts +++ b/@commitlint/is-ignored/src/is-ignored.ts @@ -1,25 +1,25 @@ -import {wildcards} from './defaults.js'; -import {IsIgnoredOptions} from '@commitlint/types'; +import { wildcards } from "./defaults.js"; +import { IsIgnoredOptions } from "@commitlint/types"; export default function isIgnored( - commit: string = '', - opts: IsIgnoredOptions = {} + commit: string = "", + opts: IsIgnoredOptions = {}, ): boolean { - const ignores = typeof opts.ignores === 'undefined' ? [] : opts.ignores; + const ignores = typeof opts.ignores === "undefined" ? [] : opts.ignores; if (!Array.isArray(ignores)) { throw new Error( - `ignores must be of type array, received ${ignores} of type ${typeof ignores}` + `ignores must be of type array, received ${ignores} of type ${typeof ignores}`, ); } - const invalids = ignores.filter((c) => typeof c !== 'function'); + const invalids = ignores.filter((c) => typeof c !== "function"); if (invalids.length > 0) { throw new Error( `ignores must be array of type function, received items of type: ${invalids .map((i) => typeof i) - .join(', ')}` + .join(", ")}`, ); } diff --git a/@commitlint/is-ignored/tsconfig.json b/@commitlint/is-ignored/tsconfig.json index f3092129e3..0cc393e13d 100644 --- a/@commitlint/is-ignored/tsconfig.json +++ b/@commitlint/is-ignored/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src/**/*.ts"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}] + "references": [{ "path": "../types" }] } diff --git a/@commitlint/lint/CHANGELOG.md b/@commitlint/lint/CHANGELOG.md index d06f5ac710..a9d23a20f2 100644 --- a/@commitlint/lint/CHANGELOG.md +++ b/@commitlint/lint/CHANGELOG.md @@ -3,6 +3,73 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/lint + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/lint/package.json b/@commitlint/lint/package.json index e2750856d2..e02df18f9e 100644 --- a/@commitlint/lint/package.json +++ b/@commitlint/lint/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/lint", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint a string against commitlint rules", "main": "lib/lint.js", "types": "lib/lint.d.ts", @@ -36,14 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/is-ignored": "^19.0.0", - "@commitlint/parse": "^19.0.0", - "@commitlint/rules": "^19.0.0", - "@commitlint/types": "^19.0.0" + "@commitlint/is-ignored": "^19.8.0", + "@commitlint/parse": "^19.8.0", + "@commitlint/rules": "^19.8.0", + "@commitlint/types": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/lint/src/commit-message.ts b/@commitlint/lint/src/commit-message.ts index 7d8c99f047..fb9d8363ee 100644 --- a/@commitlint/lint/src/commit-message.ts +++ b/@commitlint/lint/src/commit-message.ts @@ -14,5 +14,5 @@ export const buildCommitMessage = ({ message = body ? `${message}\n\n${body}` : message; message = footer ? `${message}\n\n${footer}` : message; - return message || ''; + return message || ""; }; diff --git a/@commitlint/lint/src/lint.test.ts b/@commitlint/lint/src/lint.test.ts index 4668a8accc..0d37aca402 100644 --- a/@commitlint/lint/src/lint.test.ts +++ b/@commitlint/lint/src/lint.test.ts @@ -1,313 +1,315 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import lint from './lint.js'; +import lint from "./lint.js"; -test('throws without params', async () => { +test("throws without params", async () => { const error = (lint as any)(); - await expect(error).rejects.toThrow('Expected a raw commit'); + await expect(error).rejects.toThrow("Expected a raw commit"); }); -test('positive on empty message', async () => { - expect(await lint('')).toMatchObject({ +test("positive on empty message", async () => { + expect(await lint("")).toMatchObject({ valid: true, errors: [], warnings: [], }); }); -test('positive on stub message and no rule', async () => { - const actual = await lint('foo: bar'); +test("positive on stub message and no rule", async () => { + const actual = await lint("foo: bar"); expect(actual.valid).toBe(true); }); -test('positive on stub message and adhered rule', async () => { - const actual = await lint('foo: bar', { - 'type-enum': [RuleConfigSeverity.Error, 'always', ['foo']], +test("positive on stub message and adhered rule", async () => { + const actual = await lint("foo: bar", { + "type-enum": [RuleConfigSeverity.Error, "always", ["foo"]], }); expect(actual.valid).toBe(true); }); -test('negative on stub message and broken rule', async () => { - const actual = await lint('foo: bar', { - 'type-enum': [RuleConfigSeverity.Error, 'never', ['foo']], +test("negative on stub message and broken rule", async () => { + const actual = await lint("foo: bar", { + "type-enum": [RuleConfigSeverity.Error, "never", ["foo"]], }); expect(actual.valid).toBe(false); }); -test('positive on ignored message and broken rule', async () => { +test("positive on ignored message and broken rule", async () => { const actual = await lint('Revert "some bogus commit"', { - 'type-empty': [RuleConfigSeverity.Error, 'never'], + "type-empty": [RuleConfigSeverity.Error, "never"], }); expect(actual.valid).toBe(true); expect(actual.input).toBe('Revert "some bogus commit"'); }); -test('negative on ignored message, disabled ignored messages and broken rule', async () => { +test("negative on ignored message, disabled ignored messages and broken rule", async () => { const actual = await lint( 'Revert "some bogus commit"', { - 'type-empty': [RuleConfigSeverity.Error, 'never'], + "type-empty": [RuleConfigSeverity.Error, "never"], }, { defaultIgnores: false, - } + }, ); expect(actual.valid).toBe(false); }); -test('positive on custom ignored message and broken rule', async () => { - const ignoredMessage = 'some ignored custom message'; +test("positive on custom ignored message and broken rule", async () => { + const ignoredMessage = "some ignored custom message"; const actual = await lint( ignoredMessage, { - 'type-empty': [RuleConfigSeverity.Error, 'never'], + "type-empty": [RuleConfigSeverity.Error, "never"], }, { ignores: [(c) => c === ignoredMessage], - } + }, ); expect(actual.valid).toBe(true); expect(actual.input).toBe(ignoredMessage); }); -test('positive on stub message and opts', async () => { +test("positive on stub message and opts", async () => { const actual = await lint( - 'foo-bar', + "foo-bar", { - 'type-enum': [RuleConfigSeverity.Error, 'always', ['foo']], - 'type-empty': [RuleConfigSeverity.Error, 'never'], + "type-enum": [RuleConfigSeverity.Error, "always", ["foo"]], + "type-empty": [RuleConfigSeverity.Error, "never"], }, { parserOpts: { headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, }, - } + }, ); expect(actual.valid).toBe(true); }); -test('throws for invalid rule names', async () => { - const error = lint('foo', { - foo: [RuleConfigSeverity.Error, 'always'], - bar: [RuleConfigSeverity.Warning, 'never'], +test("throws for invalid rule names", async () => { + const error = lint("foo", { + foo: [RuleConfigSeverity.Error, "always"], + bar: [RuleConfigSeverity.Warning, "never"], }); - await expect(error).rejects.toThrow(/^Found invalid rule names: foo, bar/); + await expect(error).rejects.toThrow( + /^Found rules without implementation: foo, bar/, + ); }); -test('throws for invalid rule config', async () => { - const error = lint('type(scope): foo', { - 'type-enum': 1, - 'scope-enum': {0: 2, 1: 'never', 2: ['foo'], length: 3}, +test("throws for invalid rule config", async () => { + const error = lint("type(scope): foo", { + "type-enum": 1, + "scope-enum": { 0: 2, 1: "never", 2: ["foo"], length: 3 }, } as any); - await expect(error).rejects.toThrow('type-enum must be array'); - await expect(error).rejects.toThrow('scope-enum must be array'); + await expect(error).rejects.toThrow("type-enum must be array"); + await expect(error).rejects.toThrow("scope-enum must be array"); }); -test('allows disable shorthand', async () => { - const result = lint('foo', {'type-enum': [0], 'scope-enum': [0]}); +test("allows disable shorthand", async () => { + const result = lint("foo", { "type-enum": [0], "scope-enum": [0] }); await expect(result).resolves.toEqual({ errors: [], - input: 'foo', + input: "foo", valid: true, warnings: [], }); }); -test('throws for rule with invalid length', async () => { - const error = lint('type(scope): foo', {'scope-enum': [1, 2, 3, 4]} as any); +test("throws for rule with invalid length", async () => { + const error = lint("type(scope): foo", { "scope-enum": [1, 2, 3, 4] } as any); - await expect(error).rejects.toThrow('scope-enum must be 2 or 3 items long'); + await expect(error).rejects.toThrow("scope-enum must be 2 or 3 items long"); }); -test('throws for rule with invalid level', async () => { - const error = lint('type(scope): foo', { - 'type-enum': ['2', 'always'] as any, - 'header-max-length': [{}, 'always'] as any, +test("throws for rule with invalid level", async () => { + const error = lint("type(scope): foo", { + "type-enum": ["2", "always"] as any, + "header-max-length": [{}, "always"] as any, }); - await expect(error).rejects.toThrow('rule type-enum must be number'); - await expect(error).rejects.toThrow('rule header-max-length must be number'); + await expect(error).rejects.toThrow("rule type-enum must be number"); + await expect(error).rejects.toThrow("rule header-max-length must be number"); }); -test('throws for rule with out of range level', async () => { - const error = lint('type(scope): foo', { - 'type-enum': [-1, 'always'] as any, - 'header-max-length': [3, 'always'] as any, +test("throws for rule with out of range level", async () => { + const error = lint("type(scope): foo", { + "type-enum": [-1, "always"] as any, + "header-max-length": [3, "always"] as any, }); - await expect(error).rejects.toThrow('rule type-enum must be between 0 and 2'); + await expect(error).rejects.toThrow("rule type-enum must be between 0 and 2"); await expect(error).rejects.toThrow( - 'rule header-max-length must be between 0 and 2' + "rule header-max-length must be between 0 and 2", ); }); -test('throws for rule with invalid condition', async () => { - const error = lint('type(scope): foo', { - 'type-enum': [1, 2] as any, - 'header-max-length': [1, {}] as any, +test("throws for rule with invalid condition", async () => { + const error = lint("type(scope): foo", { + "type-enum": [1, 2] as any, + "header-max-length": [1, {}] as any, }); - await expect(error).rejects.toThrow('type-enum must be string'); - await expect(error).rejects.toThrow('header-max-length must be string'); + await expect(error).rejects.toThrow("type-enum must be string"); + await expect(error).rejects.toThrow("header-max-length must be string"); }); -test('throws for rule with out of range condition', async () => { - const error = lint('type(scope): foo', { - 'type-enum': [RuleConfigSeverity.Warning, 'foo'] as any, - 'header-max-length': [RuleConfigSeverity.Warning, 'bar'] as any, +test("throws for rule with out of range condition", async () => { + const error = lint("type(scope): foo", { + "type-enum": [RuleConfigSeverity.Warning, "foo"] as any, + "header-max-length": [RuleConfigSeverity.Warning, "bar"] as any, }); await expect(error).rejects.toThrow('type-enum must be "always" or "never"'); await expect(error).rejects.toThrow( - 'header-max-length must be "always" or "never"' + 'header-max-length must be "always" or "never"', ); }); -test('succeds for issue', async () => { - const report = await lint('somehting #1', { - 'references-empty': [RuleConfigSeverity.Error, 'never'], +test("succeds for issue", async () => { + const report = await lint("somehting #1", { + "references-empty": [RuleConfigSeverity.Error, "never"], }); expect(report.valid).toBe(true); }); -test('fails for issue', async () => { - const report = await lint('somehting #1', { - 'references-empty': [RuleConfigSeverity.Error, 'always'], +test("fails for issue", async () => { + const report = await lint("somehting #1", { + "references-empty": [RuleConfigSeverity.Error, "always"], }); expect(report.valid).toBe(false); }); -test('succeds for custom issue prefix', async () => { +test("succeds for custom issue prefix", async () => { const report = await lint( - 'somehting REF-1', + "somehting REF-1", { - 'references-empty': [RuleConfigSeverity.Error, 'never'], + "references-empty": [RuleConfigSeverity.Error, "never"], }, { parserOpts: { - issuePrefixes: ['REF-'], + issuePrefixes: ["REF-"], }, - } + }, ); expect(report.valid).toBe(true); }); -test('fails for custom issue prefix', async () => { +test("fails for custom issue prefix", async () => { const report = await lint( - 'somehting #1', + "somehting #1", { - 'references-empty': [RuleConfigSeverity.Error, 'never'], + "references-empty": [RuleConfigSeverity.Error, "never"], }, { parserOpts: { - issuePrefixes: ['REF-'], + issuePrefixes: ["REF-"], }, - } + }, ); expect(report.valid).toBe(false); }); -test('fails for custom plugin rule', async () => { +test("fails for custom plugin rule", async () => { const report = await lint( - 'somehting #1', + "somehting #1", { - 'plugin-rule': [RuleConfigSeverity.Error, 'never'], + "plugin-rule": [RuleConfigSeverity.Error, "never"], }, { plugins: { - 'plugin-example': { + "plugin-example": { rules: { - 'plugin-rule': () => [false], + "plugin-rule": () => [false], }, }, }, - } + }, ); expect(report.valid).toBe(false); }); -test('passes for custom plugin rule', async () => { +test("passes for custom plugin rule", async () => { const report = await lint( - 'somehting #1', + "somehting #1", { - 'plugin-rule': [RuleConfigSeverity.Error, 'never'], + "plugin-rule": [RuleConfigSeverity.Error, "never"], }, { plugins: { - 'plugin-example': { + "plugin-example": { rules: { - 'plugin-rule': () => [true], + "plugin-rule": () => [true], }, }, }, - } + }, ); expect(report.valid).toBe(true); }); -test('returns original message only with commit header', async () => { - const message = 'foo: bar'; +test("returns original message only with commit header", async () => { + const message = "foo: bar"; const report = await lint(message); expect(report.input).toBe(message); }); -test('returns original message with commit header and body', async () => { - const message = 'foo: bar/n/nFoo bar bizz buzz.'; +test("returns original message with commit header and body", async () => { + const message = "foo: bar/n/nFoo bar bizz buzz."; const report = await lint(message); expect(report.input).toBe(message); }); -test('returns original message with commit header, body and footer', async () => { - const message = 'foo: bar/n/nFoo bar bizz buzz./n/nCloses #1'; +test("returns original message with commit header, body and footer", async () => { + const message = "foo: bar/n/nFoo bar bizz buzz./n/nCloses #1"; const report = await lint(message); expect(report.input).toBe(message); }); -test('returns original message with commit header, body and footer, parsing comments', async () => { - const expected = 'foo: bar/n/nFoo bar bizz buzz./n/nCloses #1'; +test("returns original message with commit header, body and footer, parsing comments", async () => { + const expected = "foo: bar/n/nFoo bar bizz buzz./n/nCloses #1"; const message = `${expected}\n\n# Some comment to ignore`; const report = await lint( message, { - 'references-empty': [RuleConfigSeverity.Error, 'never'], + "references-empty": [RuleConfigSeverity.Error, "never"], }, { parserOpts: { - commentChar: '#', + commentChar: "#", }, - } + }, ); expect(report.input).toBe(expected); }); -test('passes for async rule', async () => { +test("passes for async rule", async () => { const report = await lint( - 'somehting #1', + "somehting #1", { - 'async-rule': [RuleConfigSeverity.Error, 'never'], + "async-rule": [RuleConfigSeverity.Error, "never"], }, { plugins: { - 'example-plugin': { + "example-plugin": { rules: { - 'async-rule': async () => [true, 'all good'] as const, + "async-rule": async () => [true, "all good"] as const, }, }, }, - } + }, ); expect(report.valid).toBe(true); diff --git a/@commitlint/lint/src/lint.ts b/@commitlint/lint/src/lint.ts index d5bfab8f31..c64bb829e0 100644 --- a/@commitlint/lint/src/lint.ts +++ b/@commitlint/lint/src/lint.ts @@ -1,7 +1,7 @@ -import util from 'util'; -import isIgnored from '@commitlint/is-ignored'; -import parse from '@commitlint/parse'; -import defaultRules from '@commitlint/rules'; +import util from "node:util"; +import isIgnored from "@commitlint/is-ignored"; +import parse from "@commitlint/parse"; +import defaultRules from "@commitlint/rules"; import type { LintOptions, LintOutcome, @@ -10,24 +10,24 @@ import type { BaseRule, RuleType, QualifiedRules, -} from '@commitlint/types'; -import {RuleConfigSeverity} from '@commitlint/types'; +} from "@commitlint/types"; +import { RuleConfigSeverity } from "@commitlint/types"; -import {buildCommitMessage} from './commit-message.js'; +import { buildCommitMessage } from "./commit-message.js"; export default async function lint( message: string, rawRulesConfig?: QualifiedRules, - rawOpts?: LintOptions + rawOpts?: LintOptions, ): Promise<LintOutcome> { const opts = rawOpts ? rawOpts - : {defaultIgnores: undefined, ignores: undefined}; + : { defaultIgnores: undefined, ignores: undefined }; const rulesConfig = rawRulesConfig || {}; // Found a wildcard match, skip if ( - isIgnored(message, {defaults: opts.defaultIgnores, ignores: opts.ignores}) + isIgnored(message, { defaults: opts.defaultIgnores, ignores: opts.ignores }) ) { return { valid: true, @@ -39,8 +39,8 @@ export default async function lint( // Parse the commit message const parsed = - message === '' - ? {header: null, body: null, footer: null} + message === "" + ? { header: null, body: null, footer: null } : await parse(message, undefined, opts.parserOpts); if ( @@ -58,14 +58,14 @@ export default async function lint( } const allRules: Map<string, BaseRule<never, RuleType>> = new Map( - Object.entries(defaultRules) + Object.entries(defaultRules), ); if (opts.plugins) { Object.values(opts.plugins).forEach((plugin) => { if (plugin.rules) { Object.keys(plugin.rules).forEach((ruleKey) => - allRules.set(ruleKey, plugin.rules[ruleKey]) + allRules.set(ruleKey, plugin.rules[ruleKey]), ); } }); @@ -73,15 +73,16 @@ export default async function lint( // Find invalid rules configs const missing = Object.keys(rulesConfig).filter( - (name) => typeof allRules.get(name) !== 'function' + (name) => typeof allRules.get(name) !== "function", ); if (missing.length > 0) { const names = [...allRules.keys()]; throw new RangeError( - `Found invalid rule names: ${missing.join( - ', ' - )}. Supported rule names are: ${names.join(', ')}` + [ + `Found rules without implementation: ${missing.join(", ")}.`, + `Supported rules are: ${names.join(", ")}.`, + ].join("\n"), ); } @@ -90,8 +91,8 @@ export default async function lint( if (!Array.isArray(config)) { return new Error( `config for rule ${name} must be array, received ${util.inspect( - config - )} of type ${typeof config}` + config, + )} of type ${typeof config}`, ); } @@ -103,43 +104,43 @@ export default async function lint( const [, when] = config; - if (typeof level !== 'number' || isNaN(level)) { + if (typeof level !== "number" || isNaN(level)) { return new Error( `level for rule ${name} must be number, received ${util.inspect( - level - )} of type ${typeof level}` + level, + )} of type ${typeof level}`, ); } if (config.length < 2 || config.length > 3) { return new Error( `config for rule ${name} must be 2 or 3 items long, received ${util.inspect( - config - )} of length ${config.length}` + config, + )} of length ${config.length}`, ); } if (level < 0 || level > 2) { return new RangeError( `level for rule ${name} must be between 0 and 2, received ${util.inspect( - level - )}` + level, + )}`, ); } - if (typeof when !== 'string') { + if (typeof when !== "string") { return new Error( `condition for rule ${name} must be string, received ${util.inspect( - when - )} of type ${typeof when}` + when, + )} of type ${typeof when}`, ); } - if (when !== 'never' && when !== 'always') { + if (when !== "never" && when !== "always") { return new Error( `condition for rule ${name} must be "always" or "never", received ${util.inspect( - when - )}` + when, + )}`, ); } @@ -148,7 +149,7 @@ export default async function lint( .filter((item): item is Error => item instanceof Error); if (invalid.length > 0) { - throw new Error(invalid.map((i) => i.message).join('\n')); + throw new Error(invalid.map((i) => i.message).join("\n")); } // Validate against all rules @@ -177,14 +178,14 @@ export default async function lint( }); const results = (await Promise.all(pendingResults)).filter( - (result): result is LintRuleOutcome => result !== null + (result): result is LintRuleOutcome => result !== null, ); const errors = results.filter( - (result) => result.level === 2 && !result.valid + (result) => result.level === RuleConfigSeverity.Error && !result.valid, ); const warnings = results.filter( - (result) => result.level === 1 && !result.valid + (result) => result.level === RuleConfigSeverity.Warning && !result.valid, ); const valid = errors.length === 0; diff --git a/@commitlint/lint/tsconfig.json b/@commitlint/lint/tsconfig.json index d30e6bdbf0..bcd59cb2a3 100644 --- a/@commitlint/lint/tsconfig.json +++ b/@commitlint/lint/tsconfig.json @@ -8,9 +8,9 @@ "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], "references": [ - {"path": "../is-ignored"}, - {"path": "../parse"}, - {"path": "../rules"}, - {"path": "../types"} + { "path": "../is-ignored" }, + { "path": "../parse" }, + { "path": "../rules" }, + { "path": "../types" } ] } diff --git a/@commitlint/load/CHANGELOG.md b/@commitlint/load/CHANGELOG.md index f3f8190efd..4e441ec10c 100644 --- a/@commitlint/load/CHANGELOG.md +++ b/@commitlint/load/CHANGELOG.md @@ -3,6 +3,87 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + + +### Features + +* **load:** update cosmiconfig to v9 to add support for `package.yaml` config ([#3976](https://github.com/conventional-changelog/commitlint/issues/3976)) ([94eab40](https://github.com/conventional-changelog/commitlint/commit/94eab40798e0c8d3945aa2b1e629669b231d8468)) + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + + +### Bug Fixes + +* drop `resolve-from`, `resolve-global` and `import-fresh`, resolve global packages correctly ([#3939](https://github.com/conventional-changelog/commitlint/issues/3939)) ([8793c63](https://github.com/conventional-changelog/commitlint/commit/8793c639c083c33714da0a29429b338776813d0c)), closes [#3938](https://github.com/conventional-changelog/commitlint/issues/3938) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs b/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs index 2f37065f43..3c3d034f67 100644 --- a/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs @@ -1,3 +1,5 @@ +'use strict'; + module.exports = { formatter: '@commitlint/format', rules: { diff --git a/@commitlint/load/fixtures/basic-config/commitlint.config.cjs b/@commitlint/load/fixtures/basic-config/commitlint.config.cjs index 2f37065f43..3c3d034f67 100644 --- a/@commitlint/load/fixtures/basic-config/commitlint.config.cjs +++ b/@commitlint/load/fixtures/basic-config/commitlint.config.cjs @@ -1,3 +1,5 @@ +'use strict'; + module.exports = { formatter: '@commitlint/format', rules: { diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs b/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs index c58cb47afc..a864f31563 100644 --- a/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs @@ -1,3 +1,5 @@ +'use strict'; + module.exports = { extends: ['./first-extended'], rules: { diff --git a/@commitlint/load/fixtures/extends-config/commitlint.config.cjs b/@commitlint/load/fixtures/extends-config/commitlint.config.cjs index c58cb47afc..a864f31563 100644 --- a/@commitlint/load/fixtures/extends-config/commitlint.config.cjs +++ b/@commitlint/load/fixtures/extends-config/commitlint.config.cjs @@ -1,3 +1,5 @@ +'use strict'; + module.exports = { extends: ['./first-extended'], rules: { diff --git a/@commitlint/load/package.json b/@commitlint/load/package.json index 555e8ab286..2d33610881 100644 --- a/@commitlint/load/package.json +++ b/@commitlint/load/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/load", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Load shared commitlint configuration", "main": "lib/load.js", "types": "lib/load.d.ts", @@ -36,7 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", + "@commitlint/test": "^19.8.0", "@types/lodash.isplainobject": "^4.0.8", "@types/lodash.merge": "^4.6.8", "@types/lodash.uniq": "^4.5.8", @@ -45,16 +45,16 @@ "typescript": "^5.2.2" }, "dependencies": { - "@commitlint/config-validator": "^19.0.0", - "@commitlint/execute-rule": "^19.0.0", - "@commitlint/resolve-extends": "^19.0.0", - "@commitlint/types": "^19.0.0", + "@commitlint/config-validator": "^19.8.0", + "@commitlint/execute-rule": "^19.8.0", + "@commitlint/resolve-extends": "^19.8.0", + "@commitlint/types": "^19.8.0", "chalk": "^5.3.0", - "cosmiconfig": "^8.3.6", - "cosmiconfig-typescript-loader": "^5.0.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/load/src/load.test.ts b/@commitlint/load/src/load.test.ts index b47219b15d..43a02d4bf5 100644 --- a/@commitlint/load/src/load.test.ts +++ b/@commitlint/load/src/load.test.ts @@ -1,24 +1,23 @@ -import {describe, test, expect, vi} from 'vitest'; -import {readFileSync, writeFileSync} from 'fs'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { describe, test, expect, vi } from "vitest"; +import { readFileSync, writeFileSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {RuleConfigSeverity} from '@commitlint/types'; -import {fix, git, npm} from '@commitlint/test'; -import resolveFrom from 'resolve-from'; +import { RuleConfigSeverity } from "@commitlint/types"; +import { fix, git, npm } from "@commitlint/test"; -import load from './load.js'; -import {isDynamicAwaitSupported} from './utils/load-config.js'; +import load, { resolveFrom } from "./load.js"; +import { isDynamicAwaitSupported } from "./utils/load-config.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); const plugin = vi.fn(); const scopedPlugin = vi.fn(); -vi.mock('commitlint-plugin-example', () => ({ +vi.mock("commitlint-plugin-example", () => ({ default: plugin, })); -vi.mock('@scope/commitlint-plugin-example', () => ({ +vi.mock("@scope/commitlint-plugin-example", () => ({ default: scopedPlugin, })); @@ -26,110 +25,113 @@ const fixBootstrap = (name: string) => fix.bootstrap(name, __dirname); const gitBootstrap = (name: string) => git.bootstrap(name, __dirname); const npmBootstrap = (name: string) => npm.bootstrap(name, __dirname); -test('extends-empty should have no rules', async () => { - const cwd = await gitBootstrap('fixtures/extends-empty'); - const actual = await load({}, {cwd}); +test("extends-empty should have no rules", async () => { + const cwd = await gitBootstrap("fixtures/extends-empty"); + const actual = await load({}, { cwd }); expect(actual.rules).toMatchObject({}); expect(actual.parserPreset).not.toBeDefined(); }); -test('uses seed as configured', async () => { - const cwd = await gitBootstrap('fixtures/extends-empty'); +test("uses seed as configured", async () => { + const cwd = await gitBootstrap("fixtures/extends-empty"); const rules = { - 'body-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'] as any, + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, }; - const actual = await load({rules}, {cwd}); + const actual = await load({ rules }, { cwd }); - expect(actual.rules['body-case']).toStrictEqual([ + expect(actual.rules["body-case"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'camel-case', + "never", + "camel-case", ]); }); -test('rules should be loaded from local', async () => { +test("rules should be loaded from local", async () => { const actual = await load({ rules: { - direct: [RuleConfigSeverity.Warning, 'never', 'foo'], - func: () => [RuleConfigSeverity.Warning, 'never', 'foo'], - async: async () => [RuleConfigSeverity.Warning, 'never', 'foo'], + direct: [RuleConfigSeverity.Warning, "never", "foo"], + func: () => [RuleConfigSeverity.Warning, "never", "foo"], + async: async () => [RuleConfigSeverity.Warning, "never", "foo"], promise: () => - Promise.resolve([RuleConfigSeverity.Warning, 'never', 'foo']), + Promise.resolve([RuleConfigSeverity.Warning, "never", "foo"]), }, }); - expect(actual.rules['direct']).toStrictEqual([ + expect(actual.rules["direct"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'foo', + "never", + "foo", ]); - expect(actual.rules['func']).toStrictEqual([ + expect(actual.rules["func"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'foo', + "never", + "foo", ]); - expect(actual.rules['async']).toStrictEqual([ + expect(actual.rules["async"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'foo', + "never", + "foo", ]); - expect(actual.rules['promise']).toStrictEqual([ + expect(actual.rules["promise"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'foo', + "never", + "foo", ]); }); -test('rules should be loaded from relative config file', async () => { - const file = 'config/commitlint.config.js'; - const cwd = await gitBootstrap('fixtures/specify-config-file'); +test("rules should be loaded from relative config file", async () => { + const file = "config/commitlint.config.js"; + const cwd = await gitBootstrap("fixtures/specify-config-file"); const rules = { - 'body-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'] as any, + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, }; - const actual = await load({rules}, {cwd, file}); + const actual = await load({ rules }, { cwd, file }); - expect(actual.rules['body-case']).toStrictEqual([ + expect(actual.rules["body-case"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'camel-case', + "never", + "camel-case", ]); }); -test('rules should be loaded from absolute config file', async () => { - const cwd = await gitBootstrap('fixtures/specify-config-file'); - const file = path.resolve(cwd, 'config/commitlint.config.js'); +test("rules should be loaded from absolute config file", async () => { + const cwd = await gitBootstrap("fixtures/specify-config-file"); + const file = path.resolve(cwd, "config/commitlint.config.js"); const rules = { - 'body-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'] as any, + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, }; - const actual = await load({rules}, {cwd: process.cwd(), file}); + const actual = await load({ rules }, { cwd: process.cwd(), file }); - expect(actual.rules['body-case']).toStrictEqual([ + expect(actual.rules["body-case"]).toStrictEqual([ RuleConfigSeverity.Warning, - 'never', - 'camel-case', + "never", + "camel-case", ]); }); -test('plugins should be loaded from seed', async () => { - const cwd = await gitBootstrap('fixtures/extends-empty'); - const actual = await load({plugins: ['example', '@scope/example']}, {cwd}); +test("plugins should be loaded from seed", async () => { + const cwd = await gitBootstrap("fixtures/extends-empty"); + const actual = await load( + { plugins: ["example", "@scope/example"] }, + { cwd }, + ); expect(actual.plugins).toMatchObject({ example: plugin, - '@scope/example': scopedPlugin, + "@scope/example": scopedPlugin, }); }); -test('plugins should be loaded from local', async () => { +test("plugins should be loaded from local", async () => { const actual = await load({ plugins: [ { rules: { - test: () => [true, 'asd'], + test: () => [true, "asd"], }, }, ], @@ -142,121 +144,122 @@ test('plugins should be loaded from local', async () => { test: expect.any(Function), }, }, - }) + }), ); }); -test('plugins should be loaded from config', async () => { - const cwd = await gitBootstrap('fixtures/extends-plugins'); - const actual = await load({}, {cwd}); +test("plugins should be loaded from config", async () => { + const cwd = await gitBootstrap("fixtures/extends-plugins"); + const actual = await load({}, { cwd }); expect(actual.plugins).toMatchObject({ example: plugin, - '@scope/example': scopedPlugin, + "@scope/example": scopedPlugin, }); }); -test('plugins should be loaded from shareable config', async () => { - const cwd = await gitBootstrap('fixtures/extends-with-plugins'); - const actual = await load({}, {cwd}); +test("plugins should be loaded from shareable config", async () => { + const cwd = await gitBootstrap("fixtures/extends-with-plugins"); + const actual = await load({}, { cwd }); expect(actual.plugins).toMatchObject({ example: plugin, - '@scope/example': scopedPlugin, + "@scope/example": scopedPlugin, }); }); -test('local plugins should be loaded from shareable configs', async () => { - const cwd = await gitBootstrap('fixtures/extends-with-local-plugins'); - const actual = await load({}, {cwd}); +test("local plugins should be loaded from shareable configs", async () => { + const cwd = await gitBootstrap("fixtures/extends-with-local-plugins"); + const actual = await load({}, { cwd }); expect(actual.plugins).toEqual( expect.objectContaining({ local: { rules: { - 'hello-world-rule': expect.any(Function), - 'is-positive': expect.any(Function), + "hello-world-rule": expect.any(Function), + "is-positive": expect.any(Function), }, }, - }) + }), ); }); -test('uses seed with parserPreset', async () => { - const cwd = await gitBootstrap('fixtures/parser-preset'); - const {parserPreset: actual} = await load( - {parserPreset: './conventional-changelog-custom'}, - {cwd} +test("uses seed with parserPreset", async () => { + const cwd = await gitBootstrap("fixtures/parser-preset"); + const { parserPreset: actual } = await load( + { parserPreset: "./conventional-changelog-custom" }, + { cwd }, ); expect(actual).toBeDefined(); - expect(actual!.name).toBe('./conventional-changelog-custom'); + expect(actual!.name).toBe("./conventional-changelog-custom"); expect(actual!.parserOpts).toMatchObject({ headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, }); }); -test('invalid extend should throw', async () => { - const cwd = await gitBootstrap('fixtures/extends-invalid'); +test("invalid extend should throw", async () => { + const cwd = await gitBootstrap("fixtures/extends-invalid"); - await expect(load({}, {cwd})).rejects.toThrow(); + await expect(load({}, { cwd })).rejects.toThrow(); }); -test('empty file should have no rules', async () => { - const cwd = await gitBootstrap('fixtures/empty-object-file'); - const actual = await load({}, {cwd}); +test("empty file should have no rules", async () => { + const cwd = await gitBootstrap("fixtures/empty-object-file"); + const actual = await load({}, { cwd }); expect(actual.rules).toMatchObject({}); }); -test('empty file should extend nothing', async () => { - const cwd = await gitBootstrap('fixtures/empty-file'); - const actual = await load({}, {cwd}); +test("empty file should extend nothing", async () => { + const cwd = await gitBootstrap("fixtures/empty-file"); + const actual = await load({}, { cwd }); expect(actual.extends).toHaveLength(0); }); -test('respects cwd option', async () => { - const cwd = await gitBootstrap('fixtures/recursive-extends/first-extended'); - const actual = await load({}, {cwd}); +test("respects cwd option", async () => { + const cwd = await gitBootstrap("fixtures/recursive-extends/first-extended"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', - extends: ['./second-extended'], + formatter: "@commitlint/format", + extends: ["./second-extended"], plugins: {}, rules: { - one: [RuleConfigSeverity.Warning, 'always'], - two: [RuleConfigSeverity.Error, 'never'], + one: [RuleConfigSeverity.Warning, "always"], + two: [RuleConfigSeverity.Error, "never"], }, }); }); -describe.each([['basic'], ['extends']])('%s config', (template) => { - const isExtendsTemplate = template === 'extends'; +describe.each([["basic"], ["extends"]])("%s config", (template) => { + const isExtendsTemplate = template === "extends"; const configFiles = [ - 'commitlint.config.cjs', - 'commitlint.config.js', - 'commitlint.config.mjs', - 'package.json', - '.commitlintrc', - '.commitlintrc.cjs', - '.commitlintrc.js', - '.commitlintrc.json', - '.commitlintrc.mjs', - '.commitlintrc.yml', - '.commitlintrc.yaml', + "commitlint.config.cjs", + "commitlint.config.js", + "commitlint.config.mjs", + "package.json", + "package.yaml", + ".commitlintrc", + ".commitlintrc.cjs", + ".commitlintrc.js", + ".commitlintrc.json", + ".commitlintrc.mjs", + ".commitlintrc.yml", + ".commitlintrc.yaml", ]; const configTestCases = [ ...configFiles - .filter((filename) => !filename.endsWith('.mjs')) - .map((filename) => ({filename, isEsm: false})), + .filter((filename) => !filename.endsWith(".mjs")) + .map((filename) => ({ filename, isEsm: false })), ...configFiles .filter((filename) => - ['.mjs', '.js'].some((ext) => filename.endsWith(ext)) + [".mjs", ".js"].some((ext) => filename.endsWith(ext)), ) - .map((filename) => ({filename, isEsm: true})), + .map((filename) => ({ filename, isEsm: true })), ]; const getConfigContents = ({ @@ -266,53 +269,60 @@ describe.each([['basic'], ['extends']])('%s config', (template) => { filename: string; isEsm: boolean; }): string | NodeJS.ArrayBufferView => { - if (filename === 'package.json') { + if (filename === "package.json") { const configPath = path.join( __dirname, - `../fixtures/${template}-config/.commitlintrc.json` + `../fixtures/${template}-config/.commitlintrc.json`, ); const commitlint = JSON.parse( - readFileSync(configPath, {encoding: 'utf-8'}) + readFileSync(configPath, { encoding: "utf-8" }), ); - return JSON.stringify({commitlint}); + return JSON.stringify({ commitlint }); + } else if (filename === "package.yaml") { + const configPath = path.join( + __dirname, + `../fixtures/${template}-config/.commitlintrc.yaml`, + ); + const yaml = readFileSync(configPath, { encoding: "utf-8" }); + return `commitlint:\n${yaml.replace(/^/gm, " ")}`; } else { - const filePath = ['..', 'fixtures', `${template}-config`, filename]; + const filePath = ["..", "fixtures", `${template}-config`, filename]; if (isEsm) { - filePath.splice(3, 0, 'esm'); + filePath.splice(3, 0, "esm"); } - const configPath = path.join(__dirname, filePath.join('/')); + const configPath = path.join(__dirname, filePath.join("/")); return readFileSync(configPath); } }; const esmBootstrap = (cwd: string) => { - const packageJsonPath = path.join(cwd, 'package.json'); + const packageJsonPath = path.join(cwd, "package.json"); const packageJSON = JSON.parse( - readFileSync(packageJsonPath, {encoding: 'utf-8'}) + readFileSync(packageJsonPath, { encoding: "utf-8" }), ); writeFileSync( packageJsonPath, JSON.stringify({ ...packageJSON, - type: 'module', - }) + type: "module", + }), ); }; - const templateFolder = [template, isExtendsTemplate ? 'js' : '', 'template'] + const templateFolder = [template, isExtendsTemplate ? "js" : "", "template"] .filter((elem) => elem) - .join('-'); + .join("-"); test.each( configTestCases // Skip ESM tests for the extends suite until resolve-extends supports ESM - .filter(({isEsm}) => template !== 'extends' || !isEsm) + .filter(({ isEsm }) => template !== "extends" || !isEsm) // Skip ESM tests if dynamic await is not supported; Jest will crash with a seg fault error - .filter(({isEsm}) => isDynamicAwaitSupported() || !isEsm) - )('$filename, ESM: $isEsm', async ({filename, isEsm}) => { + .filter(({ isEsm }) => isDynamicAwaitSupported() || !isEsm), + )("$filename, ESM: $isEsm", async ({ filename, isEsm }) => { const cwd = await gitBootstrap(`fixtures/${templateFolder}`); if (isEsm) { @@ -321,252 +331,253 @@ describe.each([['basic'], ['extends']])('%s config', (template) => { writeFileSync( path.join(cwd, filename), - getConfigContents({filename, isEsm}) + getConfigContents({ filename, isEsm }), ); - const actual = await load({}, {cwd}); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', - extends: isExtendsTemplate ? ['./first-extended'] : [], + formatter: "@commitlint/format", + extends: isExtendsTemplate ? ["./first-extended"] : [], plugins: {}, rules: { - zero: [RuleConfigSeverity.Disabled, 'never'], - one: [RuleConfigSeverity.Warning, 'always'], - two: [RuleConfigSeverity.Error, 'never'], + zero: [RuleConfigSeverity.Disabled, "never"], + one: [RuleConfigSeverity.Warning, "always"], + two: [RuleConfigSeverity.Error, "never"], }, }); }); }); -test('recursive extends with ts file', async () => { - const cwd = await gitBootstrap('fixtures/recursive-extends-ts'); - const actual = await load({}, {cwd}); +test("recursive extends with ts file", async () => { + const cwd = await gitBootstrap("fixtures/recursive-extends-ts"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', - extends: ['./first-extended/index.ts'], + formatter: "@commitlint/format", + extends: ["./first-extended/index.ts"], plugins: {}, rules: { - zero: [RuleConfigSeverity.Disabled, 'never', 'zero'], - one: [RuleConfigSeverity.Warning, 'never', 'one'], - two: [RuleConfigSeverity.Error, 'never', 'two'], + zero: [RuleConfigSeverity.Disabled, "never", "zero"], + one: [RuleConfigSeverity.Warning, "never", "one"], + two: [RuleConfigSeverity.Error, "never", "two"], }, }); }); -test('parser preset overwrites completely instead of merging', async () => { - const cwd = await gitBootstrap('fixtures/parser-preset-override'); - const actual = await load({}, {cwd}); +test("parser preset overwrites completely instead of merging", async () => { + const cwd = await gitBootstrap("fixtures/parser-preset-override"); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); - expect(actual.parserPreset!.name).toBe('./custom'); + expect(actual.parserPreset!.name).toBe("./custom"); expect(actual.parserPreset!.parserOpts).toMatchObject({ headerPattern: /.*/, }); }); -test('recursive extends with parserPreset', async () => { - const cwd = await gitBootstrap('fixtures/recursive-parser-preset'); - const actual = await load({}, {cwd}); +test("recursive extends with parserPreset", async () => { + const cwd = await gitBootstrap("fixtures/recursive-parser-preset"); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); - expect(actual.parserPreset!.name).toBe('./conventional-changelog-custom'); + expect(actual.parserPreset!.name).toBe("./conventional-changelog-custom"); expect(actual.parserPreset!.parserOpts).toMatchObject({ headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, }); }); -test('ignores unknown keys', async () => { - const cwd = await gitBootstrap('fixtures/trash-file'); - const actual = await load({}, {cwd}); +test("ignores unknown keys", async () => { + const cwd = await gitBootstrap("fixtures/trash-file"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', + formatter: "@commitlint/format", extends: [], plugins: {}, rules: { - foo: [RuleConfigSeverity.Warning, 'always', 'bar'], - baz: [RuleConfigSeverity.Warning, 'always', 'bar'], + foo: [RuleConfigSeverity.Warning, "always", "bar"], + baz: [RuleConfigSeverity.Warning, "always", "bar"], }, }); }); -test('ignores unknown keys recursively', async () => { - const cwd = await gitBootstrap('fixtures/trash-extend'); - const actual = await load({}, {cwd}); +test("ignores unknown keys recursively", async () => { + const cwd = await gitBootstrap("fixtures/trash-extend"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', - extends: ['./one'], + formatter: "@commitlint/format", + extends: ["./one"], plugins: {}, rules: { - zero: [RuleConfigSeverity.Disabled, 'always', 'zero'], - one: [RuleConfigSeverity.Warning, 'always', 'one'], + zero: [RuleConfigSeverity.Disabled, "always", "zero"], + one: [RuleConfigSeverity.Warning, "always", "one"], }, }); }); -test('find up from given cwd', async () => { - const outer = await fixBootstrap('fixtures/outer-scope'); - await git.init(path.join(outer, 'inner-scope')); - const cwd = path.join(outer, 'inner-scope', 'child-scope'); - const actual = await load({}, {cwd}); +test("find up from given cwd", async () => { + const outer = await fixBootstrap("fixtures/outer-scope"); + await git.init(path.join(outer, "inner-scope")); + const cwd = path.join(outer, "inner-scope", "child-scope"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', + formatter: "@commitlint/format", extends: [], plugins: {}, rules: { - child: [RuleConfigSeverity.Error, 'always', true], - inner: [RuleConfigSeverity.Error, 'always', false], - outer: [RuleConfigSeverity.Error, 'always', false], + child: [RuleConfigSeverity.Error, "always", true], + inner: [RuleConfigSeverity.Error, "always", false], + outer: [RuleConfigSeverity.Error, "always", false], }, }); }); -test('find up config from outside current git repo', async () => { - const outer = await fixBootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - const actual = await load({}, {cwd}); +test("find up config from outside current git repo", async () => { + const outer = await fixBootstrap("fixtures/outer-scope"); + const cwd = await git.init(path.join(outer, "inner-scope")); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: '@commitlint/format', + formatter: "@commitlint/format", extends: [], plugins: {}, rules: { - child: [RuleConfigSeverity.Warning, 'never', false], - inner: [RuleConfigSeverity.Warning, 'never', false], - outer: [RuleConfigSeverity.Warning, 'never', true], + child: [RuleConfigSeverity.Warning, "never", false], + inner: [RuleConfigSeverity.Warning, "never", false], + outer: [RuleConfigSeverity.Warning, "never", true], }, }); }); -test('respects formatter option', async () => { - const cwd = await gitBootstrap('fixtures/formatter'); - const actual = await load({}, {cwd}); +test("respects formatter option", async () => { + const cwd = await gitBootstrap("fixtures/formatter"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: 'commitlint-junit', + formatter: "commitlint-junit", extends: [], plugins: {}, rules: {}, }); }); -test('resolves formatter relative from config directory', async () => { - const cwd = await gitBootstrap('fixtures/formatter-local-module'); - const actual = await load({}, {cwd}); +test("resolves formatter relative from config directory", async () => { + const cwd = await gitBootstrap("fixtures/formatter-local-module"); + const actual = await load({}, { cwd }); expect(actual).toMatchObject({ - formatter: resolveFrom(cwd, './formatters/custom.js'), + formatter: resolveFrom("./formatters/custom.js", cwd), extends: [], plugins: {}, rules: {}, }); }); -test('returns formatter name when unable to resolve from config directory', async () => { - const cwd = await gitBootstrap('fixtures/formatter-local-module'); - const actual = await load({formatter: './doesnt/exists.js'}, {cwd}); +test("returns formatter name when unable to resolve from config directory", async () => { + const cwd = await gitBootstrap("fixtures/formatter-local-module"); + const actual = await load({ formatter: "./doesnt/exists.js" }, { cwd }); expect(actual).toMatchObject({ - formatter: './doesnt/exists.js', + formatter: "./doesnt/exists.js", extends: [], plugins: {}, rules: {}, }); }); -test('does not mutate config module reference', async () => { - const file = 'config/commitlint.config.js'; - const cwd = await gitBootstrap('fixtures/specify-config-file'); +test("does not mutate config module reference", async () => { + const file = "config/commitlint.config.js"; + const cwd = await gitBootstrap("fixtures/specify-config-file"); const rules = { - 'body-case': [RuleConfigSeverity.Warning, 'never', 'camel-case'] as any, + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, }; const configPath = path.join(cwd, file); - const before = JSON.stringify(require(configPath)); - await load({rules}, {cwd, file}); - const after = JSON.stringify(require(configPath)); + + const before = readFileSync(configPath, { encoding: "utf-8" }); + await load({ rules }, { cwd, file }); + const after = readFileSync(configPath, { encoding: "utf-8" }); expect(after).toBe(before); }); -test('resolves parser preset from conventional commits', async () => { - const cwd = await npmBootstrap('fixtures/parser-preset-conventionalcommits'); - const actual = await load({}, {cwd}); +test("resolves parser preset from conventional commits", async () => { + const cwd = await npmBootstrap("fixtures/parser-preset-conventionalcommits"); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); expect(actual.parserPreset!.name).toBe( - 'conventional-changelog-conventionalcommits' + "conventional-changelog-conventionalcommits", ); - expect(typeof actual.parserPreset!.parserOpts).toBe('object'); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( - /^(\w*)(?:\((.*)\))?!?: (.*)$/ + /^(\w*)(?:\((.*)\))?!?: (.*)$/, ); }); -test('resolves parser preset from conventional angular', async () => { - const cwd = await npmBootstrap('fixtures/parser-preset-angular'); - const actual = await load({}, {cwd}); +test("resolves parser preset from conventional angular", async () => { + const cwd = await npmBootstrap("fixtures/parser-preset-angular"); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); - expect(actual.parserPreset!.name).toBe('conventional-changelog-angular'); - expect(typeof actual.parserPreset!.parserOpts).toBe('object'); + expect(actual.parserPreset!.name).toBe("conventional-changelog-angular"); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( - /^(\w*)(?:\((.*)\))?: (.*)$/ + /^(\w*)(?:\((.*)\))?: (.*)$/, ); }); -test('recursive resolves parser preset from conventional atom', async () => { +test("recursive resolves parser preset from conventional atom", async () => { const cwd = await gitBootstrap( - 'fixtures/recursive-parser-preset-conventional-atom' + "fixtures/recursive-parser-preset-conventional-atom", ); await npm.installModules( - path.resolve(cwd, 'first-extended', 'second-extended') + path.resolve(cwd, "first-extended", "second-extended"), ); - const actual = await load({}, {cwd}); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); - expect(actual.parserPreset!.name).toBe('conventional-changelog-atom'); - expect(typeof actual.parserPreset!.parserOpts).toBe('object'); + expect(actual.parserPreset!.name).toBe("conventional-changelog-atom"); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( - /^(:.*?:) (.*)$/ + /^(:.*?:) (.*)$/, ); }); -test('resolves parser preset from conventional commits without factory support', async () => { +test("resolves parser preset from conventional commits without factory support", async () => { const cwd = await npmBootstrap( - 'fixtures/parser-preset-conventional-without-factory' + "fixtures/parser-preset-conventional-without-factory", ); - const actual = await load({}, {cwd}); + const actual = await load({}, { cwd }); expect(actual.parserPreset).toBeDefined(); expect(actual.parserPreset!.name).toBe( - 'conventional-changelog-conventionalcommits' + "conventional-changelog-conventionalcommits", ); - expect(typeof actual.parserPreset!.parserOpts).toBe('object'); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( - /^(\w*)(?:\((.*)\))?!?: (.*)$/ + /^(\w*)(?:\((.*)\))?!?: (.*)$/, ); }); -test('helpUrl should be loaded from the shareable config', async () => { - const cwd = await gitBootstrap('fixtures/help-url'); - const actual = await load({}, {cwd}); +test("helpUrl should be loaded from the shareable config", async () => { + const cwd = await gitBootstrap("fixtures/help-url"); + const actual = await load({}, { cwd }); expect(actual.helpUrl).toStrictEqual( - 'https://github.com/conventional-changelog/commitlint' + "https://github.com/conventional-changelog/commitlint", ); }); -test('default helpUrl should be loaded if not provided in shareable configs', async () => { - const cwd = await gitBootstrap('fixtures/basic'); - const actual = await load({}, {cwd}); +test("default helpUrl should be loaded if not provided in shareable configs", async () => { + const cwd = await gitBootstrap("fixtures/basic"); + const actual = await load({}, { cwd }); expect(actual.helpUrl).toStrictEqual( - 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint' + "https://github.com/conventional-changelog/commitlint/#what-is-commitlint", ); }); diff --git a/@commitlint/load/src/load.ts b/@commitlint/load/src/load.ts index 77c2cb0851..c20f39f245 100644 --- a/@commitlint/load/src/load.ts +++ b/@commitlint/load/src/load.ts @@ -1,25 +1,27 @@ -import path from 'path'; +import path from "node:path"; -import {validateConfig} from '@commitlint/config-validator'; -import executeRule from '@commitlint/execute-rule'; +import { validateConfig } from "@commitlint/config-validator"; +import executeRule from "@commitlint/execute-rule"; import resolveExtends, { resolveFrom, + resolveFromSilent, + resolveGlobalSilent, loadParserPreset, -} from '@commitlint/resolve-extends'; +} from "@commitlint/resolve-extends"; import { LoadOptions, PluginRecords, QualifiedConfig, QualifiedRules, UserConfig, -} from '@commitlint/types'; -import isPlainObject from 'lodash.isplainobject'; -import merge from 'lodash.merge'; -import uniq from 'lodash.uniq'; +} from "@commitlint/types"; +import isPlainObject from "lodash.isplainobject"; +import merge from "lodash.merge"; +import uniq from "lodash.uniq"; -import {loadConfig} from './utils/load-config.js'; -import {loadParserOpts} from './utils/load-parser-opts.js'; -import loadPlugin from './utils/load-plugin.js'; +import { loadConfig } from "./utils/load-config.js"; +import { loadParserOpts } from "./utils/load-parser-opts.js"; +import loadPlugin from "./utils/load-plugin.js"; /** * formatter should be kept as is when unable to resolve it from config directory @@ -34,15 +36,15 @@ const resolveFormatter = (formatter: string, parent?: string): string => { export default async function load( seed: UserConfig = {}, - options: LoadOptions = {} + options: LoadOptions = {}, ): Promise<QualifiedConfig> { - const cwd = typeof options.cwd === 'undefined' ? process.cwd() : options.cwd; + const cwd = typeof options.cwd === "undefined" ? process.cwd() : options.cwd; const loaded = await loadConfig(cwd, options.file); const baseDirectory = loaded?.filepath ? path.dirname(loaded.filepath) : cwd; const configFilePath = loaded?.filepath; let config: UserConfig = {}; if (loaded) { - validateConfig(loaded.filepath || '', loaded.config); + validateConfig(loaded.filepath || "", loaded.config); config = loaded.config; } @@ -54,14 +56,14 @@ export default async function load( rules: {}, }, config, - seed + seed, ); // Resolve parserPreset key - if (typeof config.parserPreset === 'string') { + if (typeof config.parserPreset === "string") { const resolvedParserPreset = resolveFrom( config.parserPreset, - configFilePath + configFilePath, ); config.parserPreset = { @@ -72,23 +74,23 @@ export default async function load( // Resolve extends key const extended = await resolveExtends(config, { - prefix: 'commitlint-config', + prefix: "commitlint-config", cwd: baseDirectory, parserPreset: await config.parserPreset, }); - if (!extended.formatter || typeof extended.formatter !== 'string') { - extended.formatter = '@commitlint/format'; + if (!extended.formatter || typeof extended.formatter !== "string") { + extended.formatter = "@commitlint/format"; } let plugins: PluginRecords = {}; if (Array.isArray(extended.plugins)) { for (const plugin of uniq(extended.plugins)) { - if (typeof plugin === 'string') { + if (typeof plugin === "string") { plugins = await loadPlugin( plugins, plugin, - process.env.DEBUG === 'true' + process.env.DEBUG === "true", ); } else { plugins.local = plugin; @@ -98,7 +100,7 @@ export default async function load( const rules = ( await Promise.all( - Object.entries(extended.rules || {}).map((entry) => executeRule(entry)) + Object.entries(extended.rules || {}).map((entry) => executeRule(entry)), ) ).reduce<QualifiedRules>((registry, item) => { // type of `item` can be null, but Object.entries always returns key pair @@ -108,11 +110,11 @@ export default async function load( }, {}); const helpUrl = - typeof extended.helpUrl === 'string' + typeof extended.helpUrl === "string" ? extended.helpUrl - : typeof config.helpUrl === 'string' - ? config.helpUrl - : 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint'; + : typeof config.helpUrl === "string" + ? config.helpUrl + : "https://github.com/conventional-changelog/commitlint/#what-is-commitlint"; const prompt = extended.prompt && isPlainObject(extended.prompt) ? extended.prompt : {}; @@ -120,9 +122,9 @@ export default async function load( return { extends: Array.isArray(extended.extends) ? extended.extends - : typeof extended.extends === 'string' - ? [extended.extends] - : [], + : typeof extended.extends === "string" + ? [extended.extends] + : [], // Resolve config-relative formatter module formatter: resolveFormatter(extended.formatter, configFilePath), // Resolve parser-opts from preset @@ -135,3 +137,5 @@ export default async function load( prompt, }; } + +export { resolveFrom, resolveFromSilent, resolveGlobalSilent }; diff --git a/@commitlint/load/src/utils/load-config.ts b/@commitlint/load/src/utils/load-config.ts index a5624620ff..0db5148ae6 100644 --- a/@commitlint/load/src/utils/load-config.ts +++ b/@commitlint/load/src/utils/load-config.ts @@ -1,13 +1,13 @@ -import {existsSync, readFileSync} from 'fs'; -import path from 'path'; +import { existsSync, readFileSync } from "node:fs"; +import path from "node:path"; import { cosmiconfig, defaultLoadersSync, type Loader, defaultLoaders, -} from 'cosmiconfig'; -import {TypeScriptLoader} from 'cosmiconfig-typescript-loader'; +} from "cosmiconfig"; +import { TypeScriptLoader } from "cosmiconfig-typescript-loader"; export interface LoadConfigResult { config: unknown; @@ -15,11 +15,12 @@ export interface LoadConfigResult { isEmpty?: boolean; } -const moduleName = 'commitlint'; +const moduleName = "commitlint"; +const searchStrategy = "global"; export async function loadConfig( cwd: string, - configPath?: string + configPath?: string, ): Promise<LoadConfigResult | null> { let tsLoaderInstance: Loader | undefined; const tsLoader: Loader = (...args) => { @@ -37,10 +38,12 @@ export async function loadConfig( : defaultLoadersSync; const explorer = cosmiconfig(moduleName, { + searchStrategy, searchPlaces: [ // cosmiconfig overrides default searchPlaces if any new search place is added (For e.g. `*.ts` files), // we need to manually merge default searchPlaces from https://github.com/davidtheclark/cosmiconfig#searchplaces - 'package.json', + "package.json", + "package.yaml", `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, @@ -59,10 +62,10 @@ export async function loadConfig( `${moduleName}.config.cts`, ], loaders: { - '.ts': tsLoader, - '.cts': tsLoader, - '.cjs': loaders['.cjs'], - '.js': loaders['.js'], + ".ts": tsLoader, + ".cts": tsLoader, + ".cjs": loaders[".cjs"], + ".js": loaders[".js"], }, }); @@ -83,8 +86,8 @@ export async function loadConfig( // - Resolution: https://github.com/nodejs/node/pull/48510 (Node v20.8.0) export const isDynamicAwaitSupported = () => { const [major, minor] = process.version - .replace('v', '') - .split('.') + .replace("v", "") + .split(".") .map((val) => parseInt(val)); return major >= 20 && minor >= 8; @@ -92,12 +95,12 @@ export const isDynamicAwaitSupported = () => { // Is the given directory set up to use ESM (ECMAScript Modules)? export const isEsmModule = (cwd: string) => { - const packagePath = path.join(cwd, 'package.json'); + const packagePath = path.join(cwd, "package.json"); if (!existsSync(packagePath)) { return false; } - const packageJSON = readFileSync(packagePath, {encoding: 'utf-8'}); - return JSON.parse(packageJSON)?.type === 'module'; + const packageJSON = readFileSync(packagePath, { encoding: "utf-8" }); + return JSON.parse(packageJSON)?.type === "module"; }; diff --git a/@commitlint/load/src/utils/load-parser-opts.test.ts b/@commitlint/load/src/utils/load-parser-opts.test.ts index b7e7989d74..2575aa7a14 100644 --- a/@commitlint/load/src/utils/load-parser-opts.test.ts +++ b/@commitlint/load/src/utils/load-parser-opts.test.ts @@ -1,7 +1,7 @@ -import {test, expect} from 'vitest'; -import {loadParserOpts} from './load-parser-opts.js'; +import { test, expect } from "vitest"; +import { loadParserOpts } from "./load-parser-opts.js"; -test('handles a plain preset', async () => { +test("handles a plain preset", async () => { const preset = { parserOpts: {}, }; @@ -9,18 +9,18 @@ test('handles a plain preset', async () => { expect(await loadParserOpts(preset)).toEqual(preset); }); -test('handles primitive values', async () => { - expect(await loadParserOpts('')).toEqual(undefined); +test("handles primitive values", async () => { + expect(await loadParserOpts("")).toEqual(undefined); expect(await loadParserOpts(undefined)).toEqual(undefined); }); -test('handles an object without any parserOpts', async () => { +test("handles an object without any parserOpts", async () => { const preset = {}; expect(await loadParserOpts(preset)).toEqual(preset); }); -test('handles nested parserOpts', async () => { - const opts = {a: 4}; +test("handles nested parserOpts", async () => { + const opts = { a: 4 }; // plain nested parserOpts let loaded = await loadParserOpts({ @@ -28,7 +28,7 @@ test('handles nested parserOpts', async () => { parserOpts: opts, }, }); - expect(loaded).toHaveProperty('parserOpts', opts); + expect(loaded).toHaveProperty("parserOpts", opts); // async nested parserOpts loaded = await loadParserOpts({ @@ -36,10 +36,10 @@ test('handles nested parserOpts', async () => { parserOpts: opts, }), }); - expect(loaded).toHaveProperty('parserOpts', opts); + expect(loaded).toHaveProperty("parserOpts", opts); }); -test('runs a sync function which returns the preset', async () => { +test("runs a sync function which returns the preset", async () => { const preset = {}; const fn = () => preset; const opts = await loadParserOpts(fn); @@ -47,7 +47,7 @@ test('runs a sync function which returns the preset', async () => { expect(opts).toEqual(preset); }); -test('runs an async function which returns the preset', async () => { +test("runs an async function which returns the preset", async () => { const preset = {}; const fn = async () => preset; const opts = await loadParserOpts(fn); diff --git a/@commitlint/load/src/utils/load-parser-opts.ts b/@commitlint/load/src/utils/load-parser-opts.ts index 11bcdcb119..34957e10d4 100644 --- a/@commitlint/load/src/utils/load-parser-opts.ts +++ b/@commitlint/load/src/utils/load-parser-opts.ts @@ -1,19 +1,19 @@ -import {ParserPreset} from '@commitlint/types'; +import { ParserPreset } from "@commitlint/types"; type Awaitable<T> = T | PromiseLike<T>; function isObjectLike(obj: unknown): obj is Record<string, unknown> { - return Boolean(obj) && typeof obj === 'object'; // typeof null === 'object' + return Boolean(obj) && typeof obj === "object"; // typeof null === 'object' } function isParserOptsFunction<T extends ParserPreset>( - obj: T + obj: T, ): obj is T & { parserOpts: ( - cb: (_: never, parserOpts: Record<string, unknown>) => unknown + cb: (_: never, parserOpts: Record<string, unknown>) => unknown, ) => Record<string, unknown> | undefined; } { - return typeof obj.parserOpts === 'function'; + return typeof obj.parserOpts === "function"; } export async function loadParserOpts( @@ -21,13 +21,13 @@ export async function loadParserOpts( | string | Awaitable<ParserPreset> | (() => Awaitable<ParserPreset>) - | undefined + | undefined, ): Promise<ParserPreset | undefined> { - if (typeof pendingParser === 'function') { + if (typeof pendingParser === "function") { return loadParserOpts(pendingParser()); } - if (!pendingParser || typeof pendingParser !== 'object') { + if (!pendingParser || typeof pendingParser !== "object") { return undefined; } // Await for the module, loaded with require @@ -39,7 +39,7 @@ export async function loadParserOpts( } // Pull nested parserOpts, might happen if overwritten with a module in main config - if (typeof parser.parserOpts === 'object') { + if (typeof parser.parserOpts === "object") { // Await parser opts if applicable parser.parserOpts = await parser.parserOpts; if ( @@ -54,8 +54,8 @@ export async function loadParserOpts( // Create parser opts from factory if ( isParserOptsFunction(parser) && - typeof parser.name === 'string' && - parser.name.startsWith('conventional-changelog-') + typeof parser.name === "string" && + parser.name.startsWith("conventional-changelog-") ) { return new Promise((resolve) => { const result = parser.parserOpts((_: never, opts) => { diff --git a/@commitlint/load/src/utils/load-plugin.test.ts b/@commitlint/load/src/utils/load-plugin.test.ts index 59ec7a3b13..cfb0193b85 100644 --- a/@commitlint/load/src/utils/load-plugin.test.ts +++ b/@commitlint/load/src/utils/load-plugin.test.ts @@ -1,116 +1,116 @@ -import {test, expect, vi} from 'vitest'; -import {AsyncRule, Plugin, Rule, SyncRule} from '@commitlint/types'; +import { test, expect, vi } from "vitest"; +import { AsyncRule, Plugin, Rule, SyncRule } from "@commitlint/types"; -import loadPlugin from './load-plugin.js'; +import loadPlugin from "./load-plugin.js"; -vi.mock('commitlint-plugin-example', () => ({example: true})); +vi.mock("commitlint-plugin-example", () => ({ example: true })); -vi.mock('@scope/commitlint-plugin-example', () => ({scope: true})); +vi.mock("@scope/commitlint-plugin-example", () => ({ scope: true })); -vi.mock('commitlint-plugin-rule', (): Plugin => { +vi.mock("commitlint-plugin-rule", (): Plugin => { const rule: Rule<number> = (_parsed, when, _value) => { - return [when === 'never']; + return [when === "never"]; }; - return {rules: {rule}}; + return { rules: { rule } }; }); -vi.mock('commitlint-plugin-sync-rule', (): Plugin => { +vi.mock("commitlint-plugin-sync-rule", (): Plugin => { const syncRule: SyncRule<number> = (_parsed, when, _value) => { - return [when === 'never']; + return [when === "never"]; }; - return {rules: {syncRule}}; + return { rules: { syncRule } }; }); -vi.mock('commitlint-plugin-async-rule', (): Plugin => { +vi.mock("commitlint-plugin-async-rule", (): Plugin => { const asyncRule: AsyncRule<number> = (_parsed, when, _value) => { - return new Promise(() => [when === 'never']); + return new Promise(() => [when === "never"]); }; - return {rules: {asyncRule}}; + return { rules: { asyncRule } }; }); -test('should load a plugin when referenced by short name', async () => { - const plugins = await loadPlugin({}, 'example'); - expect(plugins['example']).toBe( +test("should load a plugin when referenced by short name", async () => { + const plugins = await loadPlugin({}, "example"); + expect(plugins["example"]).toBe( // @ts-expect-error -- mocked module - await import('commitlint-plugin-example') + await import("commitlint-plugin-example"), ); }); -test('should load a plugin when referenced by long name', async () => { - const plugins = await loadPlugin({}, 'commitlint-plugin-example'); - expect(plugins['example']).toBe( +test("should load a plugin when referenced by long name", async () => { + const plugins = await loadPlugin({}, "commitlint-plugin-example"); + expect(plugins["example"]).toBe( // @ts-expect-error -- mocked module - await import('commitlint-plugin-example') + await import("commitlint-plugin-example"), ); }); -test('should load a plugin with a rule', async () => { - const plugins = await loadPlugin({}, 'commitlint-plugin-rule'); - expect(plugins['rule']).toBe( +test("should load a plugin with a rule", async () => { + const plugins = await loadPlugin({}, "commitlint-plugin-rule"); + expect(plugins["rule"]).toBe( // @ts-expect-error -- mocked module - await import('commitlint-plugin-rule') + await import("commitlint-plugin-rule"), ); }); -test('should load a plugin with a sync rule', async () => { - const plugins = await loadPlugin({}, 'commitlint-plugin-sync-rule'); - expect(plugins['sync-rule']).toBe( +test("should load a plugin with a sync rule", async () => { + const plugins = await loadPlugin({}, "commitlint-plugin-sync-rule"); + expect(plugins["sync-rule"]).toBe( // @ts-expect-error -- mocked module - await import('commitlint-plugin-sync-rule') + await import("commitlint-plugin-sync-rule"), ); }); -test('should load a plugin with an async rule', async () => { - const plugins = await loadPlugin({}, 'commitlint-plugin-async-rule'); - expect(plugins['async-rule']).toBe( +test("should load a plugin with an async rule", async () => { + const plugins = await loadPlugin({}, "commitlint-plugin-async-rule"); + expect(plugins["async-rule"]).toBe( // @ts-expect-error -- mocked module - await import('commitlint-plugin-async-rule') + await import("commitlint-plugin-async-rule"), ); }); -test('should throw an error when a plugin has whitespace', async () => { - await expect(() => loadPlugin({}, 'whitespace ')).rejects.toThrow( - "Whitespace found in plugin name 'whitespace '" +test("should throw an error when a plugin has whitespace", async () => { + await expect(() => loadPlugin({}, "whitespace ")).rejects.toThrow( + "Whitespace found in plugin name 'whitespace '", ); - await expect(() => loadPlugin({}, 'whitespace\t')).rejects.toThrow( - 'Whitespace found in plugin name' + await expect(() => loadPlugin({}, "whitespace\t")).rejects.toThrow( + "Whitespace found in plugin name", ); - await expect(() => loadPlugin({}, 'whitespace\n')).rejects.toThrow( - 'Whitespace found in plugin name' + await expect(() => loadPlugin({}, "whitespace\n")).rejects.toThrow( + "Whitespace found in plugin name", ); - await expect(() => loadPlugin({}, 'whitespace\r')).rejects.toThrow( - 'Whitespace found in plugin name' + await expect(() => loadPlugin({}, "whitespace\r")).rejects.toThrow( + "Whitespace found in plugin name", ); }); test("should throw an error when a plugin doesn't exist", () => - expect(() => loadPlugin({}, 'nonexistentplugin')).rejects.toThrow( - 'Failed to load plugin' + expect(() => loadPlugin({}, "nonexistentplugin")).rejects.toThrow( + "Failed to load plugin", )); -test('should load a scoped plugin when referenced by short name', async () => { - const plugins = await loadPlugin({}, '@scope/example'); - expect(plugins['@scope/example']).toBe( +test("should load a scoped plugin when referenced by short name", async () => { + const plugins = await loadPlugin({}, "@scope/example"); + expect(plugins["@scope/example"]).toBe( // @ts-expect-error -- mocked module - await import('@scope/commitlint-plugin-example') + await import("@scope/commitlint-plugin-example"), ); }); -test('should load a scoped plugin when referenced by long name', async () => { - const plugins = await loadPlugin({}, '@scope/commitlint-plugin-example'); - expect(plugins['@scope/example']).toBe( +test("should load a scoped plugin when referenced by long name", async () => { + const plugins = await loadPlugin({}, "@scope/commitlint-plugin-example"); + expect(plugins["@scope/example"]).toBe( // @ts-expect-error -- mocked module - await import('@scope/commitlint-plugin-example') + await import("@scope/commitlint-plugin-example"), ); }); /* when referencing a scope plugin and omitting @scope/ */ test("should load a scoped plugin when referenced by short name, but should not get the plugin if '@scope/' is omitted", async () => { - const plugins = await loadPlugin({}, '@scope/example'); - expect(plugins['example']).toBeUndefined(); + const plugins = await loadPlugin({}, "@scope/example"); + expect(plugins["example"]).toBeUndefined(); }); test("should load a scoped plugin when referenced by long name, but should not get the plugin if '@scope/' is omitted", async () => { - const plugins = await loadPlugin({}, '@scope/commitlint-plugin-example'); - expect(plugins['example']).toBeUndefined(); + const plugins = await loadPlugin({}, "@scope/commitlint-plugin-example"); + expect(plugins["example"]).toBeUndefined(); }); diff --git a/@commitlint/load/src/utils/load-plugin.ts b/@commitlint/load/src/utils/load-plugin.ts index f13a6d7269..03e2e68e96 100644 --- a/@commitlint/load/src/utils/load-plugin.ts +++ b/@commitlint/load/src/utils/load-plugin.ts @@ -1,28 +1,28 @@ -import {createRequire} from 'module'; -import path from 'path'; -import {fileURLToPath, pathToFileURL} from 'url'; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; -import {Plugin, PluginRecords} from '@commitlint/types'; -import chalk from 'chalk'; +import { Plugin, PluginRecords } from "@commitlint/types"; +import chalk from "chalk"; -import {normalizePackageName, getShorthandName} from './plugin-naming.js'; -import {WhitespacePluginError, MissingPluginError} from './plugin-errors.js'; +import { normalizePackageName, getShorthandName } from "./plugin-naming.js"; +import { WhitespacePluginError, MissingPluginError } from "./plugin-errors.js"; const require = createRequire(import.meta.url); -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); const dynamicImport = async <T>(id: string): Promise<T> => { const imported = await import( path.isAbsolute(id) ? pathToFileURL(id).toString() : id ); - return ('default' in imported && imported.default) || imported; + return ("default" in imported && imported.default) || imported; }; export default async function loadPlugin( plugins: PluginRecords, pluginName: string, - debug: boolean = false + debug: boolean = false, ): Promise<PluginRecords> { const longName = normalizePackageName(pluginName); const shortName = getShorthandName(longName); @@ -47,10 +47,10 @@ export default async function loadPlugin( // If the plugin can't be resolved, display the missing plugin error (usually a config or install error) console.error(chalk.red(`Failed to load plugin ${longName}.`)); - const message = error?.message || 'Unknown error occurred'; + const message = error?.message || "Unknown error occurred"; throw new MissingPluginError(pluginName, message, { pluginName: longName, - commitlintPath: path.resolve(__dirname, '../..'), + commitlintPath: path.resolve(__dirname, "../.."), }); } @@ -76,8 +76,8 @@ export default async function loadPlugin( console.log( chalk.blue( - `Loaded plugin ${pluginName} (${loadedPluginAndVersion}) (from ${resolvedPath})` - ) + `Loaded plugin ${pluginName} (${loadedPluginAndVersion}) (from ${resolvedPath})`, + ), ); } diff --git a/@commitlint/load/src/utils/plugin-errors.ts b/@commitlint/load/src/utils/plugin-errors.ts index 4c7b1f0e29..2f1036ec80 100644 --- a/@commitlint/load/src/utils/plugin-errors.ts +++ b/@commitlint/load/src/utils/plugin-errors.ts @@ -1,7 +1,7 @@ export class WhitespacePluginError extends Error { __proto__ = Error; - public messageTemplate: string = 'whitespace-found'; + public messageTemplate: string = "whitespace-found"; public messageData: any = {}; constructor(pluginName?: string, data: any = {}) { @@ -16,10 +16,10 @@ export class WhitespacePluginError extends Error { export class MissingPluginError extends Error { __proto__ = Error; - public messageTemplate: string = 'plugin-missing'; + public messageTemplate: string = "plugin-missing"; public messageData: any; - constructor(pluginName?: string, errorMessage: string = '', data: any = {}) { + constructor(pluginName?: string, errorMessage: string = "", data: any = {}) { super(`Failed to load plugin ${pluginName}: ${errorMessage}`); this.messageData = data; diff --git a/@commitlint/load/src/utils/plugin-naming.ts b/@commitlint/load/src/utils/plugin-naming.ts index ecf42784b4..9ec5254eff 100644 --- a/@commitlint/load/src/utils/plugin-naming.ts +++ b/@commitlint/load/src/utils/plugin-naming.ts @@ -1,14 +1,14 @@ -import path from 'path'; +import path from "node:path"; // largely adapted from eslint's plugin system -const NAMESPACE_REGEX = /^@.*\//iu; +const NAMESPACE_REGEX = /^@.*\//u; // In eslint this is a parameter - we don't need to support the extra options -const prefix = 'commitlint-plugin'; +const prefix = "commitlint-plugin"; // Replace Windows with posix style paths function convertPathToPosix(filepath: string) { const normalizedFilepath = path.normalize(filepath); - const posixFilepath = normalizedFilepath.replace(/\\/gu, '/'); + const posixFilepath = normalizedFilepath.replace(/\\/gu, "/"); return posixFilepath; } @@ -27,34 +27,34 @@ export function normalizePackageName(name: string) { * Normalize to Unix first to avoid errors later on. * https://github.com/eslint/eslint/issues/5644 */ - if (normalizedName.indexOf('\\') > -1) { + if (normalizedName.indexOf("\\") > -1) { normalizedName = convertPathToPosix(normalizedName); } - if (normalizedName.charAt(0) === '@') { + if (normalizedName.charAt(0) === "@") { /** * it's a scoped package * package name is the prefix, or just a username */ const scopedPackageShortcutRegex = new RegExp( `^(@[^/]+)(?:/(?:${prefix})?)?$`, - 'u' + "u", ), - scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`, 'u'); + scopedPackageNameRegex = new RegExp(`^${prefix}(?:-|$)`, "u"); if (scopedPackageShortcutRegex.test(normalizedName)) { normalizedName = normalizedName.replace( scopedPackageShortcutRegex, - `$1/${prefix}` + `$1/${prefix}`, ); - } else if (!scopedPackageNameRegex.test(normalizedName.split('/')[1])) { + } else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) { /** * for scoped packages, insert the prefix after the first / unless * the path is already @scope/eslint or @scope/eslint-xxx-yyy */ normalizedName = normalizedName.replace( /^@([^/]+)\/(.*)$/u, - `@$1/${prefix}-$2` + `@$1/${prefix}-$2`, ); } } else if (normalizedName.indexOf(`${prefix}-`) !== 0) { @@ -70,14 +70,14 @@ export function normalizePackageName(name: string) { * @returns {string} The term without prefix. */ export function getShorthandName(fullname: string) { - if (fullname[0] === '@') { - let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, 'u').exec(fullname); + if (fullname[0] === "@") { + let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(fullname); if (matchResult) { return matchResult[1]; } - matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, 'u').exec(fullname); + matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(fullname); if (matchResult) { return `${matchResult[1]}/${matchResult[2]}`; } @@ -94,7 +94,7 @@ export function getShorthandName(fullname: string) { * @returns {string} The namepace of the term if it has one. */ export function getNamespaceFromTerm(term: string) { - const match = term.match(NAMESPACE_REGEX); + const match = NAMESPACE_REGEX.exec(term); - return match ? match[0] : ''; + return match ? match[0] : ""; } diff --git a/@commitlint/load/tsconfig.json b/@commitlint/load/tsconfig.json index 1b645658c1..7ce5e84e02 100644 --- a/@commitlint/load/tsconfig.json +++ b/@commitlint/load/tsconfig.json @@ -8,9 +8,9 @@ "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], "references": [ - {"path": "../execute-rule"}, - {"path": "../resolve-extends"}, - {"path": "../config-validator"}, - {"path": "../types"} + { "path": "../execute-rule" }, + { "path": "../resolve-extends" }, + { "path": "../config-validator" }, + { "path": "../types" } ] } diff --git a/@commitlint/message/CHANGELOG.md b/@commitlint/message/CHANGELOG.md index f4028208de..e5116e368d 100644 --- a/@commitlint/message/CHANGELOG.md +++ b/@commitlint/message/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/message + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/message + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/message/package.json b/@commitlint/message/package.json index 6560632e72..de7fd152e7 100644 --- a/@commitlint/message/package.json +++ b/@commitlint/message/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/message", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,8 +36,8 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/message/src/index.test.ts b/@commitlint/message/src/index.test.ts index 1baa149d66..acfcb49273 100644 --- a/@commitlint/message/src/index.test.ts +++ b/@commitlint/message/src/index.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import message from './index.js'; +import message from "./index.js"; -test('should return an empty string for empty input', () => { - expect(message()).toBe(''); +test("should return an empty string for empty input", () => { + expect(message()).toBe(""); }); -test('should return an empty string for empty input array', () => { - expect(message([])).toBe(''); +test("should return an empty string for empty input array", () => { + expect(message([])).toBe(""); }); -test('should filter falsy values', () => { - expect(message([null, 'some', undefined, 'message', null])).toBe( - 'some message' +test("should filter falsy values", () => { + expect(message([null, "some", undefined, "message", null])).toBe( + "some message", ); }); diff --git a/@commitlint/message/src/index.ts b/@commitlint/message/src/index.ts index 32b2b00c81..c329f09917 100644 --- a/@commitlint/message/src/index.ts +++ b/@commitlint/message/src/index.ts @@ -1,3 +1,3 @@ export default function message(input: (string | null | undefined)[] = []) { - return input.filter(Boolean).join(' '); + return input.filter(Boolean).join(" "); } diff --git a/@commitlint/parse/CHANGELOG.md b/@commitlint/parse/CHANGELOG.md index 34c9f6f2a5..a2e069203e 100644 --- a/@commitlint/parse/CHANGELOG.md +++ b/@commitlint/parse/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/parse + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + + +### Bug Fixes + +* mark `@types/conventional-commits-parser` as dep for `@commitlint/types` ([#3944](https://github.com/conventional-changelog/commitlint/issues/3944)) ([5a01f59](https://github.com/conventional-changelog/commitlint/commit/5a01f59661f0b908802728389631965eb8b49d47)), closes [#3929](https://github.com/conventional-changelog/commitlint/issues/3929) [#3942](https://github.com/conventional-changelog/commitlint/issues/3942) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/parse/README.md b/@commitlint/parse/README.md index be40697885..8021452469 100644 --- a/@commitlint/parse/README.md +++ b/@commitlint/parse/README.md @@ -11,7 +11,7 @@ npm install --save @commitlint/parse ## Use ```js -const parse = require('@commitlint/parse'); +const parse = require("@commitlint/parse"); ``` ## API diff --git a/@commitlint/parse/package.json b/@commitlint/parse/package.json index e3f4f92d4f..97ba942413 100644 --- a/@commitlint/parse/package.json +++ b/@commitlint/parse/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/parse", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,14 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", - "@types/conventional-commits-parser": "^3.0.6" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", + "@types/conventional-commits-parser": "^5.0.0" }, "dependencies": { - "@commitlint/types": "^19.0.0", + "@commitlint/types": "^19.8.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/parse/src/index.test.ts b/@commitlint/parse/src/index.test.ts index cdf82b2dda..8fb892f37c 100644 --- a/@commitlint/parse/src/index.test.ts +++ b/@commitlint/parse/src/index.test.ts @@ -1,23 +1,23 @@ -import {test, expect} from 'vitest'; -import parse from './index.js'; +import { test, expect } from "vitest"; +import parse from "./index.js"; -test('throws when called without params', async () => { - await expect((parse as any)()).rejects.toThrow('Expected a raw commit'); +test("throws when called without params", async () => { + await expect((parse as any)()).rejects.toThrow("Expected a raw commit"); }); -test('throws when called with empty message', async () => { - await expect(parse('')).rejects.toThrow('Expected a raw commit'); +test("throws when called with empty message", async () => { + await expect(parse("")).rejects.toThrow("Expected a raw commit"); }); -test('returns object with raw message', async () => { - const message = 'type(scope): subject'; +test("returns object with raw message", async () => { + const message = "type(scope): subject"; const actual = await parse(message); - expect(actual).toHaveProperty('raw', message); + expect(actual).toHaveProperty("raw", message); }); -test('calls parser with message and passed options', async () => { - const message = 'message'; +test("calls parser with message and passed options", async () => { + const message = "message"; expect.assertions(1); await parse(message, (m: string): any => { @@ -26,25 +26,25 @@ test('calls parser with message and passed options', async () => { }); }); -test('passes object up from parser function', async () => { - const message = 'message'; +test("passes object up from parser function", async () => { + const message = "message"; const result: any = {}; const actual = await parse(message, () => result); expect(actual).toBe(result); }); -test('returns object with expected keys', async () => { - const message = 'message'; +test("returns object with expected keys", async () => { + const message = "message"; const actual = await parse(message); const expected = { body: null, footer: null, - header: 'message', + header: "message", mentions: [], merge: null, notes: [], - raw: 'message', + raw: "message", references: [], revert: null, scope: null, @@ -55,29 +55,29 @@ test('returns object with expected keys', async () => { expect(actual).toMatchObject(expected); }); -test('uses angular grammar', async () => { - const message = 'type(scope): subject'; +test("uses angular grammar", async () => { + const message = "type(scope): subject"; const actual = await parse(message); const expected = { body: null, footer: null, - header: 'type(scope): subject', + header: "type(scope): subject", mentions: [], merge: null, notes: [], - raw: 'type(scope): subject', + raw: "type(scope): subject", references: [], revert: null, - scope: 'scope', - subject: 'subject', - type: 'type', + scope: "scope", + subject: "subject", + type: "type", }; expect(actual).toMatchObject(expected); }); -test('uses custom opts parser', async () => { - const message = 'type(scope)-subject'; +test("uses custom opts parser", async () => { + const message = "type(scope)-subject"; const changelogOpts = { parserOpts: { headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, @@ -87,112 +87,112 @@ test('uses custom opts parser', async () => { const expected = { body: null, footer: null, - header: 'type(scope)-subject', + header: "type(scope)-subject", mentions: [], merge: null, notes: [], - raw: 'type(scope)-subject', + raw: "type(scope)-subject", references: [], revert: null, - scope: 'scope', - subject: 'subject', - type: 'type', + scope: "scope", + subject: "subject", + type: "type", }; expect(actual).toMatchObject(expected); }); -test('does not merge array properties with custom opts', async () => { - const message = 'type: subject'; +test("does not merge array properties with custom opts", async () => { + const message = "type: subject"; const actual = await parse(message, undefined, { headerPattern: /^(.*):\s(.*)$/, - headerCorrespondence: ['type', 'subject'], + headerCorrespondence: ["type", "subject"], }); const expected = { body: null, footer: null, - header: 'type: subject', + header: "type: subject", mentions: [], merge: null, notes: [], - raw: 'type: subject', + raw: "type: subject", references: [], revert: null, - subject: 'subject', - type: 'type', + subject: "subject", + type: "type", }; expect(actual).toMatchObject(expected); }); -test('supports scopes with /', async () => { - const message = 'type(some/scope): subject'; +test("supports scopes with /", async () => { + const message = "type(some/scope): subject"; const actual = await parse(message); - expect(actual.scope).toBe('some/scope'); - expect(actual.subject).toBe('subject'); + expect(actual.scope).toBe("some/scope"); + expect(actual.subject).toBe("subject"); }); -test('supports scopes with / and empty parserOpts', async () => { - const message = 'type(some/scope): subject'; +test("supports scopes with / and empty parserOpts", async () => { + const message = "type(some/scope): subject"; const actual = await parse(message, undefined, {}); - expect(actual.scope).toBe('some/scope'); - expect(actual.subject).toBe('subject'); + expect(actual.scope).toBe("some/scope"); + expect(actual.subject).toBe("subject"); }); -test('ignores comments', async () => { - const message = 'type(some/scope): subject\n# some comment'; +test("ignores comments", async () => { + const message = "type(some/scope): subject\n# some comment"; // @ts-expect-error -- no typings - const changelogOpts = await import('conventional-changelog-angular'); + const changelogOpts = await import("conventional-changelog-angular"); const opts = { ...changelogOpts.parserOpts, - commentChar: '#', + commentChar: "#", }; const actual = await parse(message, undefined, opts); expect(actual.body).toBe(null); expect(actual.footer).toBe(null); - expect(actual.subject).toBe('subject'); + expect(actual.subject).toBe("subject"); }); -test('registers inline #', async () => { +test("registers inline #", async () => { const message = - 'type(some/scope): subject #reference\n# some comment\nthings #reference'; + "type(some/scope): subject #reference\n# some comment\nthings #reference"; // @ts-expect-error -- no typings - const changelogOpts = await import('conventional-changelog-angular'); + const changelogOpts = await import("conventional-changelog-angular"); const opts = { ...changelogOpts.parserOpts, - commentChar: '#', + commentChar: "#", }; const actual = await parse(message, undefined, opts); - expect(actual.subject).toBe('subject #reference'); - expect(actual.body).toBe('things #reference'); + expect(actual.subject).toBe("subject #reference"); + expect(actual.body).toBe("things #reference"); }); -test('keep -side notes- in the body section', async () => { - const header = 'type(some/scope): subject'; +test("keep -side notes- in the body section", async () => { + const header = "type(some/scope): subject"; const body = - 'CI on master branch caught this:\n\n' + - '```\n' + - 'Unhandled Exception:\n' + + "CI on master branch caught this:\n\n" + + "```\n" + + "Unhandled Exception:\n" + "System.AggregateException: One or more errors occurred. (Some problem when connecting to 'api.mycryptoapi.com/eth')\n\n" + - '--- End of stack trace from previous location where exception was thrown ---\n\n' + - 'at GWallet.Backend.FSharpUtil.ReRaise (System.Exception ex) [0x00000] in /Users/runner/work/geewallet/geewallet/src/GWallet.Backend/FSharpUtil.fs:206\n' + - '...\n' + - '```'; + "--- End of stack trace from previous location where exception was thrown ---\n\n" + + "at GWallet.Backend.FSharpUtil.ReRaise (System.Exception ex) [0x00000] in /Users/runner/work/geewallet/geewallet/src/GWallet.Backend/FSharpUtil.fs:206\n" + + "...\n" + + "```"; - const message = header + '\n\n' + body; + const message = header + "\n\n" + body; const actual = await parse(message); expect(actual.body).toBe(body); }); -test('allows separating -side nodes- by setting parserOpts.fieldPattern', async () => { +test("allows separating -side nodes- by setting parserOpts.fieldPattern", async () => { const message = - 'type(scope): subject\n\nbody text\n-authorName-\nrenovate[bot]'; + "type(scope): subject\n\nbody text\n-authorName-\nrenovate[bot]"; const changelogOpts = { parserOpts: { fieldPattern: /^-(.*)-$/, @@ -200,54 +200,54 @@ test('allows separating -side nodes- by setting parserOpts.fieldPattern', async }; const actual = await parse(message, undefined, changelogOpts.parserOpts); - expect(actual.body).toBe('body text'); - expect(actual).toHaveProperty('authorName', 'renovate[bot]'); + expect(actual.body).toBe("body text"); + expect(actual).toHaveProperty("authorName", "renovate[bot]"); }); -test('parses references leading subject', async () => { - const message = '#1 some subject'; +test("parses references leading subject", async () => { + const message = "#1 some subject"; // @ts-expect-error -- no typings - const opts = await import('conventional-changelog-angular'); + const opts = await import("conventional-changelog-angular"); const { references: [actual], } = await parse(message, undefined, opts); - expect(actual.issue).toBe('1'); + expect(actual.issue).toBe("1"); }); -test('parses custom references', async () => { - const message = '#1 some subject PREFIX-2'; - const {references} = await parse(message, undefined, { - issuePrefixes: ['PREFIX-'], +test("parses custom references", async () => { + const message = "#1 some subject PREFIX-2"; + const { references } = await parse(message, undefined, { + issuePrefixes: ["PREFIX-"], }); - expect(references.find((ref) => ref.issue === '1')).toBeFalsy(); - expect(references.find((ref) => ref.issue === '2')).toMatchObject({ + expect(references.find((ref) => ref.issue === "1")).toBeFalsy(); + expect(references.find((ref) => ref.issue === "2")).toMatchObject({ action: null, - issue: '2', + issue: "2", owner: null, - prefix: 'PREFIX-', - raw: '#1 some subject PREFIX-2', + prefix: "PREFIX-", + raw: "#1 some subject PREFIX-2", repository: null, }); }); -test('uses permissive default regex without parser opts', async () => { - const message = 'chore(component,demo): bump'; +test("uses permissive default regex without parser opts", async () => { + const message = "chore(component,demo): bump"; const actual = await parse(message); - expect(actual.scope).toBe('component,demo'); + expect(actual.scope).toBe("component,demo"); }); -test('uses permissive default regex with other parser opts', async () => { - const message = 'chore(component,demo): bump'; - const actual = await parse(message, undefined, {commentChar: '#'}); +test("uses permissive default regex with other parser opts", async () => { + const message = "chore(component,demo): bump"; + const actual = await parse(message, undefined, { commentChar: "#" }); - expect(actual.scope).toBe('component,demo'); + expect(actual.scope).toBe("component,demo"); }); -test('uses restrictive default regex in passed parser opts', async () => { - const message = 'chore(component,demo): bump'; +test("uses restrictive default regex in passed parser opts", async () => { + const message = "chore(component,demo): bump"; const actual = await parse(message, undefined, { headerPattern: /^(\w*)(?:\(([a-z]*)\))?: (.*)$/, }); @@ -256,16 +256,16 @@ test('uses restrictive default regex in passed parser opts', async () => { expect(actual.scope).toBe(null); }); -test('works with chinese scope by default', async () => { - const message = 'fix(面试评价): 测试'; - const actual = await parse(message, undefined, {commentChar: '#'}); +test("works with chinese scope by default", async () => { + const message = "fix(面试评价): 测试"; + const actual = await parse(message, undefined, { commentChar: "#" }); expect(actual.subject).not.toBe(null); expect(actual.scope).not.toBe(null); }); -test('does not work with chinese scopes with incompatible pattern', async () => { - const message = 'fix(面试评价): 测试'; +test("does not work with chinese scopes with incompatible pattern", async () => { + const message = "fix(面试评价): 测试"; const actual = await parse(message, undefined, { headerPattern: /^(\w*)(?:\(([a-z]*)\))?: (.*)$/, }); diff --git a/@commitlint/parse/src/index.ts b/@commitlint/parse/src/index.ts index 7490fc88ec..86173827a7 100644 --- a/@commitlint/parse/src/index.ts +++ b/@commitlint/parse/src/index.ts @@ -1,13 +1,13 @@ -import type {Parser} from '@commitlint/types'; +import type { Parser } from "@commitlint/types"; -import {type Commit, type Options, sync} from 'conventional-commits-parser'; +import { type Commit, type Options, sync } from "conventional-commits-parser"; // @ts-expect-error -- no typings -import defaultChangelogOpts from 'conventional-changelog-angular'; +import defaultChangelogOpts from "conventional-changelog-angular"; export async function parse( message: string, parser: Parser = sync, - parserOpts?: Options + parserOpts?: Options, ): Promise<Commit> { const preset = await defaultChangelogOpts(); const defaultOpts = preset.parserOpts; diff --git a/@commitlint/parse/tsconfig.json b/@commitlint/parse/tsconfig.json index 119e645565..d691164788 100644 --- a/@commitlint/parse/tsconfig.json +++ b/@commitlint/parse/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}] + "references": [{ "path": "../types" }] } diff --git a/@commitlint/prompt-cli/CHANGELOG.md b/@commitlint/prompt-cli/CHANGELOG.md index e97290aabd..b0145b9717 100644 --- a/@commitlint/prompt-cli/CHANGELOG.md +++ b/@commitlint/prompt-cli/CHANGELOG.md @@ -3,6 +3,140 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.3.1](https://github.com/conventional-changelog/commitlint/compare/v19.3.0...v19.3.1) (2024-05-13) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package @commitlint/prompt-cli + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/prompt-cli/cli.js b/@commitlint/prompt-cli/cli.js index 36f45ef90e..7ab4aa8181 100755 --- a/@commitlint/prompt-cli/cli.js +++ b/@commitlint/prompt-cli/cli.js @@ -1,7 +1,7 @@ #!/usr/bin/env node -import {prompter} from '@commitlint/prompt'; -import {execa} from 'execa'; -import inquirer from 'inquirer'; +import { prompter } from "@commitlint/prompt"; +import inquirer from "inquirer"; +import { x } from "tinyexec"; main().catch((err) => { setTimeout(() => { @@ -14,7 +14,7 @@ function main() { .then((empty) => { if (empty) { console.log( - `Nothing to commit. Stage your changes via "git add" execute "commit" again` + `Nothing to commit. Stage your changes via "git add" execute "commit" again`, ); process.exit(1); } @@ -23,11 +23,11 @@ function main() { } function isStageEmpty() { - return execa('git', ['diff', '--cached']).then((r) => r.stdout === ''); + return x("git", ["diff", "--cached"]).then((r) => r.stdout === ""); } function commit(message) { - const c = execa('git', ['commit', '-m', message]); - c.stdout.pipe(process.stdout); - c.stderr.pipe(process.stderr); + const result = x("git", ["commit", "-m", message]); + result.process.stdout.pipe(process.stdout); + result.process.stderr.pipe(process.stderr); } diff --git a/@commitlint/prompt-cli/cli.test.js b/@commitlint/prompt-cli/cli.test.js index 4414ace62c..d1bfc50283 100644 --- a/@commitlint/prompt-cli/cli.test.js +++ b/@commitlint/prompt-cli/cli.test.js @@ -1,26 +1,31 @@ -import {test, expect} from 'vitest'; -import {createRequire} from 'module'; -import {git} from '@commitlint/test'; -import {execa} from 'execa'; +import { test, expect } from "vitest"; +import { createRequire } from "node:module"; +import { git } from "@commitlint/test"; +import { x } from "tinyexec"; const require = createRequire(import.meta.url); -const bin = require.resolve('./cli.js'); +const bin = require.resolve("./cli.js"); const cli = (args, options) => { - return (input = '') => { - return execa(bin, args, { - cwd: options.cwd, - env: options.env, - input: input, - reject: false, + return (input = "") => { + const result = x(bin, args, { + nodeOptions: { + cwd: options.cwd, + env: options.env, + }, }); + + result.process.stdin.write(input); + result.process.stdin.end(); + + return result; }; }; -test('should print warning if stage is empty', async () => { +test("should print warning if stage is empty", async () => { const cwd = await git.bootstrap(); - const actual = await cli([], {cwd})('foo: bar'); - expect(actual.stdout).toContain('Nothing to commit.'); - expect(actual.stderr).toBe(''); + const actual = await cli([], { cwd })("foo: bar"); + expect(actual.stdout).toContain("Nothing to commit."); + expect(actual.stderr).toBe(""); }, 10000); diff --git a/@commitlint/prompt-cli/package.json b/@commitlint/prompt-cli/package.json index 9e58df3d3d..6b881a8912 100644 --- a/@commitlint/prompt-cli/package.json +++ b/@commitlint/prompt-cli/package.json @@ -1,8 +1,9 @@ { "name": "@commitlint/prompt-cli", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "commit prompt using commitlint.config.js", + "main": "cli.js", "files": [ "cli.js" ], @@ -33,13 +34,13 @@ "node": ">=v18" }, "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/prompt": "^19.0.0", - "execa": "^8.0.1", - "inquirer": "^9.2.15" + "@commitlint/prompt": "^19.8.0", + "inquirer": "^9.2.15", + "tinyexec": "^1.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/prompt/CHANGELOG.md b/@commitlint/prompt/CHANGELOG.md index a1659de718..b5f42ffcb5 100644 --- a/@commitlint/prompt/CHANGELOG.md +++ b/@commitlint/prompt/CHANGELOG.md @@ -3,6 +3,140 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.3.1](https://github.com/conventional-changelog/commitlint/compare/v19.3.0...v19.3.1) (2024-05-13) + + +### Bug Fixes + +* **prompt:** prompt does not respect [body-leading-blank] setting ([#4066](https://github.com/conventional-changelog/commitlint/issues/4066)) ([3f1f44d](https://github.com/conventional-changelog/commitlint/commit/3f1f44d9cbb93438d01cfd79f9b71659411e126d)) + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/prompt + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package @commitlint/prompt + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/prompt/package.json b/@commitlint/prompt/package.json index e513e817cb..3d05e34d9f 100644 --- a/@commitlint/prompt/package.json +++ b/@commitlint/prompt/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/prompt", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "commitizen prompt using commitlint.config.js", "main": "./lib/index.js", "files": [ @@ -38,18 +38,18 @@ "node": ">=v18" }, "devDependencies": { - "@commitlint/config-angular": "^19.0.0", + "@commitlint/config-angular": "^19.8.0", "@commitlint/types": "^14.0.0", - "@commitlint/utils": "^19.0.0", + "@commitlint/utils": "^19.8.0", "@types/inquirer": "^9.0.7", "commitizen": "^4.2.4" }, "dependencies": { - "@commitlint/ensure": "^19.0.0", - "@commitlint/load": "^19.0.0", - "@commitlint/types": "^19.0.0", + "@commitlint/ensure": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/types": "^19.8.0", "chalk": "^5.3.0", "inquirer": "^9.2.15" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/prompt/src/index.ts b/@commitlint/prompt/src/index.ts index 22f3145c88..2985ec0fc6 100644 --- a/@commitlint/prompt/src/index.ts +++ b/@commitlint/prompt/src/index.ts @@ -1,6 +1,6 @@ -import inquirer from 'inquirer'; +import inquirer from "inquirer"; -import {input} from './input.js'; +import { input } from "./input.js"; type Commit = (input: string) => void; diff --git a/@commitlint/prompt/src/input.test.ts b/@commitlint/prompt/src/input.test.ts index f15c39424a..20d3e9572a 100644 --- a/@commitlint/prompt/src/input.test.ts +++ b/@commitlint/prompt/src/input.test.ts @@ -1,78 +1,110 @@ /// <reference path="./inquirer/inquirer.d.ts" /> -import {test, expect, vi} from 'vitest'; +import { expect, test, vi } from "vitest"; // @ts-expect-error -- no typings -import config from '@commitlint/config-angular'; -import chalk from 'chalk'; -import {Answers, DistinctQuestion, PromptModule} from 'inquirer'; +import config from "@commitlint/config-angular"; +import chalk from "chalk"; +import { + Answers, + DistinctQuestion, + InputCustomOptions, + PromptModule, +} from "inquirer"; -import {input} from './input.js'; +import { input } from "./input.js"; -vi.mock('@commitlint/load', () => ({ - default: () => config, +const testConfig = { + parserPreset: config.parserPreset, + rules: { + ...config.rules, + }, +}; + +vi.mock("@commitlint/load", () => ({ + default: () => testConfig, })); -test('should work with all fields filled', async () => { +test("should work with all fields filled", async () => { const prompt = stub({ - 'input-custom': { - type: 'fix', - scope: 'test', - subject: 'subject', - body: 'body', - footer: 'footer', + "input-custom": { + type: "fix", + scope: "test", + subject: "subject", + body: "body", + footer: "footer", }, }); const message = await input(prompt); - expect(message).toEqual('fix(test): subject\n' + 'body\n' + 'footer'); + expect(message).toEqual("fix(test): subject\n" + "\nbody\n" + "\nfooter"); }); -test('should work without scope', async () => { +test("should not add leading blank line to body and footer if rules are disabled", async () => { + testConfig.rules["body-leading-blank"] = ["1", "never"]; + testConfig.rules["footer-leading-blank"] = ["1", "never"]; const prompt = stub({ - 'input-custom': { - type: 'fix', - scope: '', - subject: 'subject', - body: 'body', - footer: 'footer', + "input-custom": { + type: "fix", + scope: "test", + subject: "subject", + body: "body", + footer: "footer", }, }); const message = await input(prompt); - expect(message).toEqual('fix: subject\n' + 'body\n' + 'footer'); + expect(message).toEqual("fix(test): subject\n" + "body\n" + "footer"); + // reset config mock + testConfig.rules["body-leading-blank"] = config.rules["body-leading-blank"]; + testConfig.rules["footer-leading-blank"] = + config.rules["footer-leading-blank"]; }); -test('should fail without type', async () => { - const spy = vi.spyOn(console, 'error'); +test("should work without scope", async () => { const prompt = stub({ - 'input-custom': { - type: '', - scope: '', - subject: '', - body: '', - footer: '', + "input-custom": { + type: "fix", + scope: "", + subject: "subject", + body: "body", + footer: "footer", }, }); const message = await input(prompt); - expect(message).toEqual(''); + expect(message).toEqual("fix: subject\n" + "\nbody\n" + "\nfooter"); +}); + +test("should fail without type", async () => { + const spy = vi.spyOn(console, "error"); + const prompt = stub({ + "input-custom": { + type: "", + scope: "", + subject: "", + body: "", + footer: "", + }, + }); + const message = await input(prompt); + expect(message).toEqual(""); expect(console.error).toHaveBeenCalledTimes(1); expect(console.error).toHaveBeenLastCalledWith( - new Error(`⚠ ${chalk.bold('type')} may not be empty.`) + new Error(`⚠ ${chalk.bold("type")} may not be empty.`), ); spy.mockRestore(); }); function stub(config: Record<string, Record<string, unknown>>): PromptModule { const prompt = async ( - questions: DistinctQuestion | DistinctQuestion[] + questions: DistinctQuestion | DistinctQuestion[], ): Promise<any> => { const result: Answers = {}; const resolvedConfig = Array.isArray(questions) ? questions : [questions]; for (const promptConfig of resolvedConfig) { - const configType = promptConfig.type || 'input'; + const configType = promptConfig.type || "input"; const questions = config[configType]; if (!questions) { throw new Error(`Unexpected config type: ${configType}`); } - const answer = questions[promptConfig.name!]; + let answer = questions[promptConfig.name!]; if (answer == null) { throw new Error(`Unexpected config name: ${promptConfig.name}`); } @@ -83,7 +115,11 @@ function stub(config: Record<string, Record<string, unknown>>): PromptModule { throw new Error(validationResult || undefined); } } - + const forceLeadingBlankFn = (promptConfig as InputCustomOptions) + .forceLeadingBlankFn; + if (forceLeadingBlankFn) { + answer = forceLeadingBlankFn(answer as string); + } result[promptConfig.name!] = answer; } return result; diff --git a/@commitlint/prompt/src/input.ts b/@commitlint/prompt/src/input.ts index d0bbfe90e2..d2db897fe2 100644 --- a/@commitlint/prompt/src/input.ts +++ b/@commitlint/prompt/src/input.ts @@ -1,12 +1,12 @@ -import load from '@commitlint/load'; -import type {DistinctQuestion, PromptModule} from 'inquirer'; +import load from "@commitlint/load"; +import type { DistinctQuestion, PromptModule } from "inquirer"; -import format from './library/format.js'; -import getPrompt from './library/get-prompt.js'; -import settings from './settings.js'; -import type {InputSetting, Result} from './library/types.js'; -import {getHasName, getMaxLength, getRules} from './library/utils.js'; -import InputCustomPrompt from './inquirer/InputCustomPrompt.js'; +import format from "./library/format.js"; +import getPrompt from "./library/get-prompt.js"; +import settings from "./settings.js"; +import type { InputSetting, Result } from "./library/types.js"; +import { getHasName, getMaxLength, getRules } from "./library/utils.js"; +import InputCustomPrompt from "./inquirer/InputCustomPrompt.js"; /** * Get user input by interactive prompt based on @@ -15,18 +15,18 @@ import InputCustomPrompt from './inquirer/InputCustomPrompt.js'; * @return commit message */ export async function input(prompter: PromptModule): Promise<string> { - const {rules} = await load(); - const parts = ['type', 'scope', 'subject', 'body', 'footer'] as const; - const headerParts = ['type', 'scope', 'subject']; + const { rules } = await load(); + const parts = ["type", "scope", "subject", "body", "footer"] as const; + const headerParts = ["type", "scope", "subject"]; - const headerLengthRule = getRules('header', rules).find( - getHasName('max-length') + const headerLengthRule = getRules("header", rules).find( + getHasName("max-length"), ); const maxLength = getMaxLength(headerLengthRule); try { const questions: DistinctQuestion<Result>[] = []; - prompter.registerPrompt('input-custom', InputCustomPrompt); + prompter.registerPrompt("input-custom", InputCustomPrompt); for (const input of parts) { const inputSetting: InputSetting = settings[input]; @@ -46,6 +46,6 @@ export async function input(prompter: PromptModule): Promise<string> { return format(results); } catch (err) { console.error(err); - return ''; + return ""; } } diff --git a/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts b/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts index 3ec1b0988f..2cc7ce8400 100644 --- a/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts +++ b/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts @@ -1,11 +1,11 @@ /// <reference path="./inquirer.d.ts" /> -import chalk from 'chalk'; +import chalk from "chalk"; -import inquirer, {type Answers, type InputCustomOptions} from 'inquirer'; -import InputPrompt from 'inquirer/lib/prompts/input.js'; -import observe from 'inquirer/lib/utils/events.js'; -import type {Interface as ReadlineInterface, Key} from 'readline'; -import type {Subscription} from 'rxjs'; +import inquirer, { type Answers, type InputCustomOptions } from "inquirer"; +import InputPrompt from "inquirer/lib/prompts/input.js"; +import observe from "inquirer/lib/utils/events.js"; +import type { Interface as ReadlineInterface, Key } from "node:readline"; +import type { Subscription } from "rxjs"; import SuccessfulPromptStateData = inquirer.prompts.SuccessfulPromptStateData; @@ -15,7 +15,7 @@ interface KeyDescriptor { } export default class InputCustomPrompt< - TQuestion extends InputCustomOptions = InputCustomOptions + TQuestion extends InputCustomOptions = InputCustomOptions, > extends InputPrompt<TQuestion> { private lineSubscription: Subscription; private readonly tabCompletion: string[]; @@ -23,7 +23,7 @@ export default class InputCustomPrompt< constructor( question: TQuestion, readLine: ReadlineInterface, - answers: Answers + answers: Answers, ) { super(question, readLine, answers); @@ -32,12 +32,12 @@ export default class InputCustomPrompt< } if (!this.opt.maxLength) { - this.throwParamError('maxLength'); + this.throwParamError("maxLength"); } const events = observe(this.rl); this.lineSubscription = events.keypress.subscribe( - this.onKeyPress2.bind(this) + this.onKeyPress2.bind(this), ); this.tabCompletion = (this.opt.tabCompletion || []) .map((item) => item.value) @@ -46,6 +46,8 @@ export default class InputCustomPrompt< onEnd(state: SuccessfulPromptStateData): void { this.lineSubscription.unsubscribe(); + // Add or remove leading blank if rule is active. + state.value = this.opt.forceLeadingBlankFn(state.value); super.onEnd(state); } @@ -54,13 +56,13 @@ export default class InputCustomPrompt< * @see https://nodejs.org/api/readline.html#readline_rl_line */ updateLine(line: string): void { - this.rl.write(null as any, {ctrl: true, name: 'b'}); - this.rl.write(null as any, {ctrl: true, name: 'd'}); + this.rl.write(null as any, { ctrl: true, name: "b" }); + this.rl.write(null as any, { ctrl: true, name: "d" }); this.rl.write(line.substr(this.rl.line.length)); } onKeyPress2(e: KeyDescriptor): void { - if (e.key.name === 'tab' && this.tabCompletion.length > 0) { + if (e.key.name === "tab" && this.tabCompletion.length > 0) { let line = this.rl.line.trim(); if (line.length > 0) { for (const item of this.tabCompletion) { @@ -82,7 +84,7 @@ export default class InputCustomPrompt< } render(error?: string): void { - const answered = this.status === 'answered'; + const answered = this.status === "answered"; let message = this.getQuestion(); const length = this.measureInput(this.rl.line); @@ -93,10 +95,10 @@ export default class InputCustomPrompt< message += this.opt.transformer(this.rl.line, this.answers, {}); } - let bottomContent = ''; + let bottomContent = ""; if (error) { - bottomContent = chalk.red('>> ') + error; + bottomContent = chalk.red(">> ") + error; } else if (!answered) { const maxLength = this.opt.maxLength(this.answers); if (maxLength < Infinity) { @@ -105,8 +107,8 @@ export default class InputCustomPrompt< lengthRemaining <= 5 ? chalk.red : lengthRemaining <= 10 - ? chalk.yellow - : chalk.grey; + ? chalk.yellow + : chalk.grey; bottomContent = color(`${lengthRemaining} characters left`); } } diff --git a/@commitlint/prompt/src/inquirer/inquirer.d.ts b/@commitlint/prompt/src/inquirer/inquirer.d.ts index 06d2304ab2..1d8df10d5f 100644 --- a/@commitlint/prompt/src/inquirer/inquirer.d.ts +++ b/@commitlint/prompt/src/inquirer/inquirer.d.ts @@ -1,6 +1,6 @@ -import {Answers, InputQuestionOptions} from 'inquirer'; +import { Answers, InputQuestionOptions } from "inquirer"; -declare module 'inquirer' { +declare module "inquirer" { interface InputCustomCompletionOption { value: string; description?: string; @@ -11,13 +11,14 @@ declare module 'inquirer' { /** * @inheritdoc */ - type?: 'input-custom'; + type?: "input-custom"; log?(answers?: T): string; tabCompletion?: InputCustomCompletionOption[]; maxLength(answers?: T): number; + forceLeadingBlankFn(input: string): string; } interface QuestionMap<T extends Answers = Answers> { - 'input-custom': InputCustomOptions<T>; + "input-custom": InputCustomOptions<T>; } } diff --git a/@commitlint/prompt/src/library/format.test.ts b/@commitlint/prompt/src/library/format.test.ts index bd8e17d83b..e2a69d7516 100644 --- a/@commitlint/prompt/src/library/format.test.ts +++ b/@commitlint/prompt/src/library/format.test.ts @@ -1,56 +1,56 @@ -import {test, expect} from 'vitest'; -import type {Result} from './types.js'; -import format from './format.js'; +import { test, expect } from "vitest"; +import type { Result } from "./types.js"; +import format from "./format.js"; -test('should return empty string', () => { +test("should return empty string", () => { const result: Result = {}; - expect(format(result)).toBe(' '); + expect(format(result)).toBe(" "); }); -test('should omit scope', () => { +test("should omit scope", () => { const result: Result = { - type: 'fix', - subject: 'test', + type: "fix", + subject: "test", }; - expect(format(result)).toBe('fix: test'); + expect(format(result)).toBe("fix: test"); }); -test('should include scope', () => { +test("should include scope", () => { const result: Result = { - type: 'fix', - scope: 'prompt', - subject: 'test', + type: "fix", + scope: "prompt", + subject: "test", }; - expect(format(result)).toBe('fix(prompt): test'); + expect(format(result)).toBe("fix(prompt): test"); }); -test('should include body', () => { +test("should include body", () => { const result: Result = { - type: 'fix', - scope: 'prompt', - subject: 'test', - body: 'some body', + type: "fix", + scope: "prompt", + subject: "test", + body: "some body", }; - expect(format(result)).toBe('fix(prompt): test\nsome body'); + expect(format(result)).toBe("fix(prompt): test\nsome body"); }); -test('should include footer', () => { +test("should include footer", () => { const result: Result = { - type: 'fix', - scope: 'prompt', - subject: 'test', - footer: 'some footer', + type: "fix", + scope: "prompt", + subject: "test", + footer: "some footer", }; - expect(format(result)).toBe('fix(prompt): test\nsome footer'); + expect(format(result)).toBe("fix(prompt): test\nsome footer"); }); -test('should include body and footer', () => { +test("should include body and footer", () => { const result: Result = { - type: 'fix', - scope: 'prompt', - subject: 'test', - body: 'some body', - footer: 'some footer', + type: "fix", + scope: "prompt", + subject: "test", + body: "some body", + footer: "some footer", }; - expect(format(result)).toBe('fix(prompt): test\nsome body\nsome footer'); + expect(format(result)).toBe("fix(prompt): test\nsome body\nsome footer"); }); diff --git a/@commitlint/prompt/src/library/format.ts b/@commitlint/prompt/src/library/format.ts index e80b57166a..414af8920f 100644 --- a/@commitlint/prompt/src/library/format.ts +++ b/@commitlint/prompt/src/library/format.ts @@ -1,6 +1,6 @@ -import chalk from 'chalk'; +import chalk from "chalk"; -import type {Result, ResultPart} from './types.js'; +import type { Result, ResultPart } from "./types.js"; /** * Get formatted commit message @@ -22,18 +22,18 @@ export default function format(input: Result, debug = false): string { registry[name as ResultPart] = value === undefined ? chalk.grey(`<${name}>`) : chalk.bold(value); return registry; - }, {}) + }, {}) : defaultInput; // Return formatted string - const {type, scope, subject, body, footer} = results; + const { type, scope, subject, body, footer } = results; return [ - `${type || ''}${scope ? `(${scope})` : ''}${type || scope ? ':' : ''} ${ - subject || '' + `${type || ""}${scope ? `(${scope})` : ""}${type || scope ? ":" : ""} ${ + subject || "" }`, body, footer, ] .filter(Boolean) - .join('\n'); + .join("\n"); } diff --git a/@commitlint/prompt/src/library/get-forced-case-fn.test.ts b/@commitlint/prompt/src/library/get-forced-case-fn.test.ts index 932f1e7bdb..c96caa562a 100644 --- a/@commitlint/prompt/src/library/get-forced-case-fn.test.ts +++ b/@commitlint/prompt/src/library/get-forced-case-fn.test.ts @@ -1,118 +1,118 @@ -import {test, expect} from 'vitest'; -import {RuleConfigSeverity} from '@commitlint/types'; +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; -import getForcedCaseFn from './get-forced-case-fn.js'; +import getForcedCaseFn from "./get-forced-case-fn.js"; -test('should not apply', () => { - let rule = getForcedCaseFn(['name', [RuleConfigSeverity.Disabled]]); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); +test("should not apply", () => { + let rule = getForcedCaseFn(["name", [RuleConfigSeverity.Disabled]]); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); rule = getForcedCaseFn(); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); - rule = getForcedCaseFn(['name', [RuleConfigSeverity.Warning, 'never']]); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); + rule = getForcedCaseFn(["name", [RuleConfigSeverity.Warning, "never"]]); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', ['camel-case', 'lowercase']], + "name", + [RuleConfigSeverity.Warning, "always", ["camel-case", "lowercase"]], ]); - expect(rule('test')).toBe('test'); - expect(rule('test-foo')).toBe('test-foo'); - expect(rule('testFoo')).toBe('testFoo'); - expect(rule('TEST_FOO')).toBe('TEST_FOO'); + expect(rule("test")).toBe("test"); + expect(rule("test-foo")).toBe("test-foo"); + expect(rule("testFoo")).toBe("testFoo"); + expect(rule("TEST_FOO")).toBe("TEST_FOO"); }); -test('should throw error on invalid casing', () => { - let rule = getForcedCaseFn(['name', [RuleConfigSeverity.Warning, 'always']]); - expect(() => rule('test')).toThrow('Unknown target case "undefined"'); +test("should throw error on invalid casing", () => { + let rule = getForcedCaseFn(["name", [RuleConfigSeverity.Warning, "always"]]); + expect(() => rule("test")).toThrow('Unknown target case "undefined"'); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'foo'], + "name", + [RuleConfigSeverity.Warning, "always", "foo"], ]); - expect(() => rule('test')).toThrow('Unknown target case "foo"'); + expect(() => rule("test")).toThrow('Unknown target case "foo"'); }); -test('should convert text correctly', () => { +test("should convert text correctly", () => { let rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'camel-case'], + "name", + [RuleConfigSeverity.Warning, "always", "camel-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('testFooBarBazBaz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("testFooBarBazBaz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'kebab-case'], + "name", + [RuleConfigSeverity.Warning, "always", "kebab-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('test-foo-bar-baz-baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("test-foo-bar-baz-baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'snake-case'], + "name", + [RuleConfigSeverity.Warning, "always", "snake-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foo_bar_baz_baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foo_bar_baz_baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'pascal-case'], + "name", + [RuleConfigSeverity.Warning, "always", "pascal-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TestFooBarBazBaz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TestFooBarBazBaz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'start-case'], + "name", + [RuleConfigSeverity.Warning, "always", "start-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST FOO Bar Baz Baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST FOO Bar Baz Baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'upper-case'], + "name", + [RuleConfigSeverity.Warning, "always", "upper-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBAR-BAZ BAZ'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'uppercase'], + "name", + [RuleConfigSeverity.Warning, "always", "uppercase"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBAR-BAZ BAZ'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'sentence-case'], + "name", + [RuleConfigSeverity.Warning, "always", "sentence-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBar-baz baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'sentencecase'], + "name", + [RuleConfigSeverity.Warning, "always", "sentencecase"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('TEST_FOOBar-baz baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'lower-case'], + "name", + [RuleConfigSeverity.Warning, "always", "lower-case"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'lowercase'], + "name", + [RuleConfigSeverity.Warning, "always", "lowercase"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); rule = getForcedCaseFn([ - 'name', - [RuleConfigSeverity.Warning, 'always', 'lowerCase'], + "name", + [RuleConfigSeverity.Warning, "always", "lowerCase"], ]); - expect(rule('TEST_FOOBar-baz baz')).toBe('test_foobar-baz baz'); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); }); diff --git a/@commitlint/prompt/src/library/get-forced-case-fn.ts b/@commitlint/prompt/src/library/get-forced-case-fn.ts index 90f2c92b6c..11b91fb178 100644 --- a/@commitlint/prompt/src/library/get-forced-case-fn.ts +++ b/@commitlint/prompt/src/library/get-forced-case-fn.ts @@ -1,8 +1,8 @@ -import {toCase} from '@commitlint/ensure'; -import type {TargetCaseType} from '@commitlint/types'; +import { toCase } from "@commitlint/ensure"; +import type { TargetCaseType } from "@commitlint/types"; -import type {RuleEntry} from './types.js'; -import {ruleIsActive, ruleIsNotApplicable} from './utils.js'; +import type { RuleEntry } from "./types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./utils.js"; /** * Get forced case for rule @@ -10,7 +10,7 @@ import {ruleIsActive, ruleIsNotApplicable} from './utils.js'; * @return transform function applying the enforced case */ export default function getForcedCaseFn( - rule?: RuleEntry + rule?: RuleEntry, ): (input: string) => string { const noop = (input: string) => input; diff --git a/@commitlint/prompt/src/library/get-forced-leading-fn.ts b/@commitlint/prompt/src/library/get-forced-leading-fn.ts index 652ba5709b..7a750ee201 100644 --- a/@commitlint/prompt/src/library/get-forced-leading-fn.ts +++ b/@commitlint/prompt/src/library/get-forced-leading-fn.ts @@ -1,5 +1,5 @@ -import type {RuleEntry} from './types.js'; -import {ruleIsActive, ruleIsNotApplicable} from './utils.js'; +import type { RuleEntry } from "./types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./utils.js"; /** * Get forced leading for rule @@ -7,19 +7,19 @@ import {ruleIsActive, ruleIsNotApplicable} from './utils.js'; * @return transform function applying the leading */ export default function getForcedLeadingFn( - rule?: RuleEntry + rule?: RuleEntry, ): (input: string) => string { if (!rule || !ruleIsActive(rule)) { return (input: string): string => input; } const remove = (input: string): string => { - const fragments = input.split('\n'); - return fragments[0] === '' ? fragments.slice(1).join('\n') : input; + const fragments = input.split("\n"); + return fragments[0] === "" ? fragments.slice(1).join("\n") : input; }; const lead = (input: string): string => { - const fragments = input.split('\n'); - return fragments[0] === '' ? input : ['', ...fragments].join('\n'); + const fragments = input.split("\n"); + return fragments[0] === "" ? input : ["", ...fragments].join("\n"); }; return !ruleIsNotApplicable(rule) ? lead : remove; diff --git a/@commitlint/prompt/src/library/get-prompt.ts b/@commitlint/prompt/src/library/get-prompt.ts index 9ab0550288..924549c007 100644 --- a/@commitlint/prompt/src/library/get-prompt.ts +++ b/@commitlint/prompt/src/library/get-prompt.ts @@ -1,12 +1,12 @@ -import chalk from 'chalk'; -import type {InputCustomOptions} from 'inquirer'; +import chalk from "chalk"; +import type { InputCustomOptions } from "inquirer"; -import type {InputSetting, RuleEntry, Result, ResultPart} from './types.js'; +import type { InputSetting, RuleEntry, Result, ResultPart } from "./types.js"; -import format from './format.js'; -import getForcedCaseFn from './get-forced-case-fn.js'; -import getForcedLeadingFn from './get-forced-leading-fn.js'; -import meta from './meta.js'; +import format from "./format.js"; +import getForcedCaseFn from "./get-forced-case-fn.js"; +import getForcedLeadingFn from "./get-forced-leading-fn.js"; +import meta from "./meta.js"; import { enumRuleIsActive, getHasName, @@ -14,9 +14,9 @@ import { ruleIsActive, ruleIsApplicable, ruleIsNotApplicable, -} from './utils.js'; +} from "./utils.js"; -const EOL = '\n'; +const EOL = "\n"; /** * Get a cli prompt based on rule configuration @@ -28,9 +28,9 @@ const EOL = '\n'; export default function getPrompt( type: ResultPart, rules: RuleEntry[] = [], - settings: InputSetting = {} + settings: InputSetting = {}, ): InputCustomOptions<Result> | null { - const emptyRule = rules.filter(getHasName('empty')).find(ruleIsActive); + const emptyRule = rules.filter(getHasName("empty")).find(ruleIsActive); const mustBeEmpty = emptyRule ? ruleIsApplicable(emptyRule) : false; @@ -40,24 +40,24 @@ export default function getPrompt( const required = emptyRule ? ruleIsNotApplicable(emptyRule) : false; - const forceCaseFn = getForcedCaseFn(rules.find(getHasName('case'))); + const forceCaseFn = getForcedCaseFn(rules.find(getHasName("case"))); const forceLeadingBlankFn = getForcedLeadingFn( - rules.find(getHasName('leading-blank')) + rules.find(getHasName("leading-blank")), ); - const maxLengthRule = rules.find(getHasName('max-length')); + const maxLengthRule = rules.find(getHasName("max-length")); const inputMaxLength = getMaxLength(maxLengthRule); - const enumRule = rules.filter(getHasName('enum')).find(enumRuleIsActive); + const enumRule = rules.filter(getHasName("enum")).find(enumRuleIsActive); const tabCompletion = enumRule ? enumRule[1][2].map((enumerable) => { const enumSettings = (settings.enumerables || {})[enumerable] || {}; return { value: forceLeadingBlankFn(forceCaseFn(enumerable)), - description: enumSettings.description || '', + description: enumSettings.description || "", }; - }) + }) : []; const maxLength = (res: Result) => { @@ -74,12 +74,12 @@ export default function getPrompt( }; return { - type: 'input-custom', + type: "input-custom", name: type, message: `${type}:`, validate(input, answers) { if (input.length > maxLength(answers || {})) { - return 'Input contains too many characters!'; + return "Input contains too many characters!"; } if (required && input.trim().length === 0) { // Show help if enum is defined and input may not be empty @@ -92,19 +92,19 @@ export default function getPrompt( tabValues.length > 0 && !tabValues.includes(input) ) { - return `⚠ ${chalk.bold(type)} must be one of ${tabValues.join(', ')}.`; + return `⚠ ${chalk.bold(type)} must be one of ${tabValues.join(", ")}.`; } return true; }, tabCompletion, log(answers?: Result) { let prefix = - `${chalk.white('Please enter a')} ${chalk.bold(type)}: ${meta({ + `${chalk.white("Please enter a")} ${chalk.bold(type)}: ${meta({ optional: !required, required: required, - 'tab-completion': typeof enumRule !== 'undefined', - header: typeof settings.header !== 'undefined', - 'multi-line': settings.multiline, + "tab-completion": typeof enumRule !== "undefined", + header: typeof settings.header !== "undefined", + "multi-line": settings.multiline, })}` + EOL; if (settings.description) { @@ -119,5 +119,6 @@ export default function getPrompt( transformer(value: string) { return forceCaseFn(value); }, + forceLeadingBlankFn, }; } diff --git a/@commitlint/prompt/src/library/meta.ts b/@commitlint/prompt/src/library/meta.ts index 61c9a412eb..b361364a07 100644 --- a/@commitlint/prompt/src/library/meta.ts +++ b/@commitlint/prompt/src/library/meta.ts @@ -1,4 +1,4 @@ -import chalk from 'chalk'; +import chalk from "chalk"; /** * Get formatted meta hints for configuration @@ -11,8 +11,8 @@ export default function meta(settings: Record<string, unknown>): string { .filter((item) => item[1]) .map((item) => { const [name, value] = item; - return typeof value === 'boolean' ? `[${name}]` : `[${name}=${value}]`; + return typeof value === "boolean" ? `[${name}]` : `[${name}=${value}]`; }) - .join(' ') + .join(" "), ); } diff --git a/@commitlint/prompt/src/library/types.ts b/@commitlint/prompt/src/library/types.ts index be8582ad28..65b8bc3ad9 100644 --- a/@commitlint/prompt/src/library/types.ts +++ b/@commitlint/prompt/src/library/types.ts @@ -1,4 +1,7 @@ -import type {RuleConfigCondition, RuleConfigSeverity} from '@commitlint/types'; +import type { + RuleConfigCondition, + RuleConfigSeverity, +} from "@commitlint/types"; export type RuleEntry = | [string, Readonly<[RuleConfigSeverity.Disabled]>] @@ -19,6 +22,6 @@ export type InputSetting = { }; }; -export type ResultPart = 'type' | 'scope' | 'subject' | 'body' | 'footer'; +export type ResultPart = "type" | "scope" | "subject" | "body" | "footer"; export type Result = Partial<Record<ResultPart, string | undefined>>; diff --git a/@commitlint/prompt/src/library/utils.test.ts b/@commitlint/prompt/src/library/utils.test.ts index 2893800ea3..96f1ae6d6f 100644 --- a/@commitlint/prompt/src/library/utils.test.ts +++ b/@commitlint/prompt/src/library/utils.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; import { RuleConfigQuality, RuleConfigSeverity, RulesConfig, -} from '@commitlint/types'; +} from "@commitlint/types"; import { enumRuleIsActive, @@ -13,118 +13,118 @@ import { getRulePrefix, getRules, ruleIsActive, -} from './utils.js'; +} from "./utils.js"; -test('getRulePrefix', () => { - expect(getRulePrefix('body-leading-blank')).toEqual('body'); - expect(getRulePrefix('body-max-line-length')).toEqual('body'); - expect(getRulePrefix('footer-leading-blank')).toEqual('footer'); - expect(getRulePrefix('footer-max-line-length')).toEqual('footer'); - expect(getRulePrefix('header-max-length')).toEqual('header'); - expect(getRulePrefix('scope-case')).toEqual('scope'); - expect(getRulePrefix('scope-enum')).toEqual('scope'); - expect(getRulePrefix('subject-case')).toEqual('subject'); - expect(getRulePrefix('subject-empty')).toEqual('subject'); - expect(getRulePrefix('subject-full-stop')).toEqual('subject'); - expect(getRulePrefix('type-case')).toEqual('type'); - expect(getRulePrefix('type-empty')).toEqual('type'); - expect(getRulePrefix('type-enum')).toEqual('type'); +test("getRulePrefix", () => { + expect(getRulePrefix("body-leading-blank")).toEqual("body"); + expect(getRulePrefix("body-max-line-length")).toEqual("body"); + expect(getRulePrefix("footer-leading-blank")).toEqual("footer"); + expect(getRulePrefix("footer-max-line-length")).toEqual("footer"); + expect(getRulePrefix("header-max-length")).toEqual("header"); + expect(getRulePrefix("scope-case")).toEqual("scope"); + expect(getRulePrefix("scope-enum")).toEqual("scope"); + expect(getRulePrefix("subject-case")).toEqual("subject"); + expect(getRulePrefix("subject-empty")).toEqual("subject"); + expect(getRulePrefix("subject-full-stop")).toEqual("subject"); + expect(getRulePrefix("type-case")).toEqual("type"); + expect(getRulePrefix("type-empty")).toEqual("type"); + expect(getRulePrefix("type-enum")).toEqual("type"); }); -test('getRuleName', () => { - expect(getRuleName('body-leading-blank')).toEqual('leading-blank'); - expect(getRuleName('body-max-line-length')).toEqual('max-line-length'); - expect(getRuleName('footer-leading-blank')).toEqual('leading-blank'); - expect(getRuleName('footer-max-line-length')).toEqual('max-line-length'); - expect(getRuleName('header-max-length')).toEqual('max-length'); - expect(getRuleName('scope-case')).toEqual('case'); - expect(getRuleName('scope-enum')).toEqual('enum'); - expect(getRuleName('subject-case')).toEqual('case'); - expect(getRuleName('subject-empty')).toEqual('empty'); - expect(getRuleName('subject-full-stop')).toEqual('full-stop'); - expect(getRuleName('type-case')).toEqual('case'); - expect(getRuleName('type-empty')).toEqual('empty'); - expect(getRuleName('type-enum')).toEqual('enum'); +test("getRuleName", () => { + expect(getRuleName("body-leading-blank")).toEqual("leading-blank"); + expect(getRuleName("body-max-line-length")).toEqual("max-line-length"); + expect(getRuleName("footer-leading-blank")).toEqual("leading-blank"); + expect(getRuleName("footer-max-line-length")).toEqual("max-line-length"); + expect(getRuleName("header-max-length")).toEqual("max-length"); + expect(getRuleName("scope-case")).toEqual("case"); + expect(getRuleName("scope-enum")).toEqual("enum"); + expect(getRuleName("subject-case")).toEqual("case"); + expect(getRuleName("subject-empty")).toEqual("empty"); + expect(getRuleName("subject-full-stop")).toEqual("full-stop"); + expect(getRuleName("type-case")).toEqual("case"); + expect(getRuleName("type-empty")).toEqual("empty"); + expect(getRuleName("type-enum")).toEqual("enum"); }); -test('ruleIsActive', () => { - expect(ruleIsActive(['', [RuleConfigSeverity.Error, 'always', 100]])).toBe( - true +test("ruleIsActive", () => { + expect(ruleIsActive(["", [RuleConfigSeverity.Error, "always", 100]])).toBe( + true, ); - expect(ruleIsActive(['', [RuleConfigSeverity.Warning, 'never', 100]])).toBe( - true + expect(ruleIsActive(["", [RuleConfigSeverity.Warning, "never", 100]])).toBe( + true, ); - expect(ruleIsActive(['', [RuleConfigSeverity.Disabled, 'always', 100]])).toBe( - false + expect(ruleIsActive(["", [RuleConfigSeverity.Disabled, "always", 100]])).toBe( + false, ); - expect(ruleIsActive(['', [RuleConfigSeverity.Error]] as any)).toBe(true); + expect(ruleIsActive(["", [RuleConfigSeverity.Error]] as any)).toBe(true); }); -test('getMaxLength', () => { - expect(getMaxLength(['', [RuleConfigSeverity.Error, 'always', 100]])).toBe( - 100 +test("getMaxLength", () => { + expect(getMaxLength(["", [RuleConfigSeverity.Error, "always", 100]])).toBe( + 100, ); - expect(getMaxLength(['', [RuleConfigSeverity.Warning, 'never', 100]])).toBe( - Infinity + expect(getMaxLength(["", [RuleConfigSeverity.Warning, "never", 100]])).toBe( + Infinity, ); - expect(getMaxLength(['', [RuleConfigSeverity.Disabled, 'always', 100]])).toBe( - Infinity + expect(getMaxLength(["", [RuleConfigSeverity.Disabled, "always", 100]])).toBe( + Infinity, ); - expect(getMaxLength(['', [RuleConfigSeverity.Error, 100]] as any)).toBe( - Infinity + expect(getMaxLength(["", [RuleConfigSeverity.Error, 100]] as any)).toBe( + Infinity, ); const rules: any = { - 'body-max-line-length': [RuleConfigSeverity.Error, 'always', 100], - 'header-max-length': [RuleConfigSeverity.Error, 'always', 100], - 'test-max-length': [RuleConfigSeverity.Disabled, 'always', 100], + "body-max-line-length": [RuleConfigSeverity.Error, "always", 100], + "header-max-length": [RuleConfigSeverity.Error, "always", 100], + "test-max-length": [RuleConfigSeverity.Disabled, "always", 100], }; - let lengthRule = getRules('header', rules).find(getHasName('max-length')); + let lengthRule = getRules("header", rules).find(getHasName("max-length")); expect(getMaxLength(lengthRule)).toBe(100); - lengthRule = getRules('body', rules).find(getHasName('max-length')); + lengthRule = getRules("body", rules).find(getHasName("max-length")); expect(getMaxLength(lengthRule)).toBe(Infinity); - lengthRule = getRules('test', rules).find(getHasName('max-length')); + lengthRule = getRules("test", rules).find(getHasName("max-length")); expect(getMaxLength(lengthRule)).toBe(Infinity); }); -test('check enum rule filters', () => { +test("check enum rule filters", () => { const rules: Partial<RulesConfig<RuleConfigQuality.Qualified>> = { - 'enum-string': [RuleConfigSeverity.Warning, 'always', ['1', '2', '3']], - 'type-enum': [RuleConfigSeverity.Error, 'always', ['build', 'chore', 'ci']], - 'scope-enum': [RuleConfigSeverity.Error, 'never', ['cli', 'core', 'lint']], - 'bar-enum': [RuleConfigSeverity.Disabled, 'always', ['foo', 'bar', 'baz']], + "enum-string": [RuleConfigSeverity.Warning, "always", ["1", "2", "3"]], + "type-enum": [RuleConfigSeverity.Error, "always", ["build", "chore", "ci"]], + "scope-enum": [RuleConfigSeverity.Error, "never", ["cli", "core", "lint"]], + "bar-enum": [RuleConfigSeverity.Disabled, "always", ["foo", "bar", "baz"]], }; - let enumRule = getRules('type', rules) - .filter(getHasName('enum')) + let enumRule = getRules("type", rules) + .filter(getHasName("enum")) .find(enumRuleIsActive); expect(enumRule).toEqual([ - 'type-enum', - [RuleConfigSeverity.Error, 'always', ['build', 'chore', 'ci']], + "type-enum", + [RuleConfigSeverity.Error, "always", ["build", "chore", "ci"]], ]); - enumRule = getRules('string', rules) - .filter(getHasName('enum')) + enumRule = getRules("string", rules) + .filter(getHasName("enum")) .find(enumRuleIsActive); expect(enumRule).toEqual(undefined); - enumRule = getRules('enum', rules) - .filter(getHasName('string')) + enumRule = getRules("enum", rules) + .filter(getHasName("string")) .find(enumRuleIsActive); expect(enumRule).toEqual([ - 'enum-string', - [RuleConfigSeverity.Warning, 'always', ['1', '2', '3']], + "enum-string", + [RuleConfigSeverity.Warning, "always", ["1", "2", "3"]], ]); - enumRule = getRules('bar', rules) - .filter(getHasName('enum')) + enumRule = getRules("bar", rules) + .filter(getHasName("enum")) .find(enumRuleIsActive); expect(enumRule).toEqual(undefined); - enumRule = getRules('scope', rules) - .filter(getHasName('enum')) + enumRule = getRules("scope", rules) + .filter(getHasName("enum")) .find(enumRuleIsActive); expect(enumRule).toEqual(undefined); }); diff --git a/@commitlint/prompt/src/library/utils.ts b/@commitlint/prompt/src/library/utils.ts index eaa6245a24..aaca4e2004 100644 --- a/@commitlint/prompt/src/library/utils.ts +++ b/@commitlint/prompt/src/library/utils.ts @@ -1,7 +1,7 @@ -import {RuleConfigSeverity} from '@commitlint/types'; -import type {QualifiedRules} from '@commitlint/types'; +import { RuleConfigSeverity } from "@commitlint/types"; +import type { QualifiedRules } from "@commitlint/types"; -import type {RuleEntry} from './types.js'; +import type { RuleEntry } from "./types.js"; /** * Get name for a given rule id @@ -9,8 +9,8 @@ import type {RuleEntry} from './types.js'; * @return name of the rule */ export function getRuleName(id: string): string { - const fragments = id.split('-'); - return fragments.length > 1 ? fragments.slice(1).join('-') : fragments[0]; + const fragments = id.split("-"); + return fragments.length > 1 ? fragments.slice(1).join("-") : fragments[0]; } /** @@ -19,7 +19,7 @@ export function getRuleName(id: string): string { * @return prefix of the rule */ export function getRulePrefix(id: string): string | null { - const fragments = id.split('-'); + const fragments = id.split("-"); return fragments.length > 1 ? fragments[0] : null; } @@ -28,7 +28,7 @@ export function getRulePrefix(id: string): string | null { */ export function getHasName(name: string) { return <T extends RuleEntry>( - rule: RuleEntry + rule: RuleEntry, ): rule is Exclude<T, [string, undefined]> => getRuleName(rule[0]) === name; } @@ -38,7 +38,7 @@ export function getHasName(name: string) { * @return if the rule definition is active */ export function ruleIsActive<T extends RuleEntry>( - rule: T + rule: T, ): rule is Exclude<T, [string, Readonly<[RuleConfigSeverity.Disabled]>]> { const [, value] = rule; if (value && Array.isArray(value)) { @@ -53,13 +53,13 @@ export function ruleIsActive<T extends RuleEntry>( * @return if the rule definition is applicable */ export function ruleIsApplicable( - rule: RuleEntry + rule: RuleEntry, ): rule is - | [string, Readonly<[RuleConfigSeverity, 'always']>] - | [string, Readonly<[RuleConfigSeverity, 'always', unknown]>] { + | [string, Readonly<[RuleConfigSeverity, "always"]>] + | [string, Readonly<[RuleConfigSeverity, "always", unknown]>] { const [, value] = rule; if (value && Array.isArray(value)) { - return value[1] === 'always'; + return value[1] === "always"; } return false; } @@ -70,24 +70,24 @@ export function ruleIsApplicable( * @return if the rule definition is applicable */ export function ruleIsNotApplicable( - rule: RuleEntry + rule: RuleEntry, ): rule is - | [string, Readonly<[RuleConfigSeverity, 'never']>] - | [string, Readonly<[RuleConfigSeverity, 'never', unknown]>] { + | [string, Readonly<[RuleConfigSeverity, "never"]>] + | [string, Readonly<[RuleConfigSeverity, "never", unknown]>] { const [, value] = rule; if (value && Array.isArray(value)) { - return value[1] === 'never'; + return value[1] === "never"; } return false; } export function enumRuleIsActive( - rule: RuleEntry + rule: RuleEntry, ): rule is [ string, Readonly< - [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, 'always', string[]] - > + [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, "always", string[]] + >, ] { return ( ruleIsActive(rule) && @@ -105,7 +105,7 @@ export function enumRuleIsActive( */ export function getRules(prefix: string, rules: QualifiedRules): RuleEntry[] { return Object.entries(rules).filter( - (rule): rule is RuleEntry => getRulePrefix(rule[0]) === prefix + (rule): rule is RuleEntry => getRulePrefix(rule[0]) === prefix, ); } @@ -114,7 +114,7 @@ export function getMaxLength(rule?: RuleEntry): number { rule && ruleIsActive(rule) && ruleIsApplicable(rule) && - typeof rule[1][2] === 'number' + typeof rule[1][2] === "number" ) { return rule[1][2]; } diff --git a/@commitlint/prompt/src/settings.ts b/@commitlint/prompt/src/settings.ts index 8c80f14247..a85a9a5394 100644 --- a/@commitlint/prompt/src/settings.ts +++ b/@commitlint/prompt/src/settings.ts @@ -1,56 +1,56 @@ export default { type: { - description: '<type> holds information about the goal of a change.', + description: "<type> holds information about the goal of a change.", enumerables: { feat: { - description: 'Adds a new feature.', + description: "Adds a new feature.", }, fix: { - description: 'Solves a bug.', + description: "Solves a bug.", }, chore: { description: "Other changes that don't modify src or test files", }, docs: { - description: 'Adds or alters documentation.', + description: "Adds or alters documentation.", }, style: { - description: 'Improves formatting, white-space.', + description: "Improves formatting, white-space.", }, refactor: { description: - 'Rewrites code without feature, performance or bug changes.', + "Rewrites code without feature, performance or bug changes.", }, perf: { - description: 'Improves performance.', + description: "Improves performance.", }, test: { - description: 'Adds or modifies tests.', + description: "Adds or modifies tests.", }, build: { - description: 'Affects the build system or external dependencies.', + description: "Affects the build system or external dependencies.", }, ci: { - description: 'Changes CI configuration files and scripts.', + description: "Changes CI configuration files and scripts.", }, revert: { - description: 'Reverts a previous commit.', + description: "Reverts a previous commit.", }, }, }, scope: { - description: '<scope> marks which sub-component of the project is affected', + description: "<scope> marks which sub-component of the project is affected", }, subject: { - description: '<subject> is a short, high-level description of the change', + description: "<subject> is a short, high-level description of the change", }, body: { - description: '<body> holds additional information about the change', + description: "<body> holds additional information about the change", multiline: true, }, footer: { description: - '<footer> holds further meta data, such as breaking changes and issue ids', + "<footer> holds further meta data, such as breaking changes and issue ids", multiline: true, }, }; diff --git a/@commitlint/prompt/tsconfig.json b/@commitlint/prompt/tsconfig.json index 76dd5e38cb..52e48f310a 100644 --- a/@commitlint/prompt/tsconfig.json +++ b/@commitlint/prompt/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}, {"path": "../load"}] + "references": [{ "path": "../types" }, { "path": "../load" }] } diff --git a/@commitlint/read/CHANGELOG.md b/@commitlint/read/CHANGELOG.md index cceeb713b4..79848d2044 100644 --- a/@commitlint/read/CHANGELOG.md +++ b/@commitlint/read/CHANGELOG.md @@ -3,6 +3,63 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + + +### Features + +* support linting from the last tag ([#4110](https://github.com/conventional-changelog/commitlint/issues/4110)) ([4b204ec](https://github.com/conventional-changelog/commitlint/commit/4b204ecfb43dd6a00e24b51111aadbd78f9d58e1)) + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + + +### Features + +* **cli:** introduce new --last flag, to stop recommending HEAD~1 ([#3916](https://github.com/conventional-changelog/commitlint/issues/3916)) ([99f4f3f](https://github.com/conventional-changelog/commitlint/commit/99f4f3f4839190a2758083df7ba20b988e7b68a6)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/read + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/read/package.json b/@commitlint/read/package.json index fb7fb29623..f203ebfb9a 100644 --- a/@commitlint/read/package.json +++ b/@commitlint/read/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/read", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Read commit messages from a specified range or last edit", "main": "lib/read.js", "types": "lib/read.d.ts", @@ -36,17 +36,17 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", "@types/git-raw-commits": "^2.0.3", - "@types/minimist": "^1.2.4", - "execa": "^8.0.1" + "@types/minimist": "^1.2.4" }, "dependencies": { - "@commitlint/top-level": "^19.0.0", - "@commitlint/types": "^19.0.0", + "@commitlint/top-level": "^19.8.0", + "@commitlint/types": "^19.8.0", "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8" + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/read/src/get-edit-commit.ts b/@commitlint/read/src/get-edit-commit.ts index 9dc4739e17..7754ecb802 100644 --- a/@commitlint/read/src/get-edit-commit.ts +++ b/@commitlint/read/src/get-edit-commit.ts @@ -1,21 +1,21 @@ -import toplevel from '@commitlint/top-level'; -import fs from 'fs/promises'; +import toplevel from "@commitlint/top-level"; +import fs from "fs/promises"; -import {getEditFilePath} from './get-edit-file-path.js'; +import { getEditFilePath } from "./get-edit-file-path.js"; // Get recently edited commit message export async function getEditCommit( cwd?: string, - edit?: boolean | string + edit?: boolean | string, ): Promise<string[]> { const top = await toplevel(cwd); - if (typeof top !== 'string') { + if (typeof top !== "string") { throw new TypeError(`Could not find git root from ${cwd}`); } const editFilePath = await getEditFilePath(top, edit); const editFile: Buffer = await fs.readFile(editFilePath); - return [`${editFile.toString('utf-8')}\n`]; + return [`${editFile.toString("utf-8")}\n`]; } diff --git a/@commitlint/read/src/get-edit-file-path.ts b/@commitlint/read/src/get-edit-file-path.ts index 4260b34f5f..b323dce1e2 100644 --- a/@commitlint/read/src/get-edit-file-path.ts +++ b/@commitlint/read/src/get-edit-file-path.ts @@ -1,26 +1,26 @@ -import path from 'path'; -import {Stats} from 'fs'; -import fs from 'fs/promises'; +import path from "node:path"; +import { Stats } from "node:fs"; +import fs from "fs/promises"; // Get path to recently edited commit message file export async function getEditFilePath( top: string, - edit?: boolean | string + edit?: boolean | string, ): Promise<string> { - if (typeof edit === 'string') { + if (typeof edit === "string") { return path.resolve(top, edit); } - const dotgitPath = path.join(top, '.git'); + const dotgitPath = path.join(top, ".git"); const dotgitStats: Stats = await fs.lstat(dotgitPath); if (dotgitStats.isDirectory()) { - return path.join(top, '.git/COMMIT_EDITMSG'); + return path.join(top, ".git/COMMIT_EDITMSG"); } const gitFile: string = await fs.readFile(dotgitPath, { - encoding: 'utf-8', + encoding: "utf-8", }); - const relativeGitPath = gitFile.replace('gitdir: ', '').replace('\n', ''); - return path.resolve(top, relativeGitPath, 'COMMIT_EDITMSG'); + const relativeGitPath = gitFile.replace("gitdir: ", "").replace("\n", ""); + return path.resolve(top, relativeGitPath, "COMMIT_EDITMSG"); } diff --git a/@commitlint/read/src/get-history-commits.ts b/@commitlint/read/src/get-history-commits.ts index 0abb3f4879..ad9fc0a705 100644 --- a/@commitlint/read/src/get-history-commits.ts +++ b/@commitlint/read/src/get-history-commits.ts @@ -1,11 +1,11 @@ -import gitRawCommits from 'git-raw-commits'; +import gitRawCommits from "git-raw-commits"; -import {streamToPromise} from './stream-to-promise.js'; +import { streamToPromise } from "./stream-to-promise.js"; // Get commit messages from history export async function getHistoryCommits( options: gitRawCommits.GitOptions, - opts: {cwd?: string} = {} + opts: { cwd?: string } = {}, ): Promise<string[]> { - return streamToPromise(gitRawCommits(options, {cwd: opts.cwd})); + return streamToPromise(gitRawCommits(options, { cwd: opts.cwd })); } diff --git a/@commitlint/read/src/read.test.ts b/@commitlint/read/src/read.test.ts index f9c38ee70c..c1903b1609 100644 --- a/@commitlint/read/src/read.test.ts +++ b/@commitlint/read/src/read.test.ts @@ -1,74 +1,152 @@ -import {test, expect} from 'vitest'; -import fs from 'fs/promises'; -import path from 'path'; -import {git} from '@commitlint/test'; -import {execa} from 'execa'; +import { test, expect } from "vitest"; +import fs from "fs/promises"; +import path from "node:path"; +import { git } from "@commitlint/test"; +import { x } from "tinyexec"; -import read from './read.js'; +import read from "./read.js"; -test('get edit commit message specified by the `edit` flag', async () => { +test("get edit commit message specified by the `edit` flag", async () => { const cwd: string = await git.bootstrap(); - await fs.writeFile(path.join(cwd, 'commit-msg-file'), 'foo'); + await fs.writeFile(path.join(cwd, "commit-msg-file"), "foo"); - const expected = ['foo\n']; - const actual = await read({edit: 'commit-msg-file', cwd}); + const expected = ["foo\n"]; + const actual = await read({ edit: "commit-msg-file", cwd }); expect(actual).toEqual(expected); }); -test('get edit commit message from git root', async () => { +test("get edit commit message from git root", async () => { const cwd: string = await git.bootstrap(); - await fs.writeFile(path.join(cwd, 'alpha.txt'), 'alpha'); - await execa('git', ['add', '.'], {cwd}); - await execa('git', ['commit', '-m', 'alpha'], {cwd}); - const expected = ['alpha\n\n']; - const actual = await read({edit: true, cwd}); + await fs.writeFile(path.join(cwd, "alpha.txt"), "alpha"); + await x("git", ["add", "."], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "alpha"], { nodeOptions: { cwd } }); + const expected = ["alpha\n\n"]; + const actual = await read({ edit: true, cwd }); expect(actual).toEqual(expected); }); -test('get history commit messages', async () => { +test("get history commit messages", async () => { const cwd: string = await git.bootstrap(); - await fs.writeFile(path.join(cwd, 'alpha.txt'), 'alpha'); - await execa('git', ['add', 'alpha.txt'], {cwd}); - await execa('git', ['commit', '-m', 'alpha'], {cwd}); - await execa('git', ['rm', 'alpha.txt'], {cwd}); - await execa('git', ['commit', '-m', 'remove alpha'], {cwd}); - - const expected = ['remove alpha\n\n', 'alpha\n\n']; - const actual = await read({cwd}); + await fs.writeFile(path.join(cwd, "alpha.txt"), "alpha"); + await x("git", ["add", "alpha.txt"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "alpha"], { nodeOptions: { cwd } }); + await x("git", ["rm", "alpha.txt"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "remove alpha"], { nodeOptions: { cwd } }); + + const expected = ["remove alpha\n\n", "alpha\n\n"]; + const actual = await read({ cwd }); expect(actual).toEqual(expected); }); -test('get edit commit message from git subdirectory', async () => { +test("get edit commit message from git subdirectory", async () => { const cwd: string = await git.bootstrap(); - await fs.mkdir(path.join(cwd, 'beta')); - await fs.writeFile(path.join(cwd, 'beta/beta.txt'), 'beta'); + await fs.mkdir(path.join(cwd, "beta")); + await fs.writeFile(path.join(cwd, "beta/beta.txt"), "beta"); - await execa('git', ['add', '.'], {cwd}); - await execa('git', ['commit', '-m', 'beta'], {cwd}); + await x("git", ["add", "."], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "beta"], { nodeOptions: { cwd } }); - const expected = ['beta\n\n']; - const actual = await read({edit: true, cwd}); + const expected = ["beta\n\n"]; + const actual = await read({ edit: true, cwd }); expect(actual).toEqual(expected); }); -test('get edit commit message while skipping first commit', async () => { +test("get edit commit message while skipping first commit", async () => { const cwd: string = await git.bootstrap(); - await fs.mkdir(path.join(cwd, 'beta')); - await fs.writeFile(path.join(cwd, 'beta/beta.txt'), 'beta'); - - await fs.writeFile(path.join(cwd, 'alpha.txt'), 'alpha'); - await execa('git', ['add', 'alpha.txt'], {cwd}); - await execa('git', ['commit', '-m', 'alpha'], {cwd}); - await fs.writeFile(path.join(cwd, 'beta.txt'), 'beta'); - await execa('git', ['add', 'beta.txt'], {cwd}); - await execa('git', ['commit', '-m', 'beta'], {cwd}); - await fs.writeFile(path.join(cwd, 'gamma.txt'), 'gamma'); - await execa('git', ['add', 'gamma.txt'], {cwd}); - await execa('git', ['commit', '-m', 'gamma'], {cwd}); - - const expected = ['beta\n\n']; - const actual = await read({from: 'HEAD~2', cwd, gitLogArgs: '--skip 1'}); + await fs.mkdir(path.join(cwd, "beta")); + await fs.writeFile(path.join(cwd, "beta/beta.txt"), "beta"); + + await fs.writeFile(path.join(cwd, "alpha.txt"), "alpha"); + await x("git", ["add", "alpha.txt"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "alpha"], { nodeOptions: { cwd } }); + await fs.writeFile(path.join(cwd, "beta.txt"), "beta"); + await x("git", ["add", "beta.txt"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "beta"], { nodeOptions: { cwd } }); + await fs.writeFile(path.join(cwd, "gamma.txt"), "gamma"); + await x("git", ["add", "gamma.txt"], { nodeOptions: { cwd } }); + await x("git", ["commit", "-m", "gamma"], { nodeOptions: { cwd } }); + + const expected = ["beta\n\n"]; + const actual = await read({ from: "HEAD~2", cwd, gitLogArgs: "--skip 1" }); expect(actual).toEqual(expected); }); + +test("should only read the last commit", async () => { + const cwd: string = await git.bootstrap(); + + await x("git", ["commit", "--allow-empty", "-m", "commit Z"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit Y"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit X"], { + nodeOptions: { cwd }, + }); + + const result = await read({ cwd, last: true }); + + expect(result).toEqual(["commit X"]); +}); + +test("should read commits from the last annotated tag", async () => { + const cwd: string = await git.bootstrap(); + + await x("git", ["commit", "--allow-empty", "-m", "chore: release v1.0.0"], { + nodeOptions: { cwd }, + }); + await x("git", ["tag", "v1.0.0", "--annotate", "-m", "v1.0.0"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit 1"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit 2"], { + nodeOptions: { cwd }, + }); + + const result = await read({ cwd, fromLastTag: true }); + + expect(result).toEqual(["commit 2\n\n", "commit 1\n\n"]); +}); + +test("should read commits from the last lightweight tag", async () => { + const cwd: string = await git.bootstrap(); + + await x( + "git", + ["commit", "--allow-empty", "-m", "chore: release v9.9.9-alpha.1"], + { nodeOptions: { cwd } }, + ); + await x("git", ["tag", "v9.9.9-alpha.1"], { nodeOptions: { cwd } }); + await x("git", ["commit", "--allow-empty", "-m", "commit A"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit B"], { + nodeOptions: { cwd }, + }); + + const result = await read({ cwd, fromLastTag: true }); + + expect(result).toEqual(["commit B\n\n", "commit A\n\n"]); +}); + +test("should not read any commits when there are no tags", async () => { + const cwd: string = await git.bootstrap(); + + await x("git", ["commit", "--allow-empty", "-m", "commit 7"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit 8"], { + nodeOptions: { cwd }, + }); + await x("git", ["commit", "--allow-empty", "-m", "commit 9"], { + nodeOptions: { cwd }, + }); + + const result = await read({ cwd, fromLastTag: true }); + + expect(result).toHaveLength(0); +}); diff --git a/@commitlint/read/src/read.ts b/@commitlint/read/src/read.ts index a272cca394..ae991a52d1 100644 --- a/@commitlint/read/src/read.ts +++ b/@commitlint/read/src/read.ts @@ -1,35 +1,82 @@ -import minimist from 'minimist'; -import type {GitOptions} from 'git-raw-commits'; +import minimist from "minimist"; +import type { GitOptions } from "git-raw-commits"; -import {getHistoryCommits} from './get-history-commits.js'; -import {getEditCommit} from './get-edit-commit.js'; +import { getHistoryCommits } from "./get-history-commits.js"; +import { getEditCommit } from "./get-edit-commit.js"; + +import { x } from "tinyexec"; interface GetCommitMessageOptions { cwd?: string; from?: string; + fromLastTag?: boolean; to?: string; + last?: boolean; edit?: boolean | string; gitLogArgs?: string; } // Get commit messages export default async function getCommitMessages( - settings: GetCommitMessageOptions + settings: GetCommitMessageOptions, ): Promise<string[]> { - const {cwd, from, to, edit, gitLogArgs} = settings; + const { cwd, fromLastTag, to, last, edit, gitLogArgs } = settings; + let from = settings.from; if (edit) { return getEditCommit(cwd, edit); } - let gitOptions: GitOptions = {from, to}; + if (last) { + const gitCommandResult = await x( + "git", + ["log", "-1", "--pretty=format:%B"], + { nodeOptions: { cwd } }, + ); + let output = gitCommandResult.stdout.trim(); + // strip output of extra quotation marks ("") + if (output[0] == '"' && output[output.length - 1] == '"') + output = output.slice(1, -1); + return [output]; + } + + if (!from && fromLastTag) { + const output = await x( + "git", + [ + "describe", + "--abbrev=40", + "--always", + "--first-parent", + "--long", + "--tags", + ], + { nodeOptions: { cwd } }, + ); + const stdout = output.stdout.trim(); + + if (stdout.length === 40) { + // Hash only means no last tag. Use that as the from ref which + // results in a no-op. + from = stdout; + } else { + // Description will be in the format: <tag>-<count>-g<hash> + // Example: v3.2.0-11-g9057371a52adaae5180d93fe4d0bb808d874b9fb + // Minus zero based (1), dash (1), "g" prefix (1), hash (40) = -43 + const tagSlice = stdout.lastIndexOf("-", stdout.length - 43); + + from = stdout.slice(0, tagSlice); + } + } + + let gitOptions: GitOptions = { from, to }; if (gitLogArgs) { gitOptions = { - ...minimist(gitLogArgs.split(' ')), + ...minimist(gitLogArgs.split(" ")), from, to, }; } - return getHistoryCommits(gitOptions, {cwd}); + return getHistoryCommits(gitOptions, { cwd }); } diff --git a/@commitlint/read/src/stream-to-promise.ts b/@commitlint/read/src/stream-to-promise.ts index afa8c63446..149fb05049 100644 --- a/@commitlint/read/src/stream-to-promise.ts +++ b/@commitlint/read/src/stream-to-promise.ts @@ -1,11 +1,11 @@ -import {Readable} from 'stream'; +import { Readable } from "node:stream"; export function streamToPromise(stream: Readable): Promise<string[]> { const data: string[] = []; return new Promise((resolve, reject) => stream - .on('data', (chunk) => data.push(chunk.toString('utf-8'))) - .on('error', reject) - .on('end', () => resolve(data)) + .on("data", (chunk) => data.push(chunk.toString("utf-8"))) + .on("error", reject) + .on("end", () => resolve(data)), ); } diff --git a/@commitlint/read/tsconfig.json b/@commitlint/read/tsconfig.json index f54e2e29b1..6edb67bd92 100644 --- a/@commitlint/read/tsconfig.json +++ b/@commitlint/read/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../top-level"}] + "references": [{ "path": "../top-level" }] } diff --git a/@commitlint/resolve-extends/CHANGELOG.md b/@commitlint/resolve-extends/CHANGELOG.md index 6046e9f73a..e788d89f77 100644 --- a/@commitlint/resolve-extends/CHANGELOG.md +++ b/@commitlint/resolve-extends/CHANGELOG.md @@ -3,6 +3,66 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add missing `conditions` param for `moduleResolve` ([#3962](https://github.com/conventional-changelog/commitlint/issues/3962)) ([67baff9](https://github.com/conventional-changelog/commitlint/commit/67baff9182854bbe184b6cf71f977920a05c27a3)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + + +### Bug Fixes + +* fallback to `resolve-from` for Yarn P'n'P ([#3941](https://github.com/conventional-changelog/commitlint/issues/3941)) ([1eb9b5f](https://github.com/conventional-changelog/commitlint/commit/1eb9b5f29979d35f5840141523850a7402633378)), closes [#3936](https://github.com/conventional-changelog/commitlint/issues/3936) + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + + +### Bug Fixes + +* drop `resolve-from`, `resolve-global` and `import-fresh`, resolve global packages correctly ([#3939](https://github.com/conventional-changelog/commitlint/issues/3939)) ([8793c63](https://github.com/conventional-changelog/commitlint/commit/8793c639c083c33714da0a29429b338776813d0c)), closes [#3938](https://github.com/conventional-changelog/commitlint/issues/3938) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/resolve-extends/package.json b/@commitlint/resolve-extends/package.json index 8bd53ec2b9..5857ab6d31 100644 --- a/@commitlint/resolve-extends/package.json +++ b/@commitlint/resolve-extends/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/resolve-extends", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,16 +36,16 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0", + "@commitlint/utils": "^19.8.0", "@types/lodash.mergewith": "^4.6.8" }, "dependencies": { - "@commitlint/config-validator": "^19.0.0", - "@commitlint/types": "^19.0.0", - "import-fresh": "^3.0.0", + "@commitlint/config-validator": "^19.8.0", + "@commitlint/types": "^19.8.0", + "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", - "resolve-global": "^2.0.0" + "resolve-from": "^5.0.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/resolve-extends/src/index.test.ts b/@commitlint/resolve-extends/src/index.test.ts index b088476e00..0e2306c48b 100644 --- a/@commitlint/resolve-extends/src/index.test.ts +++ b/@commitlint/resolve-extends/src/index.test.ts @@ -1,64 +1,64 @@ -import {test, expect, vi} from 'vitest'; -import {createRequire} from 'module'; -import {RuleConfigSeverity, UserConfig} from '@commitlint/types'; +import { test, expect, vi } from "vitest"; +import { createRequire } from "node:module"; +import { RuleConfigSeverity, UserConfig } from "@commitlint/types"; -import resolveExtends, {ResolveExtendsContext} from './index.js'; +import resolveExtends, { ResolveExtendsContext } from "./index.js"; const require = createRequire(import.meta.url); const id = (id: unknown) => id; -test('returns empty object when called without params', async () => { +test("returns empty object when called without params", async () => { const actual = await resolveExtends(); expect(actual).toEqual({}); }); -test('returns an equivalent object as passed in', async () => { - const expected = {foo: 'bar'}; +test("returns an equivalent object as passed in", async () => { + const expected = { foo: "bar" }; const actual = await resolveExtends(expected); expect(actual).toEqual(expected); }); -test('falls back to global install', async () => { - const resolveGlobal = vi.fn(() => '@commitlint/foo-bar'); +test("falls back to global install", async () => { + const resolveGlobal = vi.fn(() => "@commitlint/foo-bar"); const dynamicImport = vi.fn(() => ({})); - const ctx = {resolveGlobal, dynamicImport} as ResolveExtendsContext; + const ctx = { resolveGlobal, dynamicImport } as ResolveExtendsContext; - resolveExtends({extends: ['@commitlint/foo-bar']}, ctx); - expect(ctx.resolveGlobal).toHaveBeenCalledWith('@commitlint/foo-bar'); + resolveExtends({ extends: ["@commitlint/foo-bar"] }, ctx); + expect(ctx.resolveGlobal).toHaveBeenCalledWith("@commitlint/foo-bar"); }); -test('fails for missing extends', async () => { +test("fails for missing extends", async () => { await expect(() => - resolveExtends({extends: ['@commitlint/foo-bar']}) + resolveExtends({ extends: ["@commitlint/foo-bar"] }), ).rejects.toThrow(/Cannot find module "@commitlint\/foo-bar" from/); }); -test('resolves extends for single config', async () => { - const input = {extends: 'extender-name'}; +test("resolves extends for single config", async () => { + const input = { extends: "extender-name" }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; await resolveExtends(input, ctx); - expect(ctx.dynamicImport).toHaveBeenCalledWith('extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); }); -test('uses empty prefix by default', async () => { - const input = {extends: ['extender-name']}; +test("uses empty prefix by default", async () => { + const input = { extends: ["extender-name"] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; await resolveExtends(input, ctx); - expect(ctx.dynamicImport).toHaveBeenCalledWith('extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); }); -test('uses prefix as configured', async () => { - const input = {extends: ['extender-name']}; +test("uses prefix as configured", async () => { + const input = { extends: ["extender-name"] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), @@ -66,14 +66,14 @@ test('uses prefix as configured', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); - expect(ctx.dynamicImport).toHaveBeenCalledWith('prefix-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("prefix-extender-name"); }); -test('ignores prefix for scoped extends', async () => { - const input = {extends: ['@scope/extender-name']}; +test("ignores prefix for scoped extends", async () => { + const input = { extends: ["@scope/extender-name"] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), @@ -81,14 +81,14 @@ test('ignores prefix for scoped extends', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); - expect(ctx.dynamicImport).toHaveBeenCalledWith('@scope/extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("@scope/extender-name"); }); -test('adds prefix as suffix for scopes only', async () => { - const input = {extends: ['@scope']}; +test("adds prefix as suffix for scopes only", async () => { + const input = { extends: ["@scope"] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), @@ -96,14 +96,14 @@ test('adds prefix as suffix for scopes only', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); - expect(ctx.dynamicImport).toHaveBeenCalledWith('@scope/prefix'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("@scope/prefix"); }); -test('ignores prefix for relative extends', async () => { - const input = {extends: ['./extender']}; +test("ignores prefix for relative extends", async () => { + const input = { extends: ["./extender"] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), @@ -111,15 +111,15 @@ test('ignores prefix for relative extends', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); - expect(ctx.dynamicImport).toHaveBeenCalledWith('./extender'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("./extender"); }); -test('ignores prefix for absolute extends', async () => { - const absolutePath = require.resolve('@commitlint/config-angular'); - const input = {extends: [absolutePath]}; +test("ignores prefix for absolute extends", async () => { + const absolutePath = require.resolve("@commitlint/config-angular"); + const input = { extends: [absolutePath] }; const ctx = { resolve: id, dynamicImport: vi.fn(() => ({})), @@ -127,15 +127,15 @@ test('ignores prefix for absolute extends', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); expect(ctx.dynamicImport).toHaveBeenCalledWith(absolutePath); }); -test('propagates return value of require function', async () => { - const input = {extends: ['extender-name']}; - const propagated = {foo: 'bar'}; +test("propagates return value of require function", async () => { + const input = { extends: ["extender-name"] }; + const propagated = { foo: "bar" }; const ctx = { resolve: id, dynamicImport: vi.fn(() => propagated), @@ -145,15 +145,15 @@ test('propagates return value of require function', async () => { expect(actual).toEqual(expect.objectContaining(propagated)); }); -test('resolves extends recursively', async () => { - const input = {extends: ['extender-name']}; +test("resolves extends recursively", async () => { + const input = { extends: ["extender-name"] }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': - return {extends: ['recursive-extender-name']}; - case 'recursive-extender-name': - return {foo: 'bar'}; + case "extender-name": + return { extends: ["recursive-extender-name"] }; + case "recursive-extender-name": + return { foo: "bar" }; default: return {}; } @@ -165,19 +165,19 @@ test('resolves extends recursively', async () => { } as ResolveExtendsContext; await resolveExtends(input, ctx); - expect(ctx.dynamicImport).toHaveBeenCalledWith('extender-name'); - expect(ctx.dynamicImport).toHaveBeenCalledWith('recursive-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); + expect(ctx.dynamicImport).toHaveBeenCalledWith("recursive-extender-name"); }); -test('uses prefix key recursively', async () => { - const input = {extends: ['extender-name']}; +test("uses prefix key recursively", async () => { + const input = { extends: ["extender-name"] }; const dynamicImport = (id: string) => { switch (id) { - case 'prefix-extender-name': - return {extends: ['recursive-extender-name']}; - case 'prefix-recursive-extender-name': - return {foo: 'bar'}; + case "prefix-extender-name": + return { extends: ["recursive-extender-name"] }; + case "prefix-recursive-extender-name": + return { foo: "bar" }; default: return {}; } @@ -190,24 +190,24 @@ test('uses prefix key recursively', async () => { await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); - expect(ctx.dynamicImport).toHaveBeenCalledWith('prefix-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("prefix-extender-name"); expect(ctx.dynamicImport).toHaveBeenCalledWith( - 'prefix-recursive-extender-name' + "prefix-recursive-extender-name", ); }); -test('propagates contents recursively', async () => { - const input = {extends: ['extender-name']}; +test("propagates contents recursively", async () => { + const input = { extends: ["extender-name"] }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': - return {extends: ['recursive-extender-name'], foo: 'bar'}; - case 'recursive-extender-name': - return {baz: 'bar'}; + case "extender-name": + return { extends: ["recursive-extender-name"], foo: "bar" }; + case "recursive-extender-name": + return { baz: "bar" }; default: return {}; } @@ -221,26 +221,26 @@ test('propagates contents recursively', async () => { const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-name'], - foo: 'bar', - baz: 'bar', + extends: ["extender-name"], + foo: "bar", + baz: "bar", }; expect(actual).toEqual(expected); }); -test('propagates contents recursively with overlap', async () => { - const input: UserConfig = {extends: ['extender-name']}; +test("propagates contents recursively with overlap", async () => { + const input: UserConfig = { extends: ["extender-name"] }; const dynamicImport = (id: string): UserConfig => { switch (id) { - case 'extender-name': + case "extender-name": return { - extends: ['recursive-extender-name'], - rules: {rule: [RuleConfigSeverity.Warning, 'always']}, + extends: ["recursive-extender-name"], + rules: { rule: [RuleConfigSeverity.Warning, "always"] }, }; - case 'recursive-extender-name': - return {rules: {rule: [RuleConfigSeverity.Error, 'never', 'four']}}; + case "recursive-extender-name": + return { rules: { rule: [RuleConfigSeverity.Error, "never", "four"] } }; default: return {}; } @@ -254,27 +254,27 @@ test('propagates contents recursively with overlap', async () => { const actual = await resolveExtends(input, ctx); const expected: UserConfig = { - extends: ['extender-name'], + extends: ["extender-name"], rules: { - rule: [RuleConfigSeverity.Warning, 'always'], + rule: [RuleConfigSeverity.Warning, "always"], }, }; expect(actual).toEqual(expected); }); -test('extends rules from left to right with overlap', async () => { - const input: UserConfig = {extends: ['left', 'right']}; +test("extends rules from left to right with overlap", async () => { + const input: UserConfig = { extends: ["left", "right"] }; const dynamicImport = (id: string): UserConfig => { switch (id) { - case 'left': - return {rules: {a: [RuleConfigSeverity.Disabled, 'never', true]}}; - case 'right': + case "left": + return { rules: { a: [RuleConfigSeverity.Disabled, "never", true] } }; + case "right": return { rules: { - a: [RuleConfigSeverity.Disabled, 'never', false], - b: [RuleConfigSeverity.Disabled, 'never', true], + a: [RuleConfigSeverity.Disabled, "never", false], + b: [RuleConfigSeverity.Disabled, "never", true], }, }; default: @@ -290,32 +290,32 @@ test('extends rules from left to right with overlap', async () => { const actual = await resolveExtends(input, ctx); const expected: UserConfig = { - extends: ['left', 'right'], + extends: ["left", "right"], rules: { - a: [RuleConfigSeverity.Disabled, 'never', false], - b: [RuleConfigSeverity.Disabled, 'never', true], + a: [RuleConfigSeverity.Disabled, "never", false], + b: [RuleConfigSeverity.Disabled, "never", true], }, }; expect(actual).toEqual(expected); }); -test('extending contents should take precedence', async () => { - const input = {extends: ['extender-name'], zero: 'root'}; +test("extending contents should take precedence", async () => { + const input = { extends: ["extender-name"], zero: "root" }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': - return {extends: ['recursive-extender-name'], zero: id, one: id}; - case 'recursive-extender-name': + case "extender-name": + return { extends: ["recursive-extender-name"], zero: id, one: id }; + case "recursive-extender-name": return { - extends: ['second-recursive-extender-name'], + extends: ["second-recursive-extender-name"], zero: id, one: id, two: id, }; - case 'second-recursive-extender-name': - return {zero: id, one: id, two: id, three: id}; + case "second-recursive-extender-name": + return { zero: id, one: id, two: id, three: id }; default: return {}; } @@ -329,30 +329,30 @@ test('extending contents should take precedence', async () => { const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-name'], - zero: 'root', - one: 'extender-name', - two: 'recursive-extender-name', - three: 'second-recursive-extender-name', + extends: ["extender-name"], + zero: "root", + one: "extender-name", + two: "recursive-extender-name", + three: "second-recursive-extender-name", }; expect(actual).toEqual(expected); }); -test('should fall back to conventional-changelog-lint-config prefix', async () => { - const input = {extends: ['extender-name']}; +test("should fall back to conventional-changelog-lint-config prefix", async () => { + const input = { extends: ["extender-name"] }; const resolve = (id: string) => { - if (id === 'conventional-changelog-lint-config-extender-name') { - return 'conventional-changelog-lint-config-extender-name'; + if (id === "conventional-changelog-lint-config-extender-name") { + return "conventional-changelog-lint-config-extender-name"; } throw new Error(`Could not find module "*${id}"`); }; const dynamicImport = (id: string) => { switch (id) { - case 'conventional-changelog-lint-config-extender-name': - return {rules: {fallback: true}}; + case "conventional-changelog-lint-config-extender-name": + return { rules: { fallback: true } }; default: return {}; } @@ -365,31 +365,31 @@ test('should fall back to conventional-changelog-lint-config prefix', async () = const actual = await resolveExtends(input, { ...ctx, - prefix: 'prefix', + prefix: "prefix", }); expect(actual).toEqual({ - extends: ['extender-name'], + extends: ["extender-name"], rules: { fallback: true, }, }); }); -test('plugins should be merged correctly', async () => { - const input = {extends: ['extender-name'], zero: 'root'}; +test("plugins should be merged correctly", async () => { + const input = { extends: ["extender-name"], zero: "root" }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': - return {extends: ['recursive-extender-name'], plugins: ['test']}; - case 'recursive-extender-name': + case "extender-name": + return { extends: ["recursive-extender-name"], plugins: ["test"] }; + case "recursive-extender-name": return { - extends: ['second-recursive-extender-name'], - plugins: ['test2'], + extends: ["second-recursive-extender-name"], + plugins: ["test2"], }; - case 'second-recursive-extender-name': - return {plugins: ['test3']}; + case "second-recursive-extender-name": + return { plugins: ["test3"] }; default: return {}; } @@ -403,34 +403,34 @@ test('plugins should be merged correctly', async () => { const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-name'], - plugins: ['test3', 'test2', 'test'], - zero: 'root', + extends: ["extender-name"], + plugins: ["test3", "test2", "test"], + zero: "root", }; expect(actual).toEqual(expected); }); -test('rules should be merged correctly', async () => { +test("rules should be merged correctly", async () => { const input: UserConfig = { - extends: ['extender-name'], - rules: {test1: [RuleConfigSeverity.Warning, 'never', 'base']}, + extends: ["extender-name"], + rules: { test1: [RuleConfigSeverity.Warning, "never", "base"] }, }; const dynamicImport = (id: string): UserConfig => { switch (id) { - case 'extender-name': + case "extender-name": return { - extends: ['recursive-extender-name'], - rules: {test2: [RuleConfigSeverity.Error, 'never', id]}, + extends: ["recursive-extender-name"], + rules: { test2: [RuleConfigSeverity.Error, "never", id] }, }; - case 'recursive-extender-name': + case "recursive-extender-name": return { - extends: ['second-recursive-extender-name'], - rules: {test1: [RuleConfigSeverity.Disabled, 'never', id]}, + extends: ["second-recursive-extender-name"], + rules: { test1: [RuleConfigSeverity.Disabled, "never", id] }, }; - case 'second-recursive-extender-name': - return {rules: {test2: [RuleConfigSeverity.Warning, 'never', id]}}; + case "second-recursive-extender-name": + return { rules: { test2: [RuleConfigSeverity.Warning, "never", id] } }; default: return {}; } @@ -444,10 +444,10 @@ test('rules should be merged correctly', async () => { const actual = await resolveExtends(input, ctx); const expected: UserConfig = { - extends: ['extender-name'], + extends: ["extender-name"], rules: { - test1: [RuleConfigSeverity.Warning, 'never', 'base'], - test2: [RuleConfigSeverity.Error, 'never', 'extender-name'], + test1: [RuleConfigSeverity.Warning, "never", "base"], + test2: [RuleConfigSeverity.Error, "never", "extender-name"], }, }; @@ -455,23 +455,23 @@ test('rules should be merged correctly', async () => { }); // https://github.com/conventional-changelog/commitlint/issues/327 -test('parserPreset should resolve correctly in extended configuration', async () => { - const input = {extends: ['extender-name'], zero: 'root'}; +test("parserPreset should resolve correctly in extended configuration", async () => { + const input = { extends: ["extender-name"], zero: "root" }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': + case "extender-name": return { - extends: ['recursive-extender-name'], + extends: ["recursive-extender-name"], parserPreset: { parserOpts: { - issuePrefixes: ['#', '!', '&', 'no-references'], + issuePrefixes: ["#", "!", "&", "no-references"], referenceActions: null, }, }, }; - case 'recursive-extender-name': - return {parserPreset: {parserOpts: {issuePrefixes: ['#', '!']}}}; + case "recursive-extender-name": + return { parserPreset: { parserOpts: { issuePrefixes: ["#", "!"] } } }; default: return {}; } @@ -485,35 +485,35 @@ test('parserPreset should resolve correctly in extended configuration', async () const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-name'], + extends: ["extender-name"], parserPreset: { parserOpts: { - issuePrefixes: ['#', '!', '&', 'no-references'], + issuePrefixes: ["#", "!", "&", "no-references"], referenceActions: null, }, }, - zero: 'root', + zero: "root", }; expect(actual).toEqual(expected); }); -test('parserPreset should be merged correctly', async () => { - const input = {extends: ['extender-name'], zero: 'root'}; +test("parserPreset should be merged correctly", async () => { + const input = { extends: ["extender-name"], zero: "root" }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-name': + case "extender-name": return { - extends: ['recursive-extender-name'], + extends: ["recursive-extender-name"], parserPreset: { parserOpts: { referenceActions: null, }, }, }; - case 'recursive-extender-name': - return {parserPreset: {parserOpts: {issuePrefixes: ['#', '!']}}}; + case "recursive-extender-name": + return { parserPreset: { parserOpts: { issuePrefixes: ["#", "!"] } } }; default: return {}; } @@ -527,39 +527,39 @@ test('parserPreset should be merged correctly', async () => { const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-name'], + extends: ["extender-name"], parserPreset: { parserOpts: { - issuePrefixes: ['#', '!'], + issuePrefixes: ["#", "!"], referenceActions: null, }, }, - zero: 'root', + zero: "root", }; expect(actual).toEqual(expected); }); -test('should correctly merge nested configs', async () => { - const input = {extends: ['extender-1']}; +test("should correctly merge nested configs", async () => { + const input = { extends: ["extender-1"] }; const dynamicImport = (id: string) => { switch (id) { - case 'extender-1': - return {extends: ['extender-3', 'extender-2']}; - case 'extender-2': - return {extends: ['extender-4']}; - case 'extender-3': - return {rules: {test: [RuleConfigSeverity.Warning, 'never', 3]}}; - case 'extender-4': + case "extender-1": + return { extends: ["extender-3", "extender-2"] }; + case "extender-2": + return { extends: ["extender-4"] }; + case "extender-3": + return { rules: { test: [RuleConfigSeverity.Warning, "never", 3] } }; + case "extender-4": return { - extends: ['extender-5', 'extender-6'], - rules: {test: [RuleConfigSeverity.Warning, 'never', 4]}, + extends: ["extender-5", "extender-6"], + rules: { test: [RuleConfigSeverity.Warning, "never", 4] }, }; - case 'extender-5': - return {rules: {test: [RuleConfigSeverity.Warning, 'never', 5]}}; - case 'extender-6': - return {rules: {test: [RuleConfigSeverity.Warning, 'never', 6]}}; + case "extender-5": + return { rules: { test: [RuleConfigSeverity.Warning, "never", 5] } }; + case "extender-6": + return { rules: { test: [RuleConfigSeverity.Warning, "never", 6] } }; default: return {}; } @@ -573,9 +573,9 @@ test('should correctly merge nested configs', async () => { const actual = await resolveExtends(input, ctx); const expected = { - extends: ['extender-1'], + extends: ["extender-1"], rules: { - test: [RuleConfigSeverity.Warning, 'never', 4], + test: [RuleConfigSeverity.Warning, "never", 4], }, }; diff --git a/@commitlint/resolve-extends/src/index.ts b/@commitlint/resolve-extends/src/index.ts index f8b18a08ac..8c6942db27 100644 --- a/@commitlint/resolve-extends/src/index.ts +++ b/@commitlint/resolve-extends/src/index.ts @@ -1,36 +1,59 @@ -import path from 'path'; -import {pathToFileURL, fileURLToPath} from 'url'; +import fs from "node:fs"; +import path from "node:path"; +import { pathToFileURL, fileURLToPath } from "node:url"; -import 'resolve-global'; - -import {moduleResolve} from 'import-meta-resolve'; -import mergeWith from 'lodash.mergewith'; -import {validateConfig} from '@commitlint/config-validator'; -import type {ParserPreset, UserConfig} from '@commitlint/types'; -import importFresh from 'import-fresh'; +import globalDirectory from "global-directory"; +import { moduleResolve } from "import-meta-resolve"; +import mergeWith from "lodash.mergewith"; +import resolveFrom_ from "resolve-from"; +import { validateConfig } from "@commitlint/config-validator"; +import type { ParserPreset, UserConfig } from "@commitlint/types"; const dynamicImport = async <T>(id: string): Promise<T> => { const imported = await import( path.isAbsolute(id) ? pathToFileURL(id).toString() : id ); - return ('default' in imported && imported.default) || imported; + return ("default" in imported && imported.default) || imported; }; +const pathSuffixes = [ + "", + ".js", + ".json", + `${path.sep}index.js`, + `${path.sep}index.json`, +]; + +const specifierSuffixes = ["", ".js", ".json", "/index.js", "/index.json"]; + +const conditions = new Set(["import", "node"]); + /** * @see moduleResolve */ -export const resolveFrom = (specifier: string, parent?: string): string => { - let resolved: URL; +export const resolveFrom = (lookup: string, parent?: string): string => { + if (path.isAbsolute(lookup)) { + for (const suffix of pathSuffixes) { + const filename = lookup + suffix; + if (fs.existsSync(filename)) { + return filename; + } + } + } + let resolveError: Error | undefined; - for (const suffix of ['', '.js', '.json', '/index.js', '/index.json']) { - try { - resolved = moduleResolve( - specifier + suffix, - pathToFileURL(parent ? parent : import.meta.url) - ); + const base = pathToFileURL( + parent + ? fs.statSync(parent).isDirectory() + ? path.join(parent, "noop.js") + : parent + : import.meta.url, + ); - return fileURLToPath(resolved); + for (const suffix of specifierSuffixes) { + try { + return fileURLToPath(moduleResolve(lookup + suffix, base, conditions)); } catch (err) { if (!resolveError) { resolveError = err as Error; @@ -38,7 +61,15 @@ export const resolveFrom = (specifier: string, parent?: string): string => { } } - throw resolveError; + try { + /** + * Yarn P'n'P does not support pure ESM well, this is only a workaround for + * @see https://github.com/conventional-changelog/commitlint/issues/3936 + */ + return resolveFrom_(path.dirname(fileURLToPath(base)), lookup); + } catch { + throw resolveError; + } }; /** @@ -47,14 +78,14 @@ export const resolveFrom = (specifier: string, parent?: string): string => { * @returns path and parserOpts function retrieved from `resolvedParserPreset` */ export const loadParserPreset = async ( - resolvedParserPreset: string -): Promise<Pick<ParserPreset, 'path' | 'parserOpts'>> => { + resolvedParserPreset: string, +): Promise<Pick<ParserPreset, "path" | "parserOpts">> => { const finalParserOpts = await dynamicImport(resolvedParserPreset); const relativeParserPath = path.relative(process.cwd(), resolvedParserPreset); return { - path: `./${relativeParserPath}`.split(path.sep).join('/'), + path: `./${relativeParserPath}`.split(path.sep).join("/"), parserOpts: finalParserOpts, }; }; @@ -63,22 +94,22 @@ export interface ResolveExtendsContext { cwd?: string; parserPreset?: string | ParserPreset; prefix?: string; - resolve?(id: string, ctx?: {prefix?: string; cwd?: string}): string; + resolve?(id: string, ctx?: { prefix?: string; cwd?: string }): string; resolveGlobal?: (id: string) => string; dynamicImport?<T>(id: string): T | Promise<T>; } export default async function resolveExtends( config: UserConfig = {}, - context: ResolveExtendsContext = {} + context: ResolveExtendsContext = {}, ): Promise<UserConfig> { - const {extends: e} = config; + const { extends: e } = config; const extended = await loadExtends(config, context); extended.push(config); return extended.reduce( - (r, {extends: _, ...c}) => + (r, { extends: _, ...c }) => mergeWith(r, c, (objValue, srcValue, key) => { - if (key === 'plugins') { + if (key === "plugins") { if (Array.isArray(objValue)) { return objValue.concat(srcValue); } @@ -86,20 +117,15 @@ export default async function resolveExtends( return srcValue; } }), - e ? {extends: e} : {} + e ? { extends: e } : {}, ); } -/** - * Fake file name to provide {@link moduleResolve} a filename to resolve from the configuration cwd - */ -const FAKE_FILE_NAME_FOR_RESOLVER = '__'; - async function loadExtends( config: UserConfig = {}, - context: ResolveExtendsContext = {} + context: ResolveExtendsContext = {}, ): Promise<UserConfig[]> { - const {extends: e} = config; + const { extends: e } = config; const ext = e ? (Array.isArray(e) ? e : [e]) : []; return await ext.reduce(async (configs, raw) => { @@ -109,18 +135,15 @@ async function loadExtends( parserPreset?: string; }>(resolved); const cwd = path.dirname(resolved); - const ctx = {...context, cwd}; + const ctx = { ...context, cwd }; // Resolve parser preset if none was present before if ( !context.parserPreset && - typeof c === 'object' && - typeof c.parserPreset === 'string' + typeof c === "object" && + typeof c.parserPreset === "string" ) { - const resolvedParserPreset = resolveFrom( - c.parserPreset, - path.join(cwd, FAKE_FILE_NAME_FOR_RESOLVER) - ); + const resolvedParserPreset = resolveFrom(c.parserPreset, cwd); const parserPreset: ParserPreset = { name: c.parserPreset, @@ -137,88 +160,81 @@ async function loadExtends( }, Promise.resolve<UserConfig[]>([])); } -function getId(raw: string = '', prefix: string = ''): string { +function getId(raw: string = "", prefix: string = ""): string { const first = raw.charAt(0); - const scoped = first === '@'; - const relative = first === '.'; + const scoped = first === "@"; + const relative = first === "."; const absolute = path.isAbsolute(raw); if (scoped) { - return raw.includes('/') ? raw : [raw, prefix].filter(String).join('/'); + return raw.includes("/") ? raw : [raw, prefix].filter(String).join("/"); } - return relative || absolute ? raw : [prefix, raw].filter(String).join('-'); + return relative || absolute ? raw : [prefix, raw].filter(String).join("-"); } function resolveConfig( raw: string, - context: ResolveExtendsContext = {} + context: ResolveExtendsContext = {}, ): string { - const resolve = context.resolve || tryResolveId; + const resolve = context.resolve || resolveId; const id = getId(raw, context.prefix); let resolved: string; try { resolved = resolve(id, context); } catch (err) { - const legacy = getId(raw, 'conventional-changelog-lint-config'); + const legacy = getId(raw, "conventional-changelog-lint-config"); resolved = resolve(legacy, context); console.warn( - `Resolving ${raw} to legacy config ${legacy}. To silence this warning raise an issue at 'npm repo ${legacy}' to rename to ${id}.` + `Resolving ${raw} to legacy config ${legacy}. To silence this warning raise an issue at 'npm repo ${legacy}' to rename to ${id}.`, ); } return resolved; } -function tryResolveId(id: string, context: ResolveExtendsContext) { - const cwd = context.cwd || process.cwd(); - - for (const suffix of ['', '.js', '.json', '/index.js', '/index.json']) { - try { - return fileURLToPath( - moduleResolve(id + suffix, pathToFileURL(path.join(cwd, id))) - ); - } catch {} - } - - return resolveId(id, context); -} - function resolveId( specifier: string, - context: ResolveExtendsContext = {} + context: ResolveExtendsContext = {}, ): string { const cwd = context.cwd || process.cwd(); const localPath = resolveFromSilent(specifier, cwd); - if (typeof localPath === 'string') { + if (typeof localPath === "string") { return localPath; } const resolveGlobal = context.resolveGlobal || resolveGlobalSilent; const globalPath = resolveGlobal(specifier); - if (typeof globalPath === 'string') { + if (typeof globalPath === "string") { return globalPath; } const err = new Error(`Cannot find module "${specifier}" from "${cwd}"`); - throw Object.assign(err, {code: 'MODULE_NOT_FOUND'}); + throw Object.assign(err, { code: "MODULE_NOT_FOUND" }); } -function resolveFromSilent(specifier: string, parent: string): string | void { +export function resolveFromSilent( + specifier: string, + parent: string, +): string | void { try { - return resolveFrom( - specifier, - path.join(parent, FAKE_FILE_NAME_FOR_RESOLVER) - ); - } catch (err) {} + return resolveFrom(specifier, parent); + } catch {} } -function resolveGlobalSilent(specifier: string): string | void { - try { - const resolveGlobal = importFresh<(id: string) => string>('resolve-global'); - return resolveGlobal(specifier); - } catch (err) {} +/** + * @see https://github.com/sindresorhus/resolve-global/blob/682a6bb0bd8192b74a6294219bb4c536b3708b65/index.js#L7 + */ +export function resolveGlobalSilent(specifier: string): string | void { + for (const globalPackages of [ + globalDirectory.npm.packages, + globalDirectory.yarn.packages, + ]) { + try { + return resolveFrom(specifier, globalPackages); + } catch {} + } } diff --git a/@commitlint/resolve-extends/tsconfig.json b/@commitlint/resolve-extends/tsconfig.json index d424776e00..ebcddb79e9 100644 --- a/@commitlint/resolve-extends/tsconfig.json +++ b/@commitlint/resolve-extends/tsconfig.json @@ -8,5 +8,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../types"}, {"path": "../config-validator"}] + "references": [{ "path": "../types" }, { "path": "../config-validator" }] } diff --git a/@commitlint/rules/CHANGELOG.md b/@commitlint/rules/CHANGELOG.md index 96ef76dc87..4be8eb32d1 100644 --- a/@commitlint/rules/CHANGELOG.md +++ b/@commitlint/rules/CHANGELOG.md @@ -3,6 +3,55 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + + +### Features + +* support using delimiter in `scope-enum` ([#4161](https://github.com/conventional-changelog/commitlint/issues/4161)) ([f55521d](https://github.com/conventional-changelog/commitlint/commit/f55521dbb8ce0530ecb9557122689bba740fb2a5)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/rules + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + + +### Bug Fixes + +* **rules:** handle blank commit message in signed-off-by check ([#4124](https://github.com/conventional-changelog/commitlint/issues/4124)) ([7ab4bab](https://github.com/conventional-changelog/commitlint/commit/7ab4bab31f4b19ddedd850e435398037437007b6)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/rules + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/rules/package.json b/@commitlint/rules/package.json index b7f6aac41c..51416481df 100644 --- a/@commitlint/rules/package.json +++ b/@commitlint/rules/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/rules", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,18 +36,17 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^19.0.0", - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0", + "@commitlint/parse": "^19.8.0", + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0", "conventional-changelog-angular": "^7.0.0", "glob": "^10.3.10" }, "dependencies": { - "@commitlint/ensure": "^19.0.0", - "@commitlint/message": "^19.0.0", - "@commitlint/to-lines": "^19.0.0", - "@commitlint/types": "^19.0.0", - "execa": "^8.0.1" + "@commitlint/ensure": "^19.8.0", + "@commitlint/message": "^19.8.0", + "@commitlint/to-lines": "^19.8.0", + "@commitlint/types": "^19.8.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/rules/src/body-case.test.ts b/@commitlint/rules/src/body-case.test.ts index 4bff32d233..9ff7b5dc23 100644 --- a/@commitlint/rules/src/body-case.test.ts +++ b/@commitlint/rules/src/body-case.test.ts @@ -1,12 +1,12 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyCase} from './body-case.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyCase } from "./body-case.js"; const messages = { - empty: 'test: subject', - lowercase: 'test: subject\nbody', - mixedcase: 'test: subject\nBody', - uppercase: 'test: subject\nBODY', + empty: "test: subject", + lowercase: "test: subject\nbody", + mixedcase: "test: subject\nBody", + uppercase: "test: subject\nBODY", }; const parsed = { @@ -17,73 +17,73 @@ const parsed = { }; test('with empty body should succeed for "never lowercase"', async () => { - const [actual] = bodyCase(await parsed.empty, 'never', 'lowercase'); + const [actual] = bodyCase(await parsed.empty, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty body should succeed for "always lowercase"', async () => { - const [actual] = bodyCase(await parsed.empty, 'always', 'lowercase'); + const [actual] = bodyCase(await parsed.empty, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty body should succeed for "never uppercase"', async () => { - const [actual] = bodyCase(await parsed.empty, 'never', 'uppercase'); + const [actual] = bodyCase(await parsed.empty, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty body should succeed for "always uppercase"', async () => { - const [actual] = bodyCase(await parsed.empty, 'always', 'uppercase'); + const [actual] = bodyCase(await parsed.empty, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase body should fail for "never lowercase"', async () => { - const [actual] = bodyCase(await parsed.lowercase, 'never', 'lowercase'); + const [actual] = bodyCase(await parsed.lowercase, "never", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase body should succeed for "always lowercase"', async () => { - const [actual] = bodyCase(await parsed.lowercase, 'always', 'lowercase'); + const [actual] = bodyCase(await parsed.lowercase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase body should succeed for "never lowercase"', async () => { - const [actual] = bodyCase(await parsed.mixedcase, 'never', 'lowercase'); + const [actual] = bodyCase(await parsed.mixedcase, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase body should fail for "always lowercase"', async () => { - const [actual] = bodyCase(await parsed.mixedcase, 'always', 'lowercase'); + const [actual] = bodyCase(await parsed.mixedcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase body should succeed for "never uppercase"', async () => { - const [actual] = bodyCase(await parsed.mixedcase, 'never', 'uppercase'); + const [actual] = bodyCase(await parsed.mixedcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase body should fail for "always uppercase"', async () => { - const [actual] = bodyCase(await parsed.mixedcase, 'always', 'uppercase'); + const [actual] = bodyCase(await parsed.mixedcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase body should fail for "never uppercase"', async () => { - const [actual] = bodyCase(await parsed.uppercase, 'never', 'uppercase'); + const [actual] = bodyCase(await parsed.uppercase, "never", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase body should succeed for "always uppercase"', async () => { - const [actual] = bodyCase(await parsed.uppercase, 'always', 'uppercase'); + const [actual] = bodyCase(await parsed.uppercase, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/body-case.ts b/@commitlint/rules/src/body-case.ts index 6c0291c22d..3870fb6238 100644 --- a/@commitlint/rules/src/body-case.ts +++ b/@commitlint/rules/src/body-case.ts @@ -1,24 +1,24 @@ -import {case as ensureCase} from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {TargetCaseType, SyncRule} from '@commitlint/types'; +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; -const negated = (when?: string) => when === 'never'; +const negated = (when?: string) => when === "never"; export const bodyCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {body} = parsed; + const { body } = parsed; if (!body) { return [true]; } const checks = (Array.isArray(value) ? value : [value]).map((check) => { - if (typeof check === 'string') { + if (typeof check === "string") { return { - when: 'always', + when: "always", case: check, }; } @@ -30,7 +30,7 @@ export const bodyCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( return negated(check.when) ? !r : r; }); - const list = checks.map((c) => c.case).join(', '); + const list = checks.map((c) => c.case).join(", "); return [ negated(when) ? !result : result, diff --git a/@commitlint/rules/src/body-empty.test.ts b/@commitlint/rules/src/body-empty.test.ts index 1150957207..fb1f82cbe9 100644 --- a/@commitlint/rules/src/body-empty.test.ts +++ b/@commitlint/rules/src/body-empty.test.ts @@ -1,10 +1,10 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyEmpty} from './body-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyEmpty } from "./body-empty.js"; const messages = { - empty: 'test: subject', - filled: 'test: subject\nbody', + empty: "test: subject", + filled: "test: subject\nbody", }; const parsed = { @@ -12,38 +12,38 @@ const parsed = { filled: parse(messages.filled), }; -test('with empty body should succeed for empty keyword', async () => { +test("with empty body should succeed for empty keyword", async () => { const [actual] = bodyEmpty(await parsed.empty); const expected = true; expect(actual).toEqual(expected); }); test('with empty body should fail for "never"', async () => { - const [actual] = bodyEmpty(await parsed.empty, 'never'); + const [actual] = bodyEmpty(await parsed.empty, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with empty body should succeed for "always"', async () => { - const [actual] = bodyEmpty(await parsed.empty, 'always'); + const [actual] = bodyEmpty(await parsed.empty, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with body should fail for empty keyword', async () => { +test("with body should fail for empty keyword", async () => { const [actual] = bodyEmpty(await parsed.filled); const expected = false; expect(actual).toEqual(expected); }); test('with body should succeed for "never"', async () => { - const [actual] = bodyEmpty(await parsed.filled, 'never'); + const [actual] = bodyEmpty(await parsed.filled, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with body should fail for "always"', async () => { - const [actual] = bodyEmpty(await parsed.filled, 'always'); + const [actual] = bodyEmpty(await parsed.filled, "always"); const expected = false; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/body-empty.ts b/@commitlint/rules/src/body-empty.ts index 76ddc72ae6..520f251acb 100644 --- a/@commitlint/rules/src/body-empty.ts +++ b/@commitlint/rules/src/body-empty.ts @@ -1,13 +1,13 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const bodyEmpty: SyncRule = (parsed, when = 'always') => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.body || ''); +export const bodyEmpty: SyncRule = (parsed, when = "always") => { + const negated = when === "never"; + const notEmpty = ensure.notEmpty(parsed.body || ""); return [ negated ? notEmpty : !notEmpty, - message(['body', negated ? 'may not' : 'must', 'be empty']), + message(["body", negated ? "may not" : "must", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/body-full-stop.test.ts b/@commitlint/rules/src/body-full-stop.test.ts index d84d3629d1..0c08f7b8c1 100644 --- a/@commitlint/rules/src/body-full-stop.test.ts +++ b/@commitlint/rules/src/body-full-stop.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyFullStop} from './body-full-stop.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyFullStop } from "./body-full-stop.js"; const messages = { - empty: 'test:\n', + empty: "test:\n", with: `test: subject\n\nbody.`, without: `test: subject\n\nbody`, }; @@ -15,37 +15,37 @@ const parsed = { }; test('empty against "always" should succeed', async () => { - const [actual] = bodyFullStop(await parsed.empty, 'always', '.'); + const [actual] = bodyFullStop(await parsed.empty, "always", "."); const expected = true; expect(actual).toEqual(expected); }); test('empty against "never ." should succeed', async () => { - const [actual] = bodyFullStop(await parsed.empty, 'never', '.'); + const [actual] = bodyFullStop(await parsed.empty, "never", "."); const expected = true; expect(actual).toEqual(expected); }); test('with against "always ." should succeed', async () => { - const [actual] = bodyFullStop(await parsed.with, 'always', '.'); + const [actual] = bodyFullStop(await parsed.with, "always", "."); const expected = true; expect(actual).toEqual(expected); }); test('with against "never ." should fail', async () => { - const [actual] = bodyFullStop(await parsed.with, 'never', '.'); + const [actual] = bodyFullStop(await parsed.with, "never", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "always ." should fail', async () => { - const [actual] = bodyFullStop(await parsed.without, 'always', '.'); + const [actual] = bodyFullStop(await parsed.without, "always", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "never ." should succeed', async () => { - const [actual] = bodyFullStop(await parsed.without, 'never', '.'); + const [actual] = bodyFullStop(await parsed.without, "never", "."); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/body-full-stop.ts b/@commitlint/rules/src/body-full-stop.ts index 61d79ec7c8..845b0f5790 100644 --- a/@commitlint/rules/src/body-full-stop.ts +++ b/@commitlint/rules/src/body-full-stop.ts @@ -1,10 +1,10 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const bodyFullStop: SyncRule<string> = ( parsed, - when = 'always', - value = '.' + when = "always", + value = ".", ) => { const input = parsed.body; @@ -12,11 +12,11 @@ export const bodyFullStop: SyncRule<string> = ( return [true]; } - const negated = when === 'never'; + const negated = when === "never"; const hasStop = input[input.length - 1] === value; return [ negated ? !hasStop : hasStop, - message(['body', negated ? 'may not' : 'must', 'end with full stop']), + message(["body", negated ? "may not" : "must", "end with full stop"]), ]; }; diff --git a/@commitlint/rules/src/body-leading-blank.test.ts b/@commitlint/rules/src/body-leading-blank.test.ts index 9c63a34d23..a30e243afa 100644 --- a/@commitlint/rules/src/body-leading-blank.test.ts +++ b/@commitlint/rules/src/body-leading-blank.test.ts @@ -1,11 +1,11 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyLeadingBlank} from './body-leading-blank.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyLeadingBlank } from "./body-leading-blank.js"; const messages = { - simple: 'test: subject', - without: 'test: subject\nbody', - with: 'test: subject\n\nbody', + simple: "test: subject", + without: "test: subject\nbody", + with: "test: subject\n\nbody", }; const parsed = { @@ -14,56 +14,56 @@ const parsed = { with: parse(messages.with), }; -test('with simple message should succeed for empty keyword', async () => { +test("with simple message should succeed for empty keyword", async () => { const [actual] = bodyLeadingBlank(await parsed.simple); const expected = true; expect(actual).toEqual(expected); }); test('with simple message should succeed for "never"', async () => { - const [actual] = bodyLeadingBlank(await parsed.simple, 'never'); + const [actual] = bodyLeadingBlank(await parsed.simple, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with simple message should succeed for "always"', async () => { - const [actual] = bodyLeadingBlank(await parsed.simple, 'always'); + const [actual] = bodyLeadingBlank(await parsed.simple, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('without blank line before body should fail for empty keyword', async () => { +test("without blank line before body should fail for empty keyword", async () => { const [actual] = bodyLeadingBlank(await parsed.without); const expected = false; expect(actual).toEqual(expected); }); test('without blank line before body should succeed for "never"', async () => { - const [actual] = bodyLeadingBlank(await parsed.without, 'never'); + const [actual] = bodyLeadingBlank(await parsed.without, "never"); const expected = true; expect(actual).toEqual(expected); }); test('without blank line before body should fail for "always"', async () => { - const [actual] = bodyLeadingBlank(await parsed.without, 'always'); + const [actual] = bodyLeadingBlank(await parsed.without, "always"); const expected = false; expect(actual).toEqual(expected); }); -test('with blank line before body should succeed for empty keyword', async () => { +test("with blank line before body should succeed for empty keyword", async () => { const [actual] = bodyLeadingBlank(await parsed.with); const expected = true; expect(actual).toEqual(expected); }); test('with blank line before body should fail for "never"', async () => { - const [actual] = bodyLeadingBlank(await parsed.with, 'never'); + const [actual] = bodyLeadingBlank(await parsed.with, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with blank line before body should succeed for "always"', async () => { - const [actual] = bodyLeadingBlank(await parsed.with, 'always'); + const [actual] = bodyLeadingBlank(await parsed.with, "always"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/body-leading-blank.ts b/@commitlint/rules/src/body-leading-blank.ts index 36a4ce7d5e..ae55973341 100644 --- a/@commitlint/rules/src/body-leading-blank.ts +++ b/@commitlint/rules/src/body-leading-blank.ts @@ -1,6 +1,6 @@ -import toLines from '@commitlint/to-lines'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import toLines from "@commitlint/to-lines"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const bodyLeadingBlank: SyncRule = (parsed, when) => { // Flunk if no body is found @@ -8,14 +8,14 @@ export const bodyLeadingBlank: SyncRule = (parsed, when) => { return [true]; } - const negated = when === 'never'; + const negated = when === "never"; const [leading] = toLines(parsed.raw).slice(1); // Check if the first line of body is empty - const succeeds = leading === ''; + const succeeds = leading === ""; return [ negated ? !succeeds : succeeds, - message(['body', negated ? 'may not' : 'must', 'have leading blank line']), + message(["body", negated ? "may not" : "must", "have leading blank line"]), ]; }; diff --git a/@commitlint/rules/src/body-max-length.test.ts b/@commitlint/rules/src/body-max-length.test.ts index fb22498d64..0b85c58b0f 100644 --- a/@commitlint/rules/src/body-max-length.test.ts +++ b/@commitlint/rules/src/body-max-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyMaxLength} from './body-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyMaxLength } from "./body-max-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = short.length; const messages = { - empty: 'test: subject', + empty: "test: subject", short: `test: subject\n${short}`, long: `test: subject\n${long}`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = bodyMaxLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = bodyMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = bodyMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/body-max-length.ts b/@commitlint/rules/src/body-max-length.ts index 9121129056..2b0ca2f1b2 100644 --- a/@commitlint/rules/src/body-max-length.ts +++ b/@commitlint/rules/src/body-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const bodyMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.body; diff --git a/@commitlint/rules/src/body-max-line-length.test.ts b/@commitlint/rules/src/body-max-line-length.test.ts index d2a4628415..26974ca6cc 100644 --- a/@commitlint/rules/src/body-max-line-length.test.ts +++ b/@commitlint/rules/src/body-max-line-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyMaxLineLength} from './body-max-line-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyMaxLineLength } from "./body-max-line-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = short.length; const messages = { - empty: 'test: subject', + empty: "test: subject", short: `test: subject\n${short}`, long: `test: subject\n${long}`, shortMultipleLines: `test:subject\n${short}\n${short}\n${short}`, @@ -21,31 +21,31 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = bodyMaxLineLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = bodyMaxLineLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = bodyMaxLineLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with short with multiple lines should succeed', async () => { +test("with short with multiple lines should succeed", async () => { const [actual] = bodyMaxLineLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long with multiple lines should fail', async () => { +test("with long with multiple lines should fail", async () => { const [actual] = bodyMaxLineLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/body-max-line-length.ts b/@commitlint/rules/src/body-max-line-length.ts index 5e937ef7e9..5049b09eec 100644 --- a/@commitlint/rules/src/body-max-line-length.ts +++ b/@commitlint/rules/src/body-max-line-length.ts @@ -1,10 +1,10 @@ -import {maxLineLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLineLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const bodyMaxLineLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.body; diff --git a/@commitlint/rules/src/body-min-length.test.ts b/@commitlint/rules/src/body-min-length.test.ts index 33d8e57475..bc9413c14e 100644 --- a/@commitlint/rules/src/body-min-length.test.ts +++ b/@commitlint/rules/src/body-min-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {bodyMinLength} from './body-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyMinLength } from "./body-min-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = long.length; const messages = { - simple: 'test: subject', + simple: "test: subject", short: `test: subject\n${short}`, long: `test: subject\n${long}`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with simple should succeed', async () => { +test("with simple should succeed", async () => { const [actual] = bodyMinLength(await parsed.simple, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = bodyMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = bodyMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/body-min-length.ts b/@commitlint/rules/src/body-min-length.ts index f769e1a4a9..958e39af0c 100644 --- a/@commitlint/rules/src/body-min-length.ts +++ b/@commitlint/rules/src/body-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const bodyMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { if (!parsed.body) { return [true]; diff --git a/@commitlint/rules/src/footer-empty.test.ts b/@commitlint/rules/src/footer-empty.test.ts index bfe001c7b2..da98f6541b 100644 --- a/@commitlint/rules/src/footer-empty.test.ts +++ b/@commitlint/rules/src/footer-empty.test.ts @@ -1,11 +1,11 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {footerEmpty} from './footer-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { footerEmpty } from "./footer-empty.js"; const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', - filled: 'test: subject\nBREAKING CHANGE: something important', + simple: "test: subject", + empty: "test: subject\nbody", + filled: "test: subject\nBREAKING CHANGE: something important", }; const parsed = { @@ -14,56 +14,56 @@ const parsed = { filled: parse(messages.filled), }; -test('with simple message should succeed for empty keyword', async () => { +test("with simple message should succeed for empty keyword", async () => { const [actual] = footerEmpty(await parsed.simple); const expected = true; expect(actual).toEqual(expected); }); test('with simple message should fail for "never"', async () => { - const [actual] = footerEmpty(await parsed.simple, 'never'); + const [actual] = footerEmpty(await parsed.simple, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with simple message should succeed for "always"', async () => { - const [actual] = footerEmpty(await parsed.simple, 'always'); + const [actual] = footerEmpty(await parsed.simple, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with empty footer should succeed for empty keyword', async () => { +test("with empty footer should succeed for empty keyword", async () => { const [actual] = footerEmpty(await parsed.empty); const expected = true; expect(actual).toEqual(expected); }); test('with empty footer should fail for "never"', async () => { - const [actual] = footerEmpty(await parsed.empty, 'never'); + const [actual] = footerEmpty(await parsed.empty, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with empty footer should succeed for "always"', async () => { - const [actual] = footerEmpty(await parsed.empty, 'always'); + const [actual] = footerEmpty(await parsed.empty, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with footer should fail for empty keyword', async () => { +test("with footer should fail for empty keyword", async () => { const [actual] = footerEmpty(await parsed.filled); const expected = false; expect(actual).toEqual(expected); }); test('with footer should succeed for "never"', async () => { - const [actual] = footerEmpty(await parsed.filled, 'never'); + const [actual] = footerEmpty(await parsed.filled, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with footer should fail for "always"', async () => { - const [actual] = footerEmpty(await parsed.filled, 'always'); + const [actual] = footerEmpty(await parsed.filled, "always"); const expected = false; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/footer-empty.ts b/@commitlint/rules/src/footer-empty.ts index 9a3d8a81c1..c007f025c8 100644 --- a/@commitlint/rules/src/footer-empty.ts +++ b/@commitlint/rules/src/footer-empty.ts @@ -1,13 +1,13 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const footerEmpty: SyncRule = (parsed, when = 'always') => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.footer || ''); +export const footerEmpty: SyncRule = (parsed, when = "always") => { + const negated = when === "never"; + const notEmpty = ensure.notEmpty(parsed.footer || ""); return [ negated ? notEmpty : !notEmpty, - message(['footer', negated ? 'may not' : 'must', 'be empty']), + message(["footer", negated ? "may not" : "must", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/footer-leading-blank.test.ts b/@commitlint/rules/src/footer-leading-blank.test.ts index a0566a9ae8..8e17c4d343 100644 --- a/@commitlint/rules/src/footer-leading-blank.test.ts +++ b/@commitlint/rules/src/footer-leading-blank.test.ts @@ -1,20 +1,20 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {footerLeadingBlank} from './footer-leading-blank.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { footerLeadingBlank } from "./footer-leading-blank.js"; const messages = { - simple: 'test: subject', - body: 'test: subject\nbody', - trailing: 'test: subject\nbody\n\n', - without: 'test: subject\nbody\nBREAKING CHANGE: something important', + simple: "test: subject", + body: "test: subject\nbody", + trailing: "test: subject\nbody\n\n", + without: "test: subject\nbody\nBREAKING CHANGE: something important", withoutBody: - 'feat(new-parser): introduces a new parsing library\n\nBREAKING CHANGE: new library does not support foo-construct', + "feat(new-parser): introduces a new parsing library\n\nBREAKING CHANGE: new library does not support foo-construct", withBodyWithComment: - 'feat(new-parser): introduces a new parsing library\n\nBody Line 1\n# comment\nBody Line 2\n\nBREAKING CHANGE: new library does not support foo-construct', - with: 'test: subject\nbody\n\nBREAKING CHANGE: something important', + "feat(new-parser): introduces a new parsing library\n\nBody Line 1\n# comment\nBody Line 2\n\nBREAKING CHANGE: new library does not support foo-construct", + with: "test: subject\nbody\n\nBREAKING CHANGE: something important", withMulitLine: - 'test: subject\nmulti\nline\nbody\n\nBREAKING CHANGE: something important', - withDoubleNewLine: 'fix: some issue\n\ndetailed explanation\n\ncloses #123', + "test: subject\nmulti\nline\nbody\n\nBREAKING CHANGE: something important", + withDoubleNewLine: "fix: some issue\n\ndetailed explanation\n\ncloses #123", }; const parsed = { @@ -24,141 +24,141 @@ const parsed = { without: parse(messages.without), withoutBody: parse(messages.withoutBody), withBodyWithComment: parse(messages.withBodyWithComment, undefined, { - commentChar: '#', + commentChar: "#", }), with: parse(messages.with), withMulitLine: parse(messages.withMulitLine), withDoubleNewLine: parse(messages.withDoubleNewLine), }; -test('with simple message should succeed for empty keyword', async () => { +test("with simple message should succeed for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.simple); const expected = true; expect(actual).toEqual(expected); }); test('with simple message should succeed for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.simple, 'never'); + const [actual] = footerLeadingBlank(await parsed.simple, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with simple message should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.simple, 'always'); + const [actual] = footerLeadingBlank(await parsed.simple, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with body message should succeed for empty keyword', async () => { +test("with body message should succeed for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.body); const expected = true; expect(actual).toEqual(expected); }); test('with body message should succeed for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.body, 'never'); + const [actual] = footerLeadingBlank(await parsed.body, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with body message should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.body, 'always'); + const [actual] = footerLeadingBlank(await parsed.body, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with trailing message should succeed for empty keyword', async () => { +test("with trailing message should succeed for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.trailing); const expected = true; expect(actual).toEqual(expected); }); test('with trailing message should succeed for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.trailing, 'never'); + const [actual] = footerLeadingBlank(await parsed.trailing, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with trailing message should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.trailing, 'always'); + const [actual] = footerLeadingBlank(await parsed.trailing, "always"); const expected = true; expect(actual).toEqual(expected); }); test('without body should fail for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.withoutBody, 'never'); + const [actual] = footerLeadingBlank(await parsed.withoutBody, "never"); const expected = false; expect(actual).toEqual(expected); }); test('without body should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.withoutBody, 'always'); + const [actual] = footerLeadingBlank(await parsed.withoutBody, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('without blank line before footer should fail for empty keyword', async () => { +test("without blank line before footer should fail for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.without); const expected = false; expect(actual).toEqual(expected); }); test('without blank line before footer should succeed for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.without, 'never'); + const [actual] = footerLeadingBlank(await parsed.without, "never"); const expected = true; expect(actual).toEqual(expected); }); test('without blank line before footer should fail for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.without, 'always'); + const [actual] = footerLeadingBlank(await parsed.without, "always"); const expected = false; expect(actual).toEqual(expected); }); -test('with blank line before footer should succeed for empty keyword', async () => { +test("with blank line before footer should succeed for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.with); const expected = true; expect(actual).toEqual(expected); }); test('with blank line before footer should fail for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.with, 'never'); + const [actual] = footerLeadingBlank(await parsed.with, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with blank line before footer should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.with, 'always'); + const [actual] = footerLeadingBlank(await parsed.with, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with blank line before footer and multiline body should succeed for empty keyword', async () => { +test("with blank line before footer and multiline body should succeed for empty keyword", async () => { const [actual] = footerLeadingBlank(await parsed.withMulitLine); const expected = true; expect(actual).toEqual(expected); }); test('with blank line before footer and multiline body should fail for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.withMulitLine, 'never'); + const [actual] = footerLeadingBlank(await parsed.withMulitLine, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with blank line before footer and multiline body should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.withMulitLine, 'always'); + const [actual] = footerLeadingBlank(await parsed.withMulitLine, "always"); const expected = true; expect(actual).toEqual(expected); }); test('with double blank line before footer and double line in body should fail for "never"', async () => { - const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, 'never'); + const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with double blank line before footer and double line in body should succeed for "always"', async () => { - const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, 'always'); + const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, "always"); const expected = true; expect(actual).toEqual(expected); }); @@ -166,7 +166,7 @@ test('with double blank line before footer and double line in body should succee test('with body containing comments should succeed for "always"', async () => { const [actual] = footerLeadingBlank( await parsed.withBodyWithComment, - 'always' + "always", ); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/footer-leading-blank.ts b/@commitlint/rules/src/footer-leading-blank.ts index ad8e2756bc..3f83b089a1 100644 --- a/@commitlint/rules/src/footer-leading-blank.ts +++ b/@commitlint/rules/src/footer-leading-blank.ts @@ -1,28 +1,28 @@ -import toLines from '@commitlint/to-lines'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import toLines from "@commitlint/to-lines"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const footerLeadingBlank: SyncRule = (parsed, when = 'always') => { +export const footerLeadingBlank: SyncRule = (parsed, when = "always") => { // Flunk if no footer is found if (!parsed.footer) { return [true]; } - const negated = when === 'never'; + const negated = when === "never"; const rawLines = toLines(parsed.raw); const footerLines = toLines(parsed.footer); const footerOffset = rawLines.indexOf(footerLines[0]); const [leading] = rawLines.slice(footerOffset - 1); // Check if the first line of footer is empty - const succeeds = leading === ''; + const succeeds = leading === ""; return [ negated ? !succeeds : succeeds, message([ - 'footer', - negated ? 'may not' : 'must', - 'have leading blank line', + "footer", + negated ? "may not" : "must", + "have leading blank line", ]), ]; }; diff --git a/@commitlint/rules/src/footer-max-length.test.ts b/@commitlint/rules/src/footer-max-length.test.ts index be41154709..0dd0a3cb23 100644 --- a/@commitlint/rules/src/footer-max-length.test.ts +++ b/@commitlint/rules/src/footer-max-length.test.ts @@ -1,15 +1,15 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {footerMaxLength} from './footer-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { footerMaxLength } from "./footer-max-length.js"; -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; +const short = "BREAKING CHANGE: a"; +const long = "BREAKING CHANGE: ab"; const value = short.length; const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', + simple: "test: subject", + empty: "test: subject\nbody", short: `test: subject\n${short}`, long: `test: subject\n${long}`, }; @@ -21,25 +21,25 @@ const parsed = { long: parse(messages.long), }; -test('with simple should succeed', async () => { +test("with simple should succeed", async () => { const [actual] = footerMaxLength(await parsed.simple, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = footerMaxLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = footerMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = footerMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/footer-max-length.ts b/@commitlint/rules/src/footer-max-length.ts index 43520ae546..d20a03ab45 100644 --- a/@commitlint/rules/src/footer-max-length.ts +++ b/@commitlint/rules/src/footer-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const footerMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.footer; diff --git a/@commitlint/rules/src/footer-max-line-length.test.ts b/@commitlint/rules/src/footer-max-line-length.test.ts index 5ce73cec90..7efa44c686 100644 --- a/@commitlint/rules/src/footer-max-line-length.test.ts +++ b/@commitlint/rules/src/footer-max-line-length.test.ts @@ -1,15 +1,15 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {footerMaxLineLength} from './footer-max-line-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { footerMaxLineLength } from "./footer-max-line-length.js"; -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; +const short = "BREAKING CHANGE: a"; +const long = "BREAKING CHANGE: ab"; const value = short.length; const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', + simple: "test: subject", + empty: "test: subject\nbody", short: `test: subject\n${short}`, long: `test: subject\n${long}`, shortMultipleLines: `test:subject\n${short}\n${short}\n${short}`, @@ -23,37 +23,37 @@ const parsed = { long: parse(messages.long), }; -test('with simple should succeed', async () => { +test("with simple should succeed", async () => { const [actual] = footerMaxLineLength(await parsed.simple, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = footerMaxLineLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = footerMaxLineLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = footerMaxLineLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with short with multiple lines should succeed', async () => { +test("with short with multiple lines should succeed", async () => { const [actual] = footerMaxLineLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long with multiple lines should fail', async () => { +test("with long with multiple lines should fail", async () => { const [actual] = footerMaxLineLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/footer-max-line-length.ts b/@commitlint/rules/src/footer-max-line-length.ts index 34aea097dd..61366556fe 100644 --- a/@commitlint/rules/src/footer-max-line-length.ts +++ b/@commitlint/rules/src/footer-max-line-length.ts @@ -1,10 +1,10 @@ -import {maxLineLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLineLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const footerMaxLineLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.footer; diff --git a/@commitlint/rules/src/footer-min-length.test.ts b/@commitlint/rules/src/footer-min-length.test.ts index 2526b76ebe..a70d86044a 100644 --- a/@commitlint/rules/src/footer-min-length.test.ts +++ b/@commitlint/rules/src/footer-min-length.test.ts @@ -1,15 +1,15 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {footerMinLength} from './footer-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { footerMinLength } from "./footer-min-length.js"; -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; +const short = "BREAKING CHANGE: a"; +const long = "BREAKING CHANGE: ab"; const value = long.length; const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', + simple: "test: subject", + empty: "test: subject\nbody", short: `test: subject\n${short}`, long: `test: subject\n${long}`, }; @@ -21,25 +21,25 @@ const parsed = { long: parse(messages.long), }; -test('with simple should succeed', async () => { +test("with simple should succeed", async () => { const [actual] = footerMinLength(await parsed.simple, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = footerMinLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = footerMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = footerMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/footer-min-length.ts b/@commitlint/rules/src/footer-min-length.ts index 9959cb788c..54f7c6143c 100644 --- a/@commitlint/rules/src/footer-min-length.ts +++ b/@commitlint/rules/src/footer-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const footerMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { if (!parsed.footer) { return [true]; diff --git a/@commitlint/rules/src/header-case.test.ts b/@commitlint/rules/src/header-case.test.ts index a2e79c0ceb..edda2b957c 100644 --- a/@commitlint/rules/src/header-case.test.ts +++ b/@commitlint/rules/src/header-case.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {headerCase} from './header-case.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { headerCase } from "./header-case.js"; const messages = { - numeric: '1.0.0\n', - lowercase: 'header\n', - mixedcase: 'hEaDeR\n', - uppercase: 'HEADER\n', - camelcase: 'heaDer\n', - kebabcase: 'hea-der\n', - pascalcase: 'HeaDer\n', - snakecase: 'hea_der\n', - startcase: 'Hea Der\n', + numeric: "1.0.0\n", + lowercase: "header\n", + mixedcase: "hEaDeR\n", + uppercase: "HEADER\n", + camelcase: "heaDer\n", + kebabcase: "hea-der\n", + pascalcase: "HeaDer\n", + snakecase: "hea_der\n", + startcase: "Hea Der\n", }; const parsed = { @@ -27,199 +27,199 @@ const parsed = { }; test('with lowercase header should fail for "never lowercase"', async () => { - const [actual] = headerCase(await parsed.lowercase, 'never', 'lowercase'); + const [actual] = headerCase(await parsed.lowercase, "never", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase header should succeed for "always lowercase"', async () => { - const [actual] = headerCase(await parsed.lowercase, 'always', 'lowercase'); + const [actual] = headerCase(await parsed.lowercase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase header should succeed for "never lowercase"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'never', 'lowercase'); + const [actual] = headerCase(await parsed.mixedcase, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase header should fail for "always lowercase"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'always', 'lowercase'); + const [actual] = headerCase(await parsed.mixedcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.mixedcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase header should fail for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.mixedcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase header should fail for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.uppercase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.uppercase, "never", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase header should succeed for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.uppercase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.uppercase, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase header should fail for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.camelcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.camelcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase header should fail for "always pascalcase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'pascal-case'); + const [actual] = headerCase(await parsed.camelcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase header should fail for "always kebabcase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'kebab-case'); + const [actual] = headerCase(await parsed.camelcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase header should fail for "always snakecase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'snake-case'); + const [actual] = headerCase(await parsed.camelcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase header should succeed for "always camelcase"', async () => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'camel-case'); + const [actual] = headerCase(await parsed.camelcase, "always", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase header should fail for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.pascalcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.pascalcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase header should succeed for "always pascalcase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'pascal-case'); + const [actual] = headerCase(await parsed.pascalcase, "always", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase header should fail for "always kebabcase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'kebab-case'); + const [actual] = headerCase(await parsed.pascalcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase header should fail for "always snakecase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'snake-case'); + const [actual] = headerCase(await parsed.pascalcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase header should fail for "always camelcase"', async () => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'camel-case'); + const [actual] = headerCase(await parsed.pascalcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase header should fail for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.snakecase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.snakecase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase header should fail for "always pascalcase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'pascal-case'); + const [actual] = headerCase(await parsed.snakecase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase header should fail for "always kebabcase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'kebab-case'); + const [actual] = headerCase(await parsed.snakecase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase header should succeed for "always snakecase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'snake-case'); + const [actual] = headerCase(await parsed.snakecase, "always", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase header should fail for "always camelcase"', async () => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'camel-case'); + const [actual] = headerCase(await parsed.snakecase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should fail for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.startcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.startcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with startcase header should fail for "always pascalcase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'pascal-case'); + const [actual] = headerCase(await parsed.startcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should fail for "always kebabcase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'kebab-case'); + const [actual] = headerCase(await parsed.startcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should fail for "always snakecase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'snake-case'); + const [actual] = headerCase(await parsed.startcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should fail for "always camelcase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'camel-case'); + const [actual] = headerCase(await parsed.startcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase header should succeed for "always startcase"', async () => { - const [actual] = headerCase(await parsed.startcase, 'always', 'start-case'); + const [actual] = headerCase(await parsed.startcase, "always", "start-case"); const expected = true; expect(actual).toEqual(expected); }); @@ -227,92 +227,92 @@ test('with startcase header should succeed for "always startcase"', async () => test('should use expected message with "always"', async () => { const [, message] = headerCase( await parsed.uppercase, - 'always', - 'lower-case' + "always", + "lower-case", ); - expect(message).toContain('must be lower-case'); + expect(message).toContain("must be lower-case"); }); test('should use expected message with "never"', async () => { - const [, message] = headerCase(await parsed.uppercase, 'never', 'upper-case'); - expect(message).toContain('must not be upper-case'); + const [, message] = headerCase(await parsed.uppercase, "never", "upper-case"); + expect(message).toContain("must not be upper-case"); }); test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = headerCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = headerCase(await parsed.uppercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase header should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = headerCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = headerCase(await parsed.lowercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase header should fail for "always [uppercase, lowercase]"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = headerCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase header should pass for "always [uppercase, lowercase, camel-case]"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case', + const [actual] = headerCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", + "camel-case", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async () => { - const [actual] = headerCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = headerCase(await parsed.mixedcase, "never", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should fail for "never [uppercase, lowercase]"', async () => { - const [actual] = headerCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = headerCase(await parsed.uppercase, "never", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with numeric header should succeed for "never lowercase"', async () => { - const [actual] = headerCase(await parsed.numeric, 'never', 'lowercase'); + const [actual] = headerCase(await parsed.numeric, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric header should succeed for "always lowercase"', async () => { - const [actual] = headerCase(await parsed.numeric, 'always', 'lowercase'); + const [actual] = headerCase(await parsed.numeric, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric header should succeed for "never uppercase"', async () => { - const [actual] = headerCase(await parsed.numeric, 'never', 'uppercase'); + const [actual] = headerCase(await parsed.numeric, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric header should succeed for "always uppercase"', async () => { - const [actual] = headerCase(await parsed.numeric, 'always', 'uppercase'); + const [actual] = headerCase(await parsed.numeric, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/header-case.ts b/@commitlint/rules/src/header-case.ts index cb907c9e40..310b8a753e 100644 --- a/@commitlint/rules/src/header-case.ts +++ b/@commitlint/rules/src/header-case.ts @@ -1,24 +1,24 @@ -import {case as ensureCase} from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {TargetCaseType, SyncRule} from '@commitlint/types'; +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; -const negated = (when?: string) => when === 'never'; +const negated = (when?: string) => when === "never"; export const headerCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {header} = parsed; + const { header } = parsed; - if (typeof header !== 'string' || !header.match(/^[a-z]/i)) { + if (typeof header !== "string" || !header.match(/^[a-z]/i)) { return [true]; } const checks = (Array.isArray(value) ? value : [value]).map((check) => { - if (typeof check === 'string') { + if (typeof check === "string") { return { - when: 'always', + when: "always", case: check, }; } @@ -30,7 +30,7 @@ export const headerCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( return negated(check.when) ? !r : r; }); - const list = checks.map((c) => c.case).join(', '); + const list = checks.map((c) => c.case).join(", "); return [ negated(when) ? !result : result, diff --git a/@commitlint/rules/src/header-full-stop.test.ts b/@commitlint/rules/src/header-full-stop.test.ts index 667cfc80dd..98fd156437 100644 --- a/@commitlint/rules/src/header-full-stop.test.ts +++ b/@commitlint/rules/src/header-full-stop.test.ts @@ -1,6 +1,6 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {headerFullStop} from './header-full-stop.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { headerFullStop } from "./header-full-stop.js"; const messages = { with: `header.\n`, @@ -13,25 +13,25 @@ const parsed = { }; test('with against "always ." should succeed', async () => { - const [actual] = headerFullStop(await parsed.with, 'always', '.'); + const [actual] = headerFullStop(await parsed.with, "always", "."); const expected = true; expect(actual).toEqual(expected); }); test('with against "never ." should fail', async () => { - const [actual] = headerFullStop(await parsed.with, 'never', '.'); + const [actual] = headerFullStop(await parsed.with, "never", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "always ." should fail', async () => { - const [actual] = headerFullStop(await parsed.without, 'always', '.'); + const [actual] = headerFullStop(await parsed.without, "always", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "never ." should succeed', async () => { - const [actual] = headerFullStop(await parsed.without, 'never', '.'); + const [actual] = headerFullStop(await parsed.without, "never", "."); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/header-full-stop.ts b/@commitlint/rules/src/header-full-stop.ts index 1cb5031918..ae57cd26e5 100644 --- a/@commitlint/rules/src/header-full-stop.ts +++ b/@commitlint/rules/src/header-full-stop.ts @@ -1,17 +1,17 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const headerFullStop: SyncRule<string> = ( parsed, - when = 'always', - value = '.' + when = "always", + value = ".", ) => { - const {header} = parsed; - const negated = when === 'never'; + const { header } = parsed; + const negated = when === "never"; const hasStop = header?.[header.length - 1] === value; return [ negated ? !hasStop : hasStop, - message(['header', negated ? 'may not' : 'must', 'end with full stop']), + message(["header", negated ? "may not" : "must", "end with full stop"]), ]; }; diff --git a/@commitlint/rules/src/header-max-length.test.ts b/@commitlint/rules/src/header-max-length.test.ts index d57626e797..c7180e66b0 100644 --- a/@commitlint/rules/src/header-max-length.test.ts +++ b/@commitlint/rules/src/header-max-length.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {headerMaxLength} from './header-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { headerMaxLength } from "./header-max-length.js"; -const short = 'test: a'; -const long = 'test: ab'; +const short = "test: a"; +const long = "test: ab"; const value = short.length; @@ -17,13 +17,13 @@ const parsed = { long: parse(messages.long), }; -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = headerMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = headerMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/header-max-length.ts b/@commitlint/rules/src/header-max-length.ts index 7cb3a6b4e6..0147c9d67f 100644 --- a/@commitlint/rules/src/header-max-length.ts +++ b/@commitlint/rules/src/header-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const headerMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { return [ maxLength(parsed.header, value), diff --git a/@commitlint/rules/src/header-min-length.test.ts b/@commitlint/rules/src/header-min-length.test.ts index 7991371978..e97dfe3d48 100644 --- a/@commitlint/rules/src/header-min-length.test.ts +++ b/@commitlint/rules/src/header-min-length.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {headerMinLength} from './header-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { headerMinLength } from "./header-min-length.js"; -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; +const short = "BREAKING CHANGE: a"; +const long = "BREAKING CHANGE: ab"; const value = long.length; @@ -17,13 +17,13 @@ const parsed = { long: parse(messages.long), }; -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = headerMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = headerMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/header-min-length.ts b/@commitlint/rules/src/header-min-length.ts index bd9ae29662..d332b077b3 100644 --- a/@commitlint/rules/src/header-min-length.ts +++ b/@commitlint/rules/src/header-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const headerMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { return [ minLength(parsed.header, value), diff --git a/@commitlint/rules/src/header-trim.test.ts b/@commitlint/rules/src/header-trim.test.ts index 410cfc1bc2..f9280b2bf7 100644 --- a/@commitlint/rules/src/header-trim.test.ts +++ b/@commitlint/rules/src/header-trim.test.ts @@ -1,23 +1,23 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import type {Commit} from 'conventional-commits-parser'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import type { Commit } from "conventional-commits-parser"; -import {headerTrim} from './header-trim.js'; +import { headerTrim } from "./header-trim.js"; const messages = { - correct: 'test: subject', + correct: "test: subject", - whitespaceStart: ' test: subject', - whitespaceEnd: 'test: subject ', - whitespaceSurround: ' test: subject ', + whitespaceStart: " test: subject", + whitespaceEnd: "test: subject ", + whitespaceSurround: " test: subject ", - tabStart: '\t\ttest: subject', - tabEnd: 'test: subject\t\t', - tabSurround: '\t\ttest: subject\t', + tabStart: "\t\ttest: subject", + tabEnd: "test: subject\t\t", + tabSurround: "\t\ttest: subject\t", - mixStart: '\t\ttest: subject', - mixEnd: 'test: subject\t\t', - mixSurround: '\t \ttest: subject \t \t', + mixStart: "\t\ttest: subject", + mixEnd: "test: subject\t\t", + mixSurround: "\t \ttest: subject \t \t", }; const parsed = Object.entries(messages).reduce( @@ -25,49 +25,49 @@ const parsed = Object.entries(messages).reduce( Object.assign(_parsed, { [key]: parse(message), }), - {} as Record<keyof typeof messages, Promise<Commit>> + {} as Record<keyof typeof messages, Promise<Commit>>, ); -test('should succeed when header is not surrounded by whitespace', async () => { +test("should succeed when header is not surrounded by whitespace", async () => { const result = headerTrim(await parsed.correct); expect(result).toEqual(expect.arrayContaining([true])); }); test.each([ - {scenario: 'mixed whitespace ', commit: parsed.mixStart}, - {scenario: 'whitespace', commit: parsed.whitespaceStart}, - {scenario: 'tab', commit: parsed.tabStart}, -] as const)('should fail when starts with $scenario', async ({commit}) => { + { scenario: "mixed whitespace ", commit: parsed.mixStart }, + { scenario: "whitespace", commit: parsed.whitespaceStart }, + { scenario: "tab", commit: parsed.tabStart }, +] as const)("should fail when starts with $scenario", async ({ commit }) => { const result = headerTrim(await commit); expect(result).toEqual( - expect.arrayContaining([false, 'header must not start with whitespace']) + expect.arrayContaining([false, "header must not start with whitespace"]), ); }); test.each([ - {scenario: 'mixed whitespace', commit: parsed.mixEnd}, - {scenario: 'whitespace', commit: parsed.whitespaceEnd}, - {scenario: 'tab', commit: parsed.tabEnd}, -] as const)('should fail when ends with $scenario', async ({commit}) => { + { scenario: "mixed whitespace", commit: parsed.mixEnd }, + { scenario: "whitespace", commit: parsed.whitespaceEnd }, + { scenario: "tab", commit: parsed.tabEnd }, +] as const)("should fail when ends with $scenario", async ({ commit }) => { const result = headerTrim(await commit); expect(result).toEqual( - expect.arrayContaining([false, 'header must not end with whitespace']) + expect.arrayContaining([false, "header must not end with whitespace"]), ); }); test.each([ - {scenario: 'mixed whitespace', commit: parsed.mixSurround}, - {scenario: 'whitespace', commit: parsed.whitespaceSurround}, - {scenario: 'tab', commit: parsed.tabSurround}, + { scenario: "mixed whitespace", commit: parsed.mixSurround }, + { scenario: "whitespace", commit: parsed.whitespaceSurround }, + { scenario: "tab", commit: parsed.tabSurround }, ] as const)( - 'should fail when surrounded by with $scenario', - async ({commit}) => { + "should fail when surrounded by with $scenario", + async ({ commit }) => { const result = headerTrim(await commit); expect(result).toEqual( expect.arrayContaining([ false, - 'header must not be surrounded by whitespace', - ]) + "header must not be surrounded by whitespace", + ]), ); - } + }, ); diff --git a/@commitlint/rules/src/header-trim.ts b/@commitlint/rules/src/header-trim.ts index f1ef65be66..05edeab268 100644 --- a/@commitlint/rules/src/header-trim.ts +++ b/@commitlint/rules/src/header-trim.ts @@ -1,30 +1,22 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const headerTrim: SyncRule = (parsed) => { - const {header} = parsed; + const { header } = parsed; - if (!header) { - return [true]; - } + if (!header) return [true]; - const startsWithWhiteSpace = header !== header.trimStart(); - const endsWithWhiteSpace = header !== header.trimEnd(); + const startsWithWhiteSpace = header.length > header.trimStart().length; + const endsWithWhiteSpace = header.length > header.trimEnd().length; - switch (true) { - case startsWithWhiteSpace && endsWithWhiteSpace: - return [ - false, - message(['header', 'must not be surrounded by whitespace']), - ]; + if (startsWithWhiteSpace && endsWithWhiteSpace) + return [false, message(["header", "must not be surrounded by whitespace"])]; - case startsWithWhiteSpace: - return [false, message(['header', 'must not start with whitespace'])]; + if (startsWithWhiteSpace) + return [false, message(["header", "must not start with whitespace"])]; - case endsWithWhiteSpace: - return [false, message(['header', 'must not end with whitespace'])]; + if (endsWithWhiteSpace) + return [false, message(["header", "must not end with whitespace"])]; - default: - return [true]; - } + return [true]; }; diff --git a/@commitlint/rules/src/index.test.ts b/@commitlint/rules/src/index.test.ts index 822fd53c73..22f3b91847 100644 --- a/@commitlint/rules/src/index.test.ts +++ b/@commitlint/rules/src/index.test.ts @@ -1,41 +1,41 @@ -import {test, expect} from 'vitest'; -import fs from 'fs'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { test, expect } from "vitest"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -import {globSync} from 'glob'; +import { globSync } from "glob"; -import rules from './index.js'; +import rules from "./index.js"; -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -test('exports all rules', () => { - const expected = _glob('*.ts').sort(); +test("exports all rules", () => { + const expected = _glob("*.ts").sort(); const actual = Object.keys(rules).sort(); expect(actual).toEqual(expected); }); -test('rules export functions', () => { +test("rules export functions", () => { const actual = Object.values(rules); - expect(actual.every((rule) => typeof rule === 'function')).toBe(true); + expect(actual.every((rule) => typeof rule === "function")).toBe(true); }); -test('all rules are present in documentation', () => { +test("all rules are present in documentation", () => { const file = fs.readFileSync( - path.join(__dirname, '../../../docs/reference/rules.md'), - 'utf-8' + path.join(__dirname, "../../../docs/reference/rules.md"), + "utf-8", ); const results = file .split(/(\n|\r)/) - .filter((s) => s.startsWith('##') && !s.includes('`deprecated`')) - .map((s) => s.replace('## ', '')); + .filter((s) => s.startsWith("##") && !s.includes("`deprecated`")) + .map((s) => s.replace("## ", "")); expect(Object.keys(rules)).toEqual(expect.arrayContaining(results)); }); function _glob(pattern: string) { const files = globSync(pattern, { - ignore: ['**/index.ts', '**/*.test.ts'], + ignore: ["**/index.ts", "**/*.test.ts"], cwd: __dirname, }); return files.map(relative).map(toExport); diff --git a/@commitlint/rules/src/index.ts b/@commitlint/rules/src/index.ts index c3b3f6b4d1..0a27f0b81a 100644 --- a/@commitlint/rules/src/index.ts +++ b/@commitlint/rules/src/index.ts @@ -1,75 +1,75 @@ -import {bodyCase} from './body-case.js'; -import {bodyEmpty} from './body-empty.js'; -import {bodyFullStop} from './body-full-stop.js'; -import {bodyLeadingBlank} from './body-leading-blank.js'; -import {bodyMaxLength} from './body-max-length.js'; -import {bodyMaxLineLength} from './body-max-line-length.js'; -import {bodyMinLength} from './body-min-length.js'; -import {footerEmpty} from './footer-empty.js'; -import {footerLeadingBlank} from './footer-leading-blank.js'; -import {footerMaxLength} from './footer-max-length.js'; -import {footerMaxLineLength} from './footer-max-line-length.js'; -import {footerMinLength} from './footer-min-length.js'; -import {headerCase} from './header-case.js'; -import {headerFullStop} from './header-full-stop.js'; -import {headerMaxLength} from './header-max-length.js'; -import {headerMinLength} from './header-min-length.js'; -import {headerTrim} from './header-trim.js'; -import {referencesEmpty} from './references-empty.js'; -import {scopeCase} from './scope-case.js'; -import {scopeEmpty} from './scope-empty.js'; -import {scopeEnum} from './scope-enum.js'; -import {scopeMaxLength} from './scope-max-length.js'; -import {scopeMinLength} from './scope-min-length.js'; -import {signedOffBy} from './signed-off-by.js'; -import {subjectCase} from './subject-case.js'; -import {subjectEmpty} from './subject-empty.js'; -import {subjectFullStop} from './subject-full-stop.js'; -import {subjectMaxLength} from './subject-max-length.js'; -import {subjectMinLength} from './subject-min-length.js'; -import {subjectExclamationMark} from './subject-exclamation-mark.js'; -import {trailerExists} from './trailer-exists.js'; -import {typeCase} from './type-case.js'; -import {typeEmpty} from './type-empty.js'; -import {typeEnum} from './type-enum.js'; -import {typeMaxLength} from './type-max-length.js'; -import {typeMinLength} from './type-min-length.js'; +import { bodyCase } from "./body-case.js"; +import { bodyEmpty } from "./body-empty.js"; +import { bodyFullStop } from "./body-full-stop.js"; +import { bodyLeadingBlank } from "./body-leading-blank.js"; +import { bodyMaxLength } from "./body-max-length.js"; +import { bodyMaxLineLength } from "./body-max-line-length.js"; +import { bodyMinLength } from "./body-min-length.js"; +import { footerEmpty } from "./footer-empty.js"; +import { footerLeadingBlank } from "./footer-leading-blank.js"; +import { footerMaxLength } from "./footer-max-length.js"; +import { footerMaxLineLength } from "./footer-max-line-length.js"; +import { footerMinLength } from "./footer-min-length.js"; +import { headerCase } from "./header-case.js"; +import { headerFullStop } from "./header-full-stop.js"; +import { headerMaxLength } from "./header-max-length.js"; +import { headerMinLength } from "./header-min-length.js"; +import { headerTrim } from "./header-trim.js"; +import { referencesEmpty } from "./references-empty.js"; +import { scopeCase } from "./scope-case.js"; +import { scopeEmpty } from "./scope-empty.js"; +import { scopeEnum } from "./scope-enum.js"; +import { scopeMaxLength } from "./scope-max-length.js"; +import { scopeMinLength } from "./scope-min-length.js"; +import { signedOffBy } from "./signed-off-by.js"; +import { subjectCase } from "./subject-case.js"; +import { subjectEmpty } from "./subject-empty.js"; +import { subjectFullStop } from "./subject-full-stop.js"; +import { subjectMaxLength } from "./subject-max-length.js"; +import { subjectMinLength } from "./subject-min-length.js"; +import { subjectExclamationMark } from "./subject-exclamation-mark.js"; +import { trailerExists } from "./trailer-exists.js"; +import { typeCase } from "./type-case.js"; +import { typeEmpty } from "./type-empty.js"; +import { typeEnum } from "./type-enum.js"; +import { typeMaxLength } from "./type-max-length.js"; +import { typeMinLength } from "./type-min-length.js"; export default { - 'body-case': bodyCase, - 'body-empty': bodyEmpty, - 'body-full-stop': bodyFullStop, - 'body-leading-blank': bodyLeadingBlank, - 'body-max-length': bodyMaxLength, - 'body-max-line-length': bodyMaxLineLength, - 'body-min-length': bodyMinLength, - 'footer-empty': footerEmpty, - 'footer-leading-blank': footerLeadingBlank, - 'footer-max-length': footerMaxLength, - 'footer-max-line-length': footerMaxLineLength, - 'footer-min-length': footerMinLength, - 'header-case': headerCase, - 'header-full-stop': headerFullStop, - 'header-max-length': headerMaxLength, - 'header-min-length': headerMinLength, - 'header-trim': headerTrim, - 'references-empty': referencesEmpty, - 'scope-case': scopeCase, - 'scope-empty': scopeEmpty, - 'scope-enum': scopeEnum, - 'scope-max-length': scopeMaxLength, - 'scope-min-length': scopeMinLength, - 'signed-off-by': signedOffBy, - 'subject-case': subjectCase, - 'subject-empty': subjectEmpty, - 'subject-full-stop': subjectFullStop, - 'subject-max-length': subjectMaxLength, - 'subject-min-length': subjectMinLength, - 'subject-exclamation-mark': subjectExclamationMark, - 'trailer-exists': trailerExists, - 'type-case': typeCase, - 'type-empty': typeEmpty, - 'type-enum': typeEnum, - 'type-max-length': typeMaxLength, - 'type-min-length': typeMinLength, + "body-case": bodyCase, + "body-empty": bodyEmpty, + "body-full-stop": bodyFullStop, + "body-leading-blank": bodyLeadingBlank, + "body-max-length": bodyMaxLength, + "body-max-line-length": bodyMaxLineLength, + "body-min-length": bodyMinLength, + "footer-empty": footerEmpty, + "footer-leading-blank": footerLeadingBlank, + "footer-max-length": footerMaxLength, + "footer-max-line-length": footerMaxLineLength, + "footer-min-length": footerMinLength, + "header-case": headerCase, + "header-full-stop": headerFullStop, + "header-max-length": headerMaxLength, + "header-min-length": headerMinLength, + "header-trim": headerTrim, + "references-empty": referencesEmpty, + "scope-case": scopeCase, + "scope-empty": scopeEmpty, + "scope-enum": scopeEnum, + "scope-max-length": scopeMaxLength, + "scope-min-length": scopeMinLength, + "signed-off-by": signedOffBy, + "subject-case": subjectCase, + "subject-empty": subjectEmpty, + "subject-full-stop": subjectFullStop, + "subject-max-length": subjectMaxLength, + "subject-min-length": subjectMinLength, + "subject-exclamation-mark": subjectExclamationMark, + "trailer-exists": trailerExists, + "type-case": typeCase, + "type-empty": typeEmpty, + "type-enum": typeEnum, + "type-max-length": typeMaxLength, + "type-min-length": typeMinLength, }; diff --git a/@commitlint/rules/src/references-empty.test.ts b/@commitlint/rules/src/references-empty.test.ts index cd6465aac6..03b12bd060 100644 --- a/@commitlint/rules/src/references-empty.test.ts +++ b/@commitlint/rules/src/references-empty.test.ts @@ -1,21 +1,21 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {referencesEmpty} from './references-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { referencesEmpty } from "./references-empty.js"; // @ts-expect-error -- no typings -import preset from 'conventional-changelog-angular'; +import preset from "conventional-changelog-angular"; const messages = { - plain: 'foo: bar', - comment: 'foo: baz\n#1 Comment', - reference: '#comment\nfoo: baz \nCloses #1', - references: '#comment\nfoo: bar \nCloses #1, #2, #3', - prefix: 'bar REF-1234', + plain: "foo: bar", + comment: "foo: baz\n#1 Comment", + reference: "#comment\nfoo: baz \nCloses #1", + references: "#comment\nfoo: bar \nCloses #1, #2, #3", + prefix: "bar REF-1234", }; const opts = (async () => { const o = await preset(); - o.parserOpts.commentChar = '#'; + o.parserOpts.commentChar = "#"; return o; })(); @@ -29,60 +29,60 @@ const parsed = { references: (async () => parse(messages.references, undefined, (await opts).parserOpts))(), prefix: parse(messages.prefix, undefined, { - issuePrefixes: ['REF-'], + issuePrefixes: ["REF-"], }), }; -test('defaults to never and fails for plain', async () => { +test("defaults to never and fails for plain", async () => { const [actual] = referencesEmpty(await parsed.plain); const expected = false; expect(actual).toEqual(expected); }); -test('defaults to never and succeeds for reference', async () => { +test("defaults to never and succeeds for reference", async () => { const [actual] = referencesEmpty(await parsed.reference); const expected = true; expect(actual).toEqual(expected); }); -test('fails for comment with never', async () => { - const [actual] = referencesEmpty(await parsed.comment, 'never'); +test("fails for comment with never", async () => { + const [actual] = referencesEmpty(await parsed.comment, "never"); const expected = false; expect(actual).toEqual(expected); }); -test('succeeds for comment with always', async () => { - const [actual] = referencesEmpty(await parsed.comment, 'always'); +test("succeeds for comment with always", async () => { + const [actual] = referencesEmpty(await parsed.comment, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('succeeds for reference with never', async () => { - const [actual] = referencesEmpty(await parsed.reference, 'never'); +test("succeeds for reference with never", async () => { + const [actual] = referencesEmpty(await parsed.reference, "never"); const expected = true; expect(actual).toEqual(expected); }); -test('fails for reference with always', async () => { - const [actual] = referencesEmpty(await parsed.reference, 'always'); +test("fails for reference with always", async () => { + const [actual] = referencesEmpty(await parsed.reference, "always"); const expected = false; expect(actual).toEqual(expected); }); -test('succeeds for references with never', async () => { - const [actual] = referencesEmpty(await parsed.references, 'never'); +test("succeeds for references with never", async () => { + const [actual] = referencesEmpty(await parsed.references, "never"); const expected = true; expect(actual).toEqual(expected); }); -test('fails for references with always', async () => { - const [actual] = referencesEmpty(await parsed.references, 'always'); +test("fails for references with always", async () => { + const [actual] = referencesEmpty(await parsed.references, "always"); const expected = false; expect(actual).toEqual(expected); }); -test('succeeds for custom references with always', async () => { - const [actual] = referencesEmpty(await parsed.prefix, 'never'); +test("succeeds for custom references with always", async () => { + const [actual] = referencesEmpty(await parsed.prefix, "never"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/references-empty.ts b/@commitlint/rules/src/references-empty.ts index 6682d1d99f..650675e087 100644 --- a/@commitlint/rules/src/references-empty.ts +++ b/@commitlint/rules/src/references-empty.ts @@ -1,11 +1,11 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const referencesEmpty: SyncRule = (parsed, when = 'never') => { - const negated = when === 'always'; +export const referencesEmpty: SyncRule = (parsed, when = "never") => { + const negated = when === "always"; const notEmpty = parsed.references.length > 0; return [ negated ? !notEmpty : notEmpty, - message(['references', negated ? 'must' : 'may not', 'be empty']), + message(["references", negated ? "must" : "may not", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/scope-case.test.ts b/@commitlint/rules/src/scope-case.test.ts index ba55acf731..4e352e7017 100644 --- a/@commitlint/rules/src/scope-case.test.ts +++ b/@commitlint/rules/src/scope-case.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {scopeCase} from './scope-case.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeCase } from "./scope-case.js"; const messages = { - empty: 'test: subject', - lowercase: 'test(scope): subject', - mixedcase: 'test(sCoPe): subject', - uppercase: 'test(SCOPE): subject', - camelcase: 'test(myScope): subject', - kebabcase: 'test(my-scope): subject', - pascalcase: 'test(MyScope): subject', - snakecase: 'test(my_scope): subject', - startcase: 'test(My Scope): subject', + empty: "test: subject", + lowercase: "test(scope): subject", + mixedcase: "test(sCoPe): subject", + uppercase: "test(SCOPE): subject", + camelcase: "test(myScope): subject", + kebabcase: "test(my-scope): subject", + pascalcase: "test(MyScope): subject", + snakecase: "test(my_scope): subject", + startcase: "test(My Scope): subject", }; const parsed = { @@ -27,298 +27,298 @@ const parsed = { }; test('with empty scope should succeed for "never lowercase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'lowercase'); + const [actual] = scopeCase(await parsed.empty, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.empty, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never uppercase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'uppercase'); + const [actual] = scopeCase(await parsed.empty, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always uppercase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'always', 'uppercase'); + const [actual] = scopeCase(await parsed.empty, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never camelcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'camel-case'); + const [actual] = scopeCase(await parsed.empty, "never", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always camelcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'camel-case'); + const [actual] = scopeCase(await parsed.empty, "never", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never kebabcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'kebab-case'); + const [actual] = scopeCase(await parsed.empty, "never", "kebab-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always kebabcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'kebab-case'); + const [actual] = scopeCase(await parsed.empty, "never", "kebab-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never pascalcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'pascal-case'); + const [actual] = scopeCase(await parsed.empty, "never", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always pascalcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'pascal-case'); + const [actual] = scopeCase(await parsed.empty, "never", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never snakecase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'snake-case'); + const [actual] = scopeCase(await parsed.empty, "never", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always snakecase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'snake-case'); + const [actual] = scopeCase(await parsed.empty, "never", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "never startcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'start-case'); + const [actual] = scopeCase(await parsed.empty, "never", "start-case"); const expected = true; expect(actual).toEqual(expected); }); test('with empty scope should succeed for "always startcase"', async () => { - const [actual] = scopeCase(await parsed.empty, 'never', 'start-case'); + const [actual] = scopeCase(await parsed.empty, "never", "start-case"); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase scope should fail for "never lowercase"', async () => { - const [actual] = scopeCase(await parsed.lowercase, 'never', 'lowercase'); + const [actual] = scopeCase(await parsed.lowercase, "never", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase scope should succeed for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.lowercase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.lowercase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should succeed for "never lowercase"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', 'lowercase'); + const [actual] = scopeCase(await parsed.mixedcase, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should fail for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.mixedcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase scope should succeed for "never uppercase"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', 'uppercase'); + const [actual] = scopeCase(await parsed.mixedcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with kebabcase scope should succeed for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.kebabcase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with kebabcase scope should fail for "always camelcase"', async () => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'camel-case'); + const [actual] = scopeCase(await parsed.kebabcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with kebabcase scope should fail for "always pascalcase"', async () => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'pascal-case'); + const [actual] = scopeCase(await parsed.kebabcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with kebabcase scope should succeed for "always kebabcase"', async () => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'kebab-case'); + const [actual] = scopeCase(await parsed.kebabcase, "always", "kebab-case"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase scope should succeed for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.snakecase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase scope should fail for "always camelcase"', async () => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'camel-case'); + const [actual] = scopeCase(await parsed.snakecase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase scope should fail for "always pascalcase"', async () => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'pascal-case'); + const [actual] = scopeCase(await parsed.snakecase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase scope should succeed for "always snakecase"', async () => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'snake-case'); + const [actual] = scopeCase(await parsed.snakecase, "always", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase scope should fail for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.camelcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase scope should succeed for "always camelcase"', async () => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'camel-case'); + const [actual] = scopeCase(await parsed.camelcase, "always", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase scope should fail for "always kebabcase"', async () => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'kebab-case'); + const [actual] = scopeCase(await parsed.camelcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase scope should fail for "always pascalcase"', async () => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'pascal-case'); + const [actual] = scopeCase(await parsed.camelcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase scope should fail for "always lowercase"', async () => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'lowercase'); + const [actual] = scopeCase(await parsed.pascalcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase scope should fail for "always kebabcase"', async () => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'kebab-case'); + const [actual] = scopeCase(await parsed.pascalcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase scope should fail for "always camelcase"', async () => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'camel-case'); + const [actual] = scopeCase(await parsed.pascalcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase scope should succeed for "always pascalcase"', async () => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'pascal-case'); + const [actual] = scopeCase(await parsed.pascalcase, "always", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should fail for "always uppercase"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', 'uppercase'); + const [actual] = scopeCase(await parsed.mixedcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase scope should fail for "never uppercase"', async () => { - const [actual] = scopeCase(await parsed.uppercase, 'never', 'uppercase'); + const [actual] = scopeCase(await parsed.uppercase, "never", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase scope should succeed for "always uppercase"', async () => { - const [actual] = scopeCase(await parsed.uppercase, 'always', 'uppercase'); + const [actual] = scopeCase(await parsed.uppercase, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = scopeCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = scopeCase(await parsed.uppercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase scope should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = scopeCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = scopeCase(await parsed.lowercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should fail for "always [uppercase, lowercase]"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = scopeCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase scope should pass for "always [uppercase, lowercase, camel-case]"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case', + const [actual] = scopeCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", + "camel-case", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async () => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = scopeCase(await parsed.mixedcase, "never", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should fail for "never [uppercase, lowercase]"', async () => { - const [actual] = scopeCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = scopeCase(await parsed.uppercase, "never", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with slash in scope should succeed for "always pascal-case"', async () => { - const commit = await parse('feat(Modules/Graph): add Pie Chart'); - const [actual] = scopeCase(commit, 'always', 'pascal-case'); + const commit = await parse("feat(Modules/Graph): add Pie Chart"); + const [actual] = scopeCase(commit, "always", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with slash in subject should succeed for "always sentence case"', async () => { - const commit = await parse('chore: Update @angular/core'); - const [actual] = scopeCase(commit, 'always', 'sentencecase'); + const commit = await parse("chore: Update @angular/core"); + const [actual] = scopeCase(commit, "always", "sentencecase"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/scope-case.ts b/@commitlint/rules/src/scope-case.ts index 7544cc1fa0..c620086eff 100644 --- a/@commitlint/rules/src/scope-case.ts +++ b/@commitlint/rules/src/scope-case.ts @@ -1,24 +1,24 @@ -import {case as ensureCase} from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {TargetCaseType, SyncRule} from '@commitlint/types'; +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; -const negated = (when?: string) => when === 'never'; +const negated = (when?: string) => when === "never"; export const scopeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {scope} = parsed; + const { scope } = parsed; if (!scope) { return [true]; } const checks = (Array.isArray(value) ? value : [value]).map((check) => { - if (typeof check === 'string') { + if (typeof check === "string") { return { - when: 'always', + when: "always", case: check, }; } @@ -32,13 +32,13 @@ export const scopeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( const result = checks.some((check) => { const r = scopeSegments.every( - (segment) => delimiters.test(segment) || ensureCase(segment, check.case) + (segment) => delimiters.test(segment) || ensureCase(segment, check.case), ); return negated(check.when) ? !r : r; }); - const list = checks.map((c) => c.case).join(', '); + const list = checks.map((c) => c.case).join(", "); return [ negated(when) ? !result : result, diff --git a/@commitlint/rules/src/scope-empty.test.ts b/@commitlint/rules/src/scope-empty.test.ts index b4c535fdd4..88977f8c17 100644 --- a/@commitlint/rules/src/scope-empty.test.ts +++ b/@commitlint/rules/src/scope-empty.test.ts @@ -1,11 +1,11 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {scopeEmpty} from './scope-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeEmpty } from "./scope-empty.js"; const messages = { - plain: 'foo(bar): baz', - superfluous: 'foo(): baz', - empty: 'foo: baz', + plain: "foo(bar): baz", + superfluous: "foo(): baz", + empty: "foo: baz", }; const parsed = { @@ -14,56 +14,56 @@ const parsed = { empty: parse(messages.empty), }; -test('with plain message it should succeed for empty keyword', async () => { +test("with plain message it should succeed for empty keyword", async () => { const [actual] = scopeEmpty(await parsed.plain); const expected = true; expect(actual).toEqual(expected); }); test('with plain message it should succeed for "never"', async () => { - const [actual] = scopeEmpty(await parsed.plain, 'never'); + const [actual] = scopeEmpty(await parsed.plain, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with plain message it should fail for "always"', async () => { - const [actual] = scopeEmpty(await parsed.plain, 'always'); + const [actual] = scopeEmpty(await parsed.plain, "always"); const expected = false; expect(actual).toEqual(expected); }); -test('with superfluous message it should fail for empty keyword', async () => { +test("with superfluous message it should fail for empty keyword", async () => { const [actual] = scopeEmpty(await parsed.superfluous); const expected = false; expect(actual).toEqual(expected); }); test('with superfluous message it should fail for "never"', async () => { - const [actual] = scopeEmpty(await parsed.superfluous, 'never'); + const [actual] = scopeEmpty(await parsed.superfluous, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with superfluous message it should fail for "always"', async () => { - const [actual] = scopeEmpty(await parsed.superfluous, 'always'); + const [actual] = scopeEmpty(await parsed.superfluous, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with empty message it should fail for empty keyword', async () => { +test("with empty message it should fail for empty keyword", async () => { const [actual] = scopeEmpty(await parsed.empty); const expected = false; expect(actual).toEqual(expected); }); test('with empty message it should fail for "never"', async () => { - const [actual] = scopeEmpty(await parsed.empty, 'never'); + const [actual] = scopeEmpty(await parsed.empty, "never"); const expected = false; expect(actual).toEqual(expected); }); test('with empty message it should fail for "always"', async () => { - const [actual] = scopeEmpty(await parsed.empty, 'always'); + const [actual] = scopeEmpty(await parsed.empty, "always"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/scope-empty.ts b/@commitlint/rules/src/scope-empty.ts index 3ea0fa1f81..d7a9bb0e2e 100644 --- a/@commitlint/rules/src/scope-empty.ts +++ b/@commitlint/rules/src/scope-empty.ts @@ -1,12 +1,12 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const scopeEmpty: SyncRule = (parsed, when = 'never') => { - const negated = when === 'always'; - const notEmpty = ensure.notEmpty(parsed.scope || ''); +export const scopeEmpty: SyncRule = (parsed, when = "never") => { + const negated = when === "always"; + const notEmpty = ensure.notEmpty(parsed.scope || ""); return [ negated ? !notEmpty : notEmpty, - message(['scope', negated ? 'must' : 'may not', 'be empty']), + message(["scope", negated ? "must" : "may not", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/scope-enum.test.ts b/@commitlint/rules/src/scope-enum.test.ts index 4b564bf767..1e7fb7efa7 100644 --- a/@commitlint/rules/src/scope-enum.test.ts +++ b/@commitlint/rules/src/scope-enum.test.ts @@ -1,51 +1,52 @@ -import {describe, test, it, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {RuleConfigCondition} from '@commitlint/types'; +import { describe, test, it, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { RuleConfigCondition } from "@commitlint/types"; -import {scopeEnum} from './scope-enum.js'; +import { scopeEnum } from "./scope-enum.js"; const messagesByScope = { single: { - plain: 'foo(bar): baz', + plain: "foo(bar): baz", }, multiple: { - multiple: 'foo(bar,baz): qux', - multipleCommaSpace: 'foo(bar, baz): qux', + multiple: "foo(bar,baz): qux", + multipleCommaSpace: "foo(bar, baz): qux", + multipleSlash: "foo(bar/baz): qux", }, none: { - empty: 'foo: baz', - superfluous: 'foo(): baz', + empty: "foo: baz", + superfluous: "foo(): baz", }, }; -const {single, multiple, none} = messagesByScope; +const { single, multiple, none } = messagesByScope; const messages = Object.values(messagesByScope).reduce<Record<string, string>>( - (acc, curr) => ({...acc, ...curr}), - {} + (acc, curr) => ({ ...acc, ...curr }), + {}, ); -const conditions: RuleConfigCondition[] = ['always', 'never']; +const conditions: RuleConfigCondition[] = ["always", "never"]; -describe('Scope Enum Validation', () => { - describe.each(conditions)('condition: %s', (condition) => { - describe('Enum without Scopes', () => { +describe("Scope Enum Validation", () => { + describe.each(conditions)("condition: %s", (condition) => { + describe("Enum without Scopes", () => { test.each(Object.keys(messages))( `Succeeds with a %s message and '${condition}'`, async (messageType) => { const [actual, message] = scopeEnum( await parse(messages[messageType]), condition, - [] + [], ); const expected = true; expect(actual).toEqual(expected); - expect(message).toEqual(''); - } + expect(message).toEqual(""); + }, ); }); - describe('Messages without Scopes', () => { + describe("Messages without Scopes", () => { Object.keys(none).forEach((messageType) => { const fakeMessage = messages[messageType]; @@ -53,7 +54,7 @@ describe('Scope Enum Validation', () => { const [actual, message] = scopeEnum( await parse(fakeMessage), condition, - ['bar'] + ["bar"], ); expect(actual).toBeTruthy(); expect(message).toBeFalsy(); @@ -63,7 +64,7 @@ describe('Scope Enum Validation', () => { const [actual, message] = scopeEnum( await parse(fakeMessage), condition, - ['bar', 'baz'] + ["bar", "baz"], ); expect(actual).toBeTruthy(); expect(message).toBeFalsy(); @@ -72,115 +73,135 @@ describe('Scope Enum Validation', () => { }); }); - describe('Always', () => { - describe('Single-Scope Messages', () => { + describe("Always", () => { + describe("Single-Scope Messages", () => { Object.keys(single).forEach((messageType) => { const fakeMessage = messages[messageType]; it(`Succeeds with a '${messageType}' message when all message scopes are included in single-scope enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['bar'] + "always", + ["bar"], ); expect(actual).toBeTruthy(); - expect(message).toEqual('scope must be one of [bar]'); + expect(message).toEqual("scope must be one of [bar]"); }); test(`Succeeds with a '${messageType}' message when all message scopes are included in multi-scope enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['bar', 'baz'] + "always", + ["bar", "baz"], ); expect(actual).toBeTruthy(); - expect(message).toEqual('scope must be one of [bar, baz]'); + expect(message).toEqual("scope must be one of [bar, baz]"); }); test(`Fails with a '${messageType}' message when any message scope is not included in enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['foo'] + "always", + ["foo"], ); expect(actual).toBeFalsy(); - expect(message).toEqual('scope must be one of [foo]'); + expect(message).toEqual("scope must be one of [foo]"); }); }); }); - describe('Multi-Scope Messages', () => { + describe("Multi-Scope Messages", () => { Object.keys(multiple).forEach((messageType) => { const fakeMessage = messages[messageType]; test(`Succeeds with a '${messageType}' message when all message scopes are included in enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['bar', 'baz'] + "always", + ["bar", "baz"], ); expect(actual).toBeTruthy(); - expect(message).toEqual('scope must be one of [bar, baz]'); + expect(message).toEqual("scope must be one of [bar, baz]"); }); test(`Fails with a '${messageType}' message when no message scopes are included in enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['foo'] + "always", + ["foo"], ); expect(actual).toBeFalsy(); - expect(message).toEqual('scope must be one of [foo]'); + expect(message).toEqual("scope must be one of [foo]"); }); it(`Fails with a '${messageType}' message when only some message scopes are included in enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'always', - ['bar'] + "always", + ["bar"], ); expect(actual).toBeFalsy(); - expect(message).toEqual('scope must be one of [bar]'); + expect(message).toEqual("scope must be one of [bar]"); }); }); + + test(`Succeeds with a 'multipleSlash' message when the scopes are included in enum`, async () => { + const [actual, message] = scopeEnum( + await parse(messages["multipleSlash"]), + "always", + ["bar/baz"], + ); + expect(actual).toBeTruthy(); + expect(message).toEqual("scope must be one of [bar/baz]"); + }); }); }); - describe('Never', () => { - describe('Messages with Scopes', () => { - Object.keys({...single, ...multiple}).forEach((messageType) => { + describe("Never", () => { + describe("Messages with Scopes", () => { + Object.keys({ ...single, ...multiple }).forEach((messageType) => { const fakeMessage = messages[messageType]; test(`Succeeds with a '${messageType}' message when no message scopes are included in enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'never', - ['foo'] + "never", + ["foo"], ); expect(actual).toBeTruthy(); - expect(message).toEqual('scope must not be one of [foo]'); + expect(message).toEqual("scope must not be one of [foo]"); }); it(`Fails with a '${messageType}' message when any message scope is included in single-scope enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'never', - ['bar'] + "never", + ["bar"], ); expect(actual).toBeFalsy(); - expect(message).toEqual('scope must not be one of [bar]'); + expect(message).toEqual("scope must not be one of [bar]"); }); test(`Fails with a '${messageType}' message when any message scope is included in multi-scope enum`, async () => { const [actual, message] = scopeEnum( await parse(fakeMessage), - 'never', - ['bar', 'baz'] + "never", + ["bar", "baz"], ); expect(actual).toBeFalsy(); - expect(message).toEqual('scope must not be one of [bar, baz]'); + expect(message).toEqual("scope must not be one of [bar, baz]"); }); }); + + test(`Fails with a 'multipleSlash' message when the scopes are included in enum`, async () => { + const [actual, message] = scopeEnum( + await parse(messages["multipleSlash"]), + "never", + ["bar/baz"], + ); + expect(actual).toBeFalsy(); + expect(message).toEqual("scope must not be one of [bar/baz]"); + }); }); }); }); diff --git a/@commitlint/rules/src/scope-enum.ts b/@commitlint/rules/src/scope-enum.ts index 827f72de63..59cef26df9 100644 --- a/@commitlint/rules/src/scope-enum.ts +++ b/@commitlint/rules/src/scope-enum.ts @@ -1,29 +1,29 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const scopeEnum: SyncRule<string[]> = ( - {scope}, - when = 'always', - value = [] + { scope }, + when = "always", + value = [], ) => { if (!scope || !value.length) { - return [true, '']; + return [true, ""]; } // Scopes may contain slash or comma delimiters to separate them and mark them as individual segments. // This means that each of these segments should be tested separately with `ensure`. const delimiters = /\/|\\|, ?/g; const messageScopes = scope.split(delimiters); - const errorMessage = ['scope must', `be one of [${value.join(', ')}]`]; + const errorMessage = ["scope must", `be one of [${value.join(", ")}]`]; const isScopeInEnum = (scope: string) => ensure.enum(scope, value); let isValid; - if (when === 'never') { - isValid = !messageScopes.some(isScopeInEnum); - errorMessage.splice(1, 0, 'not'); + if (when === "never") { + isValid = !messageScopes.some(isScopeInEnum) && !isScopeInEnum(scope); + errorMessage.splice(1, 0, "not"); } else { - isValid = messageScopes.every(isScopeInEnum); + isValid = messageScopes.every(isScopeInEnum) || isScopeInEnum(scope); } return [isValid, message(errorMessage)]; diff --git a/@commitlint/rules/src/scope-max-length.test.ts b/@commitlint/rules/src/scope-max-length.test.ts index c8535118bb..97e5e4f6fa 100644 --- a/@commitlint/rules/src/scope-max-length.test.ts +++ b/@commitlint/rules/src/scope-max-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {scopeMaxLength} from './scope-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeMaxLength } from "./scope-max-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = short.length; const messages = { - empty: 'test: \n', + empty: "test: \n", short: `test(${short}): \n`, long: `test(${long}): \n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = scopeMaxLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = scopeMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = scopeMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/scope-max-length.ts b/@commitlint/rules/src/scope-max-length.ts index 917d548f91..bcdf6f81ce 100644 --- a/@commitlint/rules/src/scope-max-length.ts +++ b/@commitlint/rules/src/scope-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const scopeMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.scope; diff --git a/@commitlint/rules/src/scope-min-length.test.ts b/@commitlint/rules/src/scope-min-length.test.ts index 327f5de49d..3ff18920ec 100644 --- a/@commitlint/rules/src/scope-min-length.test.ts +++ b/@commitlint/rules/src/scope-min-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {scopeMinLength} from './scope-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeMinLength } from "./scope-min-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = long.length; const messages = { - empty: 'test:\n', + empty: "test:\n", short: `test(${short}): \n`, long: `test(${long}): \n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = scopeMinLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = scopeMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = scopeMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/scope-min-length.ts b/@commitlint/rules/src/scope-min-length.ts index 55a69da3e9..40b4c909f9 100644 --- a/@commitlint/rules/src/scope-min-length.ts +++ b/@commitlint/rules/src/scope-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const scopeMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.scope; if (!input) { diff --git a/@commitlint/rules/src/signed-off-by.test.ts b/@commitlint/rules/src/signed-off-by.test.ts index 469f40e7fa..d47353927a 100644 --- a/@commitlint/rules/src/signed-off-by.test.ts +++ b/@commitlint/rules/src/signed-off-by.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {signedOffBy} from './signed-off-by.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { signedOffBy } from "./signed-off-by.js"; const messages = { - empty: 'test:\n', + empty: "test:\n", with: `test: subject\nbody\nfooter\nSigned-off-by:\n\n`, without: `test: subject\nbody\nfooter\n\n`, inSubject: `test: subject Signed-off-by:\nbody\nfooter\n\n`, @@ -29,25 +29,25 @@ const parsed = { }; test('empty against "always signed-off-by" should fail', async () => { - const [actual] = signedOffBy(await parsed.empty, 'always', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.empty, "always", "Signed-off-by:"); const expected = false; expect(actual).toEqual(expected); }); test('empty against "never signed-off-by" should succeed', async () => { - const [actual] = signedOffBy(await parsed.empty, 'never', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.empty, "never", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); test('with against "always signed-off-by" should succeed', async () => { - const [actual] = signedOffBy(await parsed.with, 'always', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.with, "always", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); test('with against "never signed-off-by" should fail', async () => { - const [actual] = signedOffBy(await parsed.with, 'never', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.with, "never", "Signed-off-by:"); const expected = false; expect(actual).toEqual(expected); }); @@ -55,24 +55,24 @@ test('with against "never signed-off-by" should fail', async () => { test('without against "always signed-off-by" should fail', async () => { const [actual] = signedOffBy( await parsed.without, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; expect(actual).toEqual(expected); }); test('without against "never signed-off-by" should succeed', async () => { - const [actual] = signedOffBy(await parsed.without, 'never', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.without, "never", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); -test('trailing comments should be ignored', async () => { +test("trailing comments should be ignored", async () => { const [actual] = signedOffBy( await parsed.withSignoffAndComments, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = true; expect(actual).toEqual(expected); @@ -81,8 +81,8 @@ test('trailing comments should be ignored', async () => { test('inSubject against "always signed-off-by" should fail', async () => { const [actual] = signedOffBy( await parsed.inSubject, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; expect(actual).toEqual(expected); @@ -91,21 +91,21 @@ test('inSubject against "always signed-off-by" should fail', async () => { test('inSubject against "never signed-off-by" should succeed', async () => { const [actual] = signedOffBy( await parsed.inSubject, - 'never', - 'Signed-off-by:' + "never", + "Signed-off-by:", ); const expected = true; expect(actual).toEqual(expected); }); test('inBody against "always signed-off-by" should fail', async () => { - const [actual] = signedOffBy(await parsed.inBody, 'always', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.inBody, "always", "Signed-off-by:"); const expected = false; expect(actual).toEqual(expected); }); test('inBody against "never signed-off-by" should succeed', async () => { - const [actual] = signedOffBy(await parsed.inBody, 'never', 'Signed-off-by:'); + const [actual] = signedOffBy(await parsed.inBody, "never", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/signed-off-by.ts b/@commitlint/rules/src/signed-off-by.ts index 674a206197..5a53c32395 100644 --- a/@commitlint/rules/src/signed-off-by.ts +++ b/@commitlint/rules/src/signed-off-by.ts @@ -1,27 +1,29 @@ -import message from '@commitlint/message'; -import toLines from '@commitlint/to-lines'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import toLines from "@commitlint/to-lines"; +import { SyncRule } from "@commitlint/types"; export const signedOffBy: SyncRule<string> = ( parsed, - when = 'always', - value = '' + when = "always", + value = "", ) => { const lines = toLines(parsed.raw).filter( (ln) => // skip comments - !ln.startsWith('#') && + !ln.startsWith("#") && // ignore empty lines - Boolean(ln) + Boolean(ln), ); const last = lines[lines.length - 1]; - const negated = when === 'never'; - const hasSignedOffBy = last.startsWith(value); + const negated = when === "never"; + const hasSignedOffBy = + // empty commit message + last ? last.startsWith(value) : false; return [ negated ? !hasSignedOffBy : hasSignedOffBy, - message(['message', negated ? 'must not' : 'must', 'be signed off']), + message(["message", negated ? "must not" : "must", "be signed off"]), ]; }; diff --git a/@commitlint/rules/src/subject-case.test.ts b/@commitlint/rules/src/subject-case.test.ts index 5c8281bda6..911b8d5321 100644 --- a/@commitlint/rules/src/subject-case.test.ts +++ b/@commitlint/rules/src/subject-case.test.ts @@ -1,28 +1,28 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {subjectCase} from './subject-case.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectCase } from "./subject-case.js"; const messages = { - empty: 'test:\n', - numeric: 'test: 1.0.0', - lowercase: 'test: subject', - lowercase_unicode: 'test: тема', // Bulgarian for `subject` - mixedcase: 'test: sUbJeCt', - caseless: 'test: 这是一次提交', // Chinese for `this is a commit` - uppercase: 'test: SUBJECT', - uppercase_unicode: 'test: ÛNDERWERP', // Frisian for `SUBJECT` - camelcase: 'test: subJect', - camelcase_unicode: 'test: θέΜα', // Greek for `subJect` - kebabcase: 'test: sub-ject', - kebabcase_unicode: 'test: áb-har', // Irish for `sub-ject` - pascalcase: 'test: SubJect', - pascalcase_unicode: 'test: ТақыРып', // Kazakh for `SubJect` - snakecase: 'test: sub_ject', - snakecase_unicode: 'test: сэ_дэв', // Mongolian for `sub_ject` - startcase: 'test: Sub Ject', - startcase_unicode: 'test: Äm Ne', // Swedish for `Sub Ject` - sentencecase: 'test: Sub ject', - sentencecase_unicode: 'test: Мав зуъ', // Tajik for `Sub ject` + empty: "test:\n", + numeric: "test: 1.0.0", + lowercase: "test: subject", + lowercase_unicode: "test: тема", // Bulgarian for `subject` + mixedcase: "test: sUbJeCt", + caseless: "test: 这是一次提交", // Chinese for `this is a commit` + uppercase: "test: SUBJECT", + uppercase_unicode: "test: ÛNDERWERP", // Frisian for `SUBJECT` + camelcase: "test: subJect", + camelcase_unicode: "test: θέΜα", // Greek for `subJect` + kebabcase: "test: sub-ject", + kebabcase_unicode: "test: áb-har", // Irish for `sub-ject` + pascalcase: "test: SubJect", + pascalcase_unicode: "test: ТақыРып", // Kazakh for `SubJect` + snakecase: "test: sub_ject", + snakecase_unicode: "test: сэ_дэв", // Mongolian for `sub_ject` + startcase: "test: Sub Ject", + startcase_unicode: "test: Äm Ne", // Swedish for `Sub Ject` + sentencecase: "test: Sub ject", + sentencecase_unicode: "test: Мав зуъ", // Tajik for `Sub ject` }; const parsed = { @@ -49,37 +49,37 @@ const parsed = { }; test('with empty subject should succeed for "never lowercase"', async () => { - const [actual] = subjectCase(await parsed.empty, 'never', 'lowercase'); + const [actual] = subjectCase(await parsed.empty, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty subject should succeed for "always lowercase"', async () => { - const [actual] = subjectCase(await parsed.empty, 'always', 'lowercase'); + const [actual] = subjectCase(await parsed.empty, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.empty, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.empty, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty subject should succeed for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.empty, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.empty, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase subject should fail for "never lowercase"', async () => { - const [actual] = subjectCase(await parsed.lowercase, 'never', 'lowercase'); + const [actual] = subjectCase(await parsed.lowercase, "never", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase subject should succeed for "always lowercase"', async () => { - const [actual] = subjectCase(await parsed.lowercase, 'always', 'lowercase'); + const [actual] = subjectCase(await parsed.lowercase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); @@ -87,63 +87,63 @@ test('with lowercase subject should succeed for "always lowercase"', async () => test('with lowercase unicode subject should fail for "always uppercase"', async () => { const [actual] = subjectCase( await parsed.lowercase_unicode, - 'always', - 'upper-case' + "always", + "upper-case", ); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase subject should succeed for "never lowercase"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', 'lowercase'); + const [actual] = subjectCase(await parsed.mixedcase, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase subject should fail for "always lowercase"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', 'lowercase'); + const [actual] = subjectCase(await parsed.mixedcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.mixedcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase subject should fail for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.mixedcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with caseless subject should succeed for "never sentencecase"', async () => { - const [actual] = subjectCase(await parsed.caseless, 'never', 'sentence-case'); + const [actual] = subjectCase(await parsed.caseless, "never", "sentence-case"); const expected = true; expect(actual).toEqual(expected); }); test('with caseless subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.caseless, 'never', 'upper-case'); + const [actual] = subjectCase(await parsed.caseless, "never", "upper-case"); const expected = true; expect(actual).toEqual(expected); }); test('with caseless subject should succeed for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.caseless, 'always', 'upper-case'); + const [actual] = subjectCase(await parsed.caseless, "always", "upper-case"); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase subject should fail for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.uppercase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.uppercase, "never", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase subject should succeed for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.uppercase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.uppercase, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); @@ -151,45 +151,45 @@ test('with uppercase subject should succeed for "always uppercase"', async () => test('with uppercase unicode subject should fail for "always lowercase"', async () => { const [actual] = subjectCase( await parsed.uppercase_unicode, - 'always', - 'lower-case' + "always", + "lower-case", ); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase subject should fail for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.camelcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.camelcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase subject should fail for "always pascalcase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'pascal-case'); + const [actual] = subjectCase(await parsed.camelcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase subject should fail for "always kebabcase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'kebab-case'); + const [actual] = subjectCase(await parsed.camelcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase subject should fail for "always snakecase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'snake-case'); + const [actual] = subjectCase(await parsed.camelcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase subject should succeed for "always camelcase"', async () => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'camel-case'); + const [actual] = subjectCase(await parsed.camelcase, "always", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); @@ -197,8 +197,8 @@ test('with camelcase subject should succeed for "always camelcase"', async () => test('with camelcase unicode subject should fail for "always sentencecase"', async () => { const [actual] = subjectCase( await parsed.camelcase_unicode, - 'always', - 'sentence-case' + "always", + "sentence-case", ); const expected = false; expect(actual).toEqual(expected); @@ -207,21 +207,21 @@ test('with camelcase unicode subject should fail for "always sentencecase"', asy test('with kebabcase unicode subject should fail for "always camelcase"', async () => { const [actual] = subjectCase( await parsed.kebabcase_unicode, - 'always', - 'camel-case' + "always", + "camel-case", ); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase subject should fail for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.pascalcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.pascalcase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.pascalcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); @@ -229,27 +229,27 @@ test('with pascalcase subject should succeed for "never uppercase"', async () => test('with pascalcase subject should succeed for "always pascalcase"', async () => { const [actual] = subjectCase( await parsed.pascalcase, - 'always', - 'pascal-case' + "always", + "pascal-case", ); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase subject should fail for "always kebabcase"', async () => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'kebab-case'); + const [actual] = subjectCase(await parsed.pascalcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase subject should fail for "always snakecase"', async () => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'snake-case'); + const [actual] = subjectCase(await parsed.pascalcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase subject should fail for "always camelcase"', async () => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'camel-case'); + const [actual] = subjectCase(await parsed.pascalcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); @@ -257,45 +257,45 @@ test('with pascalcase subject should fail for "always camelcase"', async () => { test('with pascalcase unicode subject should fail for "always uppercase"', async () => { const [actual] = subjectCase( await parsed.pascalcase_unicode, - 'always', - 'upper-case' + "always", + "upper-case", ); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase subject should fail for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.snakecase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.snakecase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase subject should fail for "always pascalcase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'pascal-case'); + const [actual] = subjectCase(await parsed.snakecase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase subject should fail for "always kebabcase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'kebab-case'); + const [actual] = subjectCase(await parsed.snakecase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase subject should succeed for "always snakecase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'snake-case'); + const [actual] = subjectCase(await parsed.snakecase, "always", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase subject should fail for "always camelcase"', async () => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'camel-case'); + const [actual] = subjectCase(await parsed.snakecase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); @@ -303,51 +303,51 @@ test('with snakecase subject should fail for "always camelcase"', async () => { test('with snakecase unicode subject should fail for "never lowercase"', async () => { const [actual] = subjectCase( await parsed.snakecase_unicode, - 'never', - 'lower-case' + "never", + "lower-case", ); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should fail for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.startcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.startcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with startcase subject should fail for "always pascalcase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'pascal-case'); + const [actual] = subjectCase(await parsed.startcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should fail for "always kebabcase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'kebab-case'); + const [actual] = subjectCase(await parsed.startcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should fail for "always snakecase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'snake-case'); + const [actual] = subjectCase(await parsed.startcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should fail for "always camelcase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'camel-case'); + const [actual] = subjectCase(await parsed.startcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase subject should succeed for "always startcase"', async () => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'start-case'); + const [actual] = subjectCase(await parsed.startcase, "always", "start-case"); const expected = true; expect(actual).toEqual(expected); }); @@ -355,8 +355,8 @@ test('with startcase subject should succeed for "always startcase"', async () => test('with startcase unicode subject should fail for "always pascalcase"', async () => { const [actual] = subjectCase( await parsed.startcase_unicode, - 'always', - 'pascal-case' + "always", + "pascal-case", ); const expected = false; expect(actual).toEqual(expected); @@ -365,8 +365,8 @@ test('with startcase unicode subject should fail for "always pascalcase"', async test('with sentencecase subject should succeed for "always sentence-case"', async () => { const [actual] = subjectCase( await parsed.sentencecase, - 'always', - 'sentence-case' + "always", + "sentence-case", ); const expected = true; expect(actual).toEqual(expected); @@ -375,8 +375,8 @@ test('with sentencecase subject should succeed for "always sentence-case"', asyn test('with sentencecase subject should fail for "never sentencecase"', async () => { const [actual] = subjectCase( await parsed.sentencecase, - 'never', - 'sentence-case' + "never", + "sentence-case", ); const expected = false; expect(actual).toEqual(expected); @@ -385,8 +385,8 @@ test('with sentencecase subject should fail for "never sentencecase"', async () test('with sentencecase subject should fail for "always pascalcase"', async () => { const [actual] = subjectCase( await parsed.sentencecase, - 'always', - 'pascal-case' + "always", + "pascal-case", ); const expected = false; expect(actual).toEqual(expected); @@ -395,8 +395,8 @@ test('with sentencecase subject should fail for "always pascalcase"', async () = test('with sentencecase subject should succeed for "never camelcase"', async () => { const [actual] = subjectCase( await parsed.sentencecase, - 'never', - 'camel-case' + "never", + "camel-case", ); const expected = true; expect(actual).toEqual(expected); @@ -405,8 +405,8 @@ test('with sentencecase subject should succeed for "never camelcase"', async () test('with sentencecase unicode subject should fail for "always camelcase"', async () => { const [actual] = subjectCase( await parsed.sentencecase_unicode, - 'always', - 'camel-case' + "always", + "camel-case", ); const expected = false; expect(actual).toEqual(expected); @@ -415,96 +415,96 @@ test('with sentencecase unicode subject should fail for "always camelcase"', asy test('should use expected message with "always"', async () => { const [, message] = subjectCase( await parsed.uppercase, - 'always', - 'lower-case' + "always", + "lower-case", ); - expect(message).toContain('must be lower-case'); + expect(message).toContain("must be lower-case"); }); test('should use expected message with "never"', async () => { const [, message] = subjectCase( await parsed.uppercase, - 'never', - 'upper-case' + "never", + "upper-case", ); - expect(message).toContain('must not be upper-case'); + expect(message).toContain("must not be upper-case"); }); test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = subjectCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = subjectCase(await parsed.uppercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase subject should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = subjectCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = subjectCase(await parsed.lowercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase subject should fail for "always [uppercase, lowercase]"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = subjectCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase subject should pass for "always [uppercase, lowercase, camel-case]"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case', + const [actual] = subjectCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", + "camel-case", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async () => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = subjectCase(await parsed.mixedcase, "never", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should fail for "never [uppercase, lowercase]"', async () => { - const [actual] = subjectCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = subjectCase(await parsed.uppercase, "never", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with numeric subject should succeed for "never lowercase"', async () => { - const [actual] = subjectCase(await parsed.numeric, 'never', 'lowercase'); + const [actual] = subjectCase(await parsed.numeric, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric subject should succeed for "always lowercase"', async () => { - const [actual] = subjectCase(await parsed.numeric, 'always', 'lowercase'); + const [actual] = subjectCase(await parsed.numeric, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric subject should succeed for "never uppercase"', async () => { - const [actual] = subjectCase(await parsed.numeric, 'never', 'uppercase'); + const [actual] = subjectCase(await parsed.numeric, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with numeric subject should succeed for "always uppercase"', async () => { - const [actual] = subjectCase(await parsed.numeric, 'always', 'uppercase'); + const [actual] = subjectCase(await parsed.numeric, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/subject-case.ts b/@commitlint/rules/src/subject-case.ts index 13e7de850a..c5bfa610b7 100644 --- a/@commitlint/rules/src/subject-case.ts +++ b/@commitlint/rules/src/subject-case.ts @@ -1,6 +1,6 @@ -import {case as ensureCase} from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {TargetCaseType, SyncRule} from '@commitlint/types'; +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; /** * Since the rule requires first symbol of a subject to be a letter, use @@ -19,23 +19,23 @@ import {TargetCaseType, SyncRule} from '@commitlint/types'; */ const startsWithLetterRegex = /^[\p{Ll}\p{Lu}\p{Lt}]/iu; -const negated = (when?: string) => when === 'never'; +const negated = (when?: string) => when === "never"; export const subjectCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {subject} = parsed; + const { subject } = parsed; - if (typeof subject !== 'string' || !subject.match(startsWithLetterRegex)) { + if (typeof subject !== "string" || !subject.match(startsWithLetterRegex)) { return [true]; } const checks = (Array.isArray(value) ? value : [value]).map((check) => { - if (typeof check === 'string') { + if (typeof check === "string") { return { - when: 'always', + when: "always", case: check, }; } @@ -47,7 +47,7 @@ export const subjectCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( return negated(check.when) ? !r : r; }); - const list = checks.map((c) => c.case).join(', '); + const list = checks.map((c) => c.case).join(", "); return [ negated(when) ? !result : result, diff --git a/@commitlint/rules/src/subject-empty.test.ts b/@commitlint/rules/src/subject-empty.test.ts index dca594d9ed..e8c6440c84 100644 --- a/@commitlint/rules/src/subject-empty.test.ts +++ b/@commitlint/rules/src/subject-empty.test.ts @@ -1,10 +1,10 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {subjectEmpty} from './subject-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectEmpty } from "./subject-empty.js"; const messages = { - empty: 'test: \nbody', - filled: 'test: subject\nbody', + empty: "test: \nbody", + filled: "test: subject\nbody", }; const parsed = { @@ -12,38 +12,38 @@ const parsed = { filled: parse(messages.filled), }; -test('without subject should succeed for empty keyword', async () => { +test("without subject should succeed for empty keyword", async () => { const [actual] = subjectEmpty(await parsed.empty); const expected = true; expect(actual).toEqual(expected); }); test('without subject should fail for "never"', async () => { - const [actual] = subjectEmpty(await parsed.empty, 'never'); + const [actual] = subjectEmpty(await parsed.empty, "never"); const expected = false; expect(actual).toEqual(expected); }); test('without subject should succeed for "always"', async () => { - const [actual] = subjectEmpty(await parsed.empty, 'always'); + const [actual] = subjectEmpty(await parsed.empty, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with subject fail for empty keyword', async () => { +test("with subject fail for empty keyword", async () => { const [actual] = subjectEmpty(await parsed.filled); const expected = false; expect(actual).toEqual(expected); }); test('with subject succeed for "never"', async () => { - const [actual] = subjectEmpty(await parsed.filled, 'never'); + const [actual] = subjectEmpty(await parsed.filled, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with subject fail for "always"', async () => { - const [actual] = subjectEmpty(await parsed.filled, 'always'); + const [actual] = subjectEmpty(await parsed.filled, "always"); const expected = false; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/subject-empty.ts b/@commitlint/rules/src/subject-empty.ts index fc94daefcb..d489b2c3ab 100644 --- a/@commitlint/rules/src/subject-empty.ts +++ b/@commitlint/rules/src/subject-empty.ts @@ -1,13 +1,13 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const subjectEmpty: SyncRule = (parsed, when = 'always') => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.subject || ''); +export const subjectEmpty: SyncRule = (parsed, when = "always") => { + const negated = when === "never"; + const notEmpty = ensure.notEmpty(parsed.subject || ""); return [ negated ? notEmpty : !notEmpty, - message(['subject', negated ? 'may not' : 'must', 'be empty']), + message(["subject", negated ? "may not" : "must", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/subject-exclamation-mark.test.ts b/@commitlint/rules/src/subject-exclamation-mark.test.ts index ef1a9b2e28..55e47d0e7a 100644 --- a/@commitlint/rules/src/subject-exclamation-mark.test.ts +++ b/@commitlint/rules/src/subject-exclamation-mark.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; // @ts-expect-error -- no typings -import preset from 'conventional-changelog-angular'; +import preset from "conventional-changelog-angular"; -import {subjectExclamationMark} from './subject-exclamation-mark.js'; +import { subjectExclamationMark } from "./subject-exclamation-mark.js"; const parseMessage = async (str: string) => { - const {parserOpts} = await preset(); + const { parserOpts } = await preset(); return parse(str, undefined, parserOpts); }; const messages = { - empty: 'test:\n', + empty: "test:\n", with: `test!: subject\n`, without: `test: subject\n`, }; @@ -23,37 +23,37 @@ const parsed = { }; test('empty against "always" should fail', async () => { - const [actual] = subjectExclamationMark(await parsed.empty, 'always'); + const [actual] = subjectExclamationMark(await parsed.empty, "always"); const expected = false; expect(actual).toEqual(expected); }); test('empty against "never" should succeed', async () => { - const [actual] = subjectExclamationMark(await parsed.empty, 'never'); + const [actual] = subjectExclamationMark(await parsed.empty, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with against "always" should succeed', async () => { - const [actual] = subjectExclamationMark(await parsed.with, 'always'); + const [actual] = subjectExclamationMark(await parsed.with, "always"); const expected = true; expect(actual).toEqual(expected); }); test('with against "never" should fail', async () => { - const [actual] = subjectExclamationMark(await parsed.with, 'never'); + const [actual] = subjectExclamationMark(await parsed.with, "never"); const expected = false; expect(actual).toEqual(expected); }); test('without against "always" should fail', async () => { - const [actual] = subjectExclamationMark(await parsed.without, 'always'); + const [actual] = subjectExclamationMark(await parsed.without, "always"); const expected = false; expect(actual).toEqual(expected); }); test('without against "never" should succeed', async () => { - const [actual] = subjectExclamationMark(await parsed.without, 'never'); + const [actual] = subjectExclamationMark(await parsed.without, "never"); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/subject-exclamation-mark.ts b/@commitlint/rules/src/subject-exclamation-mark.ts index 11cc29b590..19bf8eacca 100644 --- a/@commitlint/rules/src/subject-exclamation-mark.ts +++ b/@commitlint/rules/src/subject-exclamation-mark.ts @@ -1,21 +1,21 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const subjectExclamationMark: SyncRule = (parsed, when = 'always') => { +export const subjectExclamationMark: SyncRule = (parsed, when = "always") => { const input = parsed.header; if (!input) { - return [true, '']; + return [true, ""]; } - const negated = when === 'never'; + const negated = when === "never"; const hasExclamationMark = /!:/.test(input); return [ negated ? !hasExclamationMark : hasExclamationMark, message([ - 'subject', - negated ? 'must not' : 'must', - 'have an exclamation mark in the subject to identify a breaking change', + "subject", + negated ? "must not" : "must", + "have an exclamation mark in the subject to identify a breaking change", ]), ]; }; diff --git a/@commitlint/rules/src/subject-full-stop.test.ts b/@commitlint/rules/src/subject-full-stop.test.ts index d787a537f8..344f65652b 100644 --- a/@commitlint/rules/src/subject-full-stop.test.ts +++ b/@commitlint/rules/src/subject-full-stop.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {subjectFullStop} from './subject-full-stop.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectFullStop } from "./subject-full-stop.js"; const messages = { - empty: 'test:\n', + empty: "test:\n", with: `test: subject.\n`, without: `test: subject\n`, standardScopeWith: `type(scope): subject.\n`, - nonStandardScopeWith: 'type.scope: subject.\n', - ellipsisMessage: 'test: subject ends with ellipsis...', + nonStandardScopeWith: "type.scope: subject.\n", + ellipsisMessage: "test: subject ends with ellipsis...", }; const parsed = { @@ -21,37 +21,37 @@ const parsed = { }; test('empty against "always" should succeed', async () => { - const [actual] = subjectFullStop(await parsed.empty, 'always', '.'); + const [actual] = subjectFullStop(await parsed.empty, "always", "."); const expected = true; expect(actual).toEqual(expected); }); test('empty against "never ." should succeed', async () => { - const [actual] = subjectFullStop(await parsed.empty, 'never', '.'); + const [actual] = subjectFullStop(await parsed.empty, "never", "."); const expected = true; expect(actual).toEqual(expected); }); test('with against "always ." should succeed', async () => { - const [actual] = subjectFullStop(await parsed.with, 'always', '.'); + const [actual] = subjectFullStop(await parsed.with, "always", "."); const expected = true; expect(actual).toEqual(expected); }); test('with against "never ." should fail', async () => { - const [actual] = subjectFullStop(await parsed.with, 'never', '.'); + const [actual] = subjectFullStop(await parsed.with, "never", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "always ." should fail', async () => { - const [actual] = subjectFullStop(await parsed.without, 'always', '.'); + const [actual] = subjectFullStop(await parsed.without, "always", "."); const expected = false; expect(actual).toEqual(expected); }); test('without against "never ." should succeed', async () => { - const [actual] = subjectFullStop(await parsed.without, 'never', '.'); + const [actual] = subjectFullStop(await parsed.without, "never", "."); const expected = true; expect(actual).toEqual(expected); }); @@ -59,8 +59,8 @@ test('without against "never ." should succeed', async () => { test('commit message title with standard scope and full-stop against "never ." should fail', async () => { const [actual] = subjectFullStop( await parsed.standardScopeWith, - 'never', - '.' + "never", + ".", ); const expected = false; expect(actual).toEqual(expected); @@ -69,15 +69,15 @@ test('commit message title with standard scope and full-stop against "never ." s test('commit message title with non standard scope and full-stop against "never ." should fail', async () => { const [actual] = subjectFullStop( await parsed.nonStandardScopeWith, - 'never', - '.' + "never", + ".", ); const expected = false; expect(actual).toEqual(expected); }); test('ellipsis is not fullstop so commit title ending with it against "never ." should not fail', async () => { - const [actual] = subjectFullStop(await parsed.ellipsisMessage, 'never', '.'); + const [actual] = subjectFullStop(await parsed.ellipsisMessage, "never", "."); const expected = true; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/subject-full-stop.ts b/@commitlint/rules/src/subject-full-stop.ts index 1b4acd88cb..6f1eed4aef 100644 --- a/@commitlint/rules/src/subject-full-stop.ts +++ b/@commitlint/rules/src/subject-full-stop.ts @@ -1,26 +1,26 @@ -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const subjectFullStop: SyncRule<string> = ( parsed, - when = 'always', - value = '.' + when = "always", + value = ".", ) => { - const colonIndex = parsed.header?.indexOf(':') || 0; + const colonIndex = parsed.header?.indexOf(":") || 0; if (colonIndex > 0 && colonIndex === parsed.header!.length - 1) { return [true]; } const input = parsed.header; - const negated = when === 'never'; + const negated = when === "never"; let hasStop = input?.[input.length - 1] === value; - if (input?.slice(-3) === '...') { + if (input?.slice(-3) === "...") { hasStop = false; } return [ negated ? !hasStop : hasStop, - message(['subject', negated ? 'may not' : 'must', 'end with full stop']), + message(["subject", negated ? "may not" : "must", "end with full stop"]), ]; }; diff --git a/@commitlint/rules/src/subject-max-length.test.ts b/@commitlint/rules/src/subject-max-length.test.ts index 0cffa76800..c89b8c246d 100644 --- a/@commitlint/rules/src/subject-max-length.test.ts +++ b/@commitlint/rules/src/subject-max-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {subjectMaxLength} from './subject-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectMaxLength } from "./subject-max-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = short.length; const messages = { - empty: 'test:\n', + empty: "test:\n", short: `test: ${short}\n`, long: `test: ${long}\n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = subjectMaxLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = subjectMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = subjectMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/subject-max-length.ts b/@commitlint/rules/src/subject-max-length.ts index 86d27ed60c..ca2c148cfa 100644 --- a/@commitlint/rules/src/subject-max-length.ts +++ b/@commitlint/rules/src/subject-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const subjectMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.subject; diff --git a/@commitlint/rules/src/subject-min-length.test.ts b/@commitlint/rules/src/subject-min-length.test.ts index fa22f8c0b8..d269f6e22a 100644 --- a/@commitlint/rules/src/subject-min-length.test.ts +++ b/@commitlint/rules/src/subject-min-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {subjectMinLength} from './subject-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectMinLength } from "./subject-min-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = long.length; const messages = { - empty: 'test:\n', + empty: "test:\n", short: `test: ${short}\n`, long: `test: ${long}\n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = subjectMinLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = subjectMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = subjectMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/subject-min-length.ts b/@commitlint/rules/src/subject-min-length.ts index 98310a4fb3..b0835e8159 100644 --- a/@commitlint/rules/src/subject-min-length.ts +++ b/@commitlint/rules/src/subject-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const subjectMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.subject; if (!input) { diff --git a/@commitlint/rules/src/trailer-exists.test.ts b/@commitlint/rules/src/trailer-exists.test.ts index dd959a08a3..c090ad7b11 100644 --- a/@commitlint/rules/src/trailer-exists.test.ts +++ b/@commitlint/rules/src/trailer-exists.test.ts @@ -1,9 +1,9 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {trailerExists} from './trailer-exists.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { trailerExists } from "./trailer-exists.js"; const messages = { - empty: 'test:\n', + empty: "test:\n", with: `test: subject\n\nbody\n\nfooter\n\nSigned-off-by:\n\n`, without: `test: subject\n\nbody\n\nfooter\n\n`, inSubject: `test: subject Signed-off-by:\n\nbody\n\nfooter\n\n`, @@ -33,8 +33,8 @@ const parsed = { test('empty against "always trailer-exists" should fail', async () => { const [actual] = trailerExists( await parsed.empty, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; @@ -42,19 +42,19 @@ test('empty against "always trailer-exists" should fail', async () => { }); test('empty against "never trailer-exists" should succeed', async () => { - const [actual] = trailerExists(await parsed.empty, 'never', 'Signed-off-by:'); + const [actual] = trailerExists(await parsed.empty, "never", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); test('with against "always trailer-exists" should succeed', async () => { - const [actual] = trailerExists(await parsed.with, 'always', 'Signed-off-by:'); + const [actual] = trailerExists(await parsed.with, "always", "Signed-off-by:"); const expected = true; expect(actual).toEqual(expected); }); test('with against "never trailer-exists" should fail', async () => { - const [actual] = trailerExists(await parsed.with, 'never', 'Signed-off-by:'); + const [actual] = trailerExists(await parsed.with, "never", "Signed-off-by:"); const expected = false; expect(actual).toEqual(expected); }); @@ -62,8 +62,8 @@ test('with against "never trailer-exists" should fail', async () => { test('without against "always trailer-exists" should fail', async () => { const [actual] = trailerExists( await parsed.without, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; @@ -73,19 +73,19 @@ test('without against "always trailer-exists" should fail', async () => { test('without against "never trailer-exists" should succeed', async () => { const [actual] = trailerExists( await parsed.without, - 'never', - 'Signed-off-by:' + "never", + "Signed-off-by:", ); const expected = true; expect(actual).toEqual(expected); }); -test('comments and other trailers should be ignored', async () => { +test("comments and other trailers should be ignored", async () => { const [actual] = trailerExists( await parsed.withSignoffAndNoise, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = true; @@ -95,8 +95,8 @@ test('comments and other trailers should be ignored', async () => { test('inSubject against "always trailer-exists" should fail', async () => { const [actual] = trailerExists( await parsed.inSubject, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; @@ -106,8 +106,8 @@ test('inSubject against "always trailer-exists" should fail', async () => { test('inSubject against "never trailer-exists" should succeed', async () => { const [actual] = trailerExists( await parsed.inSubject, - 'never', - 'Signed-off-by:' + "never", + "Signed-off-by:", ); const expected = true; @@ -117,8 +117,8 @@ test('inSubject against "never trailer-exists" should succeed', async () => { test('inBody against "always trailer-exists" should fail', async () => { const [actual] = trailerExists( await parsed.inBody, - 'always', - 'Signed-off-by:' + "always", + "Signed-off-by:", ); const expected = false; @@ -128,8 +128,8 @@ test('inBody against "always trailer-exists" should fail', async () => { test('inBody against "never trailer-exists" should succeed', async () => { const [actual] = trailerExists( await parsed.inBody, - 'never', - 'Signed-off-by:' + "never", + "Signed-off-by:", ); const expected = true; diff --git a/@commitlint/rules/src/trailer-exists.ts b/@commitlint/rules/src/trailer-exists.ts index 4bf2427989..3dc516767e 100644 --- a/@commitlint/rules/src/trailer-exists.ts +++ b/@commitlint/rules/src/trailer-exists.ts @@ -1,28 +1,30 @@ -import {execaSync} from 'execa'; -import message from '@commitlint/message'; -import toLines from '@commitlint/to-lines'; -import {SyncRule} from '@commitlint/types'; +import { spawnSync } from "node:child_process"; +import message from "@commitlint/message"; +import toLines from "@commitlint/to-lines"; +import { SyncRule } from "@commitlint/types"; export const trailerExists: SyncRule<string> = ( parsed, - when = 'always', - value = '' + when = "always", + value = "", ) => { - const trailers = execaSync('git', ['interpret-trailers', '--parse'], { - input: parsed.raw || '', + const trailers = spawnSync("git", ["interpret-trailers", "--parse"], { + input: parsed.raw || "", }).stdout; - const matches = toLines(trailers).filter((ln) => ln.startsWith(value)).length; + const matches = toLines(trailers.toString()).filter((ln) => + ln.startsWith(value), + ).length; - const negated = when === 'never'; + const negated = when === "never"; const hasTrailer = matches > 0; return [ negated ? !hasTrailer : hasTrailer, message([ - 'message', - negated ? 'must not' : 'must', - 'have `' + value + '` trailer', + "message", + negated ? "must not" : "must", + "have `" + value + "` trailer", ]), ]; }; diff --git a/@commitlint/rules/src/type-case.test.ts b/@commitlint/rules/src/type-case.test.ts index 79ab7b8f98..b482e53cc0 100644 --- a/@commitlint/rules/src/type-case.test.ts +++ b/@commitlint/rules/src/type-case.test.ts @@ -1,17 +1,17 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {typeCase} from './type-case.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeCase } from "./type-case.js"; const messages = { - empty: '(scope): subject', - lowercase: 'type: subject', - mixedcase: 'tYpE: subject', - uppercase: 'TYPE: subject', - camelcase: 'tyPe: subject', - pascalcase: 'TyPe: subject', - snakecase: 'ty_pe: subject', - kebabcase: 'ty-pe: subject', - startcase: 'Ty Pe: subject', + empty: "(scope): subject", + lowercase: "type: subject", + mixedcase: "tYpE: subject", + uppercase: "TYPE: subject", + camelcase: "tyPe: subject", + pascalcase: "TyPe: subject", + snakecase: "ty_pe: subject", + kebabcase: "ty-pe: subject", + startcase: "Ty Pe: subject", }; const parsed = { @@ -25,300 +25,300 @@ const parsed = { kebabcase: parse(messages.kebabcase), startcase: parse(messages.startcase, undefined, { headerPattern: /^(.*): (.*)$/, - headerCorrespondence: ['type', 'subject'], + headerCorrespondence: ["type", "subject"], }), }; test('with empty type should succeed for "never lowercase"', async () => { - const [actual] = typeCase(await parsed.empty, 'never', 'lowercase'); + const [actual] = typeCase(await parsed.empty, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty type should succeed for "always lowercase"', async () => { - const [actual] = typeCase(await parsed.empty, 'always', 'lowercase'); + const [actual] = typeCase(await parsed.empty, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.empty, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.empty, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with empty type should succeed for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.empty, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.empty, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase type should fail for "never lowercase"', async () => { - const [actual] = typeCase(await parsed.lowercase, 'never', 'lowercase'); + const [actual] = typeCase(await parsed.lowercase, "never", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase type should succeed for "always lowercase"', async () => { - const [actual] = typeCase(await parsed.lowercase, 'always', 'lowercase'); + const [actual] = typeCase(await parsed.lowercase, "always", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase type should succeed for "never lowercase"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'never', 'lowercase'); + const [actual] = typeCase(await parsed.mixedcase, "never", "lowercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase type should fail for "always lowercase"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'always', 'lowercase'); + const [actual] = typeCase(await parsed.mixedcase, "always", "lowercase"); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.mixedcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase type should fail for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.mixedcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with uppercase type should fail for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.uppercase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.uppercase, "never", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with lowercase type should succeed for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.uppercase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.uppercase, "always", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase type should fail for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.camelcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.camelcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with camelcase type should fail for "always pascalcase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'pascal-case'); + const [actual] = typeCase(await parsed.camelcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase type should fail for "always kebabcase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'kebab-case'); + const [actual] = typeCase(await parsed.camelcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase type should fail for "always snakecase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'snake-case'); + const [actual] = typeCase(await parsed.camelcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase type should fail for "always startcase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'start-case'); + const [actual] = typeCase(await parsed.camelcase, "always", "start-case"); const expected = false; expect(actual).toEqual(expected); }); test('with camelcase type should succeed for "always camelcase"', async () => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'camel-case'); + const [actual] = typeCase(await parsed.camelcase, "always", "camel-case"); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase type should fail for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.pascalcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.pascalcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with pascalcase type should fail for "always camelcase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'camel-case'); + const [actual] = typeCase(await parsed.pascalcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase type should fail for "always kebabcase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'kebab-case'); + const [actual] = typeCase(await parsed.pascalcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase type should fail for "always snakecase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'snake-case'); + const [actual] = typeCase(await parsed.pascalcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase type should fail for "always startcase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'start-case'); + const [actual] = typeCase(await parsed.pascalcase, "always", "start-case"); const expected = false; expect(actual).toEqual(expected); }); test('with pascalcase type should succeed for "always pascalcase"', async () => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'pascal-case'); + const [actual] = typeCase(await parsed.pascalcase, "always", "pascal-case"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase type should fail for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.snakecase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.snakecase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase type should fail for "always camelcase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'camel-case'); + const [actual] = typeCase(await parsed.snakecase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase type should fail for "always kebabcase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'kebab-case'); + const [actual] = typeCase(await parsed.snakecase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase type should succeed for "always snakecase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'snake-case'); + const [actual] = typeCase(await parsed.snakecase, "always", "snake-case"); const expected = true; expect(actual).toEqual(expected); }); test('with snakecase type should fail for "always pascalcase"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'pascal-case'); + const [actual] = typeCase(await parsed.snakecase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with snakecase type should fail for "always start case"', async () => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'start-case'); + const [actual] = typeCase(await parsed.snakecase, "always", "start-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should fail for "always uppercase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'uppercase'); + const [actual] = typeCase(await parsed.startcase, "always", "uppercase"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should succeed for "never uppercase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'never', 'uppercase'); + const [actual] = typeCase(await parsed.startcase, "never", "uppercase"); const expected = true; expect(actual).toEqual(expected); }); test('with startcase type should fail for "always camelcase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'camel-case'); + const [actual] = typeCase(await parsed.startcase, "always", "camel-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should fail for "always kebabcase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'kebab-case'); + const [actual] = typeCase(await parsed.startcase, "always", "kebab-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should fail for "always snakecase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'snake-case'); + const [actual] = typeCase(await parsed.startcase, "always", "snake-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should fail for "always pascalcase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'pascal-case'); + const [actual] = typeCase(await parsed.startcase, "always", "pascal-case"); const expected = false; expect(actual).toEqual(expected); }); test('with startcase type should succeed for "always startcase"', async () => { - const [actual] = typeCase(await parsed.startcase, 'always', 'start-case'); + const [actual] = typeCase(await parsed.startcase, "always", "start-case"); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = typeCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = typeCase(await parsed.uppercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with lowercase subject should succeed for "always [uppercase, lowercase]"', async () => { - const [actual] = typeCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = typeCase(await parsed.lowercase, "always", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase subject should fail for "always [uppercase, lowercase]"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', + const [actual] = typeCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); }); test('with mixedcase subject should pass for "always [uppercase, lowercase, camel-case]"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case', + const [actual] = typeCase(await parsed.mixedcase, "always", [ + "uppercase", + "lowercase", + "camel-case", ]); const expected = true; expect(actual).toEqual(expected); }); test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async () => { - const [actual] = typeCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = typeCase(await parsed.mixedcase, "never", [ + "uppercase", + "lowercase", ]); const expected = true; expect(actual).toEqual(expected); }); test('with uppercase scope should fail for "never [uppercase, lowercase]"', async () => { - const [actual] = typeCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase', + const [actual] = typeCase(await parsed.uppercase, "never", [ + "uppercase", + "lowercase", ]); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/type-case.ts b/@commitlint/rules/src/type-case.ts index 71aa2fafdc..8c622e26ff 100644 --- a/@commitlint/rules/src/type-case.ts +++ b/@commitlint/rules/src/type-case.ts @@ -1,24 +1,24 @@ -import {case as ensureCase} from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {TargetCaseType, SyncRule} from '@commitlint/types'; +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; -const negated = (when?: string) => when === 'never'; +const negated = (when?: string) => when === "never"; export const typeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {type} = parsed; + const { type } = parsed; if (!type) { return [true]; } const checks = (Array.isArray(value) ? value : [value]).map((check) => { - if (typeof check === 'string') { + if (typeof check === "string") { return { - when: 'always', + when: "always", case: check, }; } @@ -30,7 +30,7 @@ export const typeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( return negated(check.when) ? !r : r; }); - const list = checks.map((c) => c.case).join(', '); + const list = checks.map((c) => c.case).join(", "); return [ negated(when) ? !result : result, diff --git a/@commitlint/rules/src/type-empty.test.ts b/@commitlint/rules/src/type-empty.test.ts index 862fb3ae31..48b5d3a893 100644 --- a/@commitlint/rules/src/type-empty.test.ts +++ b/@commitlint/rules/src/type-empty.test.ts @@ -1,10 +1,10 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {typeEmpty} from './type-empty.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeEmpty } from "./type-empty.js"; const messages = { - empty: '(scope):', - filled: 'type: subject', + empty: "(scope):", + filled: "type: subject", }; const parsed = { @@ -12,38 +12,38 @@ const parsed = { filled: parse(messages.filled), }; -test('without type should succeed for empty keyword', async () => { +test("without type should succeed for empty keyword", async () => { const [actual] = typeEmpty(await parsed.empty); const expected = true; expect(actual).toEqual(expected); }); test('without type should fail for "never"', async () => { - const [actual] = typeEmpty(await parsed.empty, 'never'); + const [actual] = typeEmpty(await parsed.empty, "never"); const expected = false; expect(actual).toEqual(expected); }); test('without type should succeed for "always"', async () => { - const [actual] = typeEmpty(await parsed.empty, 'always'); + const [actual] = typeEmpty(await parsed.empty, "always"); const expected = true; expect(actual).toEqual(expected); }); -test('with type fail for empty keyword', async () => { +test("with type fail for empty keyword", async () => { const [actual] = typeEmpty(await parsed.filled); const expected = false; expect(actual).toEqual(expected); }); test('with type succeed for "never"', async () => { - const [actual] = typeEmpty(await parsed.filled, 'never'); + const [actual] = typeEmpty(await parsed.filled, "never"); const expected = true; expect(actual).toEqual(expected); }); test('with type fail for "always"', async () => { - const [actual] = typeEmpty(await parsed.filled, 'always'); + const [actual] = typeEmpty(await parsed.filled, "always"); const expected = false; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/type-empty.ts b/@commitlint/rules/src/type-empty.ts index 8802e00d77..867f6120e5 100644 --- a/@commitlint/rules/src/type-empty.ts +++ b/@commitlint/rules/src/type-empty.ts @@ -1,12 +1,12 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; -export const typeEmpty: SyncRule = (parsed, when = 'always') => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.type || ''); +export const typeEmpty: SyncRule = (parsed, when = "always") => { + const negated = when === "never"; + const notEmpty = ensure.notEmpty(parsed.type || ""); return [ negated ? notEmpty : !notEmpty, - message(['type', negated ? 'may not' : 'must', 'be empty']), + message(["type", negated ? "may not" : "must", "be empty"]), ]; }; diff --git a/@commitlint/rules/src/type-enum.test.ts b/@commitlint/rules/src/type-enum.test.ts index 4f3dd6ca31..dda24c27ea 100644 --- a/@commitlint/rules/src/type-enum.test.ts +++ b/@commitlint/rules/src/type-enum.test.ts @@ -1,11 +1,11 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {typeEnum} from './type-enum.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeEnum } from "./type-enum.js"; const messages = { - empty: '(): \n', - a: 'a(): \n', - b: 'b(): \n', + empty: "(): \n", + a: "a(): \n", + b: "b(): \n", }; const parsed = { @@ -14,110 +14,110 @@ const parsed = { b: parse(messages.b), }; -test('empty succeeds', async () => { +test("empty succeeds", async () => { const [actual] = typeEnum(await parsed.empty); const expected = true; expect(actual).toEqual(expected); }); test('empty on "a" succeeds', async () => { - const [actual] = typeEnum(await parsed.empty, undefined, ['a']); + const [actual] = typeEnum(await parsed.empty, undefined, ["a"]); const expected = true; expect(actual).toEqual(expected); }); test('empty on "always a" succeeds', async () => { - const [actual] = typeEnum(await parsed.empty, 'always', ['a']); + const [actual] = typeEnum(await parsed.empty, "always", ["a"]); const expected = true; expect(actual).toEqual(expected); }); test('empty on "never a" succeeds', async () => { - const [actual] = typeEnum(await parsed.empty, 'never', ['a']); + const [actual] = typeEnum(await parsed.empty, "never", ["a"]); const expected = true; expect(actual).toEqual(expected); }); test('empty on "always a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.empty, 'always', ['a', 'b']); + const [actual] = typeEnum(await parsed.empty, "always", ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('empty on "never a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.empty, 'never', ['a', 'b']); + const [actual] = typeEnum(await parsed.empty, "never", ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('a on "a" succeeds', async () => { - const [actual] = typeEnum(await parsed.a, undefined, ['a']); + const [actual] = typeEnum(await parsed.a, undefined, ["a"]); const expected = true; expect(actual).toEqual(expected); }); test('a on "always a" succeeds', async () => { - const [actual] = typeEnum(await parsed.a, 'always', ['a']); + const [actual] = typeEnum(await parsed.a, "always", ["a"]); const expected = true; expect(actual).toEqual(expected); }); test('a on "never a" fails', async () => { - const [actual] = typeEnum(await parsed.a, 'never', ['a']); + const [actual] = typeEnum(await parsed.a, "never", ["a"]); const expected = false; expect(actual).toEqual(expected); }); test('b on "b" succeeds', async () => { - const [actual] = typeEnum(await parsed.b, undefined, ['b']); + const [actual] = typeEnum(await parsed.b, undefined, ["b"]); const expected = true; expect(actual).toEqual(expected); }); test('b on "always b" succeeds', async () => { - const [actual] = typeEnum(await parsed.b, 'always', ['b']); + const [actual] = typeEnum(await parsed.b, "always", ["b"]); const expected = true; expect(actual).toEqual(expected); }); test('b on "never b" fails', async () => { - const [actual] = typeEnum(await parsed.b, 'never', ['b']); + const [actual] = typeEnum(await parsed.b, "never", ["b"]); const expected = false; expect(actual).toEqual(expected); }); test('a on "a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.a, undefined, ['a', 'b']); + const [actual] = typeEnum(await parsed.a, undefined, ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('a on "always a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.a, 'always', ['a', 'b']); + const [actual] = typeEnum(await parsed.a, "always", ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('a on "never a, b" fails', async () => { - const [actual] = typeEnum(await parsed.a, 'never', ['a', 'b']); + const [actual] = typeEnum(await parsed.a, "never", ["a", "b"]); const expected = false; expect(actual).toEqual(expected); }); test('b on "a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.b, undefined, ['a', 'b']); + const [actual] = typeEnum(await parsed.b, undefined, ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('b on "always a, b" succeeds', async () => { - const [actual] = typeEnum(await parsed.b, 'always', ['a', 'b']); + const [actual] = typeEnum(await parsed.b, "always", ["a", "b"]); const expected = true; expect(actual).toEqual(expected); }); test('b on "never a, b" fails', async () => { - const [actual] = typeEnum(await parsed.b, 'never', ['a', 'b']); + const [actual] = typeEnum(await parsed.b, "never", ["a", "b"]); const expected = false; expect(actual).toEqual(expected); }); diff --git a/@commitlint/rules/src/type-enum.ts b/@commitlint/rules/src/type-enum.ts index c4a8f9aa18..4ae17d9574 100644 --- a/@commitlint/rules/src/type-enum.ts +++ b/@commitlint/rules/src/type-enum.ts @@ -1,19 +1,19 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; -import {SyncRule} from '@commitlint/types'; +import * as ensure from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; export const typeEnum: SyncRule<string[]> = ( parsed, - when = 'always', - value = [] + when = "always", + value = [], ) => { - const {type: input} = parsed; + const { type: input } = parsed; if (!input) { return [true]; } - const negated = when === 'never'; + const negated = when === "never"; const result = ensure.enum(input, value); return [ @@ -21,7 +21,7 @@ export const typeEnum: SyncRule<string[]> = ( message([ `type must`, negated ? `not` : null, - `be one of [${value.join(', ')}]`, + `be one of [${value.join(", ")}]`, ]), ]; }; diff --git a/@commitlint/rules/src/type-max-length.test.ts b/@commitlint/rules/src/type-max-length.test.ts index c77312ab49..2ce7601fcd 100644 --- a/@commitlint/rules/src/type-max-length.test.ts +++ b/@commitlint/rules/src/type-max-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {typeMaxLength} from './type-max-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeMaxLength } from "./type-max-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = short.length; const messages = { - empty: '():\n', + empty: "():\n", short: `${short}: \n`, long: `${long}: \n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = typeMaxLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should succeed', async () => { +test("with short should succeed", async () => { const [actual] = typeMaxLength(await parsed.short, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with long should fail', async () => { +test("with long should fail", async () => { const [actual] = typeMaxLength(await parsed.long, undefined, value); const expected = false; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/type-max-length.ts b/@commitlint/rules/src/type-max-length.ts index 1e4d27766f..7398ef3138 100644 --- a/@commitlint/rules/src/type-max-length.ts +++ b/@commitlint/rules/src/type-max-length.ts @@ -1,10 +1,10 @@ -import {maxLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const typeMaxLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.type; diff --git a/@commitlint/rules/src/type-min-length.test.ts b/@commitlint/rules/src/type-min-length.test.ts index 3503c920cc..7caf3a91c5 100644 --- a/@commitlint/rules/src/type-min-length.test.ts +++ b/@commitlint/rules/src/type-min-length.test.ts @@ -1,14 +1,14 @@ -import {test, expect} from 'vitest'; -import parse from '@commitlint/parse'; -import {typeMinLength} from './type-min-length.js'; +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeMinLength } from "./type-min-length.js"; -const short = 'a'; -const long = 'ab'; +const short = "a"; +const long = "ab"; const value = long.length; const messages = { - empty: '():\n', + empty: "():\n", short: `${short}: \n`, long: `${long}: \n`, }; @@ -19,19 +19,19 @@ const parsed = { long: parse(messages.long), }; -test('with empty should succeed', async () => { +test("with empty should succeed", async () => { const [actual] = typeMinLength(await parsed.empty, undefined, value); const expected = true; expect(actual).toEqual(expected); }); -test('with short should fail', async () => { +test("with short should fail", async () => { const [actual] = typeMinLength(await parsed.short, undefined, value); const expected = false; expect(actual).toEqual(expected); }); -test('with long should succeed', async () => { +test("with long should succeed", async () => { const [actual] = typeMinLength(await parsed.long, undefined, value); const expected = true; expect(actual).toEqual(expected); diff --git a/@commitlint/rules/src/type-min-length.ts b/@commitlint/rules/src/type-min-length.ts index f7ff3ea38b..619f7593ad 100644 --- a/@commitlint/rules/src/type-min-length.ts +++ b/@commitlint/rules/src/type-min-length.ts @@ -1,10 +1,10 @@ -import {minLength} from '@commitlint/ensure'; -import {SyncRule} from '@commitlint/types'; +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; export const typeMinLength: SyncRule<number> = ( parsed, _when = undefined, - value = 0 + value = 0, ) => { const input = parsed.type; if (!input) { diff --git a/@commitlint/rules/tsconfig.json b/@commitlint/rules/tsconfig.json index 3f6d480309..2bc7f16034 100644 --- a/@commitlint/rules/tsconfig.json +++ b/@commitlint/rules/tsconfig.json @@ -8,9 +8,9 @@ "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], "references": [ - {"path": "../ensure"}, - {"path": "../message"}, - {"path": "../to-lines"}, - {"path": "../types"} + { "path": "../ensure" }, + { "path": "../message" }, + { "path": "../to-lines" }, + { "path": "../types" } ] } diff --git a/@commitlint/to-lines/CHANGELOG.md b/@commitlint/to-lines/CHANGELOG.md index bfc05d110c..15defb3b02 100644 --- a/@commitlint/to-lines/CHANGELOG.md +++ b/@commitlint/to-lines/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/to-lines + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/to-lines + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/to-lines/package.json b/@commitlint/to-lines/package.json index 3d2ce08629..1743ccabf3 100644 --- a/@commitlint/to-lines/package.json +++ b/@commitlint/to-lines/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/to-lines", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,7 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/to-lines/src/index.test.ts b/@commitlint/to-lines/src/index.test.ts index 095a9758df..8df9e30d52 100644 --- a/@commitlint/to-lines/src/index.test.ts +++ b/@commitlint/to-lines/src/index.test.ts @@ -1,27 +1,27 @@ -import {test, expect} from 'vitest'; +import { test, expect } from "vitest"; -import toLines from './index.js'; +import toLines from "./index.js"; -test('should return an array for empty input', () => { +test("should return an array for empty input", () => { expect((toLines as () => string[])()).toStrictEqual([]); }); -test('should return an array for null input', () => { +test("should return an array for null input", () => { expect((toLines as (input: any) => string[])(null)).toStrictEqual([]); }); -test('should return an array for empty string input', () => { - expect(toLines('')).toStrictEqual(['']); +test("should return an array for empty string input", () => { + expect(toLines("")).toStrictEqual([""]); }); -test('should split LF newlines', () => { - expect(toLines('some\nweird\ntext')).toStrictEqual(['some', 'weird', 'text']); +test("should split LF newlines", () => { + expect(toLines("some\nweird\ntext")).toStrictEqual(["some", "weird", "text"]); }); -test('should split CR+LF newlines', () => { - expect(toLines('some\r\nweird\r\ntext')).toStrictEqual([ - 'some', - 'weird', - 'text', +test("should split CR+LF newlines", () => { + expect(toLines("some\r\nweird\r\ntext")).toStrictEqual([ + "some", + "weird", + "text", ]); }); diff --git a/@commitlint/to-lines/src/index.ts b/@commitlint/to-lines/src/index.ts index 4870c2bcbf..ccc1d1b7d2 100644 --- a/@commitlint/to-lines/src/index.ts +++ b/@commitlint/to-lines/src/index.ts @@ -1,5 +1,5 @@ export default function toLines(input?: string | null): string[] { - if (typeof input !== 'string') { + if (typeof input !== "string") { return []; } diff --git a/@commitlint/top-level/CHANGELOG.md b/@commitlint/top-level/CHANGELOG.md index 77f8021f73..177108d0b8 100644 --- a/@commitlint/top-level/CHANGELOG.md +++ b/@commitlint/top-level/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/top-level + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/top-level/package.json b/@commitlint/top-level/package.json index 4228255670..5241d8f4fd 100644 --- a/@commitlint/top-level/package.json +++ b/@commitlint/top-level/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/top-level", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -36,10 +36,10 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, "dependencies": { "find-up": "^7.0.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/top-level/src/index.ts b/@commitlint/top-level/src/index.ts index 5e3f3d3e1b..4996d4f8ee 100644 --- a/@commitlint/top-level/src/index.ts +++ b/@commitlint/top-level/src/index.ts @@ -1,5 +1,5 @@ -import path from 'path'; -import {findUp} from 'find-up'; +import path from "node:path"; +import { findUp } from "find-up"; export default toplevel; @@ -9,19 +9,19 @@ export default toplevel; async function toplevel(cwd?: string) { const found = await searchDotGit(cwd); - if (typeof found !== 'string') { + if (typeof found !== "string") { return found; } - return path.join(found, '..'); + return path.join(found, ".."); } /** * Search .git, the '.git' can be a file(submodule), also can be a directory(normal) */ async function searchDotGit(cwd?: string) { - const foundFile = await findUp('.git', {cwd, type: 'file'}); - const foundDir = await findUp('.git', {cwd, type: 'directory'}); + const foundFile = await findUp(".git", { cwd, type: "file" }); + const foundDir = await findUp(".git", { cwd, type: "directory" }); return foundFile || foundDir; } diff --git a/@commitlint/travis-cli/CHANGELOG.md b/@commitlint/travis-cli/CHANGELOG.md index 1b9e511250..4215e6ebee 100644 --- a/@commitlint/travis-cli/CHANGELOG.md +++ b/@commitlint/travis-cli/CHANGELOG.md @@ -3,6 +3,132 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/travis-cli/cli.js b/@commitlint/travis-cli/cli.js index 1bda77159f..940e27804b 100755 --- a/@commitlint/travis-cli/cli.js +++ b/@commitlint/travis-cli/cli.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import './lib/cli.js'; +import "./lib/cli.js"; diff --git a/@commitlint/travis-cli/package.json b/@commitlint/travis-cli/package.json index 4839b4b22e..4e26fc03a1 100644 --- a/@commitlint/travis-cli/package.json +++ b/@commitlint/travis-cli/package.json @@ -1,8 +1,10 @@ { "name": "@commitlint/travis-cli", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Lint all relevant commits for a change or PR on Travis CI", + "main": "lib/cli.js", + "types": "lib/cli.d.ts", "files": [ "lib/", "cli.js" @@ -37,12 +39,12 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "^19.0.0", - "@commitlint/utils": "^19.0.0" + "@commitlint/test": "^19.8.0", + "@commitlint/utils": "^19.8.0" }, "dependencies": { - "@commitlint/cli": "^19.0.0", - "execa": "^8.0.1" + "@commitlint/cli": "^19.8.0", + "tinyexec": "^1.0.0" }, - "gitHead": "70f7f4688b51774e7ac5e40e896cdaa3f132b2bc" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/travis-cli/src/cli.test.ts b/@commitlint/travis-cli/src/cli.test.ts index 59795d5513..b276a40792 100644 --- a/@commitlint/travis-cli/src/cli.test.ts +++ b/@commitlint/travis-cli/src/cli.test.ts @@ -1,77 +1,67 @@ -import {test, expect} from 'vitest'; -import {createRequire} from 'module'; -import path from 'path'; -import {fileURLToPath} from 'url'; +import { SpawnOptions } from "node:child_process"; -import {git} from '@commitlint/test'; -import {Options, execa} from 'execa'; +import { test, expect } from "vitest"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { git } from "@commitlint/test"; +import { x } from "tinyexec"; const require = createRequire(import.meta.url); -const __dirname = path.resolve(fileURLToPath(import.meta.url), '..'); +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); -const bin = require.resolve('../cli.js'); +const bin = require.resolve("../cli.js"); -const TRAVIS_COMMITLINT_BIN = require.resolve('../fixtures/commitlint'); -const TRAVIS_COMMITLINT_GIT_BIN = require.resolve('../fixtures/git'); +const TRAVIS_COMMITLINT_BIN = require.resolve("../fixtures/commitlint"); +const TRAVIS_COMMITLINT_GIT_BIN = require.resolve("../fixtures/git"); const validBaseEnv = { - TRAVIS: 'true', - CI: 'true', - TRAVIS_COMMIT: 'TRAVIS_COMMIT', + TRAVIS: "true", + CI: "true", + TRAVIS_COMMIT: "TRAVIS_COMMIT", TRAVIS_COMMITLINT_BIN: TRAVIS_COMMITLINT_BIN, TRAVIS_COMMITLINT_GIT_BIN: TRAVIS_COMMITLINT_GIT_BIN, - TRAVIS_COMMIT_RANGE: 'TRAVIS_COMMIT_A.TRAVIS_COMMIT_B', - TRAVIS_EVENT_TYPE: 'TRAVIS_EVENT_TYPE', - TRAVIS_REPO_SLUG: 'TRAVIS_REPO_SLUG', - TRAVIS_PULL_REQUEST_SLUG: 'TRAVIS_PULL_REQUEST_SLUG', + TRAVIS_COMMIT_RANGE: "TRAVIS_COMMIT_A.TRAVIS_COMMIT_B", + TRAVIS_EVENT_TYPE: "TRAVIS_EVENT_TYPE", + TRAVIS_REPO_SLUG: "TRAVIS_REPO_SLUG", + TRAVIS_PULL_REQUEST_SLUG: "TRAVIS_PULL_REQUEST_SLUG", }; -const cli = async (config: Options = {}, args: string[] = []) => { - try { - return await execa(bin, args, config); - } catch (err: any) { - if ( - typeof err.stdout !== 'undefined' && - typeof err.stderr !== 'undefined' - ) { - throw new Error([err.stdout, err.stderr].join('\n')); - } else { - throw new Error( - `An unknown error occured while running '${bin} ${args.join(' ')}'` - ); - } - } -}; +const cli = async (nodeOptions: SpawnOptions = {}, args: string[] = []) => + x(bin, args, { nodeOptions }); -test('should throw when not on travis ci', async () => { +test("should throw when not on travis ci", async () => { const env = { - CI: 'false', - TRAVIS: 'false', + CI: "false", + TRAVIS: "false", }; - await expect(cli({env})).rejects.toThrow( - '@commitlint/travis-cli is intended to be used on Travis CI' + const output = await cli({ env }); + expect(output.stderr).toContain( + "@commitlint/travis-cli is intended to be used on Travis CI", ); }); -test('should throw when on travis ci, but env vars are missing', async () => { +test("should throw when on travis ci, but env vars are missing", async () => { const env = { - TRAVIS: 'true', - CI: 'true', + TRAVIS: "true", + CI: "true", }; - await expect(cli({env})).rejects.toThrow( - 'TRAVIS_COMMIT, TRAVIS_COMMIT_RANGE, TRAVIS_EVENT_TYPE, TRAVIS_REPO_SLUG, TRAVIS_PULL_REQUEST_SLUG' + const output = await cli({ env }); + expect(output.stderr).toContain( + "TRAVIS_COMMIT, TRAVIS_COMMIT_RANGE, TRAVIS_EVENT_TYPE, TRAVIS_REPO_SLUG, TRAVIS_PULL_REQUEST_SLUG", ); }); -test('should call git with expected args (test might fail locally)', async () => { +test("should call git with expected args (test might fail locally)", async () => { const cwd = await git.clone( - 'https://github.com/conventional-changelog/commitlint.git', - ['--depth=10'], + "https://github.com/conventional-changelog/commitlint.git", + ["--depth=10"], __dirname, - TRAVIS_COMMITLINT_GIT_BIN + TRAVIS_COMMITLINT_GIT_BIN, ); const result = await cli({ @@ -85,69 +75,69 @@ test('should call git with expected args (test might fail locally)', async () => const [stash, branches, commitlint] = invocations; - expect(stash).toEqual(['git', 'stash', '-k', '-u', '--quiet']); - expect(branches).toEqual(['git', 'stash', 'pop', '--quiet']); - expect(commitlint).toEqual(['commitlint']); + expect(stash).toEqual(["git", "stash", "-k", "-u", "--quiet"]); + expect(branches).toEqual(["git", "stash", "pop", "--quiet"]); + expect(commitlint).toEqual(["commitlint"]); }); -test('should call git with expected args on pull_request (test might fail locally)', async () => { +test("should call git with expected args on pull_request (test might fail locally)", async () => { const cwd = await git.clone( - 'https://github.com/conventional-changelog/commitlint.git', - ['--depth=10'], + "https://github.com/conventional-changelog/commitlint.git", + ["--depth=10"], __dirname, - TRAVIS_COMMITLINT_GIT_BIN + TRAVIS_COMMITLINT_GIT_BIN, ); const result = await cli({ cwd, - env: {...validBaseEnv, TRAVIS_EVENT_TYPE: 'pull_request'}, + env: { ...validBaseEnv, TRAVIS_EVENT_TYPE: "pull_request" }, }); const invocations = getInvocations(result.stdout); expect(invocations.length).toBe(3); const [stash, branches, commitlint] = invocations; - expect(stash).toEqual(['git', 'stash', '-k', '-u', '--quiet']); - expect(branches).toEqual(['git', 'stash', 'pop', '--quiet']); + expect(stash).toEqual(["git", "stash", "-k", "-u", "--quiet"]); + expect(branches).toEqual(["git", "stash", "pop", "--quiet"]); expect(commitlint).toEqual([ - 'commitlint', - '--from', - 'TRAVIS_COMMIT_A', - '--to', - 'TRAVIS_COMMIT_B', + "commitlint", + "--from", + "TRAVIS_COMMIT_A", + "--to", + "TRAVIS_COMMIT_B", ]); }); -test('should call git with extra expected args on pull_request (test might fail locally)', async () => { +test("should call git with extra expected args on pull_request (test might fail locally)", async () => { const cwd = await git.clone( - 'https://github.com/conventional-changelog/commitlint.git', - ['--depth=10'], + "https://github.com/conventional-changelog/commitlint.git", + ["--depth=10"], __dirname, - TRAVIS_COMMITLINT_GIT_BIN + TRAVIS_COMMITLINT_GIT_BIN, ); const result = await cli( { cwd, - env: {...validBaseEnv, TRAVIS_EVENT_TYPE: 'pull_request'}, + env: { ...validBaseEnv, TRAVIS_EVENT_TYPE: "pull_request" }, }, - ['--config', './config/commitlint.config.js'] + ["--config", "./config/commitlint.config.js"], ); const invocations = getInvocations(result.stdout); expect(invocations.length).toBe(3); const [stash, branches, commitlint] = invocations; - expect(stash).toEqual(['git', 'stash', '-k', '-u', '--quiet']); - expect(branches).toEqual(['git', 'stash', 'pop', '--quiet']); + expect(stash).toEqual(["git", "stash", "-k", "-u", "--quiet"]); + expect(branches).toEqual(["git", "stash", "pop", "--quiet"]); expect(commitlint).toEqual([ - 'commitlint', - '--from', - 'TRAVIS_COMMIT_A', - '--to', - 'TRAVIS_COMMIT_B', - '--config', - './config/commitlint.config.js', + "commitlint", + "--from", + "TRAVIS_COMMIT_A", + "--to", + "TRAVIS_COMMIT_B", + "--config", + "./config/commitlint.config.js", ]); }); @@ -156,12 +146,12 @@ function getInvocations(stdout: string): string[][] { const raw = Array.isArray(matches) ? matches : []; return raw - .filter((invocation) => invocation !== '\n') + .filter((invocation) => invocation !== "\n") .map((invocation) => invocation - .split(',') + .split(",") .map((fragment) => fragment.trim()) .map((fragment) => fragment.substring(1, fragment.length - 1)) - .filter(Boolean) + .filter(Boolean), ); } diff --git a/@commitlint/travis-cli/src/cli.ts b/@commitlint/travis-cli/src/cli.ts index 7d13a28c69..ad4c586277 100644 --- a/@commitlint/travis-cli/src/cli.ts +++ b/@commitlint/travis-cli/src/cli.ts @@ -1,30 +1,32 @@ -import {createRequire} from 'module'; +import { SpawnOptions } from "node:child_process"; -import {Options, execa} from 'execa'; +import { createRequire } from "node:module"; + +import { x } from "tinyexec"; const require = createRequire(import.meta.url); // Allow to override used bins for testing purposes -const GIT = process.env.TRAVIS_COMMITLINT_GIT_BIN || 'git'; +const GIT = process.env.TRAVIS_COMMITLINT_GIT_BIN || "git"; const COMMITLINT = - process.env.TRAVIS_COMMITLINT_BIN || require('@commitlint/cli'); + process.env.TRAVIS_COMMITLINT_BIN || require("@commitlint/cli"); const REQUIRED = [ - 'TRAVIS_COMMIT', - 'TRAVIS_COMMIT_RANGE', - 'TRAVIS_EVENT_TYPE', - 'TRAVIS_REPO_SLUG', - 'TRAVIS_PULL_REQUEST_SLUG', + "TRAVIS_COMMIT", + "TRAVIS_COMMIT_RANGE", + "TRAVIS_EVENT_TYPE", + "TRAVIS_REPO_SLUG", + "TRAVIS_PULL_REQUEST_SLUG", ]; -const COMMIT = process.env.TRAVIS_COMMIT || ''; +const COMMIT = process.env.TRAVIS_COMMIT || ""; const REPO_SLUG = process.env.TRAVIS_REPO_SLUG; const PR_SLUG = process.env.TRAVIS_PULL_REQUEST_SLUG || REPO_SLUG; const RANGE = process.env.TRAVIS_COMMIT_RANGE; -const IS_PR = process.env.TRAVIS_EVENT_TYPE === 'pull_request'; +const IS_PR = process.env.TRAVIS_EVENT_TYPE === "pull_request"; main().catch((err) => { - console.log(err); + console.error(err); process.exit(1); }); @@ -36,9 +38,10 @@ async function main() { // Make base and source available as dedicated remotes await Promise.all([ - () => fetch({name: 'base', url: `https://github.com/${REPO_SLUG}.git`}), + () => fetch({ name: "base", url: `https://github.com/${REPO_SLUG}.git` }), IS_PR - ? () => fetch({name: 'source', url: `https://github.com/${PR_SLUG}.git`}) + ? () => + fetch({ name: "source", url: `https://github.com/${PR_SLUG}.git` }) : () => Promise.resolve(), ]); @@ -49,43 +52,56 @@ async function main() { // Lint all commits in TRAVIS_COMMIT_RANGE if available if (IS_PR && RANGE) { - const [start, end] = RANGE.split('.').filter(Boolean); - await lint(['--from', start, '--to', end, ...args]); + const [start, end] = RANGE.split(".").filter(Boolean); + await lint(["--from", start, "--to", end, ...args]); } else { const input = await log(COMMIT); - await lint(args, {input}); + await lint(args, {}, input); } } -async function git(args: string[], options: Options = {}) { - return execa(GIT, args, { - stdio: 'inherit', - ...options, +async function git(args: string[], nodeOptions: SpawnOptions = {}) { + return x(GIT, args, { + nodeOptions: { + stdio: "inherit", + ...nodeOptions, + }, }); } -async function fetch({name, url}: {name: string; url: string}) { - await git(['remote', 'add', name, url]); - await git(['fetch', name, '--quiet']); +async function fetch({ name, url }: { name: string; url: string }) { + await git(["remote", "add", name, url]); + await git(["fetch", name, "--quiet"]); } async function isClean() { - const result = await git(['status', '--porcelain'], { - stdio: ['pipe', 'pipe', 'pipe'], + const result = await git(["status", "--porcelain"], { + stdio: ["pipe", "pipe", "pipe"], }); return !(result.stdout && result.stdout.trim()); } -async function lint(args: string[], options: Options = {}) { - return execa(COMMITLINT, args, { - stdio: ['pipe', 'inherit', 'inherit'], - ...options, +async function lint( + args: string[], + nodeOptions: SpawnOptions = {}, + input: string = "", +) { + const result = x(COMMITLINT, args, { + nodeOptions: { + stdio: ["pipe", "inherit", "inherit"], + ...nodeOptions, + }, }); + + result.process?.stdin?.write(input); + result.process?.stdin?.end(); + + return result; } async function log(hash: string) { - const result = await git(['log', '-n', '1', '--pretty=format:%B', hash], { - stdio: 'pipe', + const result = await git(["log", "-n", "1", "--pretty=format:%B", hash], { + stdio: "pipe", }); return result.stdout; } @@ -94,23 +110,23 @@ async function stash() { if (await isClean()) { return () => Promise.resolve(); } - await git(['stash', '-k', '-u', '--quiet']); - return () => git(['stash', 'pop', '--quiet']); + await git(["stash", "-k", "-u", "--quiet"]); + return () => git(["stash", "pop", "--quiet"]); } function validate() { - if (process.env.CI !== 'true' || process.env.TRAVIS !== 'true') { + if (process.env.CI !== "true" || process.env.TRAVIS !== "true") { throw new Error( - `@commitlint/travis-cli is intended to be used on Travis CI` + `@commitlint/travis-cli is intended to be used on Travis CI`, ); } const missing = REQUIRED.filter((envVar) => !(envVar in process.env)); if (missing.length > 0) { - const stanza = missing.length > 1 ? 'they were not' : 'it was not'; + const stanza = missing.length > 1 ? "they were not" : "it was not"; throw new Error( - `Expected ${missing.join(', ')} to be defined globally, ${stanza}.` + `Expected ${missing.join(", ")} to be defined globally, ${stanza}.`, ); } } diff --git a/@commitlint/travis-cli/tsconfig.json b/@commitlint/travis-cli/tsconfig.json index 2a6d93a0fa..12cd1d4571 100644 --- a/@commitlint/travis-cli/tsconfig.json +++ b/@commitlint/travis-cli/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["./src"], "exclude": ["./src/**/*.test.ts", "./lib/**/*"], - "references": [{"path": "../cli"}] + "references": [{ "path": "../cli" }] } diff --git a/@commitlint/types/CHANGELOG.md b/@commitlint/types/CHANGELOG.md index 8227561599..e56da2d5ea 100644 --- a/@commitlint/types/CHANGELOG.md +++ b/@commitlint/types/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/types + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + + +### Bug Fixes + +* mark `@types/conventional-commits-parser` as dep for `@commitlint/types` ([#3944](https://github.com/conventional-changelog/commitlint/issues/3944)) ([5a01f59](https://github.com/conventional-changelog/commitlint/commit/5a01f59661f0b908802728389631965eb8b49d47)), closes [#3929](https://github.com/conventional-changelog/commitlint/issues/3929) [#3942](https://github.com/conventional-changelog/commitlint/issues/3942) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@commitlint/types/package.json b/@commitlint/types/package.json index 369904909e..ea31274f1d 100644 --- a/@commitlint/types/package.json +++ b/@commitlint/types/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/types", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Shared types for commitlint packages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -29,10 +29,11 @@ }, "license": "MIT", "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" }, "devDependencies": { - "@commitlint/utils": "^19.0.0" + "@commitlint/utils": "^19.8.0" }, - "gitHead": "d829bf6260304ca8d6811f329fcdd1b6c50e9749" + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/types/src/ensure.ts b/@commitlint/types/src/ensure.ts index 9d7be804af..309271e0a3 100644 --- a/@commitlint/types/src/ensure.ts +++ b/@commitlint/types/src/ensure.ts @@ -1,13 +1,13 @@ export type TargetCaseType = - | 'camel-case' - | 'kebab-case' - | 'snake-case' - | 'pascal-case' - | 'start-case' - | 'upper-case' - | 'uppercase' - | 'sentence-case' - | 'sentencecase' - | 'lower-case' - | 'lowercase' - | 'lowerCase'; + | "camel-case" + | "kebab-case" + | "snake-case" + | "pascal-case" + | "start-case" + | "upper-case" + | "uppercase" + | "sentence-case" + | "sentencecase" + | "lower-case" + | "lowercase" + | "lowerCase"; diff --git a/@commitlint/types/src/format.ts b/@commitlint/types/src/format.ts index 0ae167ebee..2ae1030d1f 100644 --- a/@commitlint/types/src/format.ts +++ b/@commitlint/types/src/format.ts @@ -1,11 +1,11 @@ -import type {ColorName, ModifierName} from 'chalk'; +import type { ColorName, ModifierName } from "chalk"; -import {QualifiedRules} from './load.js'; -import {RuleConfigSeverity} from './rules.js'; +import { QualifiedRules } from "./load.js"; +import { RuleConfigSeverity } from "./rules.js"; export type Formatter = ( report: FormattableReport, - options: FormatOptions + options: FormatOptions, ) => string; export interface FormattableProblem { diff --git a/@commitlint/types/src/index.ts b/@commitlint/types/src/index.ts index 8014dcdf76..aa363ca5ae 100644 --- a/@commitlint/types/src/index.ts +++ b/@commitlint/types/src/index.ts @@ -1,8 +1,8 @@ -export * from './ensure.js'; -export * from './format.js'; -export * from './is-ignored.js'; -export * from './lint.js'; -export * from './load.js'; -export * from './parse.js'; -export * from './prompt.js'; -export * from './rules.js'; +export * from "./ensure.js"; +export * from "./format.js"; +export * from "./is-ignored.js"; +export * from "./lint.js"; +export * from "./load.js"; +export * from "./parse.js"; +export * from "./prompt.js"; +export * from "./rules.js"; diff --git a/@commitlint/types/src/lint.ts b/@commitlint/types/src/lint.ts index 6e473e4b5c..f2cc02b002 100644 --- a/@commitlint/types/src/lint.ts +++ b/@commitlint/types/src/lint.ts @@ -1,7 +1,7 @@ -import type {Options} from 'conventional-commits-parser'; -import {IsIgnoredOptions} from './is-ignored.js'; -import {PluginRecords} from './load.js'; -import {RuleConfigSeverity, RuleConfigTuple} from './rules.js'; +import type { Options } from "conventional-commits-parser"; +import { IsIgnoredOptions } from "./is-ignored.js"; +import { PluginRecords } from "./load.js"; +import { RuleConfigSeverity, RuleConfigTuple } from "./rules.js"; export type LintRuleConfig = Record< string, @@ -12,9 +12,9 @@ export type LintRuleConfig = Record< export interface LintOptions { /** If it should ignore the default commit messages (defaults to `true`) */ - defaultIgnores?: IsIgnoredOptions['defaults']; + defaultIgnores?: IsIgnoredOptions["defaults"]; /** Additional commits to ignore, defined by ignore matchers */ - ignores?: IsIgnoredOptions['ignores']; + ignores?: IsIgnoredOptions["ignores"]; /** The parser configuration to use when linting the commit */ parserOpts?: Options; diff --git a/@commitlint/types/src/load.ts b/@commitlint/types/src/load.ts index 686fa01ebe..e095387fe2 100644 --- a/@commitlint/types/src/load.ts +++ b/@commitlint/types/src/load.ts @@ -1,11 +1,11 @@ -import {UserPromptConfig} from './prompt.js'; +import { UserPromptConfig } from "./prompt.js"; import { AsyncRule, Rule, RuleConfigQuality, RulesConfig, SyncRule, -} from './rules.js'; +} from "./rules.js"; export type PluginRecords = Record<string, Plugin>; diff --git a/@commitlint/types/src/parse.ts b/@commitlint/types/src/parse.ts index 6b7a3a4c07..c162098b5e 100644 --- a/@commitlint/types/src/parse.ts +++ b/@commitlint/types/src/parse.ts @@ -1,3 +1,3 @@ -import type {Commit, Options} from 'conventional-commits-parser'; +import type { Commit, Options } from "conventional-commits-parser"; -export type Parser = (message: string, options: Options) => Omit<Commit, 'raw'>; +export type Parser = (message: string, options: Options) => Omit<Commit, "raw">; diff --git a/@commitlint/types/src/prompt.ts b/@commitlint/types/src/prompt.ts index 25ca44385a..92cada6bde 100644 --- a/@commitlint/types/src/prompt.ts +++ b/@commitlint/types/src/prompt.ts @@ -1,19 +1,19 @@ export type RuleField = - | 'header' - | 'type' - | 'scope' - | 'subject' - | 'body' - | 'footer'; + | "header" + | "type" + | "scope" + | "subject" + | "body" + | "footer"; export type PromptName = | RuleField - | 'isBreaking' - | 'breakingBody' - | 'breaking' - | 'isIssueAffected' - | 'issuesBody' - | 'issues'; + | "isBreaking" + | "breakingBody" + | "breaking" + | "isIssueAffected" + | "issuesBody" + | "issues"; export type PromptConfig = { settings: { @@ -26,7 +26,7 @@ export type PromptConfig = { PromptName, { description?: string; - messages?: {[K: string]: string}; + messages?: { [K: string]: string }; enum?: { [enumName: string]: { description?: string; diff --git a/@commitlint/types/src/rules.ts b/@commitlint/types/src/rules.ts index 930a0d2613..3d8f2bcdb2 100644 --- a/@commitlint/types/src/rules.ts +++ b/@commitlint/types/src/rules.ts @@ -1,6 +1,6 @@ -import type {Commit} from 'conventional-commits-parser'; +import type { Commit } from "conventional-commits-parser"; -import {TargetCaseType} from './ensure.js'; +import { TargetCaseType } from "./ensure.js"; /** * Rules match the input either as successful or failed. @@ -13,23 +13,23 @@ export type RuleOutcome = Readonly<[boolean, string?]>; * Rules receive a parsed commit, condition, and possible additional settings through value. * All rules should provide the most sensible rule condition and value. */ -export type RuleType = 'async' | 'sync' | 'either'; +export type RuleType = "async" | "sync" | "either"; -export type BaseRule<Value = never, Type extends RuleType = 'either'> = ( +export type BaseRule<Value = never, Type extends RuleType = "either"> = ( parsed: Commit, when?: RuleConfigCondition, - value?: Value -) => Type extends 'either' + value?: Value, +) => Type extends "either" ? RuleOutcome | Promise<RuleOutcome> - : Type extends 'async' - ? Promise<RuleOutcome> - : Type extends 'sync' - ? RuleOutcome - : never; + : Type extends "async" + ? Promise<RuleOutcome> + : Type extends "sync" + ? RuleOutcome + : never; -export type Rule<Value = never> = BaseRule<Value, 'either'>; -export type AsyncRule<Value = never> = BaseRule<Value, 'async'>; -export type SyncRule<Value = never> = BaseRule<Value, 'sync'>; +export type Rule<Value = never> = BaseRule<Value, "either">; +export type AsyncRule<Value = never> = BaseRule<Value, "async">; +export type SyncRule<Value = never> = BaseRule<Value, "sync">; /** * Rules always have a severity. @@ -49,7 +49,7 @@ export enum RuleConfigSeverity { * It can be either "always" (as tested), or "never" (as tested). * For example, `header-full-stop` can be enforced as "always" or "never". */ -export type RuleConfigCondition = 'always' | 'never'; +export type RuleConfigCondition = "always" | "never"; export type RuleConfigTuple<T> = T extends void ? @@ -71,7 +71,7 @@ export type QualifiedRuleConfig<T> = export type RuleConfig< V = RuleConfigQuality.Qualified, - T = void + T = void, > = V extends RuleConfigQuality.Qualified ? RuleConfigTuple<T> : QualifiedRuleConfig<T>; @@ -90,41 +90,41 @@ export type EnumRuleConfig<V = RuleConfigQuality.User> = RuleConfig< >; export type RulesConfig<V = RuleConfigQuality.User> = { - 'body-case': CaseRuleConfig<V>; - 'body-empty': RuleConfig<V>; - 'body-full-stop': RuleConfig<V, string>; - 'body-leading-blank': RuleConfig<V>; - 'body-max-length': LengthRuleConfig<V>; - 'body-max-line-length': LengthRuleConfig<V>; - 'body-min-length': LengthRuleConfig<V>; - 'footer-empty': RuleConfig<V>; - 'footer-leading-blank': RuleConfig<V>; - 'footer-max-length': LengthRuleConfig<V>; - 'footer-max-line-length': LengthRuleConfig<V>; - 'footer-min-length': LengthRuleConfig<V>; - 'header-case': CaseRuleConfig<V>; - 'header-full-stop': RuleConfig<V, string>; - 'header-max-length': LengthRuleConfig<V>; - 'header-min-length': LengthRuleConfig<V>; - 'header-trim': RuleConfig<V>; - 'references-empty': RuleConfig<V>; - 'scope-case': CaseRuleConfig<V>; - 'scope-empty': RuleConfig<V>; - 'scope-enum': EnumRuleConfig<V>; - 'scope-max-length': LengthRuleConfig<V>; - 'scope-min-length': LengthRuleConfig<V>; - 'signed-off-by': RuleConfig<V, string>; - 'subject-case': CaseRuleConfig<V>; - 'subject-empty': RuleConfig<V>; - 'subject-full-stop': RuleConfig<V, string>; - 'subject-max-length': LengthRuleConfig<V>; - 'subject-min-length': LengthRuleConfig<V>; - 'trailer-exists': RuleConfig<V, string>; - 'type-case': CaseRuleConfig<V>; - 'type-empty': RuleConfig<V>; - 'type-enum': EnumRuleConfig<V>; - 'type-max-length': LengthRuleConfig<V>; - 'type-min-length': LengthRuleConfig<V>; + "body-case": CaseRuleConfig<V>; + "body-empty": RuleConfig<V>; + "body-full-stop": RuleConfig<V, string>; + "body-leading-blank": RuleConfig<V>; + "body-max-length": LengthRuleConfig<V>; + "body-max-line-length": LengthRuleConfig<V>; + "body-min-length": LengthRuleConfig<V>; + "footer-empty": RuleConfig<V>; + "footer-leading-blank": RuleConfig<V>; + "footer-max-length": LengthRuleConfig<V>; + "footer-max-line-length": LengthRuleConfig<V>; + "footer-min-length": LengthRuleConfig<V>; + "header-case": CaseRuleConfig<V>; + "header-full-stop": RuleConfig<V, string>; + "header-max-length": LengthRuleConfig<V>; + "header-min-length": LengthRuleConfig<V>; + "header-trim": RuleConfig<V>; + "references-empty": RuleConfig<V>; + "scope-case": CaseRuleConfig<V>; + "scope-empty": RuleConfig<V>; + "scope-enum": EnumRuleConfig<V>; + "scope-max-length": LengthRuleConfig<V>; + "scope-min-length": LengthRuleConfig<V>; + "signed-off-by": RuleConfig<V, string>; + "subject-case": CaseRuleConfig<V>; + "subject-empty": RuleConfig<V>; + "subject-full-stop": RuleConfig<V, string>; + "subject-max-length": LengthRuleConfig<V>; + "subject-min-length": LengthRuleConfig<V>; + "trailer-exists": RuleConfig<V, string>; + "type-case": CaseRuleConfig<V>; + "type-empty": RuleConfig<V>; + "type-enum": EnumRuleConfig<V>; + "type-max-length": LengthRuleConfig<V>; + "type-min-length": LengthRuleConfig<V>; // Plugins may add their custom rules [key: string]: AnyRuleConfig<V>; }; diff --git a/@packages/test-environment/src/test-environment.ts b/@packages/test-environment/src/test-environment.ts index be67cd56ff..448bf7f73e 100644 --- a/@packages/test-environment/src/test-environment.ts +++ b/@packages/test-environment/src/test-environment.ts @@ -1,14 +1,14 @@ // https://github.com/raszi/node-tmp/issues/229 -import type {Environment} from 'vitest'; -import {builtinEnvironments} from 'vitest/environments'; -import tmp from 'tmp'; +import type { Environment } from "vitest"; +import { builtinEnvironments } from "vitest/environments"; +import tmp from "tmp"; const nodeEnv = builtinEnvironments.node; const env: Environment = { ...nodeEnv, - name: 'commitlint', + name: "commitlint", async setup(global: object, options: Record<string, unknown>) { const setupEnv = await nodeEnv.setup(global, options); return { diff --git a/@packages/test/CHANGELOG.md b/@packages/test/CHANGELOG.md index 09821ce462..4fd67e5ba9 100644 --- a/@packages/test/CHANGELOG.md +++ b/@packages/test/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/test + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@packages/test/package.json b/@packages/test/package.json index 36ac0715c1..d6b7f16728 100644 --- a/@packages/test/package.json +++ b/@packages/test/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/test", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "test utilities for @commitlint", "private": true, "main": "lib/index.js", @@ -34,10 +34,10 @@ "dependencies": { "@types/fs-extra": "^11.0.3", "@types/tmp": "^0.2.5", - "execa": "^8.0.1", "fs-extra": "^11.0.0", "pkg-dir": "^8.0.0", "resolve-pkg": "^2.0.0", + "tinyexec": "^1.0.0", "tmp": "^0.2.1" }, "gitHead": "71f0194f33943954a8dac1c458be47e5049717cd" diff --git a/@packages/test/src/fix.ts b/@packages/test/src/fix.ts index 762949e836..eca5fd03f8 100644 --- a/@packages/test/src/fix.ts +++ b/@packages/test/src/fix.ts @@ -1,8 +1,8 @@ -import path from 'path'; +import path from "node:path"; -import fs from 'fs-extra'; -import {packageDirectory as pkgDir} from 'pkg-dir'; -import tmp from 'tmp'; +import fs from "fs-extra"; +import { packageDirectory as pkgDir } from "pkg-dir"; +import tmp from "tmp"; export async function bootstrap(fixture?: string, directory?: string) { const tmpDir = tmp.dirSync({ @@ -10,8 +10,8 @@ export async function bootstrap(fixture?: string, directory?: string) { unsafeCleanup: true, }); - if (typeof fixture !== 'undefined') { - const packageDir = await pkgDir({cwd: directory}); + if (typeof fixture !== "undefined") { + const packageDir = await pkgDir({ cwd: directory }); if (!packageDir) { throw new Error(`ENOENT, no such file or directory '${packageDir}'`); } diff --git a/@packages/test/src/git.ts b/@packages/test/src/git.ts index 3ea0c5863f..04ea365aae 100644 --- a/@packages/test/src/git.ts +++ b/@packages/test/src/git.ts @@ -1,6 +1,6 @@ -import {execa} from 'execa'; +import { x } from "tinyexec"; -import * as fix from './fix.js'; +import * as fix from "./fix.js"; export async function bootstrap(fixture?: string, directory?: string) { const cwd = await fix.bootstrap(fixture, directory); @@ -13,33 +13,37 @@ export async function clone( source: string, args: string[], directory?: string, - gitCommand = 'git' + gitCommand = "git", ) { const cwd = await fix.bootstrap(undefined, directory); - await execa(gitCommand, ['clone', ...args, source, cwd]); + await x(gitCommand, ["clone", ...args, source, cwd]); await setup(cwd, gitCommand); return cwd; } export async function init(cwd: string) { - await execa('git', ['init', cwd]); + await x("git", ["init", cwd]); await setup(cwd); return cwd; } -async function setup(cwd: string, gitCommand = 'git') { +async function setup(cwd: string, gitCommand = "git") { try { - await execa(gitCommand, ['config', 'user.name', 'ava'], {cwd}); - await execa(gitCommand, ['config', 'user.email', 'test@example.com'], { - cwd, + await x(gitCommand, ["config", "user.name", "ava"], { + nodeOptions: { cwd }, + }); + await x(gitCommand, ["config", "user.email", "test@example.com"], { + nodeOptions: { cwd }, + }); + await x(gitCommand, ["config", "commit.gpgsign", "false"], { + nodeOptions: { cwd }, }); - await execa(gitCommand, ['config', 'commit.gpgsign', 'false'], {cwd}); } catch (err: any) { - if (typeof err === 'object' && typeof err.message === 'object') { + if (typeof err === "object" && typeof err.message === "object") { console.warn(`git config in ${cwd} failed`, err.message); } else { - console.error('An unknown error occurred setting up the git environment'); + console.error("An unknown error occurred setting up the git environment"); } } } diff --git a/@packages/test/src/index.test.ts b/@packages/test/src/index.test.ts index 0ee0b4ae13..0202eeeeb5 100644 --- a/@packages/test/src/index.test.ts +++ b/@packages/test/src/index.test.ts @@ -1,34 +1,34 @@ -import {test, expect} from 'vitest'; -import os from 'os'; -import path from 'path'; -import fs from 'fs-extra'; +import { test, expect } from "vitest"; +import os from "node:os"; +import path from "node:path"; +import fs from "fs-extra"; -import * as u from './index.js'; +import * as u from "./index.js"; -test('exports a git namespace', () => { - expect(typeof u.git).toBe('object'); +test("exports a git namespace", () => { + expect(typeof u.git).toBe("object"); }); -test('git namespace has bootstrap', () => { - expect(typeof u.git.bootstrap).toBe('function'); +test("git namespace has bootstrap", () => { + expect(typeof u.git.bootstrap).toBe("function"); }); -test('git namespace has clone', () => { - expect(typeof u.git.clone).toBe('function'); +test("git namespace has clone", () => { + expect(typeof u.git.clone).toBe("function"); }); -test('expect to create tmp directory', async () => { +test("expect to create tmp directory", async () => { const directory = await u.git.bootstrap(); - expect(directory).toContain('tmp-'); + expect(directory).toContain("tmp-"); expect(directory).toContain(os.tmpdir()); }); -test('expect to create tmp from directory from src', async () => { - const directory = await u.git.bootstrap('.github'); - expect(directory).toContain('tmp-'); +test("expect to create tmp from directory from src", async () => { + const directory = await u.git.bootstrap(".github"); + expect(directory).toContain("tmp-"); expect(directory).toContain(os.tmpdir()); expect(fs.existsSync(directory)).toBeTruthy(); - const indexFile = path.join(directory, 'PULL_REQUEST_TEMPLATE.md'); + const indexFile = path.join(directory, "PULL_REQUEST_TEMPLATE.md"); expect(fs.existsSync(indexFile)).toBeTruthy(); }); diff --git a/@packages/test/src/index.ts b/@packages/test/src/index.ts index b488ca1393..fb1c9a26a6 100644 --- a/@packages/test/src/index.ts +++ b/@packages/test/src/index.ts @@ -1,5 +1,5 @@ -import * as fix from './fix.js'; -import * as git from './git.js'; -import * as npm from './npm.js'; +import * as fix from "./fix.js"; +import * as git from "./git.js"; +import * as npm from "./npm.js"; -export {fix, git, npm}; +export { fix, git, npm }; diff --git a/@packages/test/src/npm.ts b/@packages/test/src/npm.ts index 997543435d..2c31e5520b 100644 --- a/@packages/test/src/npm.ts +++ b/@packages/test/src/npm.ts @@ -1,19 +1,18 @@ -import path from 'path'; +import path from "node:path"; -import fs from 'fs-extra'; -import resolvePkg from 'resolve-pkg'; +import fs from "fs-extra"; +import resolvePkg from "resolve-pkg"; -import * as git from './git.js'; +import * as git from "./git.js"; export async function installModules(cwd: string) { - const manifestPath = path.join(cwd, 'package.json'); - const targetModulesPath = path.join(cwd, 'node_modules'); + const manifestPath = path.join(cwd, "package.json"); + const targetModulesPath = path.join(cwd, "node_modules"); if (await fs.pathExists(manifestPath)) { - const {dependencies = {}, devDependencies = {}} = await fs.readJson( - manifestPath - ); - const deps = Object.keys({...dependencies, ...devDependencies}); + const { dependencies = {}, devDependencies = {} } = + await fs.readJson(manifestPath); + const deps = Object.keys({ ...dependencies, ...devDependencies }); await Promise.all( deps.map(async (dependency: any) => { const sourcePath = resolvePkg(dependency); @@ -22,7 +21,7 @@ export async function installModules(cwd: string) { throw new Error(`Could not resolve dependency ${dependency}`); } - const sourceModulesPath = findParentPath(sourcePath, 'node_modules'); + const sourceModulesPath = findParentPath(sourcePath, "node_modules"); if (!sourceModulesPath) { throw new Error(`Could not determine node_modules for ${sourcePath}`); @@ -31,9 +30,9 @@ export async function installModules(cwd: string) { const relativePath = path.relative(sourceModulesPath, sourcePath); const targetPath = path.join(targetModulesPath, relativePath); - await fs.mkdirp(path.join(targetPath, '..')); + await fs.mkdirp(path.join(targetPath, "..")); await fs.symlink(sourcePath, targetPath); - }) + }), ); } } @@ -46,23 +45,23 @@ export async function bootstrap(fixture: string, directory?: string) { function findParentPath( parentPath: string, - dirname: string + dirname: string, ): string | undefined { const rawFragments = parentPath.split(path.sep); - const {matched, fragments} = rawFragments.reduceRight( - ({fragments, matched}, item) => { + const { matched, fragments } = rawFragments.reduceRight( + ({ fragments, matched }, item) => { if (item === dirname && !matched) { - return {fragments, matched: true}; + return { fragments, matched: true }; } if (!matched && fragments.length > 0) { fragments.pop(); } - return {fragments, matched}; + return { fragments, matched }; }, - {fragments: rawFragments, matched: false} + { fragments: rawFragments, matched: false }, ); return matched ? fragments.join(path.sep) : undefined; diff --git a/@packages/utils/CHANGELOG.md b/@packages/utils/CHANGELOG.md index b887ab11f3..0ff9b5c9e5 100644 --- a/@packages/utils/CHANGELOG.md +++ b/@packages/utils/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + +**Note:** Version bump only for package @commitlint/utils + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) diff --git a/@packages/utils/dep-check.js b/@packages/utils/dep-check.js index 02269e8607..8f96322333 100755 --- a/@packages/utils/dep-check.js +++ b/@packages/utils/dep-check.js @@ -1,26 +1,26 @@ #!/usr/bin/env node -import path from 'path'; -import {execa} from 'execa'; +import path from "node:path"; +import { x } from "tinyexec"; const cwd = process.cwd(); function main() { return Promise.all([ - check(['--missing', '--no-dev', '.']), - check(['--extra', '--no-dev', '.']), + check(["--missing", "--no-dev", "."]), + check(["--extra", "--no-dev", "."]), ]) - .then((tasks) => [null, tasks.map((t) => t.stdout).join('\n')]) + .then((tasks) => [null, tasks.map((t) => t.stdout).join("\n")]) .catch((err) => [err]); } function check(args) { - return execa('dependency-check', args, {cwd}); + return x("dependency-check", args, { nodeOptions: { cwd } }); } main().then((args) => { const err = args[0]; const out = args[1]; - console.log(`Checking dependencies ${path.join(cwd, 'package.json')}`); + console.log(`Checking dependencies ${path.join(cwd, "package.json")}`); if (err) { console.error(err.stderr); process.exit(err.exitCode); diff --git a/@packages/utils/package.json b/@packages/utils/package.json index 048828a8ea..fb92e707d8 100644 --- a/@packages/utils/package.json +++ b/@packages/utils/package.json @@ -1,7 +1,7 @@ { "name": "@commitlint/utils", "type": "module", - "version": "19.0.0", + "version": "19.8.0", "description": "Development utilities for @commitlint", "private": true, "files": [ @@ -44,10 +44,10 @@ "@types/yargs": "^17.0.29" }, "dependencies": { - "execa": "^8.0.1", "read-pkg": "^9.0.1", "require-from-string": "^2.0.2", "tar-fs": "^3.0.5", + "tinyexec": "^1.0.0", "tmp": "^0.2.1", "yargs": "^17.0.0" }, diff --git a/@packages/utils/pkg-check.js b/@packages/utils/pkg-check.js index dec4081c6d..4f360df846 100755 --- a/@packages/utils/pkg-check.js +++ b/@packages/utils/pkg-check.js @@ -1,19 +1,19 @@ #!/usr/bin/env node -import path from 'path'; -import fs from 'fs'; +import path from "node:path"; +import fs from "node:fs"; -import {execa} from 'execa'; -import readPkg from 'read-pkg'; -import requireFromString from 'require-from-string'; -import tar from 'tar-fs'; -import tmp from 'tmp'; -import yargs from 'yargs'; -import zlib from 'zlib'; +import readPkg from "read-pkg"; +import requireFromString from "require-from-string"; +import tar from "tar-fs"; +import { x } from "tinyexec"; +import tmp from "tmp"; +import yargs from "yargs"; +import zlib from "node:zlib"; tmp.setGracefulCleanup(); const PRELUDE = ` -var Module = require('module'); +var Module = require('node:module'); var originalLoader = Module._load Module._load = function(path, parent) { @@ -32,16 +32,16 @@ Module._load = function(path, parent) { function main(flags) { if (!Proxy) { console - .warn('Skipping pkg-check, detected missing Proxy support') + .warn("Skipping pkg-check, detected missing Proxy support") .process.exit(0); } const cwd = flags.cwd || process.cwd(); const skipImport = - typeof flags.skipImport === 'boolean' ? flags.skipImport : false; + typeof flags.skipImport === "boolean" ? flags.skipImport : false; - return readPkg({cwd}).then((pkg) => { - return getTarballFiles(cwd, {write: !skipImport}).then((tarball) => { + return readPkg({ cwd }).then((pkg) => { + return getTarballFiles(cwd, { write: !skipImport }).then((tarball) => { return getPackageFiles(cwd).then((pkgFiles) => { let problems = []; @@ -50,16 +50,16 @@ function main(flags) { pkgFiles.bin .filter((binFile) => tarball.files.indexOf(binFile) === -1) .map((binFile) => ({ - type: 'bin', + type: "bin", file: binFile, message: `Required bin file ${binFile} not found for ${pkg.name}`, - })) + })), ); } if (!flags.skipMain && tarball.files.indexOf(pkgFiles.main) === -1) { problems.push({ - type: 'main', + type: "main", file: pkgFiles.main, message: `Required main file ${pkgFiles.main} not found for ${pkg.name}`, }); @@ -67,11 +67,11 @@ function main(flags) { if (!flags.skipImport && !flags.skipMain) { const importable = fileImportable( - path.join(tarball.dirname, pkgFiles.main) + path.join(tarball.dirname, pkgFiles.main), ); if (!importable[1]) { problems.push({ - type: 'import', + type: "import", file: pkgFiles.main, message: `Error while importing ${pkgFiles.main}: ${importable[0].message}`, }); @@ -93,37 +93,37 @@ main( yargs .options({ cwd: { - description: 'directory to execute in', - type: 'string', + description: "directory to execute in", + type: "string", }, skipMain: { default: false, - type: 'boolean', - description: 'Skip main checks', + type: "boolean", + description: "Skip main checks", }, skipBin: { default: false, - type: 'boolean', - description: 'Skip bin checks', + type: "boolean", + description: "Skip bin checks", }, skipImport: { default: false, - type: 'boolean', - description: 'Skip import smoke test', + type: "boolean", + description: "Skip import smoke test", }, }) - .scriptName('pkg-check') - .usage('pkg-check\n') - .usage('Check if a package creates valid tarballs') - .example('$0', '') + .scriptName("pkg-check") + .usage("pkg-check\n") + .usage("Check if a package creates valid tarballs") + .example("$0", "") .help() .version() - .strict().argv + .strict().argv, ) .then((report) => { if (report.problems.length > 0) { console.log( - `Found ${report.problems.length} problems while checking tarball for ${report.pkg.name}:` + `Found ${report.problems.length} problems while checking tarball for ${report.pkg.name}:`, ); report.problems.forEach((problem) => { @@ -145,14 +145,16 @@ async function getTarballFiles(source, options) { unsafeCleanup: true, }); const cwd = tmpDir.name; - const tarball = path.join(cwd, 'test-archive.tgz'); - await execa('yarn', ['pack', '--filename', tarball], {cwd: source}); + const tarball = path.join(cwd, "test-archive.tgz"); + await x("yarn", ["pack", "--filename", tarball], { + nodeOptions: { cwd: source }, + }); return getArchiveFiles(tarball, options); } function getArchiveFiles(filePath, options) { - const write = typeof options.write === 'boolean' ? options.write : true; + const write = typeof options.write === "boolean" ? options.write : true; return new Promise((resolve, reject) => { const files = []; @@ -161,17 +163,17 @@ function getArchiveFiles(filePath, options) { .pipe( tar.extract(path.dirname(filePath), { ignore(_, header) { - files.push(path.relative('package', header.name)); + files.push(path.relative("package", header.name)); return !write; }, - }) + }), ) - .once('error', (err) => reject(err)) - .once('finish', () => + .once("error", (err) => reject(err)) + .once("finish", () => resolve({ - dirname: path.join(path.dirname(filePath), 'package'), + dirname: path.join(path.dirname(filePath), "package"), files: files, - }) + }), ); }); } @@ -179,7 +181,7 @@ function getArchiveFiles(filePath, options) { function getPackageFiles(source) { return readPkg(source).then((pkg) => { return { - main: normalizeMainPath(pkg.main || './index.js'), + main: normalizeMainPath(pkg.main || "./index.js"), bin: getPkgBinFiles(pkg.bin), }; }); @@ -198,11 +200,11 @@ function getPkgBinFiles(bin) { return []; } - if (typeof bin === 'string') { + if (typeof bin === "string") { return [path.normalize(bin)]; } - if (typeof bin === 'object') { + if (typeof bin === "object") { return Object.values(bin).map((b) => path.normalize(b)); } } @@ -214,7 +216,7 @@ function fileImportable(file) { ${PRELUDE} ${fs.readFileSync(file)} `, - file + file, ); return [null, true]; } catch (err) { diff --git a/CHANGELOG.md b/CHANGELOG.md index 818389990c..bcf6df76f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,260 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) + + +### Bug Fixes + +* **config-lerna-scopes:** remove deprecated @lerna/project dependency ([#4284](https://github.com/conventional-changelog/commitlint/issues/4284)) ([f2f78f1](https://github.com/conventional-changelog/commitlint/commit/f2f78f105a32d040d8eb7e340f59a1d50fad9ac0)) +* update dependency semver to v7.7.1 ([#4272](https://github.com/conventional-changelog/commitlint/issues/4272)) ([6148587](https://github.com/conventional-changelog/commitlint/commit/6148587400b7f4c041183e3b2e5f1cfadbe2d6b0)) + + +### Features + +* **config-workspace-scopes:** add config preset for npm and yarn workspaces ([#4269](https://github.com/conventional-changelog/commitlint/issues/4269)) ([67ff9e8](https://github.com/conventional-changelog/commitlint/commit/67ff9e82c10898757052df1d4233566b0b2cb433)) + + +### Performance Improvements + +* use `node:` prefix to bypass require.cache call for builtins ([#4302](https://github.com/conventional-changelog/commitlint/issues/4302)) ([0cd8f41](https://github.com/conventional-changelog/commitlint/commit/0cd8f410573fe11383f788b1ceb7e0946143591d)) + + +### Reverts + +* Revert "fix: improve security validation regex in is-ignored function (#4258)" (#4314) ([b27024a](https://github.com/conventional-changelog/commitlint/commit/b27024a5ae509d1df9373ed712f2279d0bc39170)), closes [#4258](https://github.com/conventional-changelog/commitlint/issues/4258) [#4314](https://github.com/conventional-changelog/commitlint/issues/4314) + + + + + +## [19.7.1](https://github.com/conventional-changelog/commitlint/compare/v19.7.0...v19.7.1) (2025-02-02) + + +### Bug Fixes + +* **config-nx-scopes:** fix for projects without explicit targets ([#4261](https://github.com/conventional-changelog/commitlint/issues/4261)) ([25bb2cd](https://github.com/conventional-changelog/commitlint/commit/25bb2cd8c70353637f77d471e39f4e4b17fa4cae)) +* improve security validation regex in is-ignored function ([#4258](https://github.com/conventional-changelog/commitlint/issues/4258)) ([7403d63](https://github.com/conventional-changelog/commitlint/commit/7403d6382cc2fb1f066a47d7229593eefe528561)) +* update dependency fast-glob to v3.3.3 ([#4235](https://github.com/conventional-changelog/commitlint/issues/4235)) ([c286237](https://github.com/conventional-changelog/commitlint/commit/c28623733351f2920d32e27169a27e127f900985)) +* update dependency fs-extra to v11.3.0 ([#4249](https://github.com/conventional-changelog/commitlint/issues/4249)) ([39acfe4](https://github.com/conventional-changelog/commitlint/commit/39acfe4a3d88863d126a6a9661a80246a7df9428)) +* update dependency tar-fs to v3.0.7 ([#4243](https://github.com/conventional-changelog/commitlint/issues/4243)) ([708320f](https://github.com/conventional-changelog/commitlint/commit/708320f0403684d2f76a20eb8a83deb84c0c808e)) +* update dependency tar-fs to v3.0.8 ([#4247](https://github.com/conventional-changelog/commitlint/issues/4247)) ([ecb5d3a](https://github.com/conventional-changelog/commitlint/commit/ecb5d3a1c5be5713ccdbb4f4e863390a80d8d917)) + + + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) + + +### Bug Fixes + +* update dependency chalk to v5.4.1 ([#4228](https://github.com/conventional-changelog/commitlint/issues/4228)) ([0b11176](https://github.com/conventional-changelog/commitlint/commit/0b111767fa6700eab82c7a4804273c0f6275a3d3)) +* update dependency tinyexec to v0.3.2 ([#4229](https://github.com/conventional-changelog/commitlint/issues/4229)) ([dca0d97](https://github.com/conventional-changelog/commitlint/commit/dca0d97261977681b0366d9733dbbf227bb9a9b1)) + + +### Features + +* support lerna 7 and 8 ([#4221](https://github.com/conventional-changelog/commitlint/issues/4221)) ([3b8da63](https://github.com/conventional-changelog/commitlint/commit/3b8da63f50f868555a3f026a76e96cd8d20638de)) + + + + + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) + + +### Bug Fixes + +* force bump for container usage ([#4200](https://github.com/conventional-changelog/commitlint/issues/4200)) ([21858df](https://github.com/conventional-changelog/commitlint/commit/21858dfa25acb5a1f244cdcba7ff20735fa5903f)) + + + + + +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) + + +### Bug Fixes + +* update dependency inquirer to v9.3.7 ([#4167](https://github.com/conventional-changelog/commitlint/issues/4167)) ([610a8f2](https://github.com/conventional-changelog/commitlint/commit/610a8f212af3329d48663f20324b14140028dccc)) + + +### Features + +* **is-ignored:** ignore reapply commits ([#4186](https://github.com/conventional-changelog/commitlint/issues/4186)) ([49ba56d](https://github.com/conventional-changelog/commitlint/commit/49ba56d9dd4c72e918005e6ca62f110a393b8f07)) +* support using delimiter in `scope-enum` ([#4161](https://github.com/conventional-changelog/commitlint/issues/4161)) ([f55521d](https://github.com/conventional-changelog/commitlint/commit/f55521dbb8ce0530ecb9557122689bba740fb2a5)) + + + + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) + + +### Features + +* **cli:** use special errorCode for missing rules/config [#4142](https://github.com/conventional-changelog/commitlint/issues/4142) ([#4143](https://github.com/conventional-changelog/commitlint/issues/4143)) ([d7070d8](https://github.com/conventional-changelog/commitlint/commit/d7070d8a4905da7834a018825b37d52c2dd29f62)) + + + + + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) + + +### Bug Fixes + +* **rules:** handle blank commit message in signed-off-by check ([#4124](https://github.com/conventional-changelog/commitlint/issues/4124)) ([7ab4bab](https://github.com/conventional-changelog/commitlint/commit/7ab4bab31f4b19ddedd850e435398037437007b6)) + + + + + +# [19.4.0](https://github.com/conventional-changelog/commitlint/compare/v19.3.1...v19.4.0) (2024-08-07) + + +### Features + +* support command line options from a file ([#4109](https://github.com/conventional-changelog/commitlint/issues/4109)) ([a20e890](https://github.com/conventional-changelog/commitlint/commit/a20e890f6b6c8bacdc511d40cb41f29415bdd044)) +* support linting from the last tag ([#4110](https://github.com/conventional-changelog/commitlint/issues/4110)) ([4b204ec](https://github.com/conventional-changelog/commitlint/commit/4b204ecfb43dd6a00e24b51111aadbd78f9d58e1)) + + + + + +## [19.3.1](https://github.com/conventional-changelog/commitlint/compare/v19.3.0...v19.3.1) (2024-05-13) + + +### Bug Fixes + +* **prompt:** prompt does not respect [body-leading-blank] setting ([#4066](https://github.com/conventional-changelog/commitlint/issues/4066)) ([3f1f44d](https://github.com/conventional-changelog/commitlint/commit/3f1f44d9cbb93438d01cfd79f9b71659411e126d)) +* update dependency ajv to v8.13.0 ([#4057](https://github.com/conventional-changelog/commitlint/issues/4057)) ([4e5957f](https://github.com/conventional-changelog/commitlint/commit/4e5957fcb120fbf31c2bdc5c5affe35eb556d3dc)) +* update dependency import-meta-resolve to v4.1.0 ([#4055](https://github.com/conventional-changelog/commitlint/issues/4055)) ([6cd9d76](https://github.com/conventional-changelog/commitlint/commit/6cd9d76b4f7d867c6085a5f99eab9b6ad15ab789)) +* update dependency inquirer to v9.2.20 ([#4047](https://github.com/conventional-changelog/commitlint/issues/4047)) ([b2a75c8](https://github.com/conventional-changelog/commitlint/commit/b2a75c881b8fa69501d93c4d29118aeaf0c989cd)) +* update dependency semver to v7.6.2 ([#4080](https://github.com/conventional-changelog/commitlint/issues/4080)) ([de28f20](https://github.com/conventional-changelog/commitlint/commit/de28f209db4d8aba4eb6e57e9f1fc0517143398d)) +* update dependency tar-fs to v3.0.6 ([#4048](https://github.com/conventional-changelog/commitlint/issues/4048)) ([4003205](https://github.com/conventional-changelog/commitlint/commit/40032050570e4f5a8c8ab4f390cee7611a92935e)) + + +### Features + +* **container:** add arm64 build ([#4049](https://github.com/conventional-changelog/commitlint/issues/4049)) ([28bed3f](https://github.com/conventional-changelog/commitlint/commit/28bed3f8453bf12062b938aa0247e24d56f183d6)), closes [#3926](https://github.com/conventional-changelog/commitlint/issues/3926) + + + + + +# [19.3.0](https://github.com/conventional-changelog/commitlint/compare/v19.2.2...v19.3.0) (2024-04-23) + + +### Bug Fixes + +* update dependency inquirer to v9.2.19 ([#4031](https://github.com/conventional-changelog/commitlint/issues/4031)) ([84126c1](https://github.com/conventional-changelog/commitlint/commit/84126c131a119b0704e0da5ae1707404fc6947b5)) + + +### Features + +* **container:** added @commitlint/config-nx-scopes for nx monorepos ([#3913](https://github.com/conventional-changelog/commitlint/issues/3913)) ([aa4df36](https://github.com/conventional-changelog/commitlint/commit/aa4df36b1d07e56230ff569aec5af727f1144aae)) +* **format:** print full commit message for valid commits if -V ([#4026](https://github.com/conventional-changelog/commitlint/issues/4026)) ([a7bbc49](https://github.com/conventional-changelog/commitlint/commit/a7bbc494e34885aba3f4b0c03b37d18ef2b8fbff)) + + + + + +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) + + +### Bug Fixes + +* **is-ignored:** ignore "amend!" commits ([#4024](https://github.com/conventional-changelog/commitlint/issues/4024)) ([90078f6](https://github.com/conventional-changelog/commitlint/commit/90078f6a58523e0bde386b9b6aa3c05e8b916653)) +* update dependency inquirer to v9.2.17 ([#3996](https://github.com/conventional-changelog/commitlint/issues/3996)) ([44d0fcc](https://github.com/conventional-changelog/commitlint/commit/44d0fccf0e40962e6dceaee92b23333d9746904b)) +* update dependency inquirer to v9.2.18 ([#4025](https://github.com/conventional-changelog/commitlint/issues/4025)) ([52d7edc](https://github.com/conventional-changelog/commitlint/commit/52d7edcbbb68e99542777067b2cc5fa33a848762)) + + + + + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) + + +### Bug Fixes + +* **config-nx-scopes:** include file extension in nx imports ([#3979](https://github.com/conventional-changelog/commitlint/issues/3979)) ([583250b](https://github.com/conventional-changelog/commitlint/commit/583250b919cf1eb338de3e3f5c848fff611a6212)) + + + + + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) + + +### Bug Fixes + +* update dependency inquirer to v9.2.16 ([#3972](https://github.com/conventional-changelog/commitlint/issues/3972)) ([ea1ab9c](https://github.com/conventional-changelog/commitlint/commit/ea1ab9cc8048a2b715473c878641d1e189daaf1c)) + + +### Features + +* **cli:** introduce new --last flag, to stop recommending HEAD~1 ([#3916](https://github.com/conventional-changelog/commitlint/issues/3916)) ([99f4f3f](https://github.com/conventional-changelog/commitlint/commit/99f4f3f4839190a2758083df7ba20b988e7b68a6)) +* **load:** update cosmiconfig to v9 to add support for `package.yaml` config ([#3976](https://github.com/conventional-changelog/commitlint/issues/3976)) ([94eab40](https://github.com/conventional-changelog/commitlint/commit/94eab40798e0c8d3945aa2b1e629669b231d8468)) + + + + + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) + + +### Bug Fixes + +* add `main` and `types` keys in package.json ([#3953](https://github.com/conventional-changelog/commitlint/issues/3953)) ([7ddaad4](https://github.com/conventional-changelog/commitlint/commit/7ddaad4bc4e71afe89f25cc02d3e19beba1ce6cd)) +* add missing `conditions` param for `moduleResolve` ([#3962](https://github.com/conventional-changelog/commitlint/issues/3962)) ([67baff9](https://github.com/conventional-changelog/commitlint/commit/67baff9182854bbe184b6cf71f977920a05c27a3)) +* add missing cjs entry in package ([#3967](https://github.com/conventional-changelog/commitlint/issues/3967)) ([9cea6fd](https://github.com/conventional-changelog/commitlint/commit/9cea6fdb7b1bf7cfc9a86e882e2742379b4b6aec)) +* update dependency @pnpm/read-project-manifest to v5.0.11 ([#3932](https://github.com/conventional-changelog/commitlint/issues/3932)) ([2525d14](https://github.com/conventional-changelog/commitlint/commit/2525d14b8c0bad0ed155863059fa3549e76dd7d3)) +* update dependency tmp to v0.2.3 ([#3945](https://github.com/conventional-changelog/commitlint/issues/3945)) ([25bab59](https://github.com/conventional-changelog/commitlint/commit/25bab594ed04dbe2cc3cc5020b70d98d1d4e0f53)) + + +### Features + +* add CJS export for cz-commitlint ([#3963](https://github.com/conventional-changelog/commitlint/issues/3963)) ([6ae3c6a](https://github.com/conventional-changelog/commitlint/commit/6ae3c6a827de8622d827146ffb0984a9e62fe505)), closes [/github.com/conventional-changelog/commitlint/pull/3850#issuecomment-1984932236](https://github.com//github.com/conventional-changelog/commitlint/pull/3850/issues/issuecomment-1984932236) [#3949](https://github.com/conventional-changelog/commitlint/issues/3949) + + + + + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) + + +### Bug Fixes + +* mark `@types/conventional-commits-parser` as dep for `@commitlint/types` ([#3944](https://github.com/conventional-changelog/commitlint/issues/3944)) ([5a01f59](https://github.com/conventional-changelog/commitlint/commit/5a01f59661f0b908802728389631965eb8b49d47)), closes [#3929](https://github.com/conventional-changelog/commitlint/issues/3929) [#3942](https://github.com/conventional-changelog/commitlint/issues/3942) + + + + + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) + + +### Bug Fixes + +* fallback to `resolve-from` for Yarn P'n'P ([#3941](https://github.com/conventional-changelog/commitlint/issues/3941)) ([1eb9b5f](https://github.com/conventional-changelog/commitlint/commit/1eb9b5f29979d35f5840141523850a7402633378)), closes [#3936](https://github.com/conventional-changelog/commitlint/issues/3936) + + + + + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) + + +### Bug Fixes + +* drop `resolve-from`, `resolve-global` and `import-fresh`, resolve global packages correctly ([#3939](https://github.com/conventional-changelog/commitlint/issues/3939)) ([8793c63](https://github.com/conventional-changelog/commitlint/commit/8793c639c083c33714da0a29429b338776813d0c)), closes [#3938](https://github.com/conventional-changelog/commitlint/issues/3938) + + + + + # [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) @@ -69,6 +323,17 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline +## [18.6.3](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v18.6.3) (2024-03-11) + + +### Bug Fixes + +* add missing entry `wrapper.mjs` ([#3966](https://github.com/conventional-changelog/commitlint/issues/3966)) ([c2c3c7c](https://github.com/conventional-changelog/commitlint/commit/c2c3c7cdc05c07c185cc2c2635a06835352c4504)), closes [#3958](https://github.com/conventional-changelog/commitlint/issues/3958) + + + + + ## [18.6.2](https://github.com/conventional-changelog/commitlint/compare/v18.6.1...v18.6.2) (2024-02-14) diff --git a/Dockerfile.ci b/Dockerfile.ci index babe60d0db..25a4fec074 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -1,11 +1,13 @@ -FROM docker.io/library/node:18-buster AS builder +FROM docker.io/library/node:18-alpine AS builder WORKDIR /src COPY . ./ -RUN yarn install && \ +RUN apk add --no-cache python3 py3-setuptools make g++ git +RUN yarn install --frozen-lockfile --network-timeout 100000 && \ yarn run build && \ # Commit lint CLI packages npm pack @commitlint/cli && \ npm pack @commitlint/config-validator && \ + npm pack @commitlint/config-nx-scopes && \ npm pack @commitlint/ensure && \ npm pack @commitlint/execute-rule && \ npm pack @commitlint/format && \ @@ -23,8 +25,11 @@ RUN yarn install && \ # Default commitlint config npm pack @commitlint/config-conventional -FROM docker.io/library/node:18-buster +FROM docker.io/library/node:18-alpine +RUN apk add --no-cache git COPY --from=builder /src/*.tgz ./ -RUN npm install -g *.tgz && \ +RUN npm config set fetch-retry-mintimeout 20000 && \ + npm config set fetch-retry-maxtimeout 120000 && \ + npm install --no-audit -g *.tgz && \ rm -rf *.tgz ENTRYPOINT ["commitlint"] diff --git a/README.md b/README.md index 7786086b48..c7bfbb09c8 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,7 @@ These can be modified by [your own configuration](#config). - `commitlint.config.ts` - `commitlint.config.cts` - `commitlint` field in `package.json` + - `commitlint` field in [`package.yaml`](https://github.com/pnpm/pnpm/pull/1799) - Packages: [cli](./@commitlint/cli), [core](./@commitlint/core) - See [Rules](./docs/reference/rules.md) for a complete list of possible rules - An example configuration can be found at [@commitlint/config-conventional](./@commitlint/config-conventional/src/index.ts) @@ -126,9 +127,9 @@ A number of shared configurations are available to install and use with `commitl - [@commitlint/config-lerna-scopes](./@commitlint/config-lerna-scopes) - [@commitlint/config-nx-scopes](./@commitlint/config-nx-scopes) - [@commitlint/config-patternplate](./@commitlint/config-patternplate) +- [@commitlint/config-workspace-scopes](./@commitlint/config-workspace-scopes) - [conventional-changelog-lint-config-atom](https://github.com/erikmueller/conventional-changelog-lint-config-atom) - [conventional-changelog-lint-config-canonical](https://github.com/gajus/conventional-changelog-lint-config-canonical) -- [commitlint-config-jira](https://github.com/Gherciu/commitlint-jira) > ⚠️ If you want to publish your own shareable config then make sure it has a name aligning with the pattern `commitlint-config-emoji-log` or `commitlint-config-your-config-name` — then in extend all you have to write is `emoji-log` or `your-config-name`. @@ -169,14 +170,8 @@ Features will only be applied to the current main version. | Release | Initial release | | -------------------------------------------------------------------------------- | --------------- | +| [v19](https://github.com/conventional-changelog/commitlint/releases/tag/v19.0.0) | 02/2024 | | [v18](https://github.com/conventional-changelog/commitlint/releases/tag/v18.0.0) | 10/2023 | -| [v17](https://github.com/conventional-changelog/commitlint/releases/tag/v17.0.0) | 05/2022 | -| [v16](https://github.com/conventional-changelog/commitlint/releases/tag/v16.0.0) | 12/2021 | -| [v15](https://github.com/conventional-changelog/commitlint/releases/tag/v15.0.0) | 11/2021 | -| [v14](https://github.com/conventional-changelog/commitlint/releases/tag/v14.0.0) | 10/2021 | -| [v13](https://github.com/conventional-changelog/commitlint/releases/tag/v13.0.0) | 05/2021 | -| [v12](https://github.com/conventional-changelog/commitlint/releases/tag/v12.0.0) | 02/2021 | -| [v11](https://github.com/conventional-changelog/commitlint/releases/tag/v11.0.0) | 09/2020 | EOL is usually after around a year. diff --git a/docker-compose.yml b/docker-compose.yml index 401320c97e..5776609a51 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: commitlint: build: @@ -6,7 +6,7 @@ services: dockerfile: Dockerfile.dev image: marionebl/commitlint-cubicle ports: - - '8443:8443' + - "8443:8443" environment: - SSH_AUTH_SOCK=/.ssh-agent/socket - SSH_AUTH_PROXY_SOCK=/.ssh-agent/proxy-socket diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 41e98b80b8..55de22edfd 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,92 +1,100 @@ -import {defineConfig} from 'vitepress'; -import {tabsMarkdownPlugin} from 'vitepress-plugin-tabs'; +import { defineConfig } from "vitepress"; +import { tabsMarkdownPlugin } from "vitepress-plugin-tabs"; // https://vitepress.dev/reference/site-config export default defineConfig({ - title: 'commitlint', - description: 'Lint commit messages', + title: "commitlint", + description: "Lint commit messages", - head: [['link', {rel: 'icon', type: 'image/png', href: '/assets/icon.png'}]], + head: [ + ["link", { rel: "icon", type: "image/png", href: "/assets/icon.png" }], + ], themeConfig: { // https://vitepress.dev/reference/default-theme-config - logo: '/assets/icon.png', + editLink: { + pattern: + "https://github.com/conventional-changelog/commitlint/edit/master/docs/:path", + }, + + logo: "/assets/icon.png", nav: [ - {text: 'Home', link: '/'}, - {text: 'Guides', link: '/guides/getting-started'}, - {text: 'Reference', link: '/reference/configuration'}, + { text: "Home", link: "/" }, + { text: "Guides", link: "/guides/getting-started" }, + { text: "Reference", link: "/reference/configuration" }, ], sidebar: [ { - text: 'Guides', - base: '/guides', + text: "Guides", + base: "/guides", items: [ - {text: 'Getting started', link: '/getting-started'}, - {text: 'Local setup', link: '/local-setup'}, - {text: 'CI setup', link: '/ci-setup'}, - {text: 'Use prompt', link: '/use-prompt'}, + { text: "Getting started", link: "/getting-started" }, + { text: "Local setup", link: "/local-setup" }, + { text: "CI setup", link: "/ci-setup" }, + { text: "Use prompt", link: "/use-prompt" }, ], }, { - text: 'Reference', - base: '/reference', + text: "Reference", + base: "/reference", items: [ - {text: 'CLI', link: '/cli'}, - {text: 'Configuration', link: '/configuration'}, - {text: 'Rules configuration', link: '/rules-configuration'}, - {text: 'Rules', link: '/rules'}, - {text: 'Plugins', link: '/plugins'}, - {text: 'Prompt', link: '/prompt'}, - {text: 'Examples', link: '/examples'}, - {text: 'Community projects', link: '/community-projects'}, + { text: "CLI", link: "/cli" }, + { text: "Configuration", link: "/configuration" }, + { text: "Rules configuration", link: "/rules-configuration" }, + { text: "Rules", link: "/rules" }, + { text: "Plugins", link: "/plugins" }, + { text: "Prompt", link: "/prompt" }, + { text: "Examples", link: "/examples" }, + { text: "Community projects", link: "/community-projects" }, ], }, { - text: 'API', - base: '/api', + text: "API", + base: "/api", collapsed: true, items: [ - {text: '@commitlint/load', link: '/load'}, - {text: '@commitlint/read', link: '/read'}, - {text: '@commitlint/lint', link: '/lint'}, - {text: '@commitlint/format', link: '/format'}, + { text: "@commitlint/load", link: "/load" }, + { text: "@commitlint/read", link: "/read" }, + { text: "@commitlint/lint", link: "/lint" }, + { text: "@commitlint/format", link: "/format" }, ], }, { - text: 'Concepts', - base: '/concepts', + text: "Concepts", + base: "/concepts", collapsed: true, items: [ - {text: 'Commit-conventions', link: '/commit-conventions'}, - {text: 'Shareable config', link: '/shareable-config'}, + { text: "Commit-conventions", link: "/commit-conventions" }, + { text: "Shareable config", link: "/shareable-config" }, ], }, { - text: 'Support', - base: '/support', + text: "Support", + base: "/support", collapsed: true, items: [ - {text: 'Releases', link: '/releases'}, - {text: 'Upgrade commitlint', link: '/upgrade'}, + { text: "Troubleshooting", link: "/troubleshooting" }, + { text: "Releases", link: "/releases" }, + { text: "Upgrade commitlint", link: "/upgrade" }, ], }, { - text: 'Attributions', - link: '/attributions', + text: "Attributions", + link: "/attributions", }, ], socialLinks: [ { - icon: 'github', - link: 'https://github.com/conventional-changelog/commitlint', + icon: "github", + link: "https://github.com/conventional-changelog/commitlint", }, ], search: { - provider: 'local', + provider: "local", }, }, diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index c1b1900e45..afe3923ee8 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -1,11 +1,11 @@ // .vitepress/theme/index.ts -import type {Theme} from 'vitepress'; -import DefaultTheme from 'vitepress/theme'; -import {enhanceAppWithTabs} from 'vitepress-plugin-tabs/client'; +import type { Theme } from "vitepress"; +import DefaultTheme from "vitepress/theme"; +import { enhanceAppWithTabs } from "vitepress-plugin-tabs/client"; export default { extends: DefaultTheme, - enhanceApp({app}) { + enhanceApp({ app }) { enhanceAppWithTabs(app); }, } satisfies Theme; diff --git a/docs/api/format.md b/docs/api/format.md index b490bb972a..55a8ead843 100644 --- a/docs/api/format.md +++ b/docs/api/format.md @@ -68,7 +68,7 @@ format(report?: Report = {}, options?: formatOptions = {}) => string[]; ## Import ```js -import format from '@commitlint/format'; +import format from "@commitlint/format"; ``` ## Examples @@ -94,20 +94,20 @@ format( warnings: [ { level: 0, - name: 'some-hint', - message: 'This will not show up as it has level 0', + name: "some-hint", + message: "This will not show up as it has level 0", }, { level: 1, - name: 'some-warning', - message: 'This will show up yellow as it has level 1', + name: "some-warning", + message: "This will show up yellow as it has level 1", }, ], errors: [ { level: 2, - name: 'some-error', - message: 'This will show up red as it has level 2', + name: "some-error", + message: "This will show up red as it has level 2", }, ], }, @@ -115,7 +115,7 @@ format( }, { color: false, - } + }, ); /* => [ diff --git a/docs/api/lint.md b/docs/api/lint.md index fc50cff6c8..dbd676563d 100644 --- a/docs/api/lint.md +++ b/docs/api/lint.md @@ -45,13 +45,13 @@ lint(message: string, rules: {[ruleName: string]: Rule}, opts?: Options) => Prom ### Import ```js -import lint '@commitlint/lint'; +import lint from "@commitlint/lint"; ``` ### Usage without config ```js -const report = await lint('foo: bar'); +const report = await lint("foo: bar"); console.log(report); // => { valid: true, errors: [], warnings: [] } ``` @@ -59,7 +59,7 @@ console.log(report); ### Usage with type-enum rules and valid message ```js -const report = await lint('foo: bar', {'type-enum': [1, 'always', ['foo']]}); +const report = await lint("foo: bar", { "type-enum": [1, "always", ["foo"]] }); console.log(report); // => { valid: true, errors: [], warnings: [] } ``` @@ -67,7 +67,7 @@ console.log(report); ### Usage with type-enum rules and invalid message ```js -const report = await lint('foo: bar', {'type-enum': [1, 'always', ['bar']]}); +const report = await lint("foo: bar", { "type-enum": [1, "always", ["bar"]] }); console.log(report); /* => { @@ -91,14 +91,14 @@ console.log(report); const opts = { parserOpts: { headerPattern: /^(\w*)-(\w*)/, - headerCorrespondence: ['type', 'scope'], + headerCorrespondence: ["type", "scope"], }, }; const report = await lint( - 'foo-bar', - {'type-enum': [2, 'always', ['foo']]}, - opts + "foo-bar", + { "type-enum": [2, "always", ["foo"]] }, + opts, ); console.log(report); // => { valid: true, errors: [], warnings: [] } @@ -107,18 +107,18 @@ console.log(report); ## Load configuration ```js -import load from '@commitlint/load'; -import lint from '@commitlint/lint'; +import load from "@commitlint/load"; +import lint from "@commitlint/lint"; const CONFIG = { - extends: ['@commitlint/config-conventional'], + extends: ["@commitlint/config-conventional"], }; const opts = await load(CONFIG); const report = await lint( - 'foo: bar', + "foo: bar", opts.rules, - opts.parserPreset ? {parserOpts: opts.parserPreset.parserOpts} : {} + opts.parserPreset ? { parserOpts: opts.parserPreset.parserOpts } : {}, ); console.log(report); /* => @@ -140,14 +140,14 @@ console.log(report); ## Read git history ```js -import lint from '@commitlint/lint'; -import read from '@commitlint/read'; +import lint from "@commitlint/lint"; +import read from "@commitlint/read"; const RULES = { - 'type-enum': [2, 'always', ['foo']], + "type-enum": [2, "always", ["foo"]], }; -const commits = await read({to: 'HEAD', from: 'HEAD~2'}); +const commits = await read({ to: "HEAD", from: "HEAD~2" }); console.info(commits.map((commit) => lint(commit, RULES))); ``` @@ -155,17 +155,17 @@ console.info(commits.map((commit) => lint(commit, RULES))); ## Simplified last-commit checker ```js -import load from '@commitlint/load'; -import read from '@commitlint/read'; -import lint from '@commitlint/lint'; +import load from "@commitlint/load"; +import read from "@commitlint/read"; +import lint from "@commitlint/lint"; -const {rules, parserPreset} = load(); -const [commit] = await read({from: 'HEAD~1'}); +const { rules, parserPreset } = load(); +const [commit] = await read({ from: "HEAD~1" }); const report = await lint( commit, rules, - parserPreset ? {parserOpts: parserPreset.parserOpts} : {} + parserPreset ? { parserOpts: parserPreset.parserOpts } : {}, ); console.log(JSON.stringify(result.valid)); diff --git a/docs/api/load.md b/docs/api/load.md index b8d917233a..87fa67a439 100644 --- a/docs/api/load.md +++ b/docs/api/load.md @@ -127,7 +127,7 @@ load(seed: Seed = {}, options?: LoadOptions = {cwd: process.cwd()}) => Promise<C ## Import ```js -import load from '@commitlint/load'; +import load from "@commitlint/load"; ``` ## Examples @@ -137,7 +137,7 @@ import load from '@commitlint/load'; ```js const config = await load({ rules: { - 'body-leading-blank': [2, 'always'], + "body-leading-blank": [2, "always"], }, }); console.log(config); @@ -147,7 +147,7 @@ console.log(config); ### Reference a file ```js -const config = await load({extends: ['./package']}); +const config = await load({ extends: ["./package"] }); console.log(config); // => { extends: ['./package', './package-b'], rules: {} } ``` @@ -155,7 +155,7 @@ console.log(config); ### Inline `parserPreset` ```js -const config = await load({parserPreset: './parser-preset.js'}); +const config = await load({ parserPreset: "./parser-preset.js" }); console.log(config); /* => { @@ -173,7 +173,10 @@ console.log(config); ### Config file with with current working directory ```js -const config = await load({}, {file: '.commitlintrc.yml', cwd: process.cwd()}); +const config = await load( + {}, + { file: ".commitlintrc.yml", cwd: process.cwd() }, +); console.log(config); /* => { diff --git a/docs/api/read.md b/docs/api/read.md index 6cfaab96e9..1c66452194 100644 --- a/docs/api/read.md +++ b/docs/api/read.md @@ -26,7 +26,7 @@ read(range: Range) => Promise<string[]> ## Import ```js -import read from '@commitlint/read'; +import read from "@commitlint/read"; ``` ## Examples @@ -39,7 +39,7 @@ Consider to have a repository with two commits: ### Using `edit: true` ```js -const result = await read({edit: true}); +const result = await read({ edit: true }); console.info(result); // => ['I did something\n\n'] ``` @@ -47,7 +47,7 @@ console.info(result); ### Read last two commits ```js -const result = await read({from: 'HEAD~2'}); +const result = await read({ from: "HEAD~2" }); console.info(result); // => ['I did something\n\n', 'Initial commit\n\n'] ``` @@ -55,7 +55,7 @@ console.info(result); ### Read commits within a range ```js -const result = await read({from: 'HEAD~2', to: 'HEAD~1'}); +const result = await read({ from: "HEAD~2", to: "HEAD~1" }); console.info(result); // => ['Initial commit\n\n'] ``` @@ -63,7 +63,7 @@ console.info(result); ### Read commit message from git gui file ```js -const result = await read({edit: './git/GITGUI_EDITMESSAGE'}); +const result = await read({ edit: "./git/GITGUI_EDITMESSAGE" }); console.info(result); // => ['I did something via git gui\n\n'] ``` diff --git a/docs/concepts/shareable-config.md b/docs/concepts/shareable-config.md index 95b2689a40..c94748a456 100644 --- a/docs/concepts/shareable-config.md +++ b/docs/concepts/shareable-config.md @@ -10,7 +10,7 @@ an object containing `.rules` as default. To use shared configuration you specif * @type {import('@commitlint/types').UserConfig} */ export default { - extends: ['example'], // => commitlint-config-example + extends: ["example"], // => commitlint-config-example }; ``` @@ -39,7 +39,7 @@ This must always start with a `.` (dot). ```js [commitlint.config.js] export default { - extends: ['./example'], // => ./example.js + extends: ["./example"], // => ./example.js }; ``` @@ -55,7 +55,7 @@ You can provide the full path of the package like: ```js [commitlint.config.js] export default { - extends: ['@commitlint/config-conventional'], // => @commitlint/config-conventional + extends: ["@commitlint/config-conventional"], // => @commitlint/config-conventional }; ``` @@ -70,7 +70,7 @@ Or just the scope/owner of the package. ```js [commitlint.config.js] export default { - extends: ['@coolcompany'], // => @coolcompany/commitlint-config + extends: ["@coolcompany"], // => @coolcompany/commitlint-config }; ``` diff --git a/docs/guides/ci-setup.md b/docs/guides/ci-setup.md index d4c217d373..d23519e62e 100644 --- a/docs/guides/ci-setup.md +++ b/docs/guides/ci-setup.md @@ -42,11 +42,11 @@ jobs: - name: Validate current commit (last commit) with commitlint if: github.event_name == 'push' - run: npx commitlint --from HEAD~1 --to HEAD --verbose + run: npx commitlint --last --verbose - name: Validate PR commits with commitlint if: github.event_name == 'pull_request' - run: npx commitlint --from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} --to ${{ github.event.pull_request.head.sha }} --verbose + run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose ``` ## Travis @@ -70,79 +70,89 @@ script: It's just a simple example of how CircleCI configuration file could look like to validate last commit message ```yml -version: 2 -defaults: - working_directory: ~/project - docker: - - image: circleci/node:latest +version: 2.1 + +executors: + my-executor: + docker: + - image: cimg/node:current + working_directory: ~/project jobs: setup: - <<: *defaults + executor: my-executor steps: - - checkout - - restore_cache: - key: lock-{{ checksum "package-lock.json" }} - - run: - name: Install dependencies - command: npm install - - save_cache: - key: lock-{{ checksum "package-lock.json" }} - paths: - - node_modules - - persist_to_workspace: - root: ~/project - paths: - - node_modules + - checkout + - restore_cache: + key: lock-{{ checksum "package-lock.json" }} + - run: + name: Install dependencies + command: npm install + - save_cache: + key: lock-{{ checksum "package-lock.json" }} + paths: + - node_modules + - persist_to_workspace: + root: ~/project + paths: + - node_modules lint_commit_message: - <<: *defaults + executor: my-executor steps: - - checkout - - attach_workspace: - at: ~/project - - run: - name: Define environment variable with latest commit's message - command: | - echo 'export COMMIT_MESSAGE=$(git log -1 --pretty=format:"%s")' >> $BASH_ENV - source $BASH_ENV - - run: - name: Lint commit message - command: echo "$COMMIT_MESSAGE" | npx commitlint + - checkout + - attach_workspace: + at: ~/project + - run: + name: Define environment variable with latest commit's message + command: | + echo 'export COMMIT_MESSAGE=$(git log -1 --pretty=format:"%s")' >> $BASH_ENV + source $BASH_ENV + - run: + name: Lint commit message + command: echo "$COMMIT_MESSAGE" | npx commitlint workflows: - version: 2 + version: 2.1 commit: jobs: - - setup - - lint_commit_message: { requires: [setup] } + - setup + - lint_commit_message: + requires: + - setup ``` ## GitLab CI ```yaml -stages: ['lint', 'build', 'test'] lint:commit: image: registry.hub.docker.com/library/node:alpine - stage: lint + variables: + GIT_DEPTH: 0 before_script: - apk add --no-cache git - npm install --save-dev @commitlint/config-conventional @commitlint/cli script: - - echo "${CI_COMMIT_MESSAGE}" | npx commitlint + - npx commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA} ``` +GitLab limits `git clone` depth to +[20 commits by default](https://docs.gitlab.com/ee/ci/pipelines/settings.html#limit-the-number-of-changes-fetched-during-clone). +Setting `GIT_DEPTH: 0` removes this limitation, so `commitlint` can check larger MRs. + ## GitLab CI with pre-build container ```yaml -stages: ['lint', 'build', 'test'] +stages: ["lint", "build", "test"] lint:commit: image: name: registry.hub.docker.com/commitlint/commitlint:latest - entrypoint: [''] + entrypoint: [""] stage: lint script: - - echo "${CI_COMMIT_MESSAGE}" | commitlint + # Uncomment the next line if you are extending the @commitlint/config-nx-scopes in your commitlint configuration + #- npm i -g nx@$(node -pe "require('./package.json').devDependencies.nx") + - commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA} ``` ## Jenkins X @@ -168,6 +178,66 @@ spec: timeout: 15m ``` +## BitBucket + +Validate commits within a PR by leveraging [BitBucket`s default variables](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/): + +```yml +image: node:18 + +pipelines: + pull-requests: + default: + - step: + name: Lint commit messages + script: + - npm install --save-dev @commitlint/config-conventional @commitlint/cli + - npx commitlint --from $BITBUCKET_COMMIT~$(git rev-list --count $BITBUCKET_BRANCH ^origin/$BITBUCKET_PR_DESTINATION_BRANCH) --to $BITBUCKET_COMMIT --verbose +``` + +BitBucket limits git clone depth to 20 commits by default. You can change this behaviour by [changing the `clone` option](https://support.atlassian.com/bitbucket-cloud/docs/git-clone-behavior/). + +## Azure Pipelines + +```yml +steps: + - checkout: self + fetchDepth: 0 + + - task: NodeTool@0 + inputs: + versionSpec: "20.x" + checkLatest: true + + - script: | + git --version + node --version + npm --version + npx commitlint --version + displayName: Print versions + + - script: | + npm install conventional-changelog-conventionalcommits + npm install commitlint@latest + displayName: Install commitlint + + - script: npx commitlint --last --verbose + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: Validate current commit (last commit) with commitlint + + - script: | + echo "Accessing Azure DevOps API..." + + response=$(curl -s -X GET -H "Cache-Control: no-cache" -H "Authorization: Bearer $(System.AccessToken)" $(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.Name)/pullRequests/$(System.PullRequest.PullRequestId)/commits?api-version=6.0) + numberOfCommits=$(echo "$response" | jq -r '.count') + + echo "$numberOfCommits commits to check" + + npx commitlint --from $(System.PullRequest.SourceCommitId)~${numberOfCommits} --to $(System.PullRequest.SourceCommitId) --verbose + condition: eq(variables['Build.Reason'], 'PullRequest') + displayName: Validate PR commits with commitlint +``` + ### 3rd party integrations #### [Codemagic](https://codemagic.io/) @@ -183,4 +253,4 @@ workflows: > [!TIP] > Help yourself adopting a commit convention by using an interactive commit prompt. -> Learn how to use `@commitlint/prompt-cli` in the [Use prompt guide](/> guides/use-prompt) +> Learn how to use `@commitlint/prompt-cli` in the [Use prompt guide](/guides/use-prompt). diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index 494e1f268c..24189a40e2 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -7,15 +7,23 @@ Install `@commitlint/cli` and a `@commitlint/config-*` / `commitlint-config-*` o ::: code-group ```sh [npm] -npm install --save-dev @commitlint/{cli,config-conventional} +npm install -D @commitlint/cli @commitlint/config-conventional ``` ```sh [yarn] -yarn add --dev @commitlint/{cli,config-conventional} +yarn add -D @commitlint/cli @commitlint/config-conventional ``` -```sh [npm (Windows)] -npm install --save-dev @commitlint/config-conventional @commitlint/cli +```sh [pnpm] +pnpm add -D @commitlint/cli @commitlint/config-conventional +``` + +```sh [bun] +bun add -d @commitlint/cli @commitlint/config-conventional +``` + +```sh [deno] +deno add -D npm:@commitlint/cli npm:@commitlint/config-conventional ``` ::: diff --git a/docs/guides/local-setup.md b/docs/guides/local-setup.md index 1a55cb4877..7ef35a68fe 100644 --- a/docs/guides/local-setup.md +++ b/docs/guides/local-setup.md @@ -8,7 +8,7 @@ Follow the [Getting Started](/guides/getting-started) for basic installation and ## Add hook -To use commitlint you need to setup `commit-msg` hook +To use commitlint you need to setup `commit-msg` hook (currently `pre-commit` hook is not supported) ### Using a git hooks manager @@ -20,6 +20,9 @@ You can find complete setup instructions on the [official documentation](https:/ > The following instructions are meant to `husky@v9` if you are using a different version > consult the official documentation of your version. +> [!WARNING] +> For Windows users: ensure all `husky` files are `UTF-8` enconded. If any other format is used an error may be thrown at runtime such as [cannot execute binary file](https://github.com/typicode/husky/issues/1426). + --- :::tabs @@ -28,10 +31,12 @@ You can find complete setup instructions on the [official documentation](https:/ ```sh npm install --save-dev husky -npx husky init +npx husky install # Add commit message linting to commit-msg hook echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg +# Windows users should use ` to escape dollar signs +echo "npx --no commitlint --edit `$1" > .husky/commit-msg ``` As an alternative you can create a script inside `package.json` @@ -46,10 +51,12 @@ echo "npm run commitlint \${1}" > .husky/commit-msg ```sh yarn add --dev husky -yarn husky init +yarn husky install # Add commit message linting to commit-msg hook echo "yarn commitlint --edit \$1" > .husky/commit-msg +# Windows users should use ` to escape dollar signs +echo "yarn commitlint --edit `$1" > .husky/commit-msg ``` As an alternative you can create a script inside `package.json` @@ -62,6 +69,39 @@ echo "yarn commitlint \${1}" > .husky/commit-msg > [!WARNING] > Please note that currently @commitlint/cli doesn't support yarn v2 Plug'n'Play (using yarn > v2 with `nodeLinker: node-modules` in your .yarnrc.yml file may work sometimes) +== pnpm + +```sh +pnpm add --save-dev husky + +pnpm husky install + +# Add commit message linting to commit-msg hook +echo "pnpm dlx commitlint --edit \$1" > .husky/commit-msg +# Windows users should use ` to escape dollar signs +echo "pnpm dlx commitlint --edit `$1" > .husky/commit-msg +``` + +As an alternative you can create a script inside `package.json` + +```sh +npm pkg set scripts.commitlint="commitlint --edit" +echo "pnpm commitlint \${1}" > .husky/commit-msg +``` + +== deno + +```sh +deno add --dev husky + +deno task --eval husky install + +# Add commit message linting to commit-msg hook +echo "deno task --eval commitlint --edit \$1" > .husky/commit-msg +# Windows users should use ` to escape dollar signs +echo "deno task --eval commitlint --edit `$1" > .husky/commit-msg +``` + ::: --- diff --git a/docs/guides/use-prompt.md b/docs/guides/use-prompt.md index cd1bdda4d5..4c587ece12 100644 --- a/docs/guides/use-prompt.md +++ b/docs/guides/use-prompt.md @@ -19,7 +19,7 @@ 3. Install and configure if needed ```sh - npm install --save-dev @commitlint/{cli,config-conventional,prompt-cli} + npm install --save-dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js ``` diff --git a/docs/index.md b/docs/index.md index cf71d243e9..2540412ec6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,7 +23,7 @@ hero: link: /concepts/commit-conventions features: - - title: Sharable configs + - title: Shareable configs details: By supporting npm-installed configurations it makes sharing of commit conventions easy. icon: 🌏 link: /concepts/shareable-config diff --git a/docs/reference/cli.md b/docs/reference/cli.md index aa9bf4d2de..1071966500 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -3,13 +3,14 @@ ```sh ❯ npx commitlint --help -@commitlint/cli@11.0.0 - Lint your commit messages +@commitlint/cli@19.5.0 - Lint your commit messages [input] reads from stdin if --edit, --env, --from and --to are omitted Options: -c, --color toggle colored output [boolean] [default: true] - -g, --config path to the config file [string] + -g, --config path to the config file; result code 9 if config is + missing [string] --print-config print resolved config [string] [choices: "", "text", "json"] -d, --cwd directory to execute in @@ -22,6 +23,12 @@ Options: -H, --help-url help url in error message [string] -f, --from lower end of the commit range to lint; applies if edit=false [string] + --from-last-tag uses the last tag as the lower end of the commit range to + lint; applies if edit=false and from is not set [boolean] + --git-log-args additional git log arguments as space separated string, + example '--first-parent --cherry-pick' [string] + -l, --last just analyze the last commit; applies if edit=false + [boolean] -o, --format output format of the results [string] -p, --parser-preset configuration preset to use for conventional-commits-parser [string] @@ -30,6 +37,10 @@ Options: edit=false [string] -V, --verbose enable verbose output for reports without problems [boolean] + -s, --strict enable strict mode; result code 2 for warnings, 3 for + errors [boolean] + --options path to a JSON file or Common.js module containing CLI + options -v, --version display version information [boolean] -h, --help Show help [boolean] ``` diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index c77d695cb2..079a9b20f9 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -29,7 +29,7 @@ Configuration files are resolved using [cosmiconfig](https://github.com/cosmicon ## Config via `package.json` -You can add `commitlint` field in `package.json` with an object that follows below structure. +You can add a `commitlint` field in `package.json` (or [`package.yaml`](https://github.com/pnpm/pnpm/pull/1799)) with an object that follows the below structure. ## Config option CLI @@ -43,22 +43,22 @@ const Configuration = { * Resolve and load @commitlint/config-conventional from node_modules. * Referenced packages must be installed */ - extends: ['@commitlint/config-conventional'], + extends: ["@commitlint/config-conventional"], /* * Resolve and load conventional-changelog-atom from node_modules. * Referenced packages must be installed */ - parserPreset: 'conventional-changelog-atom', + parserPreset: "conventional-changelog-atom", /* * Resolve and load @commitlint/format from node_modules. * Referenced package must be installed */ - formatter: '@commitlint/format', + formatter: "@commitlint/format", /* * Any rules defined here will override rules from @commitlint/config-conventional */ rules: { - 'type-enum': [2, 'always', ['foo']], + "type-enum": [2, "always", ["foo"]], }, /* * Array of functions that return true if commitlint should ignore the given message. @@ -72,7 +72,7 @@ const Configuration = { * To see full list, check https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/is-ignored/src/defaults.ts. * To disable those ignores and run rules always, set `defaultIgnores: false` as shown below. */ - ignores: [(commit) => commit === ''], + ignores: [(commit) => commit === ""], /* * Whether commitlint uses the default ignore rules, see the description above. */ @@ -81,7 +81,7 @@ const Configuration = { * Custom URL to show upon failure */ helpUrl: - 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint', + "https://github.com/conventional-changelog/commitlint/#what-is-commitlint", /* * Custom prompt configs */ @@ -89,7 +89,7 @@ const Configuration = { messages: {}, questions: { type: { - description: 'please input type:', + description: "please input type:", }, }, }, @@ -114,16 +114,16 @@ Relevant types and enums can be imported from `@commitlint/types`. Below you can see main changes from a standard js file: ```ts -import type {UserConfig} from '@commitlint/types'; // [!code focus] -import {RuleConfigSeverity} from '@commitlint/types'; // [!code focus] +import type { UserConfig } from "@commitlint/types"; // [!code focus] +import { RuleConfigSeverity } from "@commitlint/types"; // [!code focus] const Configuration: UserConfig = { // [!code focus] - extends: ['@commitlint/config-conventional'], - parserPreset: 'conventional-changelog-atom', - formatter: '@commitlint/format', + extends: ["@commitlint/config-conventional"], + parserPreset: "conventional-changelog-atom", + formatter: "@commitlint/format", rules: { - 'type-enum': [RuleConfigSeverity.Error, 'always', ['foo']], // [!code focus] + "type-enum": [RuleConfigSeverity.Error, "always", ["foo"]], // [!code focus] }, // ... }; @@ -163,7 +163,7 @@ export default { ```js [commitlint.config.js] export default { - extends: ['./commitlint.base.js', './commitlint.types.js'], + extends: ["./commitlint.base.js", "./commitlint.types.js"], }; ``` @@ -171,7 +171,7 @@ export default { // will be picked up by commitlint.config.js export default { rules: { - 'type-enum': [2, 'always', ['foo']], + "type-enum": [2, "always", ["foo"]], }, }; ``` @@ -179,14 +179,14 @@ export default { ```js [commitlint.base.js] // will be picked up by commitlint.config.js export default { - extends: ['@commitlint/config-conventional'], // extends can be nested - parserPreset: 'conventional-changelog-atom', + extends: ["@commitlint/config-conventional"], // extends can be nested + parserPreset: "conventional-changelog-atom", }; ``` ::: -More information can be found in the [Concepts – sharable config section](/concepts/shareable-config). +More information can be found in the [Concepts – shareable config section](/concepts/shareable-config). ## Parser presets @@ -206,7 +206,7 @@ npm install --save-dev conventional-changelog-atom ```js [commitlint.config.js] export default { - parserPreset: 'conventional-changelog-atom', + parserPreset: "conventional-changelog-atom", }; ``` @@ -216,7 +216,7 @@ export default { ```js [commitlint.config.js] export default { - parserPreset: './parser-preset', + parserPreset: "./parser-preset", }; ``` @@ -224,7 +224,7 @@ export default { export default { parserOpts: { headerPattern: /^(\w*)\((\w*)\)-(\w*)\s(.*)$/, - headerCorrespondence: ['type', 'scope', 'ticket', 'subject'], + headerCorrespondence: ["type", "scope", "ticket", "subject"], }, }; ``` @@ -238,7 +238,7 @@ Use ids resolvable by the node resolve algorithm. ```js export default { - formatter: '@commitlint/format', + formatter: "@commitlint/format", }; ``` diff --git a/docs/reference/examples.md b/docs/reference/examples.md index 3832adbb1f..773b4048ab 100644 --- a/docs/reference/examples.md +++ b/docs/reference/examples.md @@ -7,16 +7,18 @@ These examples show common usages of how commitlint can be configured. ::: code-group ```jsonc [package.json] +{ // ... - commitlint: { + "commitlint": { "rules": { - "references-empty": [2, "never"] + "references-empty": [2, "never"], }, "parserPreset": { "parserOpts": { - "issuePrefixes": ["PROJ-"] - } - } - } + "issuePrefixes": ["PROJ-"], + }, + }, + }, // ... +} ``` diff --git a/docs/reference/plugins.md b/docs/reference/plugins.md index 2233107143..251eeb65c3 100644 --- a/docs/reference/plugins.md +++ b/docs/reference/plugins.md @@ -10,7 +10,7 @@ Plugins can expose additional rules for use in commitlint. To do so, the plugin ```js export default { rules: { - 'dollar-sign': function (parsed, when, value) { + "dollar-sign": function (parsed, when, value) { // rule implementation ... }, }, @@ -54,13 +54,13 @@ In case you want to develop your plugins locally without the need to publish to ```js [commitlint.config.js] export default { rules: { - 'hello-world-rule': [2, 'always'], + "hello-world-rule": [2, "always"], }, plugins: [ { rules: { - 'hello-world-rule': ({subject}) => { - const HELLO_WORLD = 'Hello World'; + "hello-world-rule": ({ subject }) => { + const HELLO_WORLD = "Hello World"; return [ subject.includes(HELLO_WORLD), `Your subject should contain ${HELLO_WORLD} message`, diff --git a/docs/reference/rules-configuration.md b/docs/reference/rules-configuration.md index f991de5f5e..09494a12b9 100644 --- a/docs/reference/rules-configuration.md +++ b/docs/reference/rules-configuration.md @@ -16,7 +16,7 @@ Rule configurations are either of type `array` residing on a key with the rule's export default { // ... rules: { - 'header-max-length': [0, 'always', 72], // [!code focus] + "header-max-length": [0, "always", 72], // [!code focus] }, // ... }; @@ -32,7 +32,7 @@ export default { export default { // ... rules: { - 'header-max-length': () => [0, 'always', 72], // [!code focus] + "header-max-length": () => [0, "always", 72], // [!code focus] }, // ... }; @@ -48,7 +48,7 @@ export default { export default { // ... rules: { - 'header-max-length': async () => [0, 'always', 72], // [!code focus] + "header-max-length": async () => [0, "always", 72], // [!code focus] }, // ... }; diff --git a/docs/reference/rules.md b/docs/reference/rules.md index 17e609100e..8180e753e0 100644 --- a/docs/reference/rules.md +++ b/docs/reference/rules.md @@ -64,14 +64,14 @@ ```js [ - 'lower-case', // default - 'upper-case', // UPPERCASE - 'camel-case', // camelCase - 'kebab-case', // kebab-case - 'pascal-case', // PascalCase - 'sentence-case', // Sentence case - 'snake-case', // snake_case - 'start-case', // Start Case + "lower-case", // default + "upper-case", // UPPERCASE + "camel-case", // camelCase + "kebab-case", // kebab-case + "pascal-case", // PascalCase + "sentence-case", // Sentence case + "snake-case", // snake_case + "start-case", // Start Case ]; ``` @@ -129,14 +129,14 @@ ```js [ - 'lower-case', // default - 'upper-case', // UPPERCASE - 'camel-case', // camelCase - 'kebab-case', // kebab-case - 'pascal-case', // PascalCase - 'sentence-case', // Sentence case - 'snake-case', // snake_case - 'start-case', // Start Case + "lower-case", // default + "upper-case", // UPPERCASE + "camel-case", // camelCase + "kebab-case", // kebab-case + "pascal-case", // PascalCase + "sentence-case", // Sentence case + "snake-case", // snake_case + "start-case", // Start Case ]; ``` @@ -210,14 +210,14 @@ ```js [ - 'lower-case', // default - 'upper-case', // UPPERCASE - 'camel-case', // camelCase - 'kebab-case', // kebab-case - 'pascal-case', // PascalCase - 'sentence-case', // Sentence case - 'snake-case', // snake_case - 'start-case', // Start Case + "lower-case", // default + "upper-case", // UPPERCASE + "camel-case", // camelCase + "kebab-case", // kebab-case + "pascal-case", // PascalCase + "sentence-case", // Sentence case + "snake-case", // snake_case + "start-case", // Start Case ]; ``` @@ -253,22 +253,22 @@ Infinity - **value** ```js -['sentence-case', 'start-case', 'pascal-case', 'upper-case']; +["sentence-case", "start-case", "pascal-case", "upper-case"]; ``` - **possible values** ```js [ - 'lower-case', // lower case - 'upper-case', // UPPERCASE - 'camel-case', // camelCase - 'kebab-case', // kebab-case - 'pascal-case', // PascalCase - 'sentence-case', // Sentence case - 'snake-case', // snake_case - 'start-case'. // Start Case -] + "lower-case", // lower case + "upper-case", // UPPERCASE + "camel-case", // camelCase + "kebab-case", // kebab-case + "pascal-case", // PascalCase + "sentence-case", // Sentence case + "snake-case", // snake_case + "start-case", // Start Case +]; ``` ## subject-empty @@ -319,17 +319,17 @@ Infinity ```js [ - 'build', - 'chore', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test', + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", ]; ``` @@ -347,14 +347,14 @@ Infinity ```js [ - 'lower-case', // default - 'upper-case', // UPPERCASE - 'camel-case', // camelCase - 'kebab-case', // kebab-case - 'pascal-case', // PascalCase - 'sentence-case', // Sentence case - 'snake-case', // snake_case - 'start-case', // Start Case + "lower-case", // default + "upper-case", // UPPERCASE + "camel-case", // camelCase + "kebab-case", // kebab-case + "pascal-case", // PascalCase + "sentence-case", // Sentence case + "snake-case", // snake_case + "start-case", // Start Case ]; ``` diff --git a/docs/support/troubleshooting.md b/docs/support/troubleshooting.md new file mode 100644 index 0000000000..273d39c265 --- /dev/null +++ b/docs/support/troubleshooting.md @@ -0,0 +1,26 @@ +# Troubleshooting + +## Getting `Range error: Found invalid rule names: [...]` after update {#range-error-invalid-rule} + +After updating one or more `@commitlint` packages you might encounter an error like: + +```text +Found invalid rule names: header-trim. +Supported rule names are: body-case, body-empty, ... +``` + +The source of this error is likely a mismatch of version between `@commitlint` packages in `node_modules`. + +E.g.: you might have a config requesting a rule that is not included in `@commitlint/rules`. + +> [!TIP] +> If you are relying on a config which depends on an earlier version of `@commitlint/config-conventional` be sure to update them: +> +> ```sh +> npm update @commitlint/config-conventional +> ``` + +--- + +> [!NOTE] +> Detailed explanation about the error can be found in this [comment](https://github.com/conventional-changelog/commitlint/pull/3871#issuecomment-1911455325). diff --git a/docs/support/upgrade.md b/docs/support/upgrade.md index ad455b5b79..ec54313e83 100644 --- a/docs/support/upgrade.md +++ b/docs/support/upgrade.md @@ -62,10 +62,10 @@ npm install --save-dev husky ```js module.exports = { - extends: ['@commitlint/config-conventional'], + extends: ["@commitlint/config-conventional"], rules: { // Place your rules here - 'scope-enum': [2, 'always', ['a', 'b']], // error if scope is given but not in provided list + "scope-enum": [2, "always", ["a", "b"]], // error if scope is given but not in provided list }, }; ``` diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..033e7d042a --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,108 @@ +import typescriptEslint from '@typescript-eslint/eslint-plugin'; +import jest from 'eslint-plugin-jest'; +import _import from 'eslint-plugin-import'; +import {fixupPluginRules} from '@eslint/compat'; +import globals from 'globals'; +import tsParser from '@typescript-eslint/parser'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import js from '@eslint/js'; +import {FlatCompat} from '@eslint/eslintrc'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default [ + { + ignores: ['**/lib/', '**/coverage/', '**/node_modules/', '**/fixtures/'], + }, + ...compat.extends('eslint:recommended', 'prettier'), + { + plugins: { + '@typescript-eslint': typescriptEslint, + jest, + import: fixupPluginRules(_import), + }, + + languageOptions: { + globals: { + ...globals.node, + }, + + ecmaVersion: 11, + sourceType: 'module', + + parserOptions: { + ecmaFeatures: { + jsx: false, + }, + }, + }, + + rules: { + 'import/first': 'error', + 'import/no-absolute-path': 'error', + 'import/no-amd': 'error', + 'import/no-mutable-exports': 'error', + 'import/no-named-default': 'error', + 'import/no-self-import': 'error', + + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: true, + }, + ], + }, + }, + ...compat + .extends( + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier' + ) + .map((config) => ({ + ...config, + files: ['**/*.cts', '**/*.ts'], + })), + { + files: ['**/*.cts', '**/*.ts'], + + languageOptions: { + parser: tsParser, + }, + + rules: { + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/triple-slash-reference': 'off', + 'no-empty': 'off', + 'no-var': 'off', + }, + }, + ...compat.extends('plugin:jest/recommended').map((config) => ({ + ...config, + files: ['**/*.test.ts', '**/*.test.js'], + })), + { + files: ['**/*.test.ts', '**/*.test.js'], + + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'import/first': 'off', + 'import/no-extraneous-dependencies': 'off', + 'jest/no-deprecated-functions': 'off', + }, + }, +]; diff --git a/lerna.json b/lerna.json index aaa21394f3..51b062b69b 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,4 @@ { - "lerna": "4", "npmClient": "yarn", - "useWorkspaces": true, - "version": "19.0.0" + "version": "19.8.0" } diff --git a/package.json b/package.json index 7a13456183..4f50be3f6c 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,10 @@ "docs-dev": "vitepress dev docs", "docs-build": "vitepress build docs", "docs-preview": "vitepress preview docs", - "lint": "eslint . --ext .js,.ts", - "lint-fix": "eslint . --ext .js,.ts --fix", - "format": "prettier **/*.{ts,js,json,yml,md} -l", - "format-fix": "prettier **/*.{ts,js,json,yml,md} --write", + "lint": "eslint", + "lint-fix": "eslint --fix", + "format": "prettier **/*.{ts,js,json,yml,md} --check", + "format-fix": "prettier \"**/*.{ts,js,json,yml,md}\" --write", "publish": "lerna publish --conventional-commits", "reinstall": "yarn clean && yarn install", "start": "yarn watch", @@ -28,13 +28,9 @@ "commitlint": { "extends": [ "@commitlint/config-conventional", - "@commitlint/config-lerna-scopes" + "@commitlint/config-workspace-scopes" ] }, - "prettier": { - "singleQuote": true, - "bracketSpacing": false - }, "lint-staged": { "*.{ts,js,json,yml,md}": [ "prettier --write" @@ -62,7 +58,8 @@ "@packages/*" ], "engines": { - "node": ">=v18" + "node": ">=v18", + "npm": ">=7" }, "repository": { "type": "git", @@ -85,24 +82,27 @@ "email": "hello@herebecode.com" }, "devDependencies": { - "@lerna/project": "^6.0.0", - "@swc/core": "^1.4.2", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", - "@vitest/coverage-istanbul": "^1.3.1", + "@eslint/compat": "^1.2.4", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.16.0", + "@swc/core": "^1.10.1", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", + "@vitest/coverage-istanbul": "^3.0.0", "cross-env": "^7.0.3", - "eslint": "^8.46.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.28.0", - "eslint-plugin-jest": "^27.9.0", - "husky": "^9.0.11", - "lerna": "^6.0.0", - "lint-staged": "15.2.2", - "prettier": "^2.8.8", + "eslint": "^9.16.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-import": "^2.30.0", + "eslint-plugin-jest": "^28.8.2", + "globals": "^15.13.0", + "husky": "^9.1.5", + "lerna": "^8.2.0", + "lint-staged": "15.5.1", + "prettier": "^3.5.3", "typescript": "^5.2.2", - "vitepress": "^1.0.0-rc.44", - "vitepress-plugin-tabs": "^0.5.0", - "vitest": "^1.3.1", - "vue": "^3.4.19" + "vitepress": "^1.3.4", + "vitepress-plugin-tabs": "^0.7.0", + "vitest": "^3.0.0", + "vue": "^3.5.0" } } diff --git a/tsconfig.json b/tsconfig.json index b8dc904d8d..90481ab49f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,27 +7,27 @@ "noEmit": true }, "references": [ - {"path": "@packages/test-environment"}, - {"path": "@packages/test"}, - {"path": "@commitlint/config-validator"}, - {"path": "@commitlint/ensure"}, - {"path": "@commitlint/execute-rule"}, - {"path": "@commitlint/format"}, - {"path": "@commitlint/is-ignored"}, - {"path": "@commitlint/load"}, - {"path": "@commitlint/message"}, - {"path": "@commitlint/parse"}, - {"path": "@commitlint/resolve-extends"}, - {"path": "@commitlint/to-lines"}, - {"path": "@commitlint/top-level"}, - {"path": "@commitlint/read"}, - {"path": "@commitlint/rules"}, - {"path": "@commitlint/lint"}, - {"path": "@commitlint/core"}, - {"path": "@commitlint/cli"}, - {"path": "@commitlint/travis-cli"}, - {"path": "@commitlint/prompt"}, - {"path": "@commitlint/cz-commitlint"}, - {"path": "@commitlint/config-conventional"} + { "path": "@packages/test-environment" }, + { "path": "@packages/test" }, + { "path": "@commitlint/config-validator" }, + { "path": "@commitlint/ensure" }, + { "path": "@commitlint/execute-rule" }, + { "path": "@commitlint/format" }, + { "path": "@commitlint/is-ignored" }, + { "path": "@commitlint/load" }, + { "path": "@commitlint/message" }, + { "path": "@commitlint/parse" }, + { "path": "@commitlint/resolve-extends" }, + { "path": "@commitlint/to-lines" }, + { "path": "@commitlint/top-level" }, + { "path": "@commitlint/read" }, + { "path": "@commitlint/rules" }, + { "path": "@commitlint/lint" }, + { "path": "@commitlint/core" }, + { "path": "@commitlint/cli" }, + { "path": "@commitlint/travis-cli" }, + { "path": "@commitlint/prompt" }, + { "path": "@commitlint/cz-commitlint" }, + { "path": "@commitlint/config-conventional" } ] } diff --git a/tsconfig.shared.json b/tsconfig.shared.json index 9abe5b68fa..150d512559 100644 --- a/tsconfig.shared.json +++ b/tsconfig.shared.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "ES2017", - "lib": ["es2017"], + "target": "ES2022", + "lib": ["es2022"], "declaration": true, "declarationMap": true, "sourceMap": true, diff --git a/vitest.config.ts b/vitest.config.ts index c1b94cdba0..cd76172eba 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,12 +1,12 @@ -import {defineConfig} from 'vitest/config'; +import { defineConfig } from "vitest/config"; export default defineConfig({ test: { - exclude: ['**/node_modules/**', '**/lib/*.test.js'], - environment: 'commitlint', + exclude: ["**/node_modules/**", "**/lib/*.test.js"], + environment: "commitlint", coverage: { - provider: 'istanbul', - include: ['**/@commitlint/*/src/**'], + provider: "istanbul", + include: ["**/@commitlint/*/src/**"], }, }, }); diff --git a/yarn.lock b/yarn.lock index 0d8a22f491..5a4a72479b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,533 +2,709 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@algolia/autocomplete-core@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" - integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-plugin-algolia-insights@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" - integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== - dependencies: - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-preset-algolia@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da" - integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== - dependencies: - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-shared@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" - integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== - -"@algolia/cache-browser-local-storage@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" - integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/cache-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" - integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== - -"@algolia/cache-in-memory@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" - integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/client-account@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" - integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-analytics@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" - integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" - integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== - dependencies: - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-personalization@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" - integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-search@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" - integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/logger-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" - integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== - -"@algolia/logger-console@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" - integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== - dependencies: - "@algolia/logger-common" "4.22.1" - -"@algolia/requester-browser-xhr@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" - integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/requester-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" - integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== - -"@algolia/requester-node-http@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" - integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/transporter@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" - integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== - dependencies: - "@algolia/cache-common" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/requester-common" "4.22.1" +"@algolia/autocomplete-core@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz#2c410baa94a47c5c5f56ed712bb4a00ebe24088b" + integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.17.7" + "@algolia/autocomplete-shared" "1.17.7" + +"@algolia/autocomplete-plugin-algolia-insights@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz#7d2b105f84e7dd8f0370aa4c4ab3b704e6760d82" + integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== + dependencies: + "@algolia/autocomplete-shared" "1.17.7" + +"@algolia/autocomplete-preset-algolia@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz#c9badc0d73d62db5bf565d839d94ec0034680ae9" + integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== + dependencies: + "@algolia/autocomplete-shared" "1.17.7" + +"@algolia/autocomplete-shared@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" + integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== + +"@algolia/client-abtesting@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.3.tgz#e4120919292c57270546cdf8f7030ac8f035c9a2" + integrity sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/client-analytics@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.3.tgz#242d448ee34667a52bf1efe5c39b58546d71201f" + integrity sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/client-common@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.3.tgz#7eec522ca18ae446b775092d17d47eecf97c6af9" + integrity sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA== + +"@algolia/client-insights@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.3.tgz#1bcd9e3090512d3f32e64c2c0b839c7ebfd40574" + integrity sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/client-personalization@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.3.tgz#ca1fe559112bd9aedefa38ca712d69b0bc2bfddf" + integrity sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/client-query-suggestions@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.3.tgz#fed613ab3c7e0be1cb5dcca09fdab65de17e2800" + integrity sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/client-search@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.3.tgz#d8ce41dea173112d4a971d697f34145a1354befd" + integrity sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/ingestion@1.20.3": + version "1.20.3" + resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.3.tgz#32283c2cde45d47b6731bbaaa170703ddf9c3874" + integrity sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/monitoring@1.20.3": + version "1.20.3" + resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.3.tgz#8165d8fbb89134876e9055f3432a3de72dc150bc" + integrity sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/recommend@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.3.tgz#bfe36b49287cdf07ad5369640dd65f4b12117e30" + integrity sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q== + dependencies: + "@algolia/client-common" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" + +"@algolia/requester-browser-xhr@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.3.tgz#7bc054eb70669e601e0b1ab034d360eb44c900b6" + integrity sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ== + dependencies: + "@algolia/client-common" "5.20.3" + +"@algolia/requester-fetch@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.3.tgz#e280a3bd142984a31b172743119f21a3ccef576b" + integrity sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw== + dependencies: + "@algolia/client-common" "5.20.3" + +"@algolia/requester-node-http@5.20.3": + version "5.20.3" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.3.tgz#cf06a8568efd7f3ad02414e13f2fa94c15edfc37" + integrity sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg== + dependencies: + "@algolia/client-common" "5.20.3" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== -"@babel/core@^7.12.3": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.23.9": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== + dependencies: + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.10": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== + dependencies: + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/parser@^7.23.9", "@babel/parser@^7.25.4", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== + dependencies: + "@babel/types" "^7.27.0" + +"@babel/parser@^7.25.3": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" + integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== + dependencies: + "@babel/types" "^7.26.9" + +"@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + debug "^4.3.1" + globals "^11.1.0" -"@babel/parser@^7.14.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/types@^7.25.4", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@docsearch/css@3.8.2": + version "3.8.2" + resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz#7973ceb6892c30f154ba254cd05c562257a44977" + integrity sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ== -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@docsearch/js@3.8.2": + version "3.8.2" + resolved "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz#bdcfc9837700eb38453b88e211ab5cc5a3813cc6" + integrity sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@docsearch/react" "3.8.2" + preact "^10.0.0" -"@babel/traverse@^7.23.0": - version "7.23.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@docsearch/react@3.8.2": + version "3.8.2" + resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz#7b11d39b61c976c0aa9fbde66e6b73b30f3acd42" + integrity sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" + "@algolia/autocomplete-core" "1.17.7" + "@algolia/autocomplete-preset-algolia" "1.17.7" + "@docsearch/css" "3.8.2" + algoliasearch "^5.14.2" -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@emnapi/core@^1.1.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@emnapi/core/-/core-1.4.0.tgz#8844b02d799198158ac1fea21ae2bc81b881da9a" + integrity sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" + "@emnapi/wasi-threads" "1.0.1" + tslib "^2.4.0" -"@docsearch/css@3.5.2", "@docsearch/css@^3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz#610f47b48814ca94041df969d9fcc47b91fc5aac" - integrity sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA== +"@emnapi/runtime@^1.1.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz#8f509bf1059a5551c8fe829a1c4e91db35fdfbee" + integrity sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw== + dependencies: + tslib "^2.4.0" -"@docsearch/js@^3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz#a11cb2e7e62890e9e940283fed6972ecf632629d" - integrity sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg== +"@emnapi/wasi-threads@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" + integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== dependencies: - "@docsearch/react" "3.5.2" - preact "^10.0.0" + tslib "^2.4.0" -"@docsearch/react@3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz#2e6bbee00eb67333b64906352734da6aef1232b9" - integrity sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng== - dependencies: - "@algolia/autocomplete-core" "1.9.3" - "@algolia/autocomplete-preset-algolia" "1.9.3" - "@docsearch/css" "3.5.2" - algoliasearch "^4.19.1" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/aix-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-arm@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/android-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" + integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/darwin-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/freebsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-arm@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-loong64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-mips64el@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-riscv64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-s390x@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/linux-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== + +"@esbuild/netbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/netbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== + +"@esbuild/openbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/openbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/sunos-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + +"@esbuild/win32-x64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.6.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz#e4c58fdcf0696e7a5f19c30201ed43123ab15abc" + integrity sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/compat@^1.2.4": + version "1.2.8" + resolved "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.8.tgz#6baa38061ca8850199bf5a322afab34537ba3621" + integrity sha512-LqCYHdWL/QqKIJuZ/ucMAv8d4luKGs4oCPgpt8mWztQAtPrHfXKQ/XAUc8ljCHAfJCn6SvkpTcGt5Tsh8saowA== + +"@eslint/config-array@^0.20.0": + version "0.20.0" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz#7a1232e82376712d3340012a2f561a2764d1988f" + integrity sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== +"@eslint/config-helpers@^0.2.1": + version "0.2.1" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz#26042c028d1beee5ce2235a7929b91c52651646d" + integrity sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw== + +"@eslint/core@^0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz#bf02f209846d3bf996f9e8009db62df2739b458c" + integrity sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw== + dependencies: + "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== +"@eslint/eslintrc@^3.1.0", "@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@9.25.1", "@eslint/js@^9.16.0": + version "9.25.1" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz#25f5c930c2b68b5ebe7ac857f754cbd61ef6d117" + integrity sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg== -"@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.2.8": + version "0.2.8" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz#47488d8f8171b5d4613e833313f3ce708e3525f8" + integrity sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA== + dependencies: + "@eslint/core" "^0.13.0" + levn "^0.4.1" "@gwhitney/detect-indent@7.0.1": version "7.0.1" - resolved "https://registry.npmjs.org/@gwhitney/detect-indent/-/detect-indent-7.0.1.tgz" + resolved "https://registry.npmjs.org/@gwhitney/detect-indent/-/detect-indent-7.0.1.tgz#db16d7fe6d13b26dc792442e5156677b44cc428e" integrity sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" - resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@iconify-json/simple-icons@^1.2.21": + version "1.2.27" + resolved "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.27.tgz#c0293aa2a2a6ba84d02489931c7101ff3cd6094f" + integrity sha512-FtZwp/H7ih5rY9FPfDR+k6toOo/cuwpHWY8faNhxLs5O5uW6Q8TeqdNWfjVfgFtrs5tUUzWysjqNGL234v8EMA== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*": + version "2.0.0" + resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@inquirer/figures@^1.0.3": + version "1.0.10" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz#e3676a51c9c51aaabcd6ba18a28e82b98417db37" + integrity sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -543,17 +719,17 @@ "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/environment@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: "@jest/fake-timers" "^29.7.0" @@ -563,7 +739,7 @@ "@jest/fake-timers@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: "@jest/types" "^29.6.3" @@ -575,14 +751,14 @@ "@jest/schemas@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" "@jest/types@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" @@ -592,733 +768,126 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lerna/add@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/add/-/add-6.4.1.tgz" - integrity sha512-YSRnMcsdYnQtQQK0NSyrS9YGXvB3jzvx183o+JTH892MKzSlBqwpBHekCknSibyxga1HeZ0SNKQXgsHAwWkrRw== - dependencies: - "@lerna/bootstrap" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/npm-conf" "6.4.1" - "@lerna/validation-error" "6.4.1" - dedent "^0.7.0" - npm-package-arg "8.1.1" - p-map "^4.0.0" - pacote "^13.6.1" - semver "^7.3.4" - -"@lerna/bootstrap@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-6.4.1.tgz" - integrity sha512-64cm0mnxzxhUUjH3T19ZSjPdn28vczRhhTXhNAvOhhU0sQgHrroam1xQC1395qbkV3iosSertlu8e7xbXW033w== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/has-npm-version" "6.4.1" - "@lerna/npm-install" "6.4.1" - "@lerna/package-graph" "6.4.1" - "@lerna/pulse-till-done" "6.4.1" - "@lerna/rimraf-dir" "6.4.1" - "@lerna/run-lifecycle" "6.4.1" - "@lerna/run-topologically" "6.4.1" - "@lerna/symlink-binary" "6.4.1" - "@lerna/symlink-dependencies" "6.4.1" - "@lerna/validation-error" "6.4.1" - "@npmcli/arborist" "5.3.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - -"@lerna/changed@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/changed/-/changed-6.4.1.tgz" - integrity sha512-Z/z0sTm3l/iZW0eTSsnQpcY5d6eOpNO0g4wMOK+hIboWG0QOTc8b28XCnfCUO+33UisKl8PffultgoaHMKkGgw== - dependencies: - "@lerna/collect-updates" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/listable" "6.4.1" - "@lerna/output" "6.4.1" - -"@lerna/check-working-tree@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-6.4.1.tgz" - integrity sha512-EnlkA1wxaRLqhJdn9HX7h+JYxqiTK9aWEFOPqAE8lqjxHn3RpM9qBp1bAdL7CeUk3kN1lvxKwDEm0mfcIyMbPA== - dependencies: - "@lerna/collect-uncommitted" "6.4.1" - "@lerna/describe-ref" "6.4.1" - "@lerna/validation-error" "6.4.1" - -"@lerna/child-process@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-6.4.1.tgz" - integrity sha512-dvEKK0yKmxOv8pccf3I5D/k+OGiLxQp5KYjsrDtkes2pjpCFfQAMbmpol/Tqx6w/2o2rSaRrLsnX8TENo66FsA== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/clean@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/clean/-/clean-6.4.1.tgz" - integrity sha512-FuVyW3mpos5ESCWSkQ1/ViXyEtsZ9k45U66cdM/HnteHQk/XskSQw0sz9R+whrZRUDu6YgYLSoj1j0YAHVK/3A== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/prompt" "6.4.1" - "@lerna/pulse-till-done" "6.4.1" - "@lerna/rimraf-dir" "6.4.1" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - -"@lerna/cli@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/cli/-/cli-6.4.1.tgz" - integrity sha512-2pNa48i2wzFEd9LMPKWI3lkW/3widDqiB7oZUM1Xvm4eAOuDWc9I3RWmAUIVlPQNf3n4McxJCvsZZ9BpQN50Fg== - dependencies: - "@lerna/global-options" "6.4.1" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" - -"@lerna/collect-uncommitted@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-6.4.1.tgz" - integrity sha512-5IVQGhlLrt7Ujc5ooYA1Xlicdba/wMcDSnbQwr8ufeqnzV2z4729pLCVk55gmi6ZienH/YeBPHxhB5u34ofE0Q== - dependencies: - "@lerna/child-process" "6.4.1" - chalk "^4.1.0" - npmlog "^6.0.2" - -"@lerna/collect-updates@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-6.4.1.tgz" - integrity sha512-pzw2/FC+nIqYkknUHK9SMmvP3MsLEjxI597p3WV86cEDN3eb1dyGIGuHiKShtjvT08SKSwpTX+3bCYvLVxtC5Q== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/describe-ref" "6.4.1" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" - -"@lerna/command@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/command/-/command-6.4.1.tgz" - integrity sha512-3Lifj8UTNYbRad8JMP7IFEEdlIyclWyyvq/zvNnTS9kCOEymfmsB3lGXr07/AFoi6qDrvN64j7YSbPZ6C6qonw== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/package-graph" "6.4.1" - "@lerna/project" "6.4.1" - "@lerna/validation-error" "6.4.1" - "@lerna/write-log-file" "6.4.1" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" - -"@lerna/conventional-commits@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-6.4.1.tgz" - integrity sha512-NIvCOjStjQy5O8VojB7/fVReNNDEJOmzRG2sTpgZ/vNS4AzojBQZ/tobzhm7rVkZZ43R9srZeuhfH9WgFsVUSA== - dependencies: - "@lerna/validation-error" "6.4.1" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.4" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" - -"@lerna/create-symlink@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-6.4.1.tgz" - integrity sha512-rNivHFYV1GAULxnaTqeGb2AdEN2OZzAiZcx5CFgj45DWXQEGwPEfpFmCSJdXhFZbyd3K0uiDlAXjAmV56ov3FQ== - dependencies: - cmd-shim "^5.0.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" - -"@lerna/create@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/create/-/create-6.4.1.tgz" - integrity sha512-qfQS8PjeGDDlxEvKsI/tYixIFzV2938qLvJohEKWFn64uvdLnXCamQ0wvRJST8p1ZpHWX4AXrB+xEJM3EFABrA== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/npm-conf" "6.4.1" - "@lerna/validation-error" "6.4.1" - dedent "^0.7.0" - fs-extra "^9.1.0" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" - p-reduce "^2.1.0" - pacote "^13.6.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - yargs-parser "20.2.4" - -"@lerna/describe-ref@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-6.4.1.tgz" - integrity sha512-MXGXU8r27wl355kb1lQtAiu6gkxJ5tAisVJvFxFM1M+X8Sq56icNoaROqYrvW6y97A9+3S8Q48pD3SzkFv31Xw== - dependencies: - "@lerna/child-process" "6.4.1" - npmlog "^6.0.2" - -"@lerna/diff@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/diff/-/diff-6.4.1.tgz" - integrity sha512-TnzJsRPN2fOjUrmo5Boi43fJmRtBJDsVgwZM51VnLoKcDtO1kcScXJ16Od2Xx5bXbp5dES5vGDLL/USVVWfeAg== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/validation-error" "6.4.1" - npmlog "^6.0.2" - -"@lerna/exec@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/exec/-/exec-6.4.1.tgz" - integrity sha512-KAWfuZpoyd3FMejHUORd0GORMr45/d9OGAwHitfQPVs4brsxgQFjbbBEEGIdwsg08XhkDb4nl6IYVASVTq9+gA== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/profiler" "6.4.1" - "@lerna/run-topologically" "6.4.1" - "@lerna/validation-error" "6.4.1" - p-map "^4.0.0" - -"@lerna/filter-options@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-6.4.1.tgz" - integrity sha512-efJh3lP2T+9oyNIP2QNd9EErf0Sm3l3Tz8CILMsNJpjSU6kO43TYWQ+L/ezu2zM99KVYz8GROLqDcHRwdr8qUA== - dependencies: - "@lerna/collect-updates" "6.4.1" - "@lerna/filter-packages" "6.4.1" - dedent "^0.7.0" - npmlog "^6.0.2" - -"@lerna/filter-packages@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-6.4.1.tgz" - integrity sha512-LCMGDGy4b+Mrb6xkcVzp4novbf5MoZEE6ZQF1gqG0wBWqJzNcKeFiOmf352rcDnfjPGZP6ct5+xXWosX/q6qwg== - dependencies: - "@lerna/validation-error" "6.4.1" - multimatch "^5.0.0" - npmlog "^6.0.2" - -"@lerna/get-npm-exec-opts@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-6.4.1.tgz" - integrity sha512-IvN/jyoklrWcjssOf121tZhOc16MaFPOu5ii8a+Oy0jfTriIGv929Ya8MWodj75qec9s+JHoShB8yEcMqZce4g== - dependencies: - npmlog "^6.0.2" - -"@lerna/get-packed@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-6.4.1.tgz" - integrity sha512-uaDtYwK1OEUVIXn84m45uPlXShtiUcw6V9TgB3rvHa3rrRVbR7D4r+JXcwVxLGrAS7LwxVbYWEEO/Z/bX7J/Lg== - dependencies: - fs-extra "^9.1.0" - ssri "^9.0.1" - tar "^6.1.0" - -"@lerna/github-client@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-6.4.1.tgz" - integrity sha512-ridDMuzmjMNlcDmrGrV9mxqwUKzt9iYqCPwVYJlRYrnE3jxyg+RdooquqskVFj11djcY6xCV2Q2V1lUYwF+PmA== - dependencies: - "@lerna/child-process" "6.4.1" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^19.0.3" - git-url-parse "^13.1.0" - npmlog "^6.0.2" - -"@lerna/gitlab-client@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-6.4.1.tgz" - integrity sha512-AdLG4d+jbUvv0jQyygQUTNaTCNSMDxioJso6aAjQ/vkwyy3fBJ6FYzX74J4adSfOxC2MQZITFyuG+c9ggp7pyQ== - dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" - -"@lerna/global-options@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-6.4.1.tgz" - integrity sha512-UTXkt+bleBB8xPzxBPjaCN/v63yQdfssVjhgdbkQ//4kayaRA65LyEtJTi9rUrsLlIy9/rbeb+SAZUHg129fJg== - -"@lerna/has-npm-version@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-6.4.1.tgz" - integrity sha512-vW191w5iCkwNWWWcy4542ZOpjKYjcP/pU3o3+w6NM1J3yBjWZcNa8lfzQQgde2QkGyNi+i70o6wIca1o0sdKwg== - dependencies: - "@lerna/child-process" "6.4.1" - semver "^7.3.4" - -"@lerna/import@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/import/-/import-6.4.1.tgz" - integrity sha512-oDg8g1PNrCM1JESLsG3rQBtPC+/K9e4ohs0xDKt5E6p4l7dc0Ib4oo0oCCT/hGzZUlNwHxrc2q9JMRzSAn6P/Q== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/prompt" "6.4.1" - "@lerna/pulse-till-done" "6.4.1" - "@lerna/validation-error" "6.4.1" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" - -"@lerna/info@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/info/-/info-6.4.1.tgz" - integrity sha512-Ks4R7IndIr4vQXz+702gumPVhH6JVkshje0WKA3+ew2qzYZf68lU1sBe1OZsQJU3eeY2c60ax+bItSa7aaIHGw== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/output" "6.4.1" - envinfo "^7.7.4" - -"@lerna/init@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/init/-/init-6.4.1.tgz" - integrity sha512-CXd/s/xgj0ZTAoOVyolOTLW2BG7uQOhWW4P/ktlwwJr9s3c4H/z+Gj36UXw3q5X1xdR29NZt7Vc6fvROBZMjUQ== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/project" "6.4.1" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/link@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/link/-/link-6.4.1.tgz" - integrity sha512-O8Rt7MAZT/WT2AwrB/+HY76ktnXA9cDFO9rhyKWZGTHdplbzuJgfsGzu8Xv0Ind+w+a8xLfqtWGPlwiETnDyrw== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/package-graph" "6.4.1" - "@lerna/symlink-dependencies" "6.4.1" - "@lerna/validation-error" "6.4.1" - p-map "^4.0.0" - slash "^3.0.0" - -"@lerna/list@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/list/-/list-6.4.1.tgz" - integrity sha512-7a6AKgXgC4X7nK6twVPNrKCiDhrCiAhL/FE4u9HYhHqw9yFwyq8Qe/r1RVOkAOASNZzZ8GuBvob042bpunupCw== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/listable" "6.4.1" - "@lerna/output" "6.4.1" - -"@lerna/listable@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/listable/-/listable-6.4.1.tgz" - integrity sha512-L8ANeidM10aoF8aL3L/771Bb9r/TRkbEPzAiC8Iy2IBTYftS87E3rT/4k5KBEGYzMieSKJaskSFBV0OQGYV1Cw== - dependencies: - "@lerna/query-graph" "6.4.1" - chalk "^4.1.0" - columnify "^1.6.0" - -"@lerna/log-packed@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-6.4.1.tgz" - integrity sha512-Pwv7LnIgWqZH4vkM1rWTVF+pmWJu7d0ZhVwyhCaBJUsYbo+SyB2ZETGygo3Z/A+vZ/S7ImhEEKfIxU9bg5lScQ== - dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" - -"@lerna/npm-conf@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-6.4.1.tgz" - integrity sha512-Q+83uySGXYk3n1pYhvxtzyGwBGijYgYecgpiwRG1YNyaeGy+Mkrj19cyTWubT+rU/kM5c6If28+y9kdudvc7zQ== - dependencies: - config-chain "^1.1.12" - pify "^5.0.0" - -"@lerna/npm-dist-tag@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-6.4.1.tgz" - integrity sha512-If1Hn4q9fn0JWuBm455iIZDWE6Fsn4Nv8Tpqb+dYf0CtoT5Hn+iT64xSiU5XJw9Vc23IR7dIujkEXm2MVbnvZw== - dependencies: - "@lerna/otplease" "6.4.1" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - -"@lerna/npm-install@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-6.4.1.tgz" - integrity sha512-7gI1txMA9qTaT3iiuk/8/vL78wIhtbbOLhMf8m5yQ2G+3t47RUA8MNgUMsq4Zszw9C83drayqesyTf0u8BzVRg== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/get-npm-exec-opts" "6.4.1" - fs-extra "^9.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" - -"@lerna/npm-publish@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-6.4.1.tgz" - integrity sha512-lbNEg+pThPAD8lIgNArm63agtIuCBCF3umxvgTQeLzyqUX6EtGaKJFyz/6c2ANcAuf8UfU7WQxFFbOiolibXTQ== - dependencies: - "@lerna/otplease" "6.4.1" - "@lerna/run-lifecycle" "6.4.1" - fs-extra "^9.1.0" - libnpmpublish "^6.0.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^5.0.1" - -"@lerna/npm-run-script@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-6.4.1.tgz" - integrity sha512-HyvwuyhrGqDa1UbI+pPbI6v+wT6I34R0PW3WCADn6l59+AyqLOCUQQr+dMW7jdYNwjO6c/Ttbvj4W58EWsaGtQ== - dependencies: - "@lerna/child-process" "6.4.1" - "@lerna/get-npm-exec-opts" "6.4.1" - npmlog "^6.0.2" - -"@lerna/otplease@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-6.4.1.tgz" - integrity sha512-ePUciFfFdythHNMp8FP5K15R/CoGzSLVniJdD50qm76c4ATXZHnGCW2PGwoeAZCy4QTzhlhdBq78uN0wAs75GA== - dependencies: - "@lerna/prompt" "6.4.1" - -"@lerna/output@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/output/-/output-6.4.1.tgz" - integrity sha512-A1yRLF0bO+lhbIkrryRd6hGSD0wnyS1rTPOWJhScO/Zyv8vIPWhd2fZCLR1gI2d/Kt05qmK3T/zETTwloK7Fww== - dependencies: - npmlog "^6.0.2" - -"@lerna/pack-directory@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-6.4.1.tgz" - integrity sha512-kBtDL9bPP72/Nl7Gqa2CA3Odb8CYY1EF2jt801f+B37TqRLf57UXQom7yF3PbWPCPmhoU+8Fc4RMpUwSbFC46Q== - dependencies: - "@lerna/get-packed" "6.4.1" - "@lerna/package" "6.4.1" - "@lerna/run-lifecycle" "6.4.1" - "@lerna/temp-write" "6.4.1" - npm-packlist "^5.1.1" - npmlog "^6.0.2" - tar "^6.1.0" - -"@lerna/package-graph@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-6.4.1.tgz" - integrity sha512-fQvc59stRYOqxT3Mn7g/yI9/Kw5XetJoKcW5l8XeqKqcTNDURqKnN0qaNBY6lTTLOe4cR7gfXF2l1u3HOz0qEg== - dependencies: - "@lerna/prerelease-id-from-version" "6.4.1" - "@lerna/validation-error" "6.4.1" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - semver "^7.3.4" - -"@lerna/package@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/package/-/package-6.4.1.tgz" - integrity sha512-TrOah58RnwS9R8d3+WgFFTu5lqgZs7M+e1dvcRga7oSJeKscqpEK57G0xspvF3ycjfXQwRMmEtwPmpkeEVLMzA== - dependencies: - load-json-file "^6.2.0" - npm-package-arg "8.1.1" - write-pkg "^4.0.0" - -"@lerna/prerelease-id-from-version@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-6.4.1.tgz" - integrity sha512-uGicdMFrmfHXeC0FTosnUKRgUjrBJdZwrmw7ZWMb5DAJGOuTzrvJIcz5f0/eL3XqypC/7g+9DoTgKjX3hlxPZA== - dependencies: - semver "^7.3.4" - -"@lerna/profiler@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-6.4.1.tgz" - integrity sha512-dq2uQxcu0aq6eSoN+JwnvHoAnjtZAVngMvywz5bTAfzz/sSvIad1v8RCpJUMBQHxaPtbfiNvOIQgDZOmCBIM4g== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" - -"@lerna/project@6.4.1", "@lerna/project@^6.0.0": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/project/-/project-6.4.1.tgz" - integrity sha512-BPFYr4A0mNZ2jZymlcwwh7PfIC+I6r52xgGtJ4KIrIOB6mVKo9u30dgYJbUQxmSuMRTOnX7PJZttQQzSda4gEg== - dependencies: - "@lerna/package" "6.4.1" - "@lerna/validation-error" "6.4.1" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - js-yaml "^4.1.0" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" - -"@lerna/prompt@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-6.4.1.tgz" - integrity sha512-vMxCIgF9Vpe80PnargBGAdS/Ib58iYEcfkcXwo7mYBCxEVcaUJFKZ72FEW8rw+H5LkxBlzrBJyfKRoOe0ks9gQ== - dependencies: +"@lerna/create@8.2.2": + version "8.2.2" + resolved "https://registry.npmjs.org/@lerna/create/-/create-8.2.2.tgz#4c62f57eb74d335f908132dcc01828e53e6515bd" + integrity sha512-1yn1MvWn2Yz0SFgTTQnef2m1YedF7KwqLLVIOrGkgQrkVHzsveAIk1A1RcRa2yyUh+siKI1YcJ7lUZIEt+qQ3Q== + dependencies: + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + execa "5.0.0" + fs-extra "^11.2.0" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "6.0.3" inquirer "^8.2.4" - npmlog "^6.0.2" - -"@lerna/publish@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/publish/-/publish-6.4.1.tgz" - integrity sha512-/D/AECpw2VNMa1Nh4g29ddYKRIqygEV1ftV8PYXVlHpqWN7VaKrcbRU6pn0ldgpFlMyPtESfv1zS32F5CQ944w== - dependencies: - "@lerna/check-working-tree" "6.4.1" - "@lerna/child-process" "6.4.1" - "@lerna/collect-updates" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/describe-ref" "6.4.1" - "@lerna/log-packed" "6.4.1" - "@lerna/npm-conf" "6.4.1" - "@lerna/npm-dist-tag" "6.4.1" - "@lerna/npm-publish" "6.4.1" - "@lerna/otplease" "6.4.1" - "@lerna/output" "6.4.1" - "@lerna/pack-directory" "6.4.1" - "@lerna/prerelease-id-from-version" "6.4.1" - "@lerna/prompt" "6.4.1" - "@lerna/pulse-till-done" "6.4.1" - "@lerna/run-lifecycle" "6.4.1" - "@lerna/run-topologically" "6.4.1" - "@lerna/validation-error" "6.4.1" - "@lerna/version" "6.4.1" - fs-extra "^9.1.0" - libnpmaccess "^6.0.3" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.6.1" - semver "^7.3.4" - -"@lerna/pulse-till-done@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-6.4.1.tgz" - integrity sha512-efAkOC1UuiyqYBfrmhDBL6ufYtnpSqAG+lT4d/yk3CzJEJKkoCwh2Hb692kqHHQ5F74Uusc8tcRB7GBcfNZRWA== - dependencies: - npmlog "^6.0.2" - -"@lerna/query-graph@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-6.4.1.tgz" - integrity sha512-gBGZLgu2x6L4d4ZYDn4+d5rxT9RNBC+biOxi0QrbaIq83I+JpHVmFSmExXK3rcTritrQ3JT9NCqb+Yu9tL9adQ== - dependencies: - "@lerna/package-graph" "6.4.1" - -"@lerna/resolve-symlink@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-6.4.1.tgz" - integrity sha512-gnqltcwhWVLUxCuwXWe/ch9WWTxXRI7F0ZvCtIgdfOpbosm3f1g27VO1LjXeJN2i6ks03qqMowqy4xB4uMR9IA== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^3.0.0" - -"@lerna/rimraf-dir@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-6.4.1.tgz" - integrity sha512-5sDOmZmVj0iXIiEgdhCm0Prjg5q2SQQKtMd7ImimPtWKkV0IyJWxrepJFbeQoFj5xBQF7QB5jlVNEfQfKhD6pQ== - dependencies: - "@lerna/child-process" "6.4.1" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" - -"@lerna/run-lifecycle@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-6.4.1.tgz" - integrity sha512-42VopI8NC8uVCZ3YPwbTycGVBSgukJltW5Saein0m7TIqFjwSfrcP0n7QJOr+WAu9uQkk+2kBstF5WmvKiqgEA== - dependencies: - "@lerna/npm-conf" "6.4.1" - "@npmcli/run-script" "^4.1.7" - npmlog "^6.0.2" - p-queue "^6.6.2" - -"@lerna/run-topologically@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-6.4.1.tgz" - integrity sha512-gXlnAsYrjs6KIUGDnHM8M8nt30Amxq3r0lSCNAt+vEu2sMMEOh9lffGGaJobJZ4bdwoXnKay3uER/TU8E9owMw== - dependencies: - "@lerna/query-graph" "6.4.1" - p-queue "^6.6.2" - -"@lerna/run@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/run/-/run-6.4.1.tgz" - integrity sha512-HRw7kS6KNqTxqntFiFXPEeBEct08NjnL6xKbbOV6pXXf+lXUQbJlF8S7t6UYqeWgTZ4iU9caIxtZIY+EpW93mQ== - dependencies: - "@lerna/command" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/npm-run-script" "6.4.1" - "@lerna/output" "6.4.1" - "@lerna/profiler" "6.4.1" - "@lerna/run-topologically" "6.4.1" - "@lerna/timer" "6.4.1" - "@lerna/validation-error" "6.4.1" - fs-extra "^9.1.0" - nx ">=15.4.2 < 16" - p-map "^4.0.0" - -"@lerna/symlink-binary@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-6.4.1.tgz" - integrity sha512-poZX90VmXRjL/JTvxaUQPeMDxFUIQvhBkHnH+dwW0RjsHB/2Tu4QUAsE0OlFnlWQGsAtXF4FTtW8Xs57E/19Kw== - dependencies: - "@lerna/create-symlink" "6.4.1" - "@lerna/package" "6.4.1" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-dependencies@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-6.4.1.tgz" - integrity sha512-43W2uLlpn3TTYuHVeO/2A6uiTZg6TOk/OSKi21ujD7IfVIYcRYCwCV+8LPP12R3rzyab0JWkWnhp80Z8A2Uykw== - dependencies: - "@lerna/create-symlink" "6.4.1" - "@lerna/resolve-symlink" "6.4.1" - "@lerna/symlink-binary" "6.4.1" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - -"@lerna/temp-write@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-6.4.1.tgz" - integrity sha512-7uiGFVoTyos5xXbVQg4bG18qVEn9dFmboXCcHbMj5mc/+/QmU9QeNz/Cq36O5TY6gBbLnyj3lfL5PhzERWKMFg== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" - -"@lerna/timer@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/timer/-/timer-6.4.1.tgz" - integrity sha512-ogmjFTWwRvevZr76a2sAbhmu3Ut2x73nDIn0bcwZwZ3Qc3pHD8eITdjs/wIKkHse3J7l3TO5BFJPnrvDS7HLnw== - -"@lerna/validation-error@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-6.4.1.tgz" - integrity sha512-fxfJvl3VgFd7eBfVMRX6Yal9omDLs2mcGKkNYeCEyt4Uwlz1B5tPAXyk/sNMfkKV2Aat/mlK5tnY13vUrMKkyA== - dependencies: - npmlog "^6.0.2" - -"@lerna/version@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/version/-/version-6.4.1.tgz" - integrity sha512-1/krPq0PtEqDXtaaZsVuKev9pXJCkNC1vOo2qCcn6PBkODw/QTAvGcUi0I+BM2c//pdxge9/gfmbDo1lC8RtAQ== - dependencies: - "@lerna/check-working-tree" "6.4.1" - "@lerna/child-process" "6.4.1" - "@lerna/collect-updates" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/conventional-commits" "6.4.1" - "@lerna/github-client" "6.4.1" - "@lerna/gitlab-client" "6.4.1" - "@lerna/output" "6.4.1" - "@lerna/prerelease-id-from-version" "6.4.1" - "@lerna/prompt" "6.4.1" - "@lerna/run-lifecycle" "6.4.1" - "@lerna/run-topologically" "6.4.1" - "@lerna/temp-write" "6.4.1" - "@lerna/validation-error" "6.4.1" - "@nrwl/devkit" ">=15.4.2 < 16" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" p-reduce "^2.1.0" - p-waterfall "^2.1.1" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" semver "^7.3.4" + set-blocking "^2.0.0" + signal-exit "3.0.7" slash "^3.0.0" - write-json-file "^4.3.0" - -"@lerna/write-log-file@6.4.1": - version "6.4.1" - resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-6.4.1.tgz" - integrity sha512-LE4fueQSDrQo76F4/gFXL0wnGhqdG7WHVH8D8TrKouF2Afl4NHltObCm4WsSMPjcfciVnZQFfx1ruxU4r/enHQ== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^4.0.1" + ssri "^10.0.6" + string-width "^4.2.3" + strong-log-transformer "2.1.0" + tar "6.2.1" + temp-dir "1.0.0" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" -"@ljharb/through@^2.3.12": - version "2.3.12" - resolved "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz#c418c43060eee193adce48b15c2206096a28e9ea" - integrity sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g== +"@napi-rs/wasm-runtime@0.2.4": + version "0.2.4" + resolved "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" + integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== dependencies: - call-bind "^1.0.5" + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1326,296 +895,350 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@5.3.0": - version "5.3.0" - resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" - integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/arborist@7.5.4": + version "7.5.4" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" + integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.0" - cacache "^16.0.6" + "@npmcli/fs" "^3.1.1" + "@npmcli/installed-package-contents" "^2.1.0" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.1.1" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.1.0" + "@npmcli/query" "^3.1.0" + "@npmcli/redact" "^2.0.0" + "@npmcli/run-script" "^8.1.0" + bin-links "^4.0.4" + cacache "^18.0.3" common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" + hosted-git-info "^7.0.2" + json-parse-even-better-errors "^3.0.2" json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" + lru-cache "^10.2.2" + minimatch "^9.0.4" + nopt "^7.2.1" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.2" + npm-pick-manifest "^9.0.1" + npm-registry-fetch "^17.0.1" + pacote "^18.0.6" + parse-conflict-json "^3.0.0" + proc-log "^4.2.0" + proggy "^2.0.0" promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" + promise-call-limit "^3.0.1" + read-package-json-fast "^3.0.2" semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" + ssri "^10.0.6" + treeverse "^3.0.0" + walk-up-path "^3.0.1" -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== +"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== dependencies: - "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" +"@npmcli/git@^5.0.0": + version "5.0.8" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" + integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + ini "^4.1.3" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^4.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" - which "^2.0.2" + which "^4.0.0" -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" + integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" -"@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== +"@npmcli/map-workspaces@^3.0.2": + version "3.0.6" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" + integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== +"@npmcli/metavuln-calculator@^7.1.1": + version "7.1.1" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" + integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^18.0.0" + proc-log "^4.1.0" semver "^7.3.5" -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== +"@npmcli/package-json@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" + integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== +"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": + version "5.2.1" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" + integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== dependencies: - json-parse-even-better-errors "^2.3.1" + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== +"@npmcli/promise-spawn@^7.0.0": + version "7.0.2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" + integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== dependencies: - infer-owner "^1.0.4" + which "^4.0.0" -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - version "4.2.1" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== +"@npmcli/query@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" + integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" + postcss-selector-parser "^6.0.10" + +"@npmcli/redact@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" + integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== -"@nrwl/cli@15.4.8": - version "15.4.8" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-15.4.8.tgz" - integrity sha512-6QxrgGYvD5cxzYVH0hn6U0SzabeFdzBspdk8WcBYuOYNd57NUTbxDY9YnB9LQ1Rgs32EWtX3kg3mzYpub4Ra/w== +"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": + version "8.1.0" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" + integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== dependencies: - nx "15.4.8" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + proc-log "^4.0.0" + which "^4.0.0" -"@nrwl/devkit@>=15.4.2 < 16": - version "15.4.8" - resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.4.8.tgz" - integrity sha512-m53JBLPmj4fFsZQw8yWFhtmwqMnEDGApGv0Xm8VzVOfYL7HcinylZi9RNxYlRzWC8fqD/gF0yNn/gOmCK7IWWw== +"@nx/devkit@>=17.1.2 < 21": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/devkit/-/devkit-20.7.2.tgz#04c3017f25beb0895ece02fa0c8071a87d8e6b67" + integrity sha512-6qsQ49T1hWQ8s4JMvGX9k3tpjY4kwr+/2CE1ZCy1txJVFflDatJxdV3fMqUDqo6n81yB6AmVqoSQjQkO6fCRRQ== dependencies: - "@phenomnomnominal/tsquery" "4.1.1" ejs "^3.1.7" + enquirer "~2.3.6" ignore "^5.0.4" - semver "7.3.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" tslib "^2.3.0" + yargs-parser "21.1.1" -"@nrwl/tao@15.4.8": - version "15.4.8" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-15.4.8.tgz" - integrity sha512-XajgVKDWHW4NcMxpBg7hC9nMkyujnmVNLZvBfURFPNY2wetFWz8xpyvflq3oLm+veGm7M/TbnPLOLuHI2223nA== - dependencies: - nx "15.4.8" - -"@octokit/auth-token@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" - integrity sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q== - dependencies: - "@octokit/types" "^8.0.0" +"@nx/nx-darwin-arm64@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.7.2.tgz#dd5de7f0985a611762c511cb4748656b2e11c24c" + integrity sha512-ejcAkFpKUR8rsmL86NjBA8WwUf5RlxxlS/3Vz6V59ZJVPsjxsTephyV8z+y8WEyWP4GaDycsc608Me8kijp5EQ== + +"@nx/nx-darwin-x64@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.7.2.tgz#781cdfc0f7bba31c16dc76b43089542b7dcd5406" + integrity sha512-e9FC7QMolZ+RslMOzm4x9ysIIsaTo3Bojcmt6IZ0WofjPqWTvHyMK95Gwz1I3qt0PDygKS5qtmlI1ganybyfpQ== + +"@nx/nx-freebsd-x64@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.7.2.tgz#18ef1fe3d7bd02f5c9a553b10ae55e62916471ed" + integrity sha512-KJ9bqwiOeZPXLvCecfFsFtuSxccZ+0wC/waDGY0Ds2bSevNyb3P3c3HoZJskyQj+roZ5IlawKPO9brE6SKAS9A== + +"@nx/nx-linux-arm-gnueabihf@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.7.2.tgz#ec64e62337425932d889a29fb7478d99f1f7813a" + integrity sha512-2j7z7rS7NEtvfosLZn6pzr+WnDQ/XtW3a+o/XMgcD8PkfWFOiAzK1DL8DvXE3G1MJq62jSzw+euahpYHLIkH0w== + +"@nx/nx-linux-arm64-gnu@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.7.2.tgz#08117000a5c88bdeb3fab5f387615f036017e198" + integrity sha512-tIgHCRe9M4SZ+seG98jE/FoG4/pfvGoEny/TV5V0tYvpMfUlKAU0GdcnP6YZCrQR9iRF6ZsuCZbPf7IuACyXdA== + +"@nx/nx-linux-arm64-musl@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.7.2.tgz#eeedf7360f173f84e8209646c7e40a480235e810" + integrity sha512-/r4TNzyjhic7DZei6DXfbsfONDp40LbHjn/XcrJ53yI1UHGFunUUQYEDeBbgOcqs0IkRitNSgTDgpkG9UvJ65Q== + +"@nx/nx-linux-x64-gnu@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.7.2.tgz#769a0304e68a5f623fdb4fc4f33b0fb3d9bb8120" + integrity sha512-s/cMSJlJeF+Io+3bWy+wJSemBwKL/IAcXUxLXRSDuaPXv7AoDWctmbfcyLqQJ7Ufcioivvil0XTtD/vkJI0x3A== + +"@nx/nx-linux-x64-musl@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.7.2.tgz#71f6af2a74e5067466b22a2c08294a0f265d7088" + integrity sha512-9ZdPQwD4LDhwMOQ1NyYRDNr+6FVOdFeibkO+nN4nhkNBFxK6w2iprebrUKeOvQ1yHttt2YSC5p9bqxP7DVtE7w== + +"@nx/nx-win32-arm64-msvc@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.7.2.tgz#bc1d1cbc5a0245c0e10554e4003bdbc7315706ab" + integrity sha512-fSd44rmECiw/HZD9f0mNPRF8zwtx3N3TNU7CRohZtRBVotUgOuQU1XONi1J0V117g8q4VQmmaAO9eMdVxM2ZuQ== + +"@nx/nx-win32-x64-msvc@20.7.2": + version "20.7.2" + resolved "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.7.2.tgz#786997f2a082fb70aad74057d4a58811391cf37b" + integrity sha512-/ApoP28ztk/MSNGHnZ/t4bfvjHwU5kmQan2O3aTOj84vZHOlIk57SncVeCsVnT4XQihNjaSw3cbqLi2PZ+rRUw== + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== -"@octokit/core@^4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz" - integrity sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" +"@octokit/core@^5.0.2": + version "5.2.1" + resolved "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz#58c21a5f689ee81e0b883b5aa77573a7ff1b4ea1" + integrity sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" -"@octokit/endpoint@^7.0.0": - version "7.0.3" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz" - integrity sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw== +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== dependencies: - "@octokit/types" "^8.0.0" - is-plain-object "^5.0.0" + "@octokit/types" "^13.1.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^5.0.0": - version "5.0.4" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz" - integrity sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A== +"@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^8.0.0" + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== -"@octokit/plugin-enterprise-rest@^6.0.1": +"@octokit/plugin-enterprise-rest@6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== -"@octokit/plugin-paginate-rest@^5.0.0": - version "5.0.1" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz" - integrity sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw== +"@octokit/plugin-paginate-rest@11.4.4-cjs.2": + version "11.4.4-cjs.2" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz#979a10d577bce7a393e8e65953887e42b0a05000" + integrity sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw== dependencies: - "@octokit/types" "^8.0.0" + "@octokit/types" "^13.7.0" -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958" + integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA== -"@octokit/plugin-rest-endpoint-methods@^6.7.0": - version "6.7.0" - resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz" - integrity sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw== +"@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1": + version "13.3.2-cjs.1" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz#d0a142ff41d8f7892b6ccef45979049f51ecaa8d" + integrity sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ== dependencies: - "@octokit/types" "^8.0.0" - deprecation "^2.3.1" + "@octokit/types" "^13.8.0" -"@octokit/request-error@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz" - integrity sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg== +"@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== dependencies: - "@octokit/types" "^8.0.0" + "@octokit/types" "^13.1.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^6.0.0": - version "6.2.2" - resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz" - integrity sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.3": - version "19.0.5" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz" - integrity sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow== +"@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^5.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.7.0" + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" -"@octokit/types@^8.0.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-8.1.0.tgz" - integrity sha512-N4nLjzkiWBqVQqljTTsCrbvHGoWdWfcCeZjbHdggw7a9HbJMnxbK8A+UWdqwR4out30JarlSa3eqKyVK0n5aBg== +"@octokit/rest@20.1.2": + version "20.1.2" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz#1d74d0c72ade0d64f7c5416448d5c885f5e3ccc4" + integrity sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA== dependencies: - "@octokit/openapi-types" "^14.0.0" + "@octokit/core" "^5.0.2" + "@octokit/plugin-paginate-rest" "11.4.4-cjs.2" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.10.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - -"@phenomnomnominal/tsquery@4.1.1": - version "4.1.1" - resolved "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz" - integrity sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ== - dependencies: - esquery "^1.0.1" + "@octokit/openapi-types" "^24.2.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" @@ -1627,10 +1250,10 @@ resolved "https://registry.npmjs.org/@pnpm/constants/-/constants-7.1.1.tgz#3db261425fe15425aa213a2b003f4f60c9378b43" integrity sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw== -"@pnpm/error@5.0.2": - version "5.0.2" - resolved "https://registry.npmjs.org/@pnpm/error/-/error-5.0.2.tgz#153d18fe9eeaeb02e48e9dc45b042f4c962b3822" - integrity sha512-0TEm+tWNYm+9uh6DSKyRbv8pv/6b4NL0PastLvMxIoqZbBZ5Zj1cYi332R9xsSUi31ZOsu2wpgn/bC7DA9hrjg== +"@pnpm/error@5.0.3": + version "5.0.3" + resolved "https://registry.npmjs.org/@pnpm/error/-/error-5.0.3.tgz#4dbb9f4acb0b30c373b3ca5024cdf495f03f4380" + integrity sha512-ONJU5cUeoeJSy50qOYsMZQHTA/9QKmGgh1ATfEpCLgtbdwqUiwD9MxHNeXUYYI/pocBCz6r1ZCFqiQvO+8SUKA== dependencies: "@pnpm/constants" "7.1.1" @@ -1642,12 +1265,12 @@ graceful-fs "^4.2.11" "@pnpm/read-project-manifest@^5.0.10": - version "5.0.10" - resolved "https://registry.npmjs.org/@pnpm/read-project-manifest/-/read-project-manifest-5.0.10.tgz#b6c99b5612a598dfebb133779a8e6456d360c30f" - integrity sha512-LgZ4QVrfITJP4kmcpKJOb5y7lZmTYu/CyeH1lHRxVSN76wfbRClInq/WglxAFQMGORopV44ESjhiaokjtqW9yA== + version "5.0.11" + resolved "https://registry.npmjs.org/@pnpm/read-project-manifest/-/read-project-manifest-5.0.11.tgz#50bc7bc7183bc49ae85925edb93836db63d5bb6a" + integrity sha512-themRLiDt9Ud6Somlu0PJbeprBBQEhlI1xNG5bZIv26yfLsc1vYLd1TfgGViD1b8fP0jxAqsUrDM+WMaMKI+gw== dependencies: "@gwhitney/detect-indent" "7.0.1" - "@pnpm/error" "5.0.2" + "@pnpm/error" "5.0.3" "@pnpm/graceful-fs" "3.2.0" "@pnpm/text.comments-parser" "2.0.0" "@pnpm/types" "9.4.2" @@ -1684,201 +1307,456 @@ write-file-atomic "^5.0.1" write-yaml-file "^5.0.0" -"@rollup/rollup-android-arm-eabi@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" - integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== - -"@rollup/rollup-android-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" - integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== - -"@rollup/rollup-darwin-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" - integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== - -"@rollup/rollup-darwin-x64@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" - integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" - integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== - -"@rollup/rollup-linux-arm64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" - integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== - -"@rollup/rollup-linux-arm64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" - integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== - -"@rollup/rollup-linux-riscv64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" - integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== - -"@rollup/rollup-linux-x64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" - integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== - -"@rollup/rollup-linux-x64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" - integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== - -"@rollup/rollup-win32-arm64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" - integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== - -"@rollup/rollup-win32-ia32-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" - integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== - -"@rollup/rollup-win32-x64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" - integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== - -"@shikijs/core@1.1.6", "@shikijs/core@^1.1.5": - version "1.1.6" - resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.1.6.tgz#a30e0bd836d04ec6cc1736d35b08de5e7000c241" - integrity sha512-kt9hhvrWTm0EPtRDIsoAZnSsFlIDBVBBI5CQewpA/NZCPin+MOKRXg+JiWc4y+8fZ/v0HzfDhu/UC+OTZGMt7A== - -"@shikijs/transformers@^1.1.5": - version "1.1.6" - resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.1.6.tgz#93d5e26e0e375f62f01177d95a7ee99f6ccd2ad6" - integrity sha512-R+eI1I9sQv0MCJyfR4kAG1G1SKSctw5ILszP0tHVrAgzSHWTpaHbXreZrDueahqtUCNHjt+MKmKJ8EMFtiitOQ== - dependencies: - shiki "1.1.6" +"@rollup/rollup-android-arm-eabi@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz#661a45a4709c70e59e596ec78daa9cb8b8d27604" + integrity sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA== + +"@rollup/rollup-android-arm-eabi@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz#d964ee8ce4d18acf9358f96adc408689b6e27fe3" + integrity sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg== + +"@rollup/rollup-android-arm64@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz#128fe8dd510d880cf98b4cb6c7add326815a0c4b" + integrity sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg== + +"@rollup/rollup-android-arm64@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz#9b5e130ecc32a5fc1e96c09ff371743ee71a62d3" + integrity sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w== + +"@rollup/rollup-darwin-arm64@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz#363467bc49fd0b1e17075798ac8e9ad1e1e29535" + integrity sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ== + +"@rollup/rollup-darwin-arm64@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz#ef439182c739b20b3c4398cfc03e3c1249ac8903" + integrity sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ== + +"@rollup/rollup-darwin-x64@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz#c2fe3d85fffe47f0ed0f076b3563ada22c8af19c" + integrity sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q== + +"@rollup/rollup-darwin-x64@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz#d7380c1531ab0420ca3be16f17018ef72dd3d504" + integrity sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA== + +"@rollup/rollup-freebsd-arm64@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz#d95bd8f6eaaf829781144fc8bd2d5d71d9f6a9f5" + integrity sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw== + +"@rollup/rollup-freebsd-arm64@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz#cbcbd7248823c6b430ce543c59906dd3c6df0936" + integrity sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg== + +"@rollup/rollup-freebsd-x64@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz#c3576c6011656e4966ded29f051edec636b44564" + integrity sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g== + +"@rollup/rollup-freebsd-x64@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz#96bf6ff875bab5219c3472c95fa6eb992586a93b" + integrity sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw== + +"@rollup/rollup-linux-arm-gnueabihf@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz#48c87d0dee4f8dc9591a416717f91b4a89d77e3d" + integrity sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg== + +"@rollup/rollup-linux-arm-gnueabihf@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz#d80cd62ce6d40f8e611008d8dbf03b5e6bbf009c" + integrity sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA== + +"@rollup/rollup-linux-arm-musleabihf@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz#f4c4e7c03a7767f2e5aa9d0c5cfbf5c0f59f2d41" + integrity sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA== + +"@rollup/rollup-linux-arm-musleabihf@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz#75440cfc1e8d0f87a239b4c31dfeaf4719b656b7" + integrity sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg== + +"@rollup/rollup-linux-arm64-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz#1015c9d07a99005025d13b8622b7600029d0b52f" + integrity sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw== + +"@rollup/rollup-linux-arm64-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz#ac527485ecbb619247fb08253ec8c551a0712e7c" + integrity sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg== + +"@rollup/rollup-linux-arm64-musl@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz#8f895eb5577748fc75af21beae32439626e0a14c" + integrity sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A== + +"@rollup/rollup-linux-arm64-musl@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz#74d2b5cb11cf714cd7d1682e7c8b39140e908552" + integrity sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ== + +"@rollup/rollup-linux-loongarch64-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz#c9cd5dbbdc6b3ca4dbeeb0337498cf31949004a0" + integrity sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg== + +"@rollup/rollup-linux-loongarch64-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz#a0a310e51da0b5fea0e944b0abd4be899819aef6" + integrity sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz#7ebb5b4441faa17843a210f7d0583a20c93b40e4" + integrity sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz#4077e2862b0ac9f61916d6b474d988171bd43b83" + integrity sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw== + +"@rollup/rollup-linux-riscv64-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz#10f5d7349fbd2fe78f9e36ecc90aab3154435c8d" + integrity sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg== + +"@rollup/rollup-linux-riscv64-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz#5812a1a7a2f9581cbe12597307cc7ba3321cf2f3" + integrity sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA== + +"@rollup/rollup-linux-riscv64-musl@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz#973aaaf4adef4531375c36616de4e01647f90039" + integrity sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ== + +"@rollup/rollup-linux-s390x-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz#196347d2fa20593ab09d0b7e2589fb69bdf742c6" + integrity sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ== + +"@rollup/rollup-linux-s390x-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz#9bad59e907ba5bfcf3e9dbd0247dfe583112f70b" + integrity sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw== + +"@rollup/rollup-linux-x64-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz#7193cbd8d128212b8acda37e01b39d9e96259ef8" + integrity sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A== + +"@rollup/rollup-linux-x64-gnu@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz#68b045a720bd9b4d905f462b997590c2190a6de0" + integrity sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ== + +"@rollup/rollup-linux-x64-musl@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz#29a6867278ca0420b891574cfab98ecad70c59d1" + integrity sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA== + +"@rollup/rollup-linux-x64-musl@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz#8e703e2c2ad19ba7b2cb3d8c3a4ad11d4ee3a282" + integrity sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw== + +"@rollup/rollup-win32-arm64-msvc@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz#89427dcac0c8e3a6d32b13a03a296a275d0de9a9" + integrity sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q== + +"@rollup/rollup-win32-arm64-msvc@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz#c5bee19fa670ff5da5f066be6a58b4568e9c650b" + integrity sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ== + +"@rollup/rollup-win32-ia32-msvc@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz#ecb9711ba2b6d2bf6ee51265abe057ab90913deb" + integrity sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w== + +"@rollup/rollup-win32-ia32-msvc@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz#846e02c17044bd922f6f483a3b4d36aac6e2b921" + integrity sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA== + +"@rollup/rollup-win32-x64-msvc@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz#1973871850856ae72bc678aeb066ab952330e923" + integrity sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw== + +"@rollup/rollup-win32-x64-msvc@4.40.0": + version "4.40.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz#fd92d31a2931483c25677b9c6698106490cbbc76" + integrity sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@shikijs/core@2.5.0", "@shikijs/core@^2.1.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz#e14d33961dfa3141393d4a76fc8923d0d1c4b62f" + integrity sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg== + dependencies: + "@shikijs/engine-javascript" "2.5.0" + "@shikijs/engine-oniguruma" "2.5.0" + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.4" + +"@shikijs/engine-javascript@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz#e045c6ecfbda6c99137547b0a482e0b87f1053fc" + integrity sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w== + dependencies: + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^3.1.0" + +"@shikijs/engine-oniguruma@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz#230de5693cc1da6c9d59c7ad83593c2027274817" + integrity sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw== + dependencies: + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + +"@shikijs/langs@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz#97ab50c495922cc1ca06e192985b28dc73de5d50" + integrity sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w== + dependencies: + "@shikijs/types" "2.5.0" + +"@shikijs/themes@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz#8c6aecf73f5455681c8bec15797cf678162896cb" + integrity sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw== + dependencies: + "@shikijs/types" "2.5.0" + +"@shikijs/transformers@^2.1.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz#190c84786ff06c417580ab79177338a947168c55" + integrity sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg== + dependencies: + "@shikijs/core" "2.5.0" + "@shikijs/types" "2.5.0" + +"@shikijs/types@2.5.0", "@shikijs/types@^2.1.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz#e949c7384802703a48b9d6425dd41673c164df69" + integrity sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw== + dependencies: + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.2": + version "10.0.2" + resolved "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" + integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== + +"@sigstore/bundle@^2.3.2": + version "2.3.2" + resolved "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" + integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + +"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" + integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== + +"@sigstore/protobuf-specs@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" + integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== + +"@sigstore/sign@^2.3.2": + version "2.3.2" + resolved "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" + integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + make-fetch-happen "^13.0.1" + proc-log "^4.2.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^2.3.4": + version "2.3.4" + resolved "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" + integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + tuf-js "^2.2.1" + +"@sigstore/verify@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" + integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.1.0" + "@sigstore/protobuf-specs" "^0.3.2" "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + version "3.0.1" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": version "10.3.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" -"@swc/core-darwin-arm64@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz#3b5677c5b9c5a7a91d953b96cd603c94064e2835" - integrity sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw== - -"@swc/core-darwin-x64@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz#bbc8bbf420389b12541151255a50f319cc17ef96" - integrity sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ== - -"@swc/core-linux-arm-gnueabihf@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz#aa9a18f130820717df08c9dd882043fc47e8d35a" - integrity sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ== - -"@swc/core-linux-arm64-gnu@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz#5ef1de0ca7cc3a034aa3a1c3c1794b78e6ca207e" - integrity sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA== - -"@swc/core-linux-arm64-musl@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz#5dfd2a8c0483770a307de0ccb6019a082ff0d902" - integrity sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw== - -"@swc/core-linux-x64-gnu@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz#314aa76b7c1208e315e3156ab57b7188fb605bc2" - integrity sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg== - -"@swc/core-linux-x64-musl@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz#b2b226657f6a8d48f561cb3dbe2d414cfbafe467" - integrity sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ== - -"@swc/core-win32-arm64-msvc@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz#582f79fa328ce0f426ab8313b3d881e7315fab2f" - integrity sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ== - -"@swc/core-win32-ia32-msvc@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz#15c8289e1c18857f79b9b888100ab1f871bf58f6" - integrity sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA== - -"@swc/core-win32-x64-msvc@1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz#c999ca7b68124d058b40a1431cdd6f56779670d5" - integrity sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw== - -"@swc/core@^1.4.2": - version "1.4.2" - resolved "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz#310b0d5e93e47ca72f54150c8f9efcb434c39b17" - integrity sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg== - dependencies: - "@swc/counter" "^0.1.2" - "@swc/types" "^0.1.5" +"@swc/core-darwin-arm64@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.24.tgz#c9fcc9c4bad0511fed26210449556d2b33fb2d9a" + integrity sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA== + +"@swc/core-darwin-x64@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.24.tgz#048ea3ee43281264a62fccb5a944b76d1c56eb24" + integrity sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ== + +"@swc/core-linux-arm-gnueabihf@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.24.tgz#f01ba657a81c67d8fb9f681712e65abf1324cec6" + integrity sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw== + +"@swc/core-linux-arm64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.24.tgz#9aefca7f7f87c8312c2fa714c1eb731411d8596c" + integrity sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg== + +"@swc/core-linux-arm64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.24.tgz#e4805484779bbc59b639eab4f8e45166f3d7a4f7" + integrity sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw== + +"@swc/core-linux-x64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.24.tgz#e8d8cc50a49903880944379590b73733e150a5d4" + integrity sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg== + +"@swc/core-linux-x64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.24.tgz#f3c46212eb8a793f6a42a36b2a9017a9b1462737" + integrity sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw== + +"@swc/core-win32-arm64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.24.tgz#b1c3327d81a5f94415ac0b1713e192df1c121fbd" + integrity sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ== + +"@swc/core-win32-ia32-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.24.tgz#6a944dd6111ec5fae3cf5925b73701e49b109edc" + integrity sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ== + +"@swc/core-win32-x64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.24.tgz#eebb5d5ece2710aeb25cc58bd7c5c4c2c046f030" + integrity sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w== + +"@swc/core@^1.10.1": + version "1.11.24" + resolved "https://registry.npmjs.org/@swc/core/-/core-1.11.24.tgz#340425648296964f815c940b8da00fcdb1ff2abd" + integrity sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.21" optionalDependencies: - "@swc/core-darwin-arm64" "1.4.2" - "@swc/core-darwin-x64" "1.4.2" - "@swc/core-linux-arm-gnueabihf" "1.4.2" - "@swc/core-linux-arm64-gnu" "1.4.2" - "@swc/core-linux-arm64-musl" "1.4.2" - "@swc/core-linux-x64-gnu" "1.4.2" - "@swc/core-linux-x64-musl" "1.4.2" - "@swc/core-win32-arm64-msvc" "1.4.2" - "@swc/core-win32-ia32-msvc" "1.4.2" - "@swc/core-win32-x64-msvc" "1.4.2" - -"@swc/counter@^0.1.2": + "@swc/core-darwin-arm64" "1.11.24" + "@swc/core-darwin-x64" "1.11.24" + "@swc/core-linux-arm-gnueabihf" "1.11.24" + "@swc/core-linux-arm64-gnu" "1.11.24" + "@swc/core-linux-arm64-musl" "1.11.24" + "@swc/core-linux-x64-gnu" "1.11.24" + "@swc/core-linux-x64-musl" "1.11.24" + "@swc/core-win32-arm64-msvc" "1.11.24" + "@swc/core-win32-ia32-msvc" "1.11.24" + "@swc/core-win32-x64-msvc" "1.11.24" + +"@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== +"@swc/types@^0.1.21": + version "0.1.21" + resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz#6fcadbeca1d8bc89e1ab3de4948cef12344a38c0" + integrity sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ== + dependencies: + "@swc/counter" "^0.1.3" -"@tootallnate/once@2": +"@tufjs/canonical-json@2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== -"@types/conventional-commits-parser@^3.0.6": - version "3.0.6" - resolved "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-3.0.6.tgz" - integrity sha512-z4crlplLzL9uA5kbE4ZghAf5RbrEr1UL/uNGGgxYbJjI0jRBjuYKuasbo13ANZsSapLTM2DLZk6LDcjemow4qQ== +"@tufjs/models@2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" + integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.4" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/conventional-commits-parser@^5.0.0": + version "5.0.1" + resolved "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz#8cb81cf170853496cbc501a3b32dcf5e46ffb61a" + integrity sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ== dependencies: "@types/node" "*" -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/estree@1.0.7", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.7" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== "@types/fs-extra@^11.0.3": version "11.0.4" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== dependencies: "@types/jsonfile" "*" @@ -1886,19 +1764,26 @@ "@types/git-raw-commits@^2.0.3": version "2.0.4" - resolved "https://registry.npmjs.org/@types/git-raw-commits/-/git-raw-commits-2.0.4.tgz" + resolved "https://registry.npmjs.org/@types/git-raw-commits/-/git-raw-commits-2.0.4.tgz#29a77a82043b7baaba823f8b34ab10191df138e9" integrity sha512-PYmTK156j6TilbwtnO2JErH4TCC1izpgP3kRE3KUX35bjBOD2A+syCGeercqHXBcM6wL+DU0WbJB2Gz8fPR+8A== dependencies: "@types/node" "*" "@types/glob@^8.1.0": version "8.1.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz" + resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: "@types/minimatch" "^5.1.2" "@types/node" "*" +"@types/hast@^3.0.0", "@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/inquirer@^9.0.7": version "9.0.7" resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz#61bb8d0e42f038b9a1738b08fba7fa98ad9b4b24" @@ -1909,183 +1794,192 @@ "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.15": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/jsonfile@*": - version "6.1.1" - resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz" - integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png== + version "6.1.4" + resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz#614afec1a1164e7d670b4a7ad64df3e7beb7b702" + integrity sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ== dependencies: "@types/node" "*" -"@types/linkify-it@*": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" - integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== "@types/lodash.camelcase@^4.3.8": version "4.3.9" - resolved "https://registry.npmjs.org/@types/lodash.camelcase/-/lodash.camelcase-4.3.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.camelcase/-/lodash.camelcase-4.3.9.tgz#da7b65013d6914fecb8759d5220a6ca9b658ee23" integrity sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg== dependencies: "@types/lodash" "*" "@types/lodash.isfunction@^3.0.8": version "3.0.9" - resolved "https://registry.npmjs.org/@types/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#527e51ab6638b38c65a03ec218232b1a787cc9bc" integrity sha512-BLaDvlY09jnPND1wxlGXPrPl2CN4M7qGRah7Tb/rtB1vnLyZmtcw3FRPSUkDsd5n4e+2E5BBrr0ICfYR+S4hZQ== dependencies: "@types/lodash" "*" "@types/lodash.isplainobject@^4.0.8": version "4.0.9" - resolved "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.9.tgz#3e0159c1598d96af2372151ed65f2792b61787e4" integrity sha512-QC8nKcap5hRrbtIaPRjUMlcXXnLeayqQZPSaWJDx3xeuN17+2PW5wkmEJ4+lZgNnQRlSPzxjTYKCfV1uTnPaEg== dependencies: "@types/lodash" "*" "@types/lodash.kebabcase@^4.1.8": version "4.1.9" - resolved "https://registry.npmjs.org/@types/lodash.kebabcase/-/lodash.kebabcase-4.1.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.kebabcase/-/lodash.kebabcase-4.1.9.tgz#48d3df753b89499e75eba5e017979b560d69df85" integrity sha512-kPrrmcVOhSsjAVRovN0lRfrbuidfg0wYsrQa5IYuoQO1fpHHGSme66oyiYA/5eQPVl8Z95OA3HG0+d2SvYC85w== dependencies: "@types/lodash" "*" "@types/lodash.merge@^4.6.8": version "4.6.9" - resolved "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz#93e94796997ed9a3ebe9ccf071ccaec4c6bc8fb8" integrity sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ== dependencies: "@types/lodash" "*" "@types/lodash.mergewith@^4.6.8": version "4.6.9" - resolved "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz#7093028a36de3cae4495d03b9d92c351cab1f8bf" integrity sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw== dependencies: "@types/lodash" "*" "@types/lodash.snakecase@^4.1.8": version "4.1.9" - resolved "https://registry.npmjs.org/@types/lodash.snakecase/-/lodash.snakecase-4.1.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.snakecase/-/lodash.snakecase-4.1.9.tgz#2d2b3313a44500cb6d8a1c598e0353778d4420d2" integrity sha512-emBZJUiNlo+QPXr1junMKXwzHJK9zbFvTVdyAoorFcm1YRsbzkZCYPTVMM9AW+dlnA6utG7vpfvOs8alxv/TMw== dependencies: "@types/lodash" "*" "@types/lodash.startcase@^4.4.8": version "4.4.9" - resolved "https://registry.npmjs.org/@types/lodash.startcase/-/lodash.startcase-4.4.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.startcase/-/lodash.startcase-4.4.9.tgz#fba0daa4bb5f279e05628c03193ae1d5e32c438d" integrity sha512-C0M4DlN1pnn2vEEhLHkTHxiRZ+3GlTegpoAEHHGXnuJkSOXyJMHGiSc+SLRzBlFZWHsBkixe6FqvEAEU04g14g== dependencies: "@types/lodash" "*" "@types/lodash.uniq@^4.5.8": version "4.5.9" - resolved "https://registry.npmjs.org/@types/lodash.uniq/-/lodash.uniq-4.5.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.uniq/-/lodash.uniq-4.5.9.tgz#9a5390422c003ca6d0219207ed6c9c38e37a783f" integrity sha512-2Vd5avnDMNLbDSnUwwgwExKXvX9W3CN72rodT+ikGqGHXn7gVK6BM6Z+kHonbpGgCI2BzM+QDMHrkgKoofOi6A== dependencies: "@types/lodash" "*" "@types/lodash.upperfirst@^4.3.8": version "4.3.9" - resolved "https://registry.npmjs.org/@types/lodash.upperfirst/-/lodash.upperfirst-4.3.9.tgz" + resolved "https://registry.npmjs.org/@types/lodash.upperfirst/-/lodash.upperfirst-4.3.9.tgz#66e150885a67866ed8bc4331c8c305ab682a198c" integrity sha512-bYhT1QEsk9/ggrFjK86Pb5bnKJgTBbpVA77Ygbb1aW1oiWJNGRbVjSlQ9We/ihB9vVpX5WqDJvbISXlukGR+dQ== dependencies: "@types/lodash" "*" "@types/lodash@*": - version "4.14.188" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz" - integrity sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w== + version "4.17.16" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz#94ae78fab4a38d73086e962d0b65c30d816bfb0a" + integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== -"@types/markdown-it@^13.0.7": - version "13.0.7" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz#4a495115f470075bd4434a0438ac477a49c2e152" - integrity sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA== +"@types/markdown-it@^14.1.2": + version "14.1.2" + resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: - "@types/linkify-it" "*" - "@types/mdurl" "*" + "@types/linkify-it" "^5" + "@types/mdurl" "^2" -"@types/mdurl@*": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" - integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/minimatch@^3.0.3": version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimatch@^5.1.2": version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0", "@types/minimist@^1.2.4": version "1.2.5" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== -"@types/node@*", "@types/node@^18.19.17": - version "18.19.17" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz#a581a9fb4b2cfdbc61f008804f4436b2d5c40354" - integrity sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng== +"@types/node@*": + version "22.13.9" + resolved "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz#5d9a8f7a975a5bd3ef267352deb96fb13ec02eca" + integrity sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw== + dependencies: + undici-types "~6.20.0" + +"@types/node@^18.19.17": + version "18.19.87" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz#690f000cc51e3c7f48bc00f7e86fac6eb550b709" + integrity sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": - version "2.4.3" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz" - integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== - -"@types/parse-json@^4.0.0": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz" - integrity sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng== + version "2.4.4" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/require-from-string@^1.2.3": version "1.2.3" - resolved "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.3.tgz" + resolved "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.3.tgz#454ffa447f6556d7641d86684407d7b62e4430bd" integrity sha512-kxLU5xvefySGpp1Z7VCt4m5AhQJUZ8HjW8ADdeS7GieqFPHLAde007fd9bxeXEsFXyaA0LeWIoQXyXP17mGpIg== -"@types/semver@^7.3.12", "@types/semver@^7.5.0", "@types/semver@^7.5.7": - version "7.5.7" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" - integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== +"@types/semver@^7.5.7": + version "7.7.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== "@types/stack-utils@^2.0.0": version "2.0.3" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/tar-fs@^2.0.4": version "2.0.4" - resolved "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.4.tgz" + resolved "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.4.tgz#7c7502d281d436db0ad0f78282acef71da02a292" integrity sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA== dependencies: "@types/node" "*" @@ -2093,23 +1987,28 @@ "@types/tar-stream@*": version "3.1.3" - resolved "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.3.tgz" + resolved "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.3.tgz#f61427229691eda1b7d5719f34acdc4fc8a558ce" integrity sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ== dependencies: "@types/node" "*" "@types/through@*": - version "0.0.32" - resolved "https://registry.npmjs.org/@types/through/-/through-0.0.32.tgz" - integrity sha512-7XsfXIsjdfJM2wFDRAtEWp3zb2aVPk5QeyZxGlVK57q4u26DczMHhJmlhr0Jqv0THwxam/L8REXkj8M2I/lcvw== + version "0.0.33" + resolved "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" + integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ== dependencies: "@types/node" "*" "@types/tmp@^0.2.5": version "0.2.6" - resolved "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz" + resolved "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217" integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/web-bluetooth@^0.0.20": version "0.0.20" resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" @@ -2117,426 +2016,421 @@ "@types/yargs-parser@*": version "21.0.3" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.29", "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz#c13a34057be425167cc4a765158c46fdf2fd981d" - integrity sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.0.2" - "@typescript-eslint/type-utils" "7.0.2" - "@typescript-eslint/utils" "7.0.2" - "@typescript-eslint/visitor-keys" "7.0.2" - debug "^4.3.4" +"@typescript-eslint/eslint-plugin@^8.18.0": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz#62f1befe59647524994e89de4516d8dcba7a850a" + integrity sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/type-utils" "8.31.1" + "@typescript-eslint/utils" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^2.0.1" -"@typescript-eslint/parser@^7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.2.tgz#95c31233d343db1ca1df8df7811b5b87ca7b1a68" - integrity sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q== +"@typescript-eslint/parser@^8.18.0": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz#e9b0ccf30d37dde724ee4d15f4dbc195995cce1b" + integrity sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q== dependencies: - "@typescript-eslint/scope-manager" "7.0.2" - "@typescript-eslint/types" "7.0.2" - "@typescript-eslint/typescript-estree" "7.0.2" - "@typescript-eslint/visitor-keys" "7.0.2" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/typescript-estree" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== +"@typescript-eslint/scope-manager@8.26.0": + version "8.26.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz#b06623fad54a3a77fadab5f652ef75ed3780b545" + integrity sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "8.26.0" + "@typescript-eslint/visitor-keys" "8.26.0" -"@typescript-eslint/scope-manager@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz#6ec4cc03752758ddd1fdaae6fbd0ed9a2ca4fe63" - integrity sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g== +"@typescript-eslint/scope-manager@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz#1eb52e76878f545e4add142e0d8e3e97e7aa443b" + integrity sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw== dependencies: - "@typescript-eslint/types" "7.0.2" - "@typescript-eslint/visitor-keys" "7.0.2" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" -"@typescript-eslint/type-utils@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz#a7fc0adff0c202562721357e7478207d380a757b" - integrity sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ== +"@typescript-eslint/type-utils@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz#be0f438fb24b03568e282a0aed85f776409f970c" + integrity sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA== dependencies: - "@typescript-eslint/typescript-estree" "7.0.2" - "@typescript-eslint/utils" "7.0.2" + "@typescript-eslint/typescript-estree" "8.31.1" + "@typescript-eslint/utils" "8.31.1" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^2.0.1" -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@8.26.0": + version "8.26.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz#c4e93a8faf3a38a8d8adb007dc7834f1c89ee7bf" + integrity sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA== -"@typescript-eslint/types@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.2.tgz#b6edd108648028194eb213887d8d43ab5750351c" - integrity sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA== +"@typescript-eslint/types@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz#478ed6f7e8aee1be7b63a60212b6bffe1423b5d4" + integrity sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== +"@typescript-eslint/typescript-estree@8.26.0": + version "8.26.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz#128972172005a7376e34ed2ecba4e29363b0cad1" + integrity sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "8.26.0" + "@typescript-eslint/visitor-keys" "8.26.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" -"@typescript-eslint/typescript-estree@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz#3c6dc8a3b9799f4ef7eca0d224ded01974e4cb39" - integrity sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw== +"@typescript-eslint/typescript-estree@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz#37792fe7ef4d3021c7580067c8f1ae66daabacdf" + integrity sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag== dependencies: - "@typescript-eslint/types" "7.0.2" - "@typescript-eslint/visitor-keys" "7.0.2" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" -"@typescript-eslint/utils@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.2.tgz#8756123054cd934c8ba7db6a6cffbc654b10b5c4" - integrity sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw== +"@typescript-eslint/utils@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz#5628ea0393598a0b2f143d0fc6d019f0dee9dd14" + integrity sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.0.2" - "@typescript-eslint/types" "7.0.2" - "@typescript-eslint/typescript-estree" "7.0.2" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/typescript-estree" "8.31.1" -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.26.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz#845d20ed8378a5594e6445f54e53b972aee7b3e6" + integrity sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.26.0" + "@typescript-eslint/types" "8.26.0" + "@typescript-eslint/typescript-estree" "8.26.0" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== +"@typescript-eslint/visitor-keys@8.26.0": + version "8.26.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz#a4876216756c69130ea958df3b77222c2ad95290" + integrity sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg== dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "8.26.0" + eslint-visitor-keys "^4.2.0" -"@typescript-eslint/visitor-keys@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz#2899b716053ad7094962beb895d11396fc12afc7" - integrity sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ== +"@typescript-eslint/visitor-keys@8.31.1": + version "8.31.1" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz#6742b0e3ba1e0c1e35bdaf78c03e759eb8dd8e75" + integrity sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw== dependencies: - "@typescript-eslint/types" "7.0.2" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.31.1" + eslint-visitor-keys "^4.2.0" -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@vitejs/plugin-vue@^5.0.4": - version "5.0.4" - resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37" - integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ== +"@vitejs/plugin-vue@^5.2.1": + version "5.2.1" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133" + integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ== -"@vitest/coverage-istanbul@^1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-1.3.1.tgz#28e98d1e202a3f66a5ce1a3c1cfd160089a37b48" - integrity sha512-aBVgQ2eY9gzrxBJjGKbWgatTU2w1CacEx0n8OMctPzl9836KqoM5X/WigJpjM7wZEtX2N0ZTE5KDGPmVM+o2Wg== +"@vitest/coverage-istanbul@^3.0.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.1.2.tgz#0fcc2067a9e71cfae2a988a6f34600a404f95b02" + integrity sha512-PXjSd4g7SxlC9WJ00jbMMFJob+LcjXUYow5vpXuZe/acjhlEQgCaf6npm+W9Mg/ahiFKtIAHI+P8A9n2JfZilg== dependencies: - debug "^4.3.4" + "@istanbuljs/schema" "^0.1.3" + debug "^4.4.0" istanbul-lib-coverage "^3.2.2" - istanbul-lib-instrument "^6.0.1" + istanbul-lib-instrument "^6.0.3" istanbul-lib-report "^3.0.1" - istanbul-lib-source-maps "^4.0.1" - istanbul-reports "^3.1.6" - magicast "^0.3.3" - picocolors "^1.0.0" - test-exclude "^6.0.0" + istanbul-lib-source-maps "^5.0.6" + istanbul-reports "^3.1.7" + magicast "^0.3.5" + test-exclude "^7.0.1" + tinyrainbow "^2.0.0" -"@vitest/expect@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" - integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== +"@vitest/expect@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.2.tgz#b203a7ad2efa6af96c85f6c116216bda259d2bc8" + integrity sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA== dependencies: - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - chai "^4.3.10" + "@vitest/spy" "3.1.2" + "@vitest/utils" "3.1.2" + chai "^5.2.0" + tinyrainbow "^2.0.0" -"@vitest/runner@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" - integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== +"@vitest/mocker@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.2.tgz#1ff239036072feb543ab56825ada09b12a075af2" + integrity sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw== dependencies: - "@vitest/utils" "1.3.1" - p-limit "^5.0.0" - pathe "^1.1.1" + "@vitest/spy" "3.1.2" + estree-walker "^3.0.3" + magic-string "^0.30.17" -"@vitest/snapshot@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" - integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== +"@vitest/pretty-format@3.1.2", "@vitest/pretty-format@^3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz#689b0604c0b73fdccb144f11b64d70c9233b23b8" + integrity sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w== dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" + tinyrainbow "^2.0.0" -"@vitest/spy@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" - integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== +"@vitest/runner@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.2.tgz#ffeba74618046221e944e94f09b565af772170cf" + integrity sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g== dependencies: - tinyspy "^2.2.0" + "@vitest/utils" "3.1.2" + pathe "^2.0.3" -"@vitest/utils@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" - integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== +"@vitest/snapshot@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.2.tgz#46c52a417afbf1fe94fba0a5735cbedf9cfc60f6" + integrity sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q== dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + "@vitest/pretty-format" "3.1.2" + magic-string "^0.30.17" + pathe "^2.0.3" -"@vue/compiler-core@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e" - integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w== +"@vitest/spy@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.2.tgz#3a5be04d71c4a458c8d6859503626e2aed61bcbf" + integrity sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA== dependencies: - "@babel/parser" "^7.23.9" - "@vue/shared" "3.4.19" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.0.2" + tinyspy "^3.0.2" -"@vue/compiler-dom@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a" - integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA== +"@vitest/utils@3.1.2": + version "3.1.2" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz#f3ae55b3a205c88c346a2a8dcde7c89210364932" + integrity sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg== dependencies: - "@vue/compiler-core" "3.4.19" - "@vue/shared" "3.4.19" + "@vitest/pretty-format" "3.1.2" + loupe "^3.1.3" + tinyrainbow "^2.0.0" -"@vue/compiler-sfc@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" - integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== +"@vue/compiler-core@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" + integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== dependencies: - "@babel/parser" "^7.23.9" - "@vue/compiler-core" "3.4.19" - "@vue/compiler-dom" "3.4.19" - "@vue/compiler-ssr" "3.4.19" - "@vue/shared" "3.4.19" + "@babel/parser" "^7.25.3" + "@vue/shared" "3.5.13" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" + integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== + dependencies: + "@vue/compiler-core" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/compiler-sfc@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" + integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/compiler-core" "3.5.13" + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" estree-walker "^2.0.2" - magic-string "^0.30.6" - postcss "^8.4.33" - source-map-js "^1.0.2" + magic-string "^0.30.11" + postcss "^8.4.48" + source-map-js "^1.2.0" -"@vue/compiler-ssr@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2" - integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw== +"@vue/compiler-ssr@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" + integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== dependencies: - "@vue/compiler-dom" "3.4.19" - "@vue/shared" "3.4.19" + "@vue/compiler-dom" "3.5.13" + "@vue/shared" "3.5.13" -"@vue/devtools-api@^7.0.14": - version "7.0.15" - resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.0.15.tgz#875a228fb5154fa4a6678e8cbc4c894089d87cde" - integrity sha512-kgEYWosDyWpS1vFSuJNNWUnHkP+VkL3Y+9mw+rf7ex41SwbYL/WdC3KXqAtjiSrEs7r/FrHmUTh0BkINJPFkbA== +"@vue/devtools-api@^7.7.0": + version "7.7.2" + resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.2.tgz#49837eae6f61fc43a09f5d6c2d3210f9f73a0d09" + integrity sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA== dependencies: - "@vue/devtools-kit" "^7.0.15" + "@vue/devtools-kit" "^7.7.2" -"@vue/devtools-kit@^7.0.15": - version "7.0.15" - resolved "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.0.15.tgz#d6f5d527358ad6c707cb13ccbbc4260a9c6dcae5" - integrity sha512-dT7OeCe1LUCIhHIb/yRR6Hn+XHh73r1o78onqCrxEKHdoZwBItiIeVnmJZPEUDFstIxfs+tJL231mySk3laTow== +"@vue/devtools-kit@^7.7.2": + version "7.7.2" + resolved "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz#3315bd5b144f98c7b84c2f44270b445644ec8f10" + integrity sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ== dependencies: - "@vue/devtools-shared" "^7.0.15" + "@vue/devtools-shared" "^7.7.2" + birpc "^0.2.19" hookable "^5.5.3" mitt "^3.0.1" perfect-debounce "^1.0.0" speakingurl "^14.0.1" + superjson "^2.2.1" -"@vue/devtools-shared@^7.0.15": - version "7.0.15" - resolved "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.0.15.tgz#a179552dab23b7c7e4bb22726a82a268eef7239b" - integrity sha512-fpfvMVvS7aDgO7x2JPFiTQ1MHcCc63/bE7yTgs278gMBybuO9b3hdiZ/k0Pw1rN+RefaU9yQiFA+5CCFc1D+6w== +"@vue/devtools-shared@^7.7.2": + version "7.7.2" + resolved "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz#b11b143820130a32d8ce5737e264d06ab6d62f40" + integrity sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA== dependencies: - rfdc "^1.3.1" + rfdc "^1.4.1" -"@vue/reactivity@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz#8cf335d97d07881d8184cb23289289dc18b03f60" - integrity sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA== +"@vue/reactivity@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f" + integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== dependencies: - "@vue/shared" "3.4.19" + "@vue/shared" "3.5.13" -"@vue/runtime-core@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz#ef10357fdf3afdf68523b55424541000105e2aeb" - integrity sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw== +"@vue/runtime-core@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455" + integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== dependencies: - "@vue/reactivity" "3.4.19" - "@vue/shared" "3.4.19" + "@vue/reactivity" "3.5.13" + "@vue/shared" "3.5.13" -"@vue/runtime-dom@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz#079141e31d9f47515b9595f29843d51011f88739" - integrity sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g== +"@vue/runtime-dom@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215" + integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== dependencies: - "@vue/runtime-core" "3.4.19" - "@vue/shared" "3.4.19" + "@vue/reactivity" "3.5.13" + "@vue/runtime-core" "3.5.13" + "@vue/shared" "3.5.13" csstype "^3.1.3" -"@vue/server-renderer@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz#e6f8ff5268d0758766ca9835375218924d5f0eb6" - integrity sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw== +"@vue/server-renderer@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7" + integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== dependencies: - "@vue/compiler-ssr" "3.4.19" - "@vue/shared" "3.4.19" + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" -"@vue/shared@3.4.19": - version "3.4.19" - resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c" - integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw== +"@vue/shared@3.5.13", "@vue/shared@^3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" + integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== -"@vueuse/core@10.8.0", "@vueuse/core@^10.7.2": - version "10.8.0" - resolved "https://registry.npmjs.org/@vueuse/core/-/core-10.8.0.tgz#680f88cf2f92abfc7a3d69cdf5b030f6ff9e07ee" - integrity sha512-G9Ok9fjx10TkNIPn8V1dJmK1NcdJCtYmDRyYiTMUyJ1p0Tywc1zmOoCQ2xhHYyz8ULBU4KjIJQ9n+Lrty74iVw== +"@vueuse/core@12.7.0", "@vueuse/core@^12.4.0": + version "12.7.0" + resolved "https://registry.npmjs.org/@vueuse/core/-/core-12.7.0.tgz#b9c3880e9c01d9db86029c6a58412f1b1922497e" + integrity sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA== dependencies: "@types/web-bluetooth" "^0.0.20" - "@vueuse/metadata" "10.8.0" - "@vueuse/shared" "10.8.0" - vue-demi ">=0.14.7" + "@vueuse/metadata" "12.7.0" + "@vueuse/shared" "12.7.0" + vue "^3.5.13" -"@vueuse/integrations@^10.7.2": - version "10.8.0" - resolved "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.8.0.tgz#c597c1ad5696b3ac3c7a8bae1a85c3301b395712" - integrity sha512-sw3P/7cXOfNLQfERp7P0IJ2ODjLE2C3BGXpBQJQkS309c1jbJak9yu4EnY70WaZjkj53aeWSFU6BbHrUxXJ7SA== +"@vueuse/integrations@^12.4.0": + version "12.7.0" + resolved "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.7.0.tgz#d9ba676a6643def3f8dcc99580162fbaf33de05e" + integrity sha512-IEq7K4bCl7mn3uKJaWtNXnd1CAPaHLUMuyj5K1/k/pVcItt0VONZW8xiGxdIovJcQjkzOHjImhX5t6gija+0/g== dependencies: - "@vueuse/core" "10.8.0" - "@vueuse/shared" "10.8.0" - vue-demi ">=0.14.7" + "@vueuse/core" "12.7.0" + "@vueuse/shared" "12.7.0" + vue "^3.5.13" -"@vueuse/metadata@10.8.0": - version "10.8.0" - resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.8.0.tgz#a0d828ae90feed8084870578c56f459897f7cbb3" - integrity sha512-Nim/Vle5OgXcXhAvGOgkJQXB1Yb+Kq/fMbLuv3YYDYbiQrwr39ljuD4k9fPeq4yUyokYRo2RaNQmbbIMWB/9+w== +"@vueuse/metadata@12.7.0": + version "12.7.0" + resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.7.0.tgz#17a263927204962ec045095c83f62c81db085a46" + integrity sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g== -"@vueuse/shared@10.8.0": - version "10.8.0" - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-10.8.0.tgz#56e778919a3de9f2552bcbf3c09163e6d1035f1a" - integrity sha512-dUdy6zwHhULGxmr9YUg8e+EnB39gcM4Fe2oKBSrh3cOsV30JcMPtsyuspgFCUo5xxFNaeMf/W2yyKfST7Bg8oQ== +"@vueuse/shared@12.7.0": + version "12.7.0" + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-12.7.0.tgz#0c573789069818a2e25ddae3ab64b536c614537b" + integrity sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw== dependencies: - vue-demi ">=0.14.7" + vue "^3.5.13" "@yarnpkg/lockfile@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.35" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.35.tgz" - integrity sha512-J6ySgEdQUqAmlttvZOoXOEsrDTAnHyR/MtEvuAG5a+gwKY/2Cc7xn4CWcpgfuwkp+0a4vXmt2BDwzacDoGDN1g== +"@yarnpkg/parsers@3.0.2": + version "3.0.2" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" + integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== dependencies: js-yaml "^3.10.0" tslib "^2.4.0" -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" + integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== dependencies: argparse "^2.0.1" -JSONStream@^1.0.4, JSONStream@^1.3.5: +JSONStream@^1.3.5: version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@1, abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.3, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.14.0: + version "8.14.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== add-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -2544,7 +2438,7 @@ aggregate-error@^3.0.0: ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2553,302 +2447,306 @@ ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.11.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" -algoliasearch@^4.19.1: - version "4.22.1" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" - integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== - dependencies: - "@algolia/cache-browser-local-storage" "4.22.1" - "@algolia/cache-common" "4.22.1" - "@algolia/cache-in-memory" "4.22.1" - "@algolia/client-account" "4.22.1" - "@algolia/client-analytics" "4.22.1" - "@algolia/client-common" "4.22.1" - "@algolia/client-personalization" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/logger-console" "4.22.1" - "@algolia/requester-browser-xhr" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/requester-node-http" "4.22.1" - "@algolia/transporter" "4.22.1" +algoliasearch@^5.14.2: + version "5.20.3" + resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.3.tgz#32d79b9ffaf5a085943fab304698f46c5a3faed9" + integrity sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q== + dependencies: + "@algolia/client-abtesting" "5.20.3" + "@algolia/client-analytics" "5.20.3" + "@algolia/client-common" "5.20.3" + "@algolia/client-insights" "5.20.3" + "@algolia/client-personalization" "5.20.3" + "@algolia/client-query-suggestions" "5.20.3" + "@algolia/client-search" "5.20.3" + "@algolia/ingestion" "1.20.3" + "@algolia/monitoring" "1.20.3" + "@algolia/recommend" "5.20.3" + "@algolia/requester-browser-xhr" "5.20.3" + "@algolia/requester-fetch" "5.20.3" + "@algolia/requester-node-http" "5.20.3" ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-escapes@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== dependencies: - type-fest "^3.0.0" + environment "^1.0.0" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: +aproba@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== +array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + version "1.3.3" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + version "1.3.3" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== async@^3.2.3: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" -axios@^1.0.0: - version "1.6.1" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz" - integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== +axios@^1.8.3: + version "1.8.4" + resolved "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" b4a@^1.6.4: - version "1.6.4" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz" - integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + version "1.6.7" + resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bare-events@^2.0.0, bare-events@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz#a7a7263c107daf8b85adf0b64f908503454ab26e" - integrity sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg== + version "2.5.4" + resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" + integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== -bare-fs@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-2.1.2.tgz#59294fa0ba7596c8b8a8a735517f28f8e5c1fbcc" - integrity sha512-+BjcnjHwnPfXunVnp7TTHP/8PkQZdMAIuJ8GyqodOv+F7hrhvqWX1oIaac3klLPSJ6wKRWVfoL8+w0HMrs1/OA== +bare-fs@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz#85844f34da819c76754d545323a8b23ed3617c76" + integrity sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg== dependencies: bare-events "^2.0.0" - bare-os "^2.0.0" - bare-path "^2.0.0" - streamx "^2.13.0" + bare-path "^3.0.0" + bare-stream "^2.0.0" -bare-os@^2.0.0, bare-os@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/bare-os/-/bare-os-2.1.2.tgz#bdc8855062ea1c4bcb82fbb669d90be57462305d" - integrity sha512-slQjOn78Q8itnzomNAamiKo5MDpEpV3JnoNZ93lyynaFh6paWcU+5c0GVcZ7EYIJC2unN2JGdF1qupdscYl0Yg== +bare-os@^3.0.1: + version "3.5.1" + resolved "https://registry.npmjs.org/bare-os/-/bare-os-3.5.1.tgz#8e59ad8db6d0eab35cfe499208db643fd5f4c594" + integrity sha512-LvfVNDcWLw2AnIw5f2mWUgumW3I3N/WYGiWeimhQC1Ybt71n2FjlS9GJKeCnFeg1MKZHxzIFmpFnBXDI+sBeFg== -bare-path@^2.0.0, bare-path@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz#830f17fd39842813ca77d211ebbabe238a88cb4c" - integrity sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw== +bare-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" + integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== dependencies: - bare-os "^2.1.0" + bare-os "^3.0.1" + +bare-stream@^2.0.0: + version "2.6.5" + resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" + integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== + dependencies: + streamx "^2.21.0" base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== before-after-hook@^2.2.0: version "2.2.3" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bin-links@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== +bin-links@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" + integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +birpc@^0.2.19: + version "0.2.19" + resolved "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz#cdd183a4a70ba103127d49765b4a71349da5a0ca" + integrity sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -2857,7 +2755,7 @@ bl@^4.0.3, bl@^4.1.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2865,109 +2763,108 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browserslist@^4.21.9: - version "4.22.1" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.24.0: + version "4.24.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== cac@^6.7.14: version "6.7.14" resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== +cacache@^18.0.0, cacache@^18.0.3: + version "18.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" + ssri "^10.0.0" tar "^6.1.11" - unique-filename "^2.0.0" + unique-filename "^3.0.0" cachedir@2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" + resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -2976,43 +2873,41 @@ camelcase-keys@^6.2.2: camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001541: - version "1.0.30001546" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz" - integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== +caniuse-lite@^1.0.30001688: + version "1.0.30001715" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz#bd325a37ad366e3fe90827d74062807a34fbaeb2" + integrity sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw== -chai@^4.3.10: - version "4.4.1" - resolved "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chai@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05" + integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" chalk@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@5.3.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -3021,66 +2916,84 @@ chalk@^2.4.1, chalk@^2.4.2: chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.3.0, chalk@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0: version "3.9.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +ci-info@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz#cbd21386152ebfe1d56f280a3b5feccbd96764c7" + integrity sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg== + clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^5.0.0" -cli-spinners@2.6.1, cli-spinners@^2.5.0: +cli-spinners@2.6.1: version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-truncate@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== dependencies: slice-ansi "^5.0.0" @@ -3088,7 +3001,7 @@ cli-truncate@^4.0.0: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cli-width@^4.1.0: @@ -3098,7 +3011,7 @@ cli-width@^4.1.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -3107,16 +3020,16 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: +clone-deep@4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -3125,53 +3038,51 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" +cmd-shim@6.0.3, cmd-shim@^6.0.0: + version "6.0.3" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" + integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: +color-support@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^2.0.20: version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -columnify@^1.6.0: +columnify@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: strip-ansi "^6.0.1" @@ -3179,20 +3090,25 @@ columnify@^1.6.0: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== commitizen@^4.0.3, commitizen@^4.2.4: - version "4.3.0" - resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz" - integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== + version "4.3.1" + resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz#f0e0e4b7ae3fafc92e444bbb78f2ded5a1d4311a" + integrity sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw== dependencies: cachedir "2.3.0" cz-conventional-changelog "3.3.0" @@ -3211,12 +3127,12 @@ commitizen@^4.0.3, commitizen@^4.2.4: common-ancestor-path@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -3224,12 +3140,12 @@ compare-func@^2.0.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -3237,114 +3153,91 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-angular@^7.0.0: +conventional-changelog-angular@7.0.0, conventional-changelog-angular@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: compare-func "^2.0.0" conventional-changelog-atom@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-4.0.0.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-4.0.0.tgz#291fd1583517d4e7131dba779ad9fa238359daa1" integrity sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw== conventional-changelog-conventionalcommits@^7.0.2: version "7.0.2" - resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== dependencies: compare-func "^2.0.0" -conventional-changelog-core@^4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== dependencies: add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^4.0.0" -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" handlebars "^4.7.7" json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" conventional-commit-types@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz" + resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== dependencies: lodash.ismatch "^4.4.0" - modify-values "^1.0.0" + modify-values "^1.0.1" -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: - JSONStream "^1.0.4" + JSONStream "^1.3.5" is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" conventional-commits-parser@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: JSONStream "^1.3.5" @@ -3352,74 +3245,74 @@ conventional-commits-parser@^5.0.0: meow "^12.0.1" split2 "^4.0.0" -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +copy-anything@^3.0.2: + version "3.0.5" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" + integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + dependencies: + is-what "^4.1.8" + core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig-typescript-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz" - integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== - dependencies: - jiti "^1.19.1" - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +cosmiconfig-typescript-loader@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz#7f644503e1c2bff90aed2d29a637008f279646bb" + integrity sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + jiti "^2.4.1" -cosmiconfig@^8.3.6: - version "8.3.6" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== +cosmiconfig@9.0.0, cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== 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" cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.1, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + csstype@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" @@ -3427,7 +3320,7 @@ csstype@^3.1.3: cz-conventional-changelog@3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz" + resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== dependencies: chalk "^2.4.1" @@ -3441,7 +3334,7 @@ cz-conventional-changelog@3.3.0: dargs@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dargs@^8.0.0: @@ -3449,33 +3342,55 @@ dargs@^8.0.0: resolved "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== -dateformat@^3.0.0: +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dateformat@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -3483,50 +3398,53 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -dedent@0.7.0, dedent@^0.7.0: +dedent@0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" +dedent@1.5.3: + version "1.5.3" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -3535,95 +3453,91 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== -detect-indent@6.1.0, detect-indent@^6.0.0: +detect-indent@6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== detect-indent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== +devlop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: - asap "^2.0.0" - wrappy "1" + dequal "^2.0.0" diff-sequences@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== +dotenv-expand@~11.0.6: + version "11.0.7" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" + integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== dependencies: - is-obj "^2.0.0" + dotenv "^16.4.5" -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.4.5, dotenv@~16.4.5: + version "16.4.7" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" duplexer@^0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: @@ -3632,25 +3546,30 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ejs@^3.1.7: - version "3.1.8" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.10" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.535: - version "1.4.543" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz" - integrity sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g== +electron-to-chromium@^1.5.73: + version "1.5.139" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz#56ae7d42439e2967a54badbadaeb12f748987f37" + integrity sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w== + +emoji-regex-xs@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz#e8af22e5d9dbd7f7f22d280af3d19d2aab5b0724" + integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== emoji-regex@^10.3.0: - version "10.3.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz" - integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + version "10.4.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: @@ -3660,21 +3579,21 @@ emoji-regex@^9.2.2: encoding@^0.1.13: version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enquirer@~2.3.6: version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" @@ -3684,299 +3603,361 @@ entities@^4.5.0: resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -env-paths@^2.2.0: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +envinfo@7.13.0: + version "7.13.0" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - hasown "^2.0.0" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-shim-unscopables@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" -esbuild@^0.19.3: - version "0.19.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + +esbuild@^0.25.0: + version "0.25.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" + integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.2" + "@esbuild/android-arm" "0.25.2" + "@esbuild/android-arm64" "0.25.2" + "@esbuild/android-x64" "0.25.2" + "@esbuild/darwin-arm64" "0.25.2" + "@esbuild/darwin-x64" "0.25.2" + "@esbuild/freebsd-arm64" "0.25.2" + "@esbuild/freebsd-x64" "0.25.2" + "@esbuild/linux-arm" "0.25.2" + "@esbuild/linux-arm64" "0.25.2" + "@esbuild/linux-ia32" "0.25.2" + "@esbuild/linux-loong64" "0.25.2" + "@esbuild/linux-mips64el" "0.25.2" + "@esbuild/linux-ppc64" "0.25.2" + "@esbuild/linux-riscv64" "0.25.2" + "@esbuild/linux-s390x" "0.25.2" + "@esbuild/linux-x64" "0.25.2" + "@esbuild/netbsd-arm64" "0.25.2" + "@esbuild/netbsd-x64" "0.25.2" + "@esbuild/openbsd-arm64" "0.25.2" + "@esbuild/openbsd-x64" "0.25.2" + "@esbuild/sunos-x64" "0.25.2" + "@esbuild/win32-arm64" "0.25.2" + "@esbuild/win32-ia32" "0.25.2" + "@esbuild/win32-x64" "0.25.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== +eslint-config-prettier@^10.0.0: + version "10.1.2" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz#31a4b393c40c4180202c27e829af43323bf85276" + integrity sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA== eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.28.0: - version "2.29.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== +eslint-plugin-import@^2.30.0: + version "2.31.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" -eslint-plugin-jest@^27.9.0: - version "27.9.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-plugin-jest@^28.8.2: + version "28.11.0" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz#2641ecb4411941bbddb3d7cf8a8ff1163fbb510e" + integrity sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig== dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.46.0: - version "8.56.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.16.0: + version "9.25.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz#8a7cf8dd0e6acb858f86029720adb1785ee57580" + integrity sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.20.0" + "@eslint/config-helpers" "^0.2.1" + "@eslint/core" "^0.13.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.25.1" + "@eslint/plugin-kit" "^0.2.8" + "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^8.3.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== dependencies: - acorn "^8.9.0" + acorn "^8.14.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^4.2.0" esprima@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.2: @@ -3993,22 +3974,37 @@ estree-walker@^3.0.3: esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@8.0.1, execa@^8.0.1: +execa@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: cross-spawn "^7.0.3" @@ -4021,31 +4017,26 @@ execa@8.0.1, execa@^8.0.1: signal-exit "^4.1.0" strip-final-newline "^3.0.0" -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" +expect-type@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz#af76d8b357cf5fa76c41c09dafb79c549e75f71f" + integrity sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw== + +exponential-backoff@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" + integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + external-editor@^3.0.3, external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -4054,114 +4045,113 @@ external-editor@^3.0.3, external-editor@^3.1.0: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.1.0, fast-fifo@^1.2.0: +fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9, fast-glob@^3.3.1: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.2.9, fast-glob@^3.3.1, fast-glob@^3.3.2, fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-safe-stringify@^2.0.6: version "2.1.1" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" -figures@3.2.0, figures@^3.0.0, figures@^3.2.0: +fdir@^6.4.3, fdir@^6.4.4: + version "6.4.4" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz#1cfcf86f875a883e19a8fab53622cfe992e8d2f9" + integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg== + +figures@3.2.0, figures@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-node-modules@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.2.tgz" - integrity sha512-x+3P4mbtRPlSiVE1Qco0Z4YLU8WFiFcuWTf3m75OV9Uzcfs2Bg+O9N+r/K0AnmINBW06KpfqKwYJbFlFq4qNug== + version "2.1.3" + resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== dependencies: findup-sync "^4.0.0" - merge "^2.1.0" + merge "^2.1.1" find-root@1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up-simple@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368" - integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw== + version "1.0.1" + resolved "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" + integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== find-up@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -4169,7 +4159,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -4186,7 +4176,7 @@ find-up@^7.0.0: findup-sync@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" @@ -4194,69 +4184,76 @@ findup-sync@^4.0.0: micromatch "^4.0.2" resolve-dir "^1.0.1" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -focus-trap@^7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2" - integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w== +focus-trap@^7.6.4: + version "7.6.4" + resolved "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz#455ec5c51fee5ae99604ca15142409ffbbf84db9" + integrity sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw== dependencies: tabbable "^6.2.0" -follow-redirects@^1.15.0: - version "1.15.4" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + version "0.3.5" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - is-callable "^1.1.3" + is-callable "^1.2.7" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.3.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.2" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" +front-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" + integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== + dependencies: + js-yaml "^3.13.1" + fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.1.0, fs-extra@^9.1.0: +fs-extra@9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -4264,99 +4261,95 @@ fs-extra@9.1.0, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.0.0, fs-extra@^11.1.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== +fs-extra@^11.0.0, fs-extra@^11.2.0: + version "11.3.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-east-asian-width@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz" - integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + version "1.3.0" + resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" + integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" -get-pkg-repo@^4.0.0: +get-pkg-repo@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: "@hutson/parse-repository-url" "^3.0.0" @@ -4364,39 +4357,51 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" -get-port@^5.1.1: +get-port@5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-stream@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== dependencies: dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" git-raw-commits@^4.0.0: version "4.0.0" @@ -4409,71 +4414,59 @@ git-raw-commits@^4.0.0: git-remote-origin-url@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== dependencies: - meow "^8.0.0" - semver "^6.0.0" + meow "^8.1.2" + semver "^7.0.0" git-up@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: is-ssh "^1.4.0" parse-url "^8.1.0" -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== +git-url-parse@14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" + integrity sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ== dependencies: git-up "^7.0.0" gitconfiglocal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== dependencies: ini "^1.3.2" -glob-parent@^5.1.1, glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: +glob-parent@6.0.2, glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob@7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^4.0.1" -glob@7.2.3, glob@^7.1.3, glob@^7.1.4: +glob@7.2.3: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -4483,27 +4476,27 @@ glob@7.2.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob@^10.2.2, glob@^10.3.10, glob@^10.4.1: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" -glob@^8.0.1: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== dependencies: fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" global-directory@^4.0.1: version "4.0.1" @@ -4514,7 +4507,7 @@ global-directory@^4.0.1: global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" @@ -4523,8 +4516,8 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -4534,26 +4527,30 @@ global-prefix@^1.0.1: globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globals@^15.13.0: + version "15.15.0" + resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" -globby@^11.0.2, globby@^11.1.0: +globby@11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -4563,30 +4560,28 @@ globby@^11.0.2, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -4594,63 +4589,89 @@ handlebars@^4.7.7: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" -has-unicode@^2.0.1: +has-unicode@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +hast-util-to-html@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" @@ -4662,34 +4683,20 @@ hookable@^5.5.3: hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" -hosted-git-info@^5.0.0: - version "5.2.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -hosted-git-info@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== +hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" @@ -4698,130 +4705,117 @@ html-escaper@^2.0.0: resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.1.0: +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" + agent-base "^7.1.0" + debug "^4.3.4" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: - agent-base "6" + agent-base "^7.1.2" debug "4" human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^9.0.11: - version "9.0.11" - resolved "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz#fc91df4c756050de41b3e478b2158b87c1e79af9" - integrity sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw== +husky@^9.1.5: + version "9.1.7" + resolved "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== +ignore-walk@^6.0.4: + version "6.0.5" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" + integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== dependencies: - minimatch "^5.0.1" + minimatch "^9.0.0" -ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -import-local@^3.0.2: +import-local@3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" import-meta-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#0b1195915689f60ab00f830af0f15cc841e8919e" - integrity sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA== + version "4.1.0" + resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -index-to-position@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.0.tgz" - integrity sha512-I6PLk0E6Jk8t/W212xp9euPed30tIN9mYdslb0Vkd03hG9sd0pByboBdtIRL+Y/103JLp1alP3OuMgxfbIQyFw== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +index-to-position@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" + integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -4829,7 +4823,7 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@4.1.1: @@ -4837,27 +4831,32 @@ ini@4.1.1: resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== -ini@^1.3.2, ini@^1.3.4: - version "1.3.7" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== +ini@^1.3.2, ini@^1.3.4, ini@^1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== +ini@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" + integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== + +init-package-json@6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" + integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" + "@npmcli/package-json" "^5.0.0" + npm-package-arg "^11.0.0" + promzard "^1.0.0" + read "^3.0.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" -inquirer@8.2.5, inquirer@^8.2.4: +inquirer@8.2.5: version "8.2.5" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" @@ -4876,19 +4875,36 @@ inquirer@8.2.5, inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^7.0.0" +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + inquirer@^9.2.15: - version "9.2.15" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz#2135a36190a6e5c92f5d205e0af1fea36b9d3492" - integrity sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg== + version "9.3.7" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.3.7.tgz#0b562bf843812208844741c9aec9244c939b83d4" + integrity sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w== dependencies: - "@ljharb/through" "^2.3.12" + "@inquirer/figures" "^1.0.3" ansi-escapes "^4.3.2" - chalk "^5.3.0" - cli-cursor "^3.1.0" cli-width "^4.1.0" external-editor "^3.1.0" - figures "^3.2.0" - lodash "^4.17.21" mute-stream "1.0.0" ora "^5.4.1" run-async "^3.0.0" @@ -4896,288 +4912,354 @@ inquirer@^9.2.15: string-width "^4.2.3" strip-ansi "^6.0.1" wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-bigints "^1.0.1" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: - ci-info "^2.0.0" + ci-info "^3.2.0" -is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-fullwidth-code-point@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-fullwidth-code-point@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== dependencies: get-east-asian-width "^1.0.0" +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-obj@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + version "1.4.1" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== dependencies: protocols "^2.0.1" +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" is-text-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== dependencies: text-extensions "^2.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.11" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + which-typed-array "^1.1.16" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverage@^3.2.2: @@ -5185,14 +5267,14 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverag resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== +istanbul-lib-instrument@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -5205,41 +5287,51 @@ istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +istanbul-lib-source-maps@^5.0.6: + version "5.0.6" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== dependencies: + "@jridgewell/trace-mapping" "^0.3.23" debug "^4.1.1" istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" -istanbul-reports@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +istanbul-reports@^3.1.7: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.9.2" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" + filelist "^1.0.4" + minimatch "^3.1.2" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-environment-node@^29.6.2: version "29.7.0" @@ -5253,9 +5345,14 @@ jest-environment-node@^29.6.2: jest-mock "^29.7.0" jest-util "^29.7.0" +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + jest-message-util@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" @@ -5270,7 +5367,7 @@ jest-message-util@^29.7.0: jest-mock@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: "@jest/types" "^29.6.3" @@ -5279,7 +5376,7 @@ jest-mock@^29.7.0: jest-util@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: "@jest/types" "^29.6.3" @@ -5289,106 +5386,106 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jiti@^1.19.1: - version "1.20.0" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== +jiti@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== - js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -js-yaml@^3.10.0: +js-yaml@^3.10.0, js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-nice@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@3.2.0, jsonc-parser@^3.2.0: +jsonc-parser@3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonc@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/jsonc/-/jsonc-2.0.0.tgz" + resolved "https://registry.npmjs.org/jsonc/-/jsonc-2.0.0.tgz#9e2a25100d164a9bb864c57517563717fa882551" integrity sha512-B281bLCT2TRMQa+AQUQY5AGcqSOXBOKaYGP4wDzoA/+QswUfN8sODektbPEs9Baq7LGKun5jQbNFpzwGuVYKhw== dependencies: fast-safe-stringify "^2.0.6" @@ -5400,7 +5497,7 @@ jsonc@^2.0.0: jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -5409,147 +5506,193 @@ jsonfile@^6.0.1: jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== just-diff-apply@^5.2.0: version "5.5.0" - resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== -just-diff@^5.0.1: - version "5.2.0" - resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz" - integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lerna@^6.0.0: - version "6.4.1" - resolved "https://registry.npmjs.org/lerna/-/lerna-6.4.1.tgz" - integrity sha512-0t8TSG4CDAn5+vORjvTFn/ZEGyc4LOEsyBUpzcdIxODHPKM4TVOGvbW9dBs1g40PhOrQfwhHS+3fSx/42j42dQ== - dependencies: - "@lerna/add" "6.4.1" - "@lerna/bootstrap" "6.4.1" - "@lerna/changed" "6.4.1" - "@lerna/clean" "6.4.1" - "@lerna/cli" "6.4.1" - "@lerna/command" "6.4.1" - "@lerna/create" "6.4.1" - "@lerna/diff" "6.4.1" - "@lerna/exec" "6.4.1" - "@lerna/filter-options" "6.4.1" - "@lerna/import" "6.4.1" - "@lerna/info" "6.4.1" - "@lerna/init" "6.4.1" - "@lerna/link" "6.4.1" - "@lerna/list" "6.4.1" - "@lerna/publish" "6.4.1" - "@lerna/run" "6.4.1" - "@lerna/validation-error" "6.4.1" - "@lerna/version" "6.4.1" - "@nrwl/devkit" ">=15.4.2 < 16" - import-local "^3.0.2" +lerna@^8.2.0: + version "8.2.2" + resolved "https://registry.npmjs.org/lerna/-/lerna-8.2.2.tgz#ba38e8ffe31cf69222832838f282c7607b09c2a3" + integrity sha512-GkqBELTG4k7rfzAwRok2pKBvhNo046Hfwcj7TuhDah3q58/BBBAqvIFLfqEI5fglnNOs6maMSn6/MWjccQE55A== + dependencies: + "@lerna/create" "8.2.2" + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + envinfo "7.13.0" + execa "5.0.0" + fs-extra "^11.2.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "6.0.3" inquirer "^8.2.4" - npmlog "^6.0.2" - nx ">=15.4.2 < 16" - typescript "^3 || ^4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "8.0.6" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + strong-log-transformer "2.1.0" + tar "6.2.1" + temp-dir "1.0.0" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" -libnpmaccess@^6.0.3: - version "6.0.4" - resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== +libnpmaccess@8.0.6: + version "8.0.6" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" + integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" -libnpmpublish@^6.0.4: - version "6.0.5" - resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== +libnpmpublish@9.0.9: + version "9.0.9" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" + integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + ci-info "^4.0.0" + normalize-package-data "^6.0.1" + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + proc-log "^4.2.0" semver "^7.3.7" - ssri "^9.0.0" + sigstore "^2.2.0" + ssri "^10.0.6" -lilconfig@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lines-and-columns@~2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - -lint-staged@15.2.2: - version "15.2.2" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz#ad7cbb5b3ab70e043fa05bff82a09ed286bc4c5f" - integrity sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw== - dependencies: - chalk "5.3.0" - commander "11.1.0" - debug "4.3.4" - execa "8.0.1" - lilconfig "3.0.0" - listr2 "8.0.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.4" - -listr2@8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz#4d3f50ae6cec3c62bdf0e94f5c2c9edebd4b9c34" - integrity sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA== +lint-staged@15.5.1: + version "15.5.1" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.1.tgz#6de35298964641b8b6e060d3db0fb6ac866c6e24" + integrity sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ== + dependencies: + chalk "^5.4.1" + commander "^13.1.0" + debug "^4.4.0" + execa "^8.0.1" + lilconfig "^3.1.3" + listr2 "^8.2.5" + micromatch "^4.0.8" + pidtree "^0.6.0" + string-argv "^0.3.2" + yaml "^2.7.0" + +listr2@^8.2.5: + version "8.2.5" + resolved "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz#5c9db996e1afeb05db0448196d3d5f64fec2593d" + integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^6.0.0" - rfdc "^1.3.0" + log-update "^6.1.0" + rfdc "^1.4.1" wrap-ansi "^9.0.0" -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: +load-json-file@6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: graceful-fs "^4.1.15" @@ -5557,17 +5700,19 @@ load-json-file@^6.2.0: strip-bom "^4.0.0" type-fest "^0.6.0" -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -5575,14 +5720,14 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" @@ -5596,7 +5741,7 @@ locate-path@^7.2.0: lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.clonedeep@^4.5.0: @@ -5606,194 +5751,169 @@ lodash.clonedeep@^4.5.0: lodash.isfunction@^3.0.9: version "3.0.9" - resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.kebabcase@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.map@^4.5.1: version "4.6.0" - resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.mergewith@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.snakecase@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.startcase@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash.upperfirst@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz" - integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== dependencies: - ansi-escapes "^6.2.0" - cli-cursor "^4.0.0" - slice-ansi "^7.0.0" + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" strip-ansi "^7.1.0" wrap-ansi "^9.0.0" longest@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz" - integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= + resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" +loupe@^3.1.0, loupe@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" + integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== +magic-string@^0.30.11, magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.0" -magic-string@^0.30.6: - version "0.30.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" - integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== +magicast@^0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" + integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@babel/parser" "^7.25.4" + "@babel/types" "^7.25.4" + source-map-js "^1.2.0" -magicast@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" - integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" - source-map-js "^1.0.2" + semver "^7.5.3" make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" + pify "^4.0.1" + semver "^5.6.0" -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.2.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== +make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: + version "13.0.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" + minipass "^7.0.2" + minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^0.6.3" + proc-log "^4.2.0" promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" + ssri "^10.0.0" map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== mark.js@8.11.1: @@ -5801,14 +5921,34 @@ mark.js@8.11.1: resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + meow@^12.0.1: version "12.1.1" - resolved "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz" + resolved "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== -meow@^8.0.0: +meow@^8.1.2: version "8.1.2" - resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" @@ -5825,85 +5965,136 @@ meow@^8.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merge@^2.1.0: +merge@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz" + resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== -micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3, minimatch@^9.0.1: +minimatch@9.0.3: version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz" - integrity sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg== + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" @@ -5912,7 +6103,7 @@ minimist-options@4.1.0: minimist@1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: @@ -5920,19 +6111,19 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - minipass "^3.0.0" + minipass "^7.0.3" -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== +minipass-fetch@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== dependencies: - minipass "^3.1.6" + minipass "^7.0.3" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -5940,60 +6131,55 @@ minipass-fetch@^2.0.3: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: +minipass@^3.0.0: version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz" - integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== - dependencies: - yallist "^4.0.0" +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minisearch@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b" - integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minisearch@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/minisearch/-/minisearch-7.1.2.tgz#296ee8d1906cc378f7e57a3a71f07e5205a75df5" + integrity sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -6004,55 +6190,31 @@ mitt@^3.0.1: resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.2.0, mlly@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" - -modify-values@^1.0.0: +modify-values@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multimatch@^5.0.0: +multimatch@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -6061,91 +6223,79 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.8, mute-stream@~0.0.4: +mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@1.0.0: +mute-stream@1.0.0, mute-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + version "0.6.4" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@2.6.7: version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -node-gyp@^9.0.0: - version "9.3.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== +node-gyp@^10.0.0: + version "10.3.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" + integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== dependencies: env-paths "^2.2.0" - glob "^7.1.4" + exponential-backoff "^3.1.1" + glob "^10.3.10" graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" + tar "^6.2.1" + which "^4.0.0" -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== +nopt@^7.0.0, nopt@^7.2.1: + version "7.2.1" + resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: - abbrev "^1.0.0" + abbrev "^2.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -6153,9 +6303,9 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -6163,267 +6313,276 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-package-data@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz" - integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== +normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== dependencies: hosted-git-info "^7.0.0" - is-core-module "^2.8.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== +npm-bundled@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" + integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== dependencies: - npm-normalize-package-bin "^2.0.0" + npm-normalize-package-bin "^3.0.0" -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== +npm-package-arg@11.0.2: + version "11.0.2" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" + integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.2" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== +npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: + version "11.0.3" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" + integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" + hosted-git-info "^7.0.0" + proc-log "^4.0.0" semver "^7.3.5" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" -npm-packlist@^5.1.0, npm-packlist@^5.1.1: - version "5.1.3" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== +npm-packlist@8.0.2, npm-packlist@^8.0.0: + version "8.0.2" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" + integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" + ignore-walk "^6.0.4" -npm-pick-manifest@^7.0.0: - version "7.0.2" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== +npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" + integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" semver "^7.3.5" -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.1" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== +npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: + version "17.1.0" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" + integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" + "@npmcli/redact" "^2.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" + npm-package-arg "^11.0.0" + proc-log "^4.0.0" npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.3.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -nx@15.4.8, "nx@>=15.4.2 < 16": - version "15.4.8" - resolved "https://registry.npmjs.org/nx/-/nx-15.4.8.tgz" - integrity sha512-uwb2EqI1LfCoDIE/YMTV8xdt+VyNirw952JjmMKx85mZiV2wAV9J+LqzC3PXkw5W8OGvWCkajB2uybCpxEdiBg== +"nx@>=17.1.2 < 21": + version "20.7.2" + resolved "https://registry.npmjs.org/nx/-/nx-20.7.2.tgz#af0647a85e81fb30f36390e1a7af24d91e3c37ee" + integrity sha512-T9pCTw6pA9PoowpLsm9L+GeQw0iHitrIX96jrpMXKbSjPmryokP7EJ+LNkdEV6xX+MrATERWJlPd+NYwnYxbIA== dependencies: - "@nrwl/cli" "15.4.8" - "@nrwl/tao" "15.4.8" - "@parcel/watcher" "2.0.4" + "@napi-rs/wasm-runtime" "0.2.4" "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" - "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" - chalk "4.1.0" + "@yarnpkg/parsers" "3.0.2" + "@zkochan/js-yaml" "0.0.7" + axios "^1.8.3" + chalk "^4.1.0" cli-cursor "3.1.0" cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" + cliui "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" enquirer "~2.3.6" - fast-glob "3.2.7" figures "3.2.0" flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" + front-matter "^4.0.2" ignore "^5.0.4" - js-yaml "4.1.0" + jest-diff "^29.4.1" jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" + lines-and-columns "2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" npm-run-path "^4.0.1" open "^8.4.0" - semver "7.3.4" + ora "5.3.0" + resolve.exports "2.0.3" + semver "^7.5.3" string-width "^4.2.3" - strong-log-transformer "^2.1.0" tar-stream "~2.2.0" tmp "~0.2.1" tsconfig-paths "^4.1.2" tslib "^2.3.0" - v8-compile-cache "2.3.0" + yaml "^2.6.0" yargs "^17.6.2" yargs-parser "21.1.1" - -object-inspect@^1.13.1, object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + optionalDependencies: + "@nx/nx-darwin-arm64" "20.7.2" + "@nx/nx-darwin-x64" "20.7.2" + "@nx/nx-freebsd-x64" "20.7.2" + "@nx/nx-linux-arm-gnueabihf" "20.7.2" + "@nx/nx-linux-arm64-gnu" "20.7.2" + "@nx/nx-linux-arm64-musl" "20.7.2" + "@nx/nx-linux-x64-gnu" "20.7.2" + "@nx/nx-linux-x64-musl" "20.7.2" + "@nx/nx-win32-arm64-msvc" "20.7.2" + "@nx/nx-win32-x64-msvc" "20.7.2" + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== +object.values@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + +oniguruma-to-es@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz#480e4bac4d3bc9439ac0d2124f0725e7a0d76d17" + integrity sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ== + dependencies: + emoji-regex-xs "^1.0.0" + regex "^6.0.1" + regex-recursion "^6.0.2" + open@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + version "8.4.2" + resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" ora@^5.4.1: version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -6438,31 +6597,40 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" @@ -6474,30 +6642,23 @@ p-limit@^4.0.0: dependencies: yocto-queue "^1.0.0" -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" @@ -6509,106 +6670,107 @@ p-locate@^6.0.0: dependencies: p-limit "^4.0.0" -p-map-series@^2.1.0: +p-map-series@2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -p-map@^4.0.0: +p-map@4.0.0, p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" -p-pipe@^3.1.0: +p-pipe@3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== -p-queue@^6.6.2: +p-queue@6.6.2: version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-reduce@^2.0.0, p-reduce@^2.1.0: +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@^2.1.1: +p-waterfall@2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: p-reduce "^2.0.0" -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.2" - resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@^18.0.0, pacote@^18.0.6: + version "18.0.6" + resolved "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" + integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/package-json" "^5.1.0" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^8.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^17.0.0" + proc-log "^4.0.0" promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" + sigstore "^2.2.0" + ssri "^10.0.0" tar "^6.1.11" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== +parse-conflict-json@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" just-diff-apply "^5.2.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -6616,7 +6778,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6625,42 +6787,41 @@ parse-json@^5.0.0, parse-json@^5.2.0: lines-and-columns "^1.1.6" parse-json@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-8.0.0.tgz" - integrity sha512-QtWnjHuun44MCLbq9f2rlcX9Bp9FSsPgQS9nuGcIm3J557b3/CvmYUhwChgJJDlMpuNN0sFRAogzQ8xMitD1oQ== + version "8.1.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" + integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== dependencies: "@babel/code-frame" "^7.22.13" - index-to-position "^0.1.0" - json-parse-even-better-errors "^3.0.0" - type-fest "^4.6.0" + index-to-position "^0.1.2" + type-fest "^4.7.1" parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + version "7.0.1" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.1.tgz#ae548cd36315fd8881a3610eae99fa08123ee0e2" + integrity sha512-6ReLMptznuuOEzLoGEa+I1oWRSj2Zna5jLWC+l6zlfAI4dbbSaIES29ThzuPkbhNahT65dWzfoZEO6cfJw2Ksg== dependencies: protocols "^2.0.0" parse-url@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: parse-path "^7.0.0" path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-exists@^5.0.0: @@ -6670,97 +6831,102 @@ path-exists@^5.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== perfect-debounce@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@0.6.0: +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pidtree@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== +pify@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" @@ -6772,176 +6938,156 @@ pkg-dir@^8.0.0: dependencies: find-up-simple "^1.0.0" -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== -postcss@^8.4.32: - version "8.4.33" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== +postcss-selector-parser@^6.0.10: + version "6.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" + cssesc "^3.0.0" + util-deprecate "^1.0.2" -postcss@^8.4.33, postcss@^8.4.35: - version "8.4.35" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== +postcss@^8.4.43, postcss@^8.4.48, postcss@^8.5.3: + version "8.5.3" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" preact@^10.0.0: - version "10.19.6" - resolved "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz#66007b67aad4d11899f583df1b0116d94a89b8f5" - integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw== + version "10.26.4" + resolved "https://registry.npmjs.org/preact/-/preact-10.26.4.tgz#b514f4249453a4247c82ff6d1267d59b7d78f9f9" + integrity sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.8.8: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== pretty-format@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== +proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +proggy@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" + integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== + promise-all-reject-late@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== +promise-call-limit@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" + integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" retry "^0.12.0" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== +promzard@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" + integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== dependencies: - read "1" + read "^3.0.1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== +property-information@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" + integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + version "2.0.2" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz#822e8fcdcb3df5356538b3e91bfd890b067fd0a4" + integrity sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ== proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -q@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== + version "18.3.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" +read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json@^5.0.0, read-package-json@^5.0.1: - version "5.0.2" - resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" read-pkg-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== dependencies: find-up "^2.0.0" @@ -6949,7 +7095,7 @@ read-pkg-up@^3.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -6958,7 +7104,7 @@ read-pkg-up@^7.0.1: read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" @@ -6967,7 +7113,7 @@ read-pkg@^3.0.0: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -6988,32 +7134,32 @@ read-pkg@^9.0.1: read-yaml-file@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz" + resolved "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz#c5866712db9ef5343b4d02c2413bada53c41c4a9" integrity sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ== dependencies: js-yaml "^4.0.0" strip-bom "^4.0.0" -read@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== +read@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== dependencies: - mute-stream "~0.0.4" + mute-stream "^1.0.0" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -7023,74 +7169,93 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regex-recursion@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33" + integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== + dependencies: + regex-utilities "^2.3.0" + +regex-utilities@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" + integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + +regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz#282fa4435d0c700b09c0eb0982b602e05ab6a34f" + integrity sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA== + dependencies: + regex-utilities "^2.3.0" + +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: +resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-global@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-2.0.0.tgz#2ff55640800bf3692f089b6008357f75e1a27e54" - integrity sha512-gnAQ0Q/KkupGkuiMyX4L0GaBV8iFwlmoXsMtOz+DFTaKmHhOO/dSlP1RMKhpvHv/dh6K/IQkowGJBqUG0NfBUw== - dependencies: - global-directory "^4.0.1" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pkg@^2.0.0: version "2.0.0" @@ -7099,83 +7264,118 @@ resolve-pkg@^2.0.0: dependencies: resolve-from "^5.0.0" +resolve.exports@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + resolve@^1.10.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + version "1.22.10" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" retry@^0.12.0: version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -rfdc@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +rollup@^4.20.0: + version "4.34.9" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz#e1eb397856476778aeb6ac2ac3d09b2ce177a558" + integrity sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ== dependencies: - glob "^7.1.3" + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.34.9" + "@rollup/rollup-android-arm64" "4.34.9" + "@rollup/rollup-darwin-arm64" "4.34.9" + "@rollup/rollup-darwin-x64" "4.34.9" + "@rollup/rollup-freebsd-arm64" "4.34.9" + "@rollup/rollup-freebsd-x64" "4.34.9" + "@rollup/rollup-linux-arm-gnueabihf" "4.34.9" + "@rollup/rollup-linux-arm-musleabihf" "4.34.9" + "@rollup/rollup-linux-arm64-gnu" "4.34.9" + "@rollup/rollup-linux-arm64-musl" "4.34.9" + "@rollup/rollup-linux-loongarch64-gnu" "4.34.9" + "@rollup/rollup-linux-powerpc64le-gnu" "4.34.9" + "@rollup/rollup-linux-riscv64-gnu" "4.34.9" + "@rollup/rollup-linux-s390x-gnu" "4.34.9" + "@rollup/rollup-linux-x64-gnu" "4.34.9" + "@rollup/rollup-linux-x64-musl" "4.34.9" + "@rollup/rollup-win32-arm64-msvc" "4.34.9" + "@rollup/rollup-win32-ia32-msvc" "4.34.9" + "@rollup/rollup-win32-x64-msvc" "4.34.9" + fsevents "~2.3.2" -rollup@^4.2.0: - version "4.9.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" - integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== +rollup@^4.34.9: + version "4.40.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz#13742a615f423ccba457554f006873d5a4de1920" + integrity sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.7" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.6" - "@rollup/rollup-android-arm64" "4.9.6" - "@rollup/rollup-darwin-arm64" "4.9.6" - "@rollup/rollup-darwin-x64" "4.9.6" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" - "@rollup/rollup-linux-arm64-gnu" "4.9.6" - "@rollup/rollup-linux-arm64-musl" "4.9.6" - "@rollup/rollup-linux-riscv64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-musl" "4.9.6" - "@rollup/rollup-win32-arm64-msvc" "4.9.6" - "@rollup/rollup-win32-ia32-msvc" "4.9.6" - "@rollup/rollup-win32-x64-msvc" "4.9.6" + "@rollup/rollup-android-arm-eabi" "4.40.0" + "@rollup/rollup-android-arm64" "4.40.0" + "@rollup/rollup-darwin-arm64" "4.40.0" + "@rollup/rollup-darwin-x64" "4.40.0" + "@rollup/rollup-freebsd-arm64" "4.40.0" + "@rollup/rollup-freebsd-x64" "4.40.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.40.0" + "@rollup/rollup-linux-arm-musleabihf" "4.40.0" + "@rollup/rollup-linux-arm64-gnu" "4.40.0" + "@rollup/rollup-linux-arm64-musl" "4.40.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.40.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.40.0" + "@rollup/rollup-linux-riscv64-gnu" "4.40.0" + "@rollup/rollup-linux-riscv64-musl" "4.40.0" + "@rollup/rollup-linux-s390x-gnu" "4.40.0" + "@rollup/rollup-linux-x64-gnu" "4.40.0" + "@rollup/rollup-linux-x64-musl" "4.40.0" + "@rollup/rollup-win32-arm64-msvc" "4.40.0" + "@rollup/rollup-win32-ia32-msvc" "4.40.0" + "@rollup/rollup-win32-x64-msvc" "4.40.0" fsevents "~2.3.2" run-async@^2.4.0: version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-async@^3.0.0: @@ -7185,161 +7385,228 @@ run-async@^3.0.0: run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -"semver@2 || 3 || 4 || 5", semver@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5", semver@^5.6.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@1.1.6, shiki@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/shiki/-/shiki-1.1.6.tgz#cbe38edfc6d5fbe208b9fca25af8aefef7a24c73" - integrity sha512-j4pcpvaQWHb42cHeV+W6P+X/VcK7Y2ctvEham6zB8wsuRQroT6cEMIkiUmBU2Nqg2qnHZDH6ZyRdVldcy0l6xw== +shiki@^2.1.0: + version "2.5.0" + resolved "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz#09d01ebf3b0b06580431ce3ddc023320442cf223" + integrity sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ== + dependencies: + "@shikijs/core" "2.5.0" + "@shikijs/engine-javascript" "2.5.0" + "@shikijs/engine-oniguruma" "2.5.0" + "@shikijs/langs" "2.5.0" + "@shikijs/themes" "2.5.0" + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - "@shikijs/core" "1.1.6" + es-errors "^1.3.0" + object-inspect "^1.13.3" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" siginfo@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -slash@^3.0.0: +sigstore@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" + integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/sign" "^2.3.2" + "@sigstore/tuf" "^2.3.4" + "@sigstore/verify" "^1.2.1" + +slash@3.0.0, slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slice-ansi@^7.0.0: +slice-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== dependencies: ansi-styles "^6.2.1" @@ -7347,115 +7614,125 @@ slice-ansi@^7.0.0: smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== +socks@^2.8.3: + version "2.8.4" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" + integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" sort-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" -sort-keys@^4.0.0, sort-keys@^4.2.0: +sort-keys@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== dependencies: is-plain-obj "^2.0.0" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@^0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.21" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== speakingurl@^14.0.1: version "14.0.1" resolved "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== -split2@^3.0.0: +split2@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" split2@^4.0.0: version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -split@^1.0.0: +split@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== +ssri@^10.0.0, ssri@^10.0.6: + version "10.0.6" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== dependencies: - minipass "^3.1.1" + minipass "^7.0.3" stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -7465,24 +7742,24 @@ stackback@0.0.2: resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -std-env@^3.5.0: - version "3.7.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +std-env@^3.9.0: + version "3.9.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== -streamx@^2.13.0, streamx@^2.15.0: - version "2.15.8" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.15.8.tgz#5471145b54ee43b5088877023d8d0a2a77f95d8d" - integrity sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ== +streamx@^2.15.0, streamx@^2.21.0: + version "2.22.0" + resolved "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" + integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" + fast-fifo "^1.3.2" + text-decoder "^1.1.0" optionalDependencies: bare-events "^2.2.0" -string-argv@0.3.2: +string-argv@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== "string-width-cjs@npm:string-width@^4.2.0": @@ -7496,7 +7773,7 @@ string-argv@0.3.2: "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -7513,48 +7790,68 @@ string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" string-width@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz" - integrity sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw== + version "7.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== dependencies: emoji-regex "^10.3.0" get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + safe-buffer "~5.2.0" -string_decoder@^1.1.1, string_decoder@~1.1.1: +string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7564,88 +7861,88 @@ string_decoder@^1.1.1, string_decoder@~1.1.1: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@4.0.0, strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-comments-strings@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/strip-comments-strings/-/strip-comments-strings-1.2.0.tgz" + resolved "https://registry.npmjs.org/strip-comments-strings/-/strip-comments-strings-1.2.0.tgz#b19a1382e8f69a704ef61ad5069c29721c20aaad" integrity sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@3.1.1, strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== - dependencies: - js-tokens "^8.0.2" - -strong-log-transformer@^2.1.0: +strong-log-transformer@2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== dependencies: duplexer "^0.1.1" minimist "^1.2.0" through "^2.3.4" +superjson@^2.2.1: + version "2.2.2" + resolved "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz#9d52bf0bf6b5751a3c3472f1292e714782ba3173" + integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== + dependencies: + copy-anything "^3.0.2" + supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== tabbable@^6.2.0: @@ -7654,20 +7951,20 @@ tabbable@^6.2.0: integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== tar-fs@^3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz#f954d77767e4e6edf973384e1eb95f8f81d64ed9" - integrity sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg== + version "3.0.8" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7" + integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== dependencies: pump "^3.0.0" tar-stream "^3.1.5" optionalDependencies: - bare-fs "^2.1.1" - bare-path "^2.1.0" + bare-fs "^4.0.1" + bare-path "^3.0.0" tar-stream@^3.1.5: - version "3.1.6" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz" - integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + version "3.1.7" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== dependencies: b4a "^1.6.4" fast-fifo "^1.2.0" @@ -7675,7 +7972,7 @@ tar-stream@^3.1.5: tar-stream@~2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -7684,131 +7981,147 @@ tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== +tar@6.2.1, tar@^6.1.11, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -temp-dir@^1.0.0: +temp-dir@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +test-exclude@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" + integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + glob "^10.4.1" + minimatch "^9.0.4" + +text-decoder@^1.1.0: + version "1.2.3" + resolved "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" + integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== + dependencies: + b4a "^1.6.4" text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-extensions@^2.0.0: version "2.4.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - through2@^2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== -tinybench@^2.5.1: - version "2.6.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinypool@^0.8.2: - version "0.8.2" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" - integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== +tinyexec@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1" + integrity sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw== -tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== +tinyglobby@^0.2.12, tinyglobby@^0.2.13: + version "0.2.13" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e" + integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinypool@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" + integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== + +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== + +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmp@^0.2.1, tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + version "0.2.3" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== +ts-api-utils@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -7817,440 +8130,500 @@ tsconfig-paths@^3.15.0: strip-bom "^3.0.0" tsconfig-paths@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz" - integrity sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw== + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== +tuf-js@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" + integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== dependencies: - tslib "^1.8.1" + "@tufjs/models" "2.0.1" + debug "^4.3.4" + make-fetch-happen "^13.0.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: +type-detect@4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^3.0.0: - version "3.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -type-fest@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz" - integrity sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" +type-fest@^4.6.0, type-fest@^4.7.1: + version "4.37.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz#7cf008bf77b63a33f7ca014fa2a3f09fd69e8937" + integrity sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg== -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-length@^1.0.4: +typed-array-byte-offset@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: - is-typedarray "^1.0.0" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -"typescript@^3 || ^4": - version "4.9.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -typescript@^5.2.2: - version "5.3.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== +"typescript@>=3 < 6", typescript@^5.2.2: + version "5.8.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + version "3.19.3" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + unicorn-magic@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: - unique-slug "^3.0.0" + unique-slug "^4.0.0" -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" -universal-user-agent@^6.0.0: +unist-util-is@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -upath@^2.0.1: +upath@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" +validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== dependencies: - builtins "^5.0.0" + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" -vite-node@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" - integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" -vite@^5.0.0: - version "5.0.12" - resolved "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" - integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== +vite-node@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-3.1.2.tgz#b17869a12307f5260b20ba4b58cf493afee70aa7" + integrity sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA== dependencies: - esbuild "^0.19.3" - postcss "^8.4.32" - rollup "^4.2.0" + cac "^6.7.14" + debug "^4.4.0" + es-module-lexer "^1.6.0" + pathe "^2.0.3" + vite "^5.0.0 || ^6.0.0" + +"vite@^5.0.0 || ^6.0.0": + version "6.3.2" + resolved "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz#4c1bb01b1cea853686a191657bbc14272a038f0a" + integrity sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg== + dependencies: + esbuild "^0.25.0" + fdir "^6.4.3" + picomatch "^4.0.2" + postcss "^8.5.3" + rollup "^4.34.9" + tinyglobby "^0.2.12" optionalDependencies: fsevents "~2.3.3" -vite@^5.1.3: - version "5.1.4" - resolved "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" - integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== +vite@^5.4.14: + version "5.4.18" + resolved "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz#b5af357f9d5ebb2e0c085779b7a37a77f09168a4" + integrity sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA== dependencies: - esbuild "^0.19.3" - postcss "^8.4.35" - rollup "^4.2.0" + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" -vitepress-plugin-tabs@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz#2b193a72ed36b9fcd63e3907d3044fe7b6cf3e4e" - integrity sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A== - -vitepress@^1.0.0-rc.44: - version "1.0.0-rc.44" - resolved "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.44.tgz#01bce883761c22de42b9869a95f04bd02cbb8cdb" - integrity sha512-tO5taxGI7fSpBK1D8zrZTyJJERlyU9nnt0jHSt3fywfq3VKn977Hg0wUuTkEmwXlFYwuW26+6+3xorf4nD3XvA== - dependencies: - "@docsearch/css" "^3.5.2" - "@docsearch/js" "^3.5.2" - "@shikijs/core" "^1.1.5" - "@shikijs/transformers" "^1.1.5" - "@types/markdown-it" "^13.0.7" - "@vitejs/plugin-vue" "^5.0.4" - "@vue/devtools-api" "^7.0.14" - "@vueuse/core" "^10.7.2" - "@vueuse/integrations" "^10.7.2" - focus-trap "^7.5.4" +vitepress-plugin-tabs@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.7.0.tgz#e3ffde4df3ca46dc0f269ae0895401601f276b0a" + integrity sha512-++RyeFNEsj/bJBXJK1IURRbJOB9vRqCahRwk1a2ntp9+SZy+7qgE5806vw9W7+uKR9CMi1iW+6plOcCKpmDnfA== + +vitepress@^1.3.4: + version "1.6.3" + resolved "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz#4e4662ce2ad55ef64604ecf4f96231a8da2fe9ba" + integrity sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw== + dependencies: + "@docsearch/css" "3.8.2" + "@docsearch/js" "3.8.2" + "@iconify-json/simple-icons" "^1.2.21" + "@shikijs/core" "^2.1.0" + "@shikijs/transformers" "^2.1.0" + "@shikijs/types" "^2.1.0" + "@types/markdown-it" "^14.1.2" + "@vitejs/plugin-vue" "^5.2.1" + "@vue/devtools-api" "^7.7.0" + "@vue/shared" "^3.5.13" + "@vueuse/core" "^12.4.0" + "@vueuse/integrations" "^12.4.0" + focus-trap "^7.6.4" mark.js "8.11.1" - minisearch "^6.3.0" - shiki "^1.1.5" - vite "^5.1.3" - vue "^3.4.19" + minisearch "^7.1.1" + shiki "^2.1.0" + vite "^5.4.14" + vue "^3.5.13" -vitest@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" - integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== - dependencies: - "@vitest/expect" "1.3.1" - "@vitest/runner" "1.3.1" - "@vitest/snapshot" "1.3.1" - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.2" - vite "^5.0.0" - vite-node "1.3.1" - why-is-node-running "^2.2.2" - -vue-demi@>=0.14.7: - version "0.14.7" - resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" - integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== - -vue@^3.4.19: - version "3.4.19" - resolved "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz#f9ae0a44db86628548736ff04152830726a97263" - integrity sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw== - dependencies: - "@vue/compiler-dom" "3.4.19" - "@vue/compiler-sfc" "3.4.19" - "@vue/runtime-dom" "3.4.19" - "@vue/server-renderer" "3.4.19" - "@vue/shared" "3.4.19" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== +vitest@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/vitest/-/vitest-3.1.2.tgz#63afc16b6da3bea6e39f5387d80719e70634ba66" + integrity sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ== + dependencies: + "@vitest/expect" "3.1.2" + "@vitest/mocker" "3.1.2" + "@vitest/pretty-format" "^3.1.2" + "@vitest/runner" "3.1.2" + "@vitest/snapshot" "3.1.2" + "@vitest/spy" "3.1.2" + "@vitest/utils" "3.1.2" + chai "^5.2.0" + debug "^4.4.0" + expect-type "^1.2.1" + magic-string "^0.30.17" + pathe "^2.0.3" + std-env "^3.9.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.13" + tinypool "^1.0.2" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0" + vite-node "3.1.2" + why-is-node-running "^2.3.0" + +vue@^3.5.0, vue@^3.5.13: + version "3.5.13" + resolved "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" + integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== + dependencies: + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-sfc" "3.5.13" + "@vue/runtime-dom" "3.5.13" + "@vue/server-renderer" "3.5.13" + "@vue/shared" "3.5.13" + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.18" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^1.2.14: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== +which@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: siginfo "^2.0.0" stackback "0.0.2" -wide-align@^1.1.5: +wide-align@1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" word-wrap@^1.0.3, word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": @@ -8262,9 +8635,9 @@ wordwrap@^1.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.2.0: +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -8273,7 +8646,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -8291,7 +8664,7 @@ wrap-ansi@^8.1.0: wrap-ansi@^9.0.0: version "9.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== dependencies: ansi-styles "^6.2.1" @@ -8300,47 +8673,29 @@ wrap-ansi@^9.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@5.0.1, write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + write-file-atomic@^2.4.2: version "2.4.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - write-json-file@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== dependencies: detect-indent "^5.0.0" @@ -8350,21 +8705,9 @@ write-json-file@^3.2.0: sort-keys "^2.0.0" write-file-atomic "^2.4.2" -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: +write-pkg@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== dependencies: sort-keys "^2.0.0" @@ -8381,60 +8724,47 @@ write-yaml-file@^5.0.0: xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.6.0: + version "2.7.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== -yargs-parser@20.2.4, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yaml@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^17.0.0, yargs@^17.6.2: +yargs@17.7.2, yargs@^17.0.0, yargs@^17.6.2: version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -8445,12 +8775,35 @@ yargs@^17.0.0, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + version "1.1.1" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==