diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 1c64f559ae..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,80 +0,0 @@ -version: 2.1 - -commands: - update-yarn: - steps: - - run: - name: Update yarn - command: yarn global add yarn@latest - install: - steps: - - run: - name: Install dependencies - command: yarn install --ignore-engines - audit: - steps: - - run: - name: Audit dependencies - command: yarn audit - build: - steps: - - run: - name: Build packages - command: yarn build - lint: - steps: - - run: - name: Lint project - command: yarn lint - deps: - steps: - - run: - name: Check dependencies - command: yarn deps - test: - steps: - - run: - name: Test - command: yarn test - save-cache: - steps: - - save_cache: - key: v{{ .Environment.CIRCLE_CACHE_VERSION }}-{{ arch }}-npm-lock-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "yarn.lock" }} - paths: - - node_modules - run-node: - steps: - - checkout - - restore_cache: - keys: - - v1-dependencies-{{ checksum "yarn.lock" }} - - update-yarn - - install - - save-cache - - build - - lint - - deps - - test -jobs: - v8: - docker: - - image: node:8 - steps: - - run-node - v10: - docker: - - image: node:10 - steps: - - run-node - v12: - docker: - - image: node:12 - steps: - - run-node - -workflows: - node: - jobs: - - v8 - - v10 - - v12 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/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d36de54ff3..08d0eac7e9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,13 +1,17 @@ { - "name": "commitlint-dev", - "dockerComposeFile": ["../docker-compose.yml"], - "service": "commitlint", - "workspaceFolder": "/root/repo", - "shutdownAction": "stopCompose", - "extensions": [ + "name": "commitlint-dev", + "dockerComposeFile": ["../compose.yaml"], + "service": "commitlint", + "workspaceFolder": "/root/repo", + "shutdownAction": "stopCompose", + "customizations": { + "vscode": { + "extensions": [ "editorconfig.editorconfig", - "ms-vsliveshare.vsliveshare-pack", + "esbenp.prettier-vscode", "ms-azuretools.vscode-docker", - "esbenp.prettier-vscode" - ] + "ms-vsliveshare.vsliveshare-pack" + ] + } + } } diff --git a/.editorconfig b/.editorconfig index 62fcd43244..39506da27e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,7 +4,7 @@ insert_final_newline = true trim_trailing_whitespace = true indent_style = tab -[{.*rc,*.yml,*.md,package.json,lerna.json,*.svg}] +[{.*rc,*.yml,*.md,*.json,*.svg}] indent_style = space [*.md] diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index f7633cdee8..0147257dd9 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a7a46aec3d..be7921be0c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,52 +6,175 @@ Yeay! You want to contribute to commitlint. That's amazing! To smoothen everyone's experience involved with the project please take note of the following guidelines and rules. ## Found an Issue? + Thank you for reporting any issues you find. We do our best to test and make commitlint as solid as possible, but any reported issue is a real help. > commitlint issues Please follow these guidelines when reporting issues: -* Provide a title in the format of ` when ` -* Tag your issue with the tag `bug` -* Provide a short summary of what you are trying to do -* Provide the log of the encountered error if applicable -* Provide the exact version of commitlint. Check `npm ls @commitlint/cli` when in doubt -* Be awesome and consider contributing a [pull request](#want-to-contribute) + +- Provide a title in the format of ` when ` +- Tag your issue with the tag `bug` +- Provide a short summary of what you are trying to do +- Provide the log of the encountered error if applicable +- Provide the exact version of commitlint. Check `npm ls @commitlint/cli` when in doubt +- Be awesome and consider contributing a [pull request](#want-to-contribute) ## Want to contribute? + You consider contributing changes to commitlint – we dig that! Please consider these guidelines when filing a pull request: > commitlint pull requests -* Follow the [Coding Rules](#coding-rules) -* Follow the [Commit Rules](#commit-rules) -* Make sure you rebased the current master branch when filing the pull request -* Squash your commits when filing the pull request -* Provide a short title with a maximum of 100 characters -* Provide a more detailed description containing - * What you want to achieve - * What you changed - * What you added - * What you removed - -## Coding Rules +- Follow the [Coding Rules](#coding-rules) +- Follow the [Commit Rules](#commit-rules) +- Make sure you rebased the current master branch when filing the pull request +- Squash your commits when filing the pull request +- Provide a short title with a maximum of 100 characters +- Provide a more detailed description containing + _ What you want to achieve + _ What you changed + _ What you added + _ What you removed + +### Coding Rules + To keep the code base of commitlint neat and tidy the following rules apply to every change > Coding standards -* `prettier` is king -* Favor micro library over swiss army knives (rimraf, ncp vs. fs-extra) -* Be awesome +- `prettier` is king +- Favor micro library over swiss army knives (rimraf, ncp vs. fs-extra) +- Be awesome + +### Commit Rules -## Commit Rules To help everyone with understanding the commit history of commitlint the following commit rules are enforced. To make your life easier commitlint is commitizen-friendly and provides the npm run-script `commit`. > Commit standards -* [conventional-changelog](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/prompt) -* husky commit message hook available -* present tense -* maximum of 100 characters -* message format of `$type($scope): $message` +- [conventional-changelog](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/prompt) +- husky commit message hook available +- present tense +- maximum of 100 characters +- message format of `$type($scope): $message` + +### Environment setup + +This project uses `yarn`, so be sure that it is available in your shell environment. + +After cloning the repo run + +```sh +yarn install +``` + +### Testing + +From the project root directory, use the following commands to run the test suite + +```sh +yarn build +yarn test +``` + +### Documentation updates + +Documentation uses `vitepress`. +To run and edit the documentation locally run: + +```sh +yarn docs-dev +``` + +To have a preview of the deployed doc run: + +```sh +yarn docs-build +yarn docs-serve +``` + +For more information refer to [vitepress documentation](https://vitepress.dev). + +## Package dependency overview + +![commitlint-dependencies](https://user-images.githubusercontent.com/4248851/58385093-34b79780-7feb-11e9-8f27-bffc4aca3eba.png) + +(Partly outdated) + +## Publishing a release + +```sh +npm login +nvm use (if you have nvm installed) +``` + +- [nvm](https://github.com/nvm-sh/nvm) +- [asdf](https://asdf-vm.com/) is supported as well + +```sh +yarn clean +yarn install +yarn build +yarn test +yarn run publish --otp +``` + +If something in between fails (like a new package was added and needs to be published for the +first time but you forgot) you can use `lerna publish from-package` to publish anything that +has not been published yet. + +### Create GitHub release + +1. Copy changelog entry for the new version +1. Create release for the new tag: https://github.com/conventional-changelog/commitlint/releases +1. Post in the [commitlint Slack-channel][12] + +### Publish a `next` release (or i.e. patch release) + +```sh +npm login +nvm use (if you have nvm installed) +``` + +```sh +yarn clean +yarn install +yarn build +yarn test +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 [`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 +npm publish [PACKAGE_NAME] --access public +``` + +From within the folder first i.e. `cd @commitlint/new-packages`. + +#### Move `next` to `latest` + +```sh +npm login +``` + +```sh +npx lerna exec --no-bail --no-private --no-sort --stream -- '[ -n "$(npm v . dist-tags.next)" ] && npm dist-tag add ${LERNA_PACKAGE_NAME}@$(npm v . dist-tags.next) latest --otp ' +``` + +Remove next: + +```sh +npx lerna exec --no-bail --no-private --no-sort --stream -- '[ -n "$(npm v . dist-tags.next)" ] && npm dist-tag rm ${LERNA_PACKAGE_NAME} next --otp ' +``` diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index eabb0c9a9c..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,48 +0,0 @@ - - -## Expected Behavior - - - -## Current Behavior - - - -## Affected packages -* [ ] cli -* [ ] core -* [ ] prompt -* [ ] config-angular - -## Possible Solution - - - -## Steps to Reproduce (for bugs) - - -1. -2. -3. -4. - -
- commitlint.config.js - - -```js -``` -
- -## Context - - - -## Your Environment - - -| Executable | Version | -| ---: | :--- | -| `commitlint --version` | VERSION | -| `git --version` | VERSION | -| `node --version` | VERSION | diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 0000000000..7e1df48553 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,81 @@ +name: "🐛 Bug Report" +description: Create a new ticket for a bug. +title: "fix: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Provide a general summary of the issue in the Title above + - 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: current-behavior + attributes: + 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" + options: + - label: cli + - label: core + - label: prompt + - label: config-angular + - type: textarea + id: possible-solution + attributes: + 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: context + attributes: + 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 + validations: + required: false + - type: input + id: commitlint-version + attributes: + label: "commitlint --version" + placeholder: "@commitlint/cli@x.x.x" + validations: + required: true + - type: input + id: git-version + attributes: + label: "git --version" + placeholder: vx.x.x + validations: + required: true + - type: input + id: node-version + attributes: + 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 new file mode 100644 index 0000000000..063dd15fe4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -0,0 +1,49 @@ +name: "✨ Feature Request" +description: Create a new ticket for a new feature request +title: "feat: <title>" +labels: ["feature"] +body: + - type: markdown + attributes: + value: | + Provide a general summary of the issue in the Title above + - type: textarea + id: expected-behavior + attributes: + label: "Expected Behavior" + description: Tell us how it should work + placeholder: Short and explicit description of your request... + validations: + required: true + - type: textarea + id: current-behavior + attributes: + label: "Current Behavior" + description: Explain the difference from current behavior + validations: + required: false + - type: checkboxes + id: affected-packages + attributes: + label: "Affected packages" + options: + - label: cli + - label: core + - label: prompt + - label: config-angular + - type: textarea + id: possible-solution + attributes: + label: "Possible Solution" + description: Ideas how to implement the addition or change + validations: + required: false + - type: textarea + id: context + attributes: + 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 + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..0086358db1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f3dfbc8d72..3f26ef9948 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,20 +1,21 @@ <!--- Provide a general summary of your changes in the Title above --> ## Description + <!--- Describe your changes in detail --> ## Motivation and Context + <!--- Why is this change required? What problem does it solve? --> <!--- If it fixes an open issue, please link to the issue here. --> ## Usage examples + <!--- Provide examples of intended usage --> ```js // commitlint.config.js -module.exports = { - -}; +module.exports = {}; ``` ```sh @@ -22,17 +23,22 @@ echo "your commit message here" | commitlint # fails/passes ``` ## How Has This Been Tested? + <!--- Please describe in detail how you tested your changes. --> ## Types of changes + <!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> + - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) ## Checklist: -<!--- Go over all the following points, and put an `x` in all the boxes that apply. --> + +<!--- Go over all the following points, and put an `x` in all the boxes that apply. See the README for information on testing. --> <!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> + - [ ] My change requires a change to the documentation. - [ ] I have updated the documentation accordingly. - [ ] I have added tests to cover my changes. diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000000..27f3c361cc --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,87 @@ +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: + matrix: + os: [ubuntu-22.04, ubuntu-24.04, windows-2022, windows-2025] + node: [18, 20] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + cache: yarn + + - name: Install dependencies + run: yarn install --ignore-engines --frozen-lockfile + + - name: Build packages + run: yarn build + + - name: Test + run: yarn test + + codeQuality: + name: Code quality + needs: [build] + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: yarn + + - name: Install dependencies + run: yarn install --ignore-engines --frozen-lockfile + + - name: Check 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-24.04 + container: + image: "ubuntu:24.04" + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update --yes + + # NOTE: do not change the below with an `actions/setup-node` step! or it + # would make this CI job entirely pointless + apt install --yes npm + + npm install --global yarn + yarn install + + - name: Print versions + run: node --version && npm --version && yarn --version + + - name: Build + run: yarn build + + - name: Run Tests + run: yarn test diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 0000000000..9bcc37d685 --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,47 @@ +name: Conventional Commitlint + +on: + push: + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + commitlint: + name: Commitlint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: yarn + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build packages + run: yarn build + + - name: Print versions + run: | + git --version + node --version + npm --version + yarn --version + yarn commitlint --version + + - name: Validate current commit (last commit) with commitlint + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + run: yarn commitlint --last --verbose + + - name: Validate PR commits with commitlint + if: github.event_name == 'pull_request' + run: yarn commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose diff --git a/.github/workflows/container-build.yml b/.github/workflows/container-build.yml new file mode 100644 index 0000000000..6bc4cc1816 --- /dev/null +++ b/.github/workflows/container-build.yml @@ -0,0 +1,45 @@ +name: container build +on: + push: + tags: + - "**" + schedule: + - cron: "0 0 * * *" + pull_request: + paths: + - "Dockerfile.ci" +jobs: + container-build: + if: github.repository == 'conventional-changelog/commitlint' + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + - name: Log into registry + 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@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 + with: + images: commitlint/commitlint + tags: | + type=semver,pattern={{version}} + type=edge,branch=master + type=ref,event=branch + type=sha,prefix=,format=short + - name: Build and push container image + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + with: + context: . + file: Dockerfile.ci + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + platforms: linux/amd64,linux/arm64 diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml new file mode 100644 index 0000000000..c7c7891a64 --- /dev/null +++ b/.github/workflows/docs-deploy.yml @@ -0,0 +1,63 @@ +name: Deploy docs site to Pages + +on: + push: + branches: [master] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + if: github.repository == 'conventional-changelog/commitlint' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: yarn + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Install dependencies + run: yarn install + + - name: Build with VitePress + run: | + yarn docs-build + touch ./docs/.vitepress/dist/.nojekyll + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./docs/.vitepress/dist + + # Deployment job + deploy: + if: github.repository == 'conventional-changelog/commitlint' + environment: + name: docs + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index db0f60a669..e9a4fbe8ce 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,12 @@ package-lock.json lib/ package.json.lerna_backup /*.iml -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo +coverage +dist + +docs/.vitepress/dist +docs/.vitepress/cache + +# For testing nested workspaces does not have the package's dependencies name in the scope +!**/config-lerna-scopes/fixtures/nested-workspaces/**/node_modules diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000000..3b8df8ca71 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +node @commitlint/cli/lib/cli.js --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000000..53f08ae2a9 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,5 @@ +yarn lint-staged + +# be sure to build with up to date source +# before running pre-commit hook which is using `@commitlint/cli/lib/cli.js` +yarn build diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..521a9f7c07 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000000..25bf17fc5a --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18 \ No newline at end of file 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/.prettierignore b/.prettierignore index c3af857904..9d955cd018 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,5 @@ lib/ +coverage/ +node_modules/ +fixtures/ +CHANGELOG.md diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000..0e9804f101 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 18.20.8 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a4cdcc2987..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -os: windows -language: node_js -node_js: - - lts/* -before_script: - - yarn build diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..3096b4ea7c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Jest Test Current file", + "program": "${workspaceFolder}/node_modules/jest/bin/jest.js", + "cwd": "${workspaceFolder}", + "args": ["--runInBand", "--no-cache", "--no-coverage", "${fileBasename}"], + "sourceMaps": true, + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 55712c19f1..25fa6215fd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "typescript.tsdk": "node_modules/typescript/lib" -} \ No newline at end of file + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/.yarnrc b/.yarnrc index aeff25b683..9f4075ec6a 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,3 +1,2 @@ -workspaces-experimental "true" registry "https://registry.npmjs.org/" --install.ignore-engines true diff --git a/@alias/commitlint-config-angular/CHANGELOG.md b/@alias/commitlint-config-angular/CHANGELOG.md index 513fbe8e6b..5c8046ab9d 100644 --- a/@alias/commitlint-config-angular/CHANGELOG.md +++ b/@alias/commitlint-config-angular/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package commitlint-config-angular @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package commitlint-config-angular @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,214 +27,643 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [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 -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [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 -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [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 -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [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 -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package commitlint-config-angular -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package commitlint-config-angular -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package commitlint-config-angular -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package commitlint-config-angular -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package commitlint-config-angular -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package commitlint-config-angular -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package commitlint-config-angular -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) +**Note:** Version bump only for package commitlint-config-angular -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) -### Features +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +### BREAKING CHANGES +* drop node v14 and v16 support +* chore: remove unused types -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +* docs: prepare node update and new release +* chore!: minimum TS version v5 +* drop TS v4 support +* ci: remove node v14/16 checks -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +* chore: adjust node types to minimal supported version +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, -### Features +* docs: simplify releases and remove roadmap -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) +**Note:** Version bump only for package commitlint-config-angular -### Features -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package commitlint-config-angular + + -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package commitlint-config-angular + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package commitlint-config-angular + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package commitlint-config-angular + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package commitlint-config-angular + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package commitlint-config-angular + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package commitlint-config-angular + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package commitlint-config-angular + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package commitlint-config-angular + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package commitlint-config-angular + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package commitlint-config-angular + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package commitlint-config-angular + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package commitlint-config-angular + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package commitlint-config-angular + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package commitlint-config-angular + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package commitlint-config-angular + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package commitlint-config-angular + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package commitlint-config-angular + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package commitlint-config-angular + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package commitlint-config-angular + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package commitlint-config-angular + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package commitlint-config-angular + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package commitlint-config-angular + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package commitlint-config-angular + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package commitlint-config-angular + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package commitlint-config-angular + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package commitlint-config-angular + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package commitlint-config-angular + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package commitlint-config-angular + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package commitlint-config-angular + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package commitlint-config-angular + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package commitlint-config-angular + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + ### Features -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +<a name="3.0.2"></a> +## 3.0.2 (2017-07-11) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) <a name="3.0.0"></a> + # 3.0.0 (2017-07-10) +### Features + +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) diff --git a/@alias/commitlint-config-angular/index.js b/@alias/commitlint-config-angular/index.js index 350c9f08f2..0598f27f73 100644 --- a/@alias/commitlint-config-angular/index.js +++ b/@alias/commitlint-config-angular/index.js @@ -1 +1 @@ -module.exports = require('@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 7af93d0936..6e1b9c8a08 100644 --- a/@alias/commitlint-config-angular/package.json +++ b/@alias/commitlint-config-angular/package.json @@ -1,19 +1,19 @@ { "name": "commitlint-config-angular", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Shareable commitlint config enforcing the angular commit convention", "files": [ "index.js" ], "scripts": { - "test": "exit 0", - "clean": "exit 0", "deps": "dep-check", "pkg": "pkg-check" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@alias/commitlint-config-angular" }, "keywords": [ "conventional-changelog", @@ -26,11 +26,15 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "dependencies": { - "@commitlint/config-angular": "^8.2.0" + "@commitlint/config-angular": "^20.0.0" }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint-config-lerna-scopes/CHANGELOG.md b/@alias/commitlint-config-lerna-scopes/CHANGELOG.md index 8afd6a4b54..562ee1191b 100644 --- a/@alias/commitlint-config-lerna-scopes/CHANGELOG.md +++ b/@alias/commitlint-config-lerna-scopes/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package commitlint-config-lerna-scopes @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package commitlint-config-lerna-scopes @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,7 +27,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +# [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 @@ -35,254 +35,537 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +## [17.6.2](https://github.com/conventional-changelog/commitlint/compare/v17.6.1...v17.6.2) (2023-05-03) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +## [17.2.1](https://github.com/conventional-changelog/commitlint/compare/v17.2.0...v17.2.1) (2022-11-01) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +## [16.2.2](https://github.com/conventional-changelog/commitlint/compare/v16.2.1...v16.2.2) (2022-02-14) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +**Note:** Version bump only for package commitlint-config-lerna-scopes + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) **Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES +- remove node 8 from circle-ci checks -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +also remove node 13 because we do not support experimental versions +- docs: update node v10 to latest LTS 10 version +Co-authored-by: Cedric van Putten <me@bycedric.com> -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +Co-authored-by: Cedric van Putten <me@bycedric.com> +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) +**Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package commitlint-config-lerna-scopes -### Features +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +**Note:** Version bump only for package commitlint-config-lerna-scopes -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) +**Note:** Version bump only for package commitlint-config-lerna-scopes -### Features +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +**Note:** Version bump only for package commitlint-config-lerna-scopes +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +**Note:** Version bump only for package commitlint-config-lerna-scopes +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) -### Features +**Note:** Version bump only for package commitlint-config-lerna-scopes -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="7.5.0"></a> +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### Bug Fixes +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package commitlint-config-lerna-scopes +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) + +**Note:** Version bump only for package commitlint-config-lerna-scopes + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) ### Features -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +<a name="3.0.2"></a> +## 3.0.2 (2017-07-11) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) + +<a name="3.0.1"></a> +## 3.0.1 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) <a name="3.0.0"></a> + # 3.0.0 (2017-07-10) +### Features + +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) diff --git a/@alias/commitlint-config-lerna-scopes/index.js b/@alias/commitlint-config-lerna-scopes/index.js index ff8392cc1b..000c9673ee 100644 --- a/@alias/commitlint-config-lerna-scopes/index.js +++ b/@alias/commitlint-config-lerna-scopes/index.js @@ -1 +1 @@ -module.exports = require('@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 cca37fcac5..83306fdafd 100644 --- a/@alias/commitlint-config-lerna-scopes/package.json +++ b/@alias/commitlint-config-lerna-scopes/package.json @@ -1,19 +1,19 @@ { "name": "commitlint-config-lerna-scopes", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Shareable commitlint config enforcing lerna package names as scopes", "files": [ "index.js" ], "scripts": { - "test": "exit 0", - "clean": "exit 0", "deps": "dep-check", "pkg": "pkg-check" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@alias/commitlint-config-lerna-scopes" }, "keywords": [ "conventional-changelog", @@ -26,11 +26,15 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "dependencies": { - "@commitlint/config-lerna-scopes": "^8.2.0" + "@commitlint/config-lerna-scopes": "^20.0.0" }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint-config-nx-scopes/CHANGELOG.md b/@alias/commitlint-config-nx-scopes/CHANGELOG.md new file mode 100644 index 0000000000..1a536c0de1 --- /dev/null +++ b/@alias/commitlint-config-nx-scopes/CHANGELOG.md @@ -0,0 +1,307 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [18.5.1](https://github.com/conventional-changelog/commitlint/compare/v18.5.0...v18.5.1) (2024-01-22) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [18.3.0](https://github.com/conventional-changelog/commitlint/compare/v18.2.0...v18.3.0) (2023-10-26) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [17.6.4](https://github.com/conventional-changelog/commitlint/compare/v17.6.3...v17.6.4) (2023-05-07) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package commitlint-config-nx-scopes + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package commitlint-config-nx-scopes + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package commitlint-config-nx-scopes + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package commitlint-config-nx-scopes + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package commitlint-config-nx-scopes + +# [16.2.0](https://github.com/conventional-changelog/commitlint/compare/v16.1.0...v16.2.0) (2022-01-25) + +### Features + +- add support for Nx monorepos via @commitlint/config-nx-scopes ([#2995](https://github.com/conventional-changelog/commitlint/issues/2995)) ([11879ad](https://github.com/conventional-changelog/commitlint/commit/11879adacbef3c939311b1ff597a7b894fcca0dc)) diff --git a/@alias/commitlint-config-nx-scopes/README.md b/@alias/commitlint-config-nx-scopes/README.md new file mode 100644 index 0000000000..056e9e5af4 --- /dev/null +++ b/@alias/commitlint-config-nx-scopes/README.md @@ -0,0 +1,3 @@ +# commitlint-config-nx-scopes + +> Alias of [@commitlint/config-nx-scopes](https://www.npmjs.com/package/@commitlint/config-nx-scopes) diff --git a/@alias/commitlint-config-nx-scopes/index.js b/@alias/commitlint-config-nx-scopes/index.js new file mode 100644 index 0000000000..2ba02e27da --- /dev/null +++ b/@alias/commitlint-config-nx-scopes/index.js @@ -0,0 +1 @@ +export { default } from "@commitlint/config-nx-scopes"; diff --git a/@alias/commitlint-config-nx-scopes/license.md b/@alias/commitlint-config-nx-scopes/license.md new file mode 100644 index 0000000000..d53adb06e4 --- /dev/null +++ b/@alias/commitlint-config-nx-scopes/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 - present Florian Guitton + +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/@alias/commitlint-config-nx-scopes/package.json b/@alias/commitlint-config-nx-scopes/package.json new file mode 100644 index 0000000000..61281494bd --- /dev/null +++ b/@alias/commitlint-config-nx-scopes/package.json @@ -0,0 +1,40 @@ +{ + "name": "commitlint-config-nx-scopes", + "type": "module", + "version": "20.0.0", + "description": "Shareable commitlint config enforcing nx project names as scopes", + "files": [ + "index.js" + ], + "scripts": { + "deps": "dep-check", + "pkg": "pkg-check" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@alias/commitlint-config-nx-scopes" + }, + "keywords": [ + "conventional-changelog", + "commitlint", + "commitlint-config", + "nx" + ], + "author": "Florian Guitton <florian@secretarium.com>", + "license": "MIT", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, + "dependencies": { + "@commitlint/config-nx-scopes": "^20.0.0" + }, + "devDependencies": { + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@alias/commitlint-config-patternplate/CHANGELOG.md b/@alias/commitlint-config-patternplate/CHANGELOG.md index dca83bb4d8..5f53ade561 100644 --- a/@alias/commitlint-config-patternplate/CHANGELOG.md +++ b/@alias/commitlint-config-patternplate/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package commitlint-config-patternplate @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package commitlint-config-patternplate @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,222 +27,649 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [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 -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [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 -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [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 -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [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 -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package commitlint-config-patternplate -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +### BREAKING CHANGES +* drop node v14 and v16 support -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +* chore: remove unused types +* docs: prepare node update and new release -### Features +* chore!: minimum TS version v5 +* drop TS v4 support -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +* ci: remove node v14/16 checks +* chore: adjust node types to minimal supported version +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, +* docs: simplify releases and remove roadmap -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) -### Features +**Note:** Version bump only for package commitlint-config-patternplate -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package commitlint-config-patternplate -### Features -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) +**Note:** Version bump only for package commitlint-config-patternplate -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package commitlint-config-patternplate + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package commitlint-config-patternplate + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package commitlint-config-patternplate + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package commitlint-config-patternplate + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + ### Features -* alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +<a name="3.0.2"></a> +## 3.0.2 (2017-07-11) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) +### Features +- alias config packages ([1946baf](https://github.com/conventional-changelog/commitlint/commit/1946baf)) +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) <a name="3.0.0"></a> + # 3.0.0 (2017-07-10) +### Features + +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) ### Features -* alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) +- alias config packages ([67ba5c6](https://github.com/conventional-changelog/commitlint/commit/67ba5c6)) diff --git a/@alias/commitlint-config-patternplate/index.js b/@alias/commitlint-config-patternplate/index.js index 609d2cc13d..d95944f6eb 100644 --- a/@alias/commitlint-config-patternplate/index.js +++ b/@alias/commitlint-config-patternplate/index.js @@ -1 +1 @@ -module.exports = require('@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 9de4465bd0..f18b0774de 100644 --- a/@alias/commitlint-config-patternplate/package.json +++ b/@alias/commitlint-config-patternplate/package.json @@ -1,19 +1,19 @@ { "name": "commitlint-config-patternplate", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commits, patternplate-style", "files": [ "index.js" ], "scripts": { - "test": "exit 0", - "clean": "exit 0", "deps": "dep-check", "pkg": "pkg-check" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@alias/commitlint-config-patternplate" }, "keywords": [ "conventional-changelog", @@ -26,9 +26,15 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "dependencies": { - "@commitlint/config-patternplate": "^8.2.0", - "@commitlint/utils": "^8.2.0" - } + "@commitlint/config-patternplate": "^20.0.0" + }, + "devDependencies": { + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@alias/commitlint/CHANGELOG.md b/@alias/commitlint/CHANGELOG.md index be0f2b31e0..1b3070e71a 100644 --- a/@alias/commitlint/CHANGELOG.md +++ b/@alias/commitlint/CHANGELOG.md @@ -3,7 +3,394 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + +**Note:** Version bump only for package commitlint + + + + + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package commitlint + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + + +### Bug Fixes + +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package commitlint + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package commitlint + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package commitlint + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package commitlint + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package commitlint + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package commitlint + + + + + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) + +**Note:** Version bump only for package commitlint + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package commitlint + + + + + +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + +**Note:** Version bump only for package commitlint + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package commitlint + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package commitlint + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package commitlint + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + +**Note:** Version bump only for package commitlint + + + + + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + +**Note:** Version bump only for package commitlint + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package commitlint + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package commitlint + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package commitlint + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package commitlint + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) **Note:** Version bump only for package commitlint @@ -11,7 +398,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) **Note:** Version bump only for package commitlint @@ -19,7 +406,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) **Note:** Version bump only for package commitlint @@ -27,7 +414,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) **Note:** Version bump only for package commitlint @@ -35,7 +422,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) **Note:** Version bump only for package commitlint @@ -43,7 +430,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) **Note:** Version bump only for package commitlint @@ -51,245 +438,430 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) +**Note:** Version bump only for package commitlint -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package commitlint + -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) **Note:** Version bump only for package commitlint -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package commitlint -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package commitlint +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package commitlint +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) **Note:** Version bump only for package commitlint -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) + +**Note:** Version bump only for package commitlint +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) +**Note:** Version bump only for package commitlint +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) **Note:** Version bump only for package commitlint -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) + +**Note:** Version bump only for package commitlint + +## [17.0.1](https://github.com/conventional-changelog/commitlint/compare/v17.0.0...v17.0.1) (2022-05-25) + +**Note:** Version bump only for package commitlint +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) **Note:** Version bump only for package commitlint -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package commitlint +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) +**Note:** Version bump only for package commitlint +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package commitlint -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package commitlint +## [16.0.3](https://github.com/conventional-changelog/commitlint/compare/v16.0.2...v16.0.3) (2022-01-19) +**Note:** Version bump only for package commitlint +## [16.0.2](https://github.com/conventional-changelog/commitlint/compare/v16.0.1...v16.0.2) (2022-01-09) **Note:** Version bump only for package commitlint -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [16.0.1](https://github.com/conventional-changelog/commitlint/compare/v16.0.0...v16.0.1) (2021-12-28) +**Note:** Version bump only for package commitlint + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package commitlint +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) **Note:** Version bump only for package commitlint -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package commitlint + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) +**Note:** Version bump only for package commitlint + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) +**Note:** Version bump only for package commitlint +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) **Note:** Version bump only for package commitlint -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package commitlint + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) **Note:** Version bump only for package commitlint -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package commitlint +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +**Note:** Version bump only for package commitlint +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) **Note:** Version bump only for package commitlint -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) +**Note:** Version bump only for package commitlint + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +**Note:** Version bump only for package commitlint +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) **Note:** Version bump only for package commitlint -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks +also remove node 13 because we do not support experimental versions +- docs: update node v10 to latest LTS 10 version +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package commitlint -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package commitlint + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +**Note:** Version bump only for package commitlint +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package commitlint -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package commitlint + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) +**Note:** Version bump only for package commitlint + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +### Bug Fixes +- **commitlint:** use new read pkg syntax ([#888](https://github.com/conventional-changelog/commitlint/issues/888)) ([6b3b9a9](https://github.com/conventional-changelog/commitlint/commit/6b3b9a9)) +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) **Note:** Version bump only for package commitlint -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package commitlint +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package commitlint +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) **Note:** Version bump only for package commitlint -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +**Note:** Version bump only for package commitlint +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +**Note:** Version bump only for package commitlint +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) **Note:** Version bump only for package commitlint -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package commitlint + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +<a name="7.4.0"></a> +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) **Note:** Version bump only for package commitlint -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +<a name="7.3.2"></a> + +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +**Note:** Version bump only for package commitlint +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package commitlint -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +**Note:** Version bump only for package commitlint +<a name="7.2.1"></a> +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) **Note:** Version bump only for package commitlint -<a name="5.2.3"></a> -## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +**Note:** Version bump only for package commitlint +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) **Note:** Version bump only for package commitlint -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +**Note:** Version bump only for package commitlint +<a name="6.2.0"></a> +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) **Note:** Version bump only for package commitlint -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +**Note:** Version bump only for package commitlint +<a name="6.1.0"></a> +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) **Note:** Version bump only for package commitlint -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +**Note:** Version bump only for package commitlint +<a name="6.0.4"></a> +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) **Note:** Version bump only for package commitlint -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +**Note:** Version bump only for package commitlint +<a name="6.0.2"></a> +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) **Note:** Version bump only for package commitlint -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +**Note:** Version bump only for package commitlint +<a name="6.0.0"></a> +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package commitlint -<a name="4.2.2"></a> -## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +**Note:** Version bump only for package commitlint +<a name="5.2.5"></a> +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) **Note:** Version bump only for package commitlint -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +**Note:** Version bump only for package commitlint +<a name="5.2.3"></a> +## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) **Note:** Version bump only for package commitlint -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package commitlint + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package commitlint + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +**Note:** Version bump only for package commitlint + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package commitlint + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package commitlint + +<a name="4.2.2"></a> + +## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) + +**Note:** Version bump only for package commitlint + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +**Note:** Version bump only for package commitlint +<a name="4.2.0"></a> +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) **Note:** Version bump only for package commitlint diff --git a/@alias/commitlint/cli.js b/@alias/commitlint/cli.js index ca3bb2f16b..4b917c9cf5 100755 --- a/@alias/commitlint/cli.js +++ b/@alias/commitlint/cli.js @@ -1,10 +1,2 @@ #!/usr/bin/env node -const path = require('path'); -const resolvePkg = require('resolve-pkg'); -const readPkg = require('read-pkg'); - -const pkgDir = resolvePkg('@commitlint/cli', {cwd: __dirname}); -const manifest = readPkg.sync(path.join(pkgDir, 'package.json')); -const bin = path.join(pkgDir, manifest.bin.commitlint); - -require(bin); +import "@commitlint/cli/cli.js"; diff --git a/@alias/commitlint/cli.test.js b/@alias/commitlint/cli.test.js new file mode 100644 index 0000000000..ff28c511b3 --- /dev/null +++ b/@alias/commitlint/cli.test.js @@ -0,0 +1,42 @@ +import { test, expect } from "vitest"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { x } from "tinyexec"; +import { fix } from "@commitlint/test"; + +const require = createRequire(import.meta.url); + +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); + +const bin = require.resolve("./cli.js"); + +function cli(args, options, 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 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 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/fixtures/default/commitlint.config.js b/@alias/commitlint/fixtures/default/commitlint.config.js new file mode 100644 index 0000000000..b6775fef5b --- /dev/null +++ b/@alias/commitlint/fixtures/default/commitlint.config.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + 'type-enum': [2, 'never', ['foo']] + } +}; diff --git a/@alias/commitlint/package.json b/@alias/commitlint/package.json index 2a0b279296..d268076b51 100644 --- a/@alias/commitlint/package.json +++ b/@alias/commitlint/package.json @@ -1,6 +1,7 @@ { "name": "commitlint", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "Lint your commit messages", "files": [ "cli.js" @@ -13,16 +14,17 @@ "pkg": "pkg-check --skip-main" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@alias/commitlint" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,11 +36,13 @@ }, "license": "MIT", "dependencies": { - "@commitlint/cli": "^8.2.0", - "read-pkg": "5.2.0", - "resolve-pkg": "2.0.0" + "@commitlint/cli": "^20.1.0", + "@commitlint/types": "^20.0.0" }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "tinyexec": "^1.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/cli/CHANGELOG.md b/@commitlint/cli/CHANGELOG.md index ed4e0ce0ee..7d1038bbea 100644 --- a/@commitlint/cli/CHANGELOG.md +++ b/@commitlint/cli/CHANGELOG.md @@ -3,629 +3,1183 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + +**Note:** Version bump only for package @commitlint/cli -### Bug Fixes -* pass defaultIgnores from configuration in @commitlint/cli ([#771](https://github.com/conventional-changelog/commitlint/issues/771)) ([a259014](https://github.com/conventional-changelog/commitlint/commit/a259014)) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/cli + -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) ### Bug Fixes -* pass ignores from configuration in @commitlint/cli ([#668](https://github.com/conventional-changelog/commitlint/issues/668)) ([da99aaa](https://github.com/conventional-changelog/commitlint/commit/da99aaa)) +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +# [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/cli +### 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)) -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) -### Bug Fixes +## [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 -* avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) -### Features -* adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) +## [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 -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) -### Bug Fixes +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) -* **cli:** replace old links with new organisation links ([#578](https://github.com/conventional-changelog/commitlint/issues/578)) ([4075903](https://github.com/conventional-changelog/commitlint/commit/4075903)) +**Note:** Version bump only for package @commitlint/cli -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +# [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/cli +### 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)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) -### Bug Fixes +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) -* **cli:** avoid linebreak in empty input ([#523](https://github.com/conventional-changelog/commitlint/issues/523)) ([3141882](https://github.com/conventional-changelog/commitlint/commit/3141882)) -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +**Note:** Version bump only for package @commitlint/cli -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +# [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 -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +## [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +## [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Bug Fixes -* add fallback with husky git params to deprecation handling ([#498](https://github.com/conventional-changelog/commitlint/issues/498)) ([5a34b8c](https://github.com/conventional-changelog/commitlint/commit/5a34b8c)) -* avoid truncated output on macOS ([#503](https://github.com/conventional-changelog/commitlint/issues/503)) ([3192368](https://github.com/conventional-changelog/commitlint/commit/3192368)) -* respect String.protoype.repeat API contract ([f27e7ac](https://github.com/conventional-changelog/commitlint/commit/f27e7ac)) -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) -* use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) ### Features -* check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) -* warn on empty config ([#491](https://github.com/conventional-changelog/commitlint/issues/491)) ([b6bd36e](https://github.com/conventional-changelog/commitlint/commit/b6bd36e)), closes [#107](https://github.com/conventional-changelog/commitlint/issues/107) [#107](https://github.com/conventional-changelog/commitlint/issues/107) +* **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)) -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) -### Bug Fixes +**Note:** Version bump only for package @commitlint/cli -* improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +## [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 -### Features -* **cli:** add format option for report output ([1ecf097](https://github.com/conventional-changelog/commitlint/commit/1ecf097)) +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/cli -**Note:** Version bump only for package @commitlint/cli -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [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) -**Note:** Version bump only for package @commitlint/cli -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) -### Features -* print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +### Reverts +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) +### BREAKING CHANGES -**Note:** Version bump only for package @commitlint/cli +* migrate to pure ESM -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +* feat: migrate to pure ESM +* chore: update snapshot -### Features +* fix: load `parserPreset` with another `await` -* add "--config" option ([#261](https://github.com/conventional-changelog/commitlint/issues/261)) ([2c03ec6](https://github.com/conventional-changelog/commitlint/commit/2c03ec6)) +* test: migrate to vitest +* test: remove no replacement `--runInBand` test-ci script +* chore: fix code reviews +* refactor(load): rewrite resolve logic -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +* fix(config-nx-scopes): fix syntax error +* feat(resolve-extends): add resolveFrom and loadParserPreset +* feat(load): use resolveFrom and loadParserPreset from resolve-extends +* test: include only @commitlint/* packages src in coverage -**Note:** Version bump only for package @commitlint/cli +* test: explicit import vitest utilities -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware +* test: restore NO_COLOR to test script +* chore: fix linting issues -**Note:** Version bump only for package @commitlint/cli +* fix: should use fileURLToPath instead of pathname for Windows compatibility -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +* Apply suggestions from code review +* fix: should reuse `cli` instead call `yargs()` +* feat(cli): set terminalWidth as wrap to avoid work break on help +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM -**Note:** Version bump only for package @commitlint/cli -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/cli -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/cli -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) -### Bug Fixes -* correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) +### Features + +* **cli:** print-config now can be configured to print a json in stdout ([#3863](https://github.com/conventional-changelog/commitlint/issues/3863)) ([6381a2d](https://github.com/conventional-changelog/commitlint/commit/6381a2daa0d5d89ab2195998d63a9690a533d3f2)), closes [#3819](https://github.com/conventional-changelog/commitlint/issues/3819) -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/cli -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/cli -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/cli -<a name="5.2.3"></a> -## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) -### Bug Fixes -* **cli:** add support for GIT_PARAMS on windows ([c62bd41](https://github.com/conventional-changelog/commitlint/commit/c62bd41)), closes [#103](https://github.com/conventional-changelog/commitlint/issues/103) [#175](https://github.com/conventional-changelog/commitlint/issues/175) +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) +**Note:** Version bump only for package @commitlint/cli -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) **Note:** Version bump only for package @commitlint/cli -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + **Note:** Version bump only for package @commitlint/cli -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) -### Bug Fixes -* update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) -### Features +**Note:** Version bump only for package @commitlint/cli -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) -**Note:** Version bump only for package @commitlint/cli +### BREAKING CHANGES -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +* drop node v14 and v16 support +* chore: remove unused types +* docs: prepare node update and new release +* chore!: minimum TS version v5 +* drop TS v4 support -**Note:** Version bump only for package @commitlint/cli +* ci: remove node v14/16 checks -<a name="4.2.2"></a> -## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) +* chore: adjust node types to minimal supported version +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, +* docs: simplify releases and remove roadmap -**Note:** Version bump only for package @commitlint/cli -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) -### Bug Fixes +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) -* nicer error messages ([#93](https://github.com/conventional-changelog/commitlint/issues/93)) ([dcfad61](https://github.com/conventional-changelog/commitlint/commit/dcfad61)) -* **core:** consider config outside of current git repo ([f7234b6](https://github.com/conventional-changelog/commitlint/commit/f7234b6)) +**Note:** Version bump only for package @commitlint/cli -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) -### Features +**Note:** Version bump only for package @commitlint/cli -* edit flag now accepts the path to the commit file ([c881433](https://github.com/conventional-changelog/commitlint/commit/c881433)), closes [#40](https://github.com/conventional-changelog/commitlint/issues/40) -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) +**Note:** Version bump only for package @commitlint/cli -**Note:** Version bump only for package @commitlint/cli -<a name="4.1.0"></a> -# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) +**Note:** Version bump only for package @commitlint/cli -**Note:** Version bump only for package @commitlint/cli -<a name="4.0.0"></a> -# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) -### Features +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) -* enable alternative config formats ([#83](https://github.com/conventional-changelog/commitlint/issues/83)) ([91968b8](https://github.com/conventional-changelog/commitlint/commit/91968b8)), closes [#73](https://github.com/conventional-changelog/commitlint/issues/73) +**Note:** Version bump only for package @commitlint/cli -### BREAKING CHANGES -* discontinue support of conventional-changelog-lintrc -* test: make git setup reliable +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) +**Note:** Version bump only for package @commitlint/cli -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) -### Features -* add preset parser ([5cd2335](https://github.com/conventional-changelog/commitlint/commit/5cd2335)) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) +**Note:** Version bump only for package @commitlint/cli -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) -### Bug Fixes -* **core:** determine git root correctly in sub directories ([#64](https://github.com/conventional-changelog/commitlint/issues/64)) ([d594ec4](https://github.com/conventional-changelog/commitlint/commit/d594ec4)), closes [#62](https://github.com/conventional-changelog/commitlint/issues/62) +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) +**Note:** Version bump only for package @commitlint/cli -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -### Bug Fixes -* **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) +**Note:** Version bump only for package @commitlint/cli -### Bug Fixes -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) +**Note:** Version bump only for package @commitlint/cli -### Bug Fixes -* **core:** determine git root correctly in sub directories ([#64](https://github.com/conventional-changelog/commitlint/issues/64)) ([d594ec4](https://github.com/conventional-changelog/commitlint/commit/d594ec4)), closes [#62](https://github.com/conventional-changelog/commitlint/issues/62) +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) +**Note:** Version bump only for package @commitlint/cli -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +**Note:** Version bump only for package @commitlint/cli -### Bug Fixes -* **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) -### Bug Fixes +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +**Note:** Version bump only for package @commitlint/cli -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) +**Note:** Version bump only for package @commitlint/cli -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) ### Bug Fixes -* **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) +- update dependency fs-extra to v11 ([#3460](https://github.com/conventional-changelog/commitlint/issues/3460)) ([a437923](https://github.com/conventional-changelog/commitlint/commit/a43792388e0d9707da770b26592c5e31553384a1)) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +### Features +- **cli:** add strict mode ([#3384](https://github.com/conventional-changelog/commitlint/issues/3384)) ([#3385](https://github.com/conventional-changelog/commitlint/issues/3385)) ([fdff2be](https://github.com/conventional-changelog/commitlint/commit/fdff2bee2d688698555de1cab904d0f5038075b1)) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) +**Note:** Version bump only for package @commitlint/cli -### Bug Fixes +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +**Note:** Version bump only for package @commitlint/cli +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) +### Features +- **commitlint:** add additional git log args ([#3334](https://github.com/conventional-changelog/commitlint/issues/3334)) ([229c65b](https://github.com/conventional-changelog/commitlint/commit/229c65b60f15c15da5f5b11deb555d1f557c673a)) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/cli + +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) +**Note:** Version bump only for package @commitlint/cli + +## [17.0.1](https://github.com/conventional-changelog/commitlint/compare/v17.0.0...v17.0.1) (2022-05-25) ### Bug Fixes -* **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) +- **cli:** use `core.commentChar` from git config with `--edit` flag ([#3191](https://github.com/conventional-changelog/commitlint/issues/3191)) ([e5fee05](https://github.com/conventional-changelog/commitlint/commit/e5fee05301ab7441b6091e4ee6fc095d26bbd589)), closes [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +node version is not defned by the name anyways (i think) +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) -### Bug Fixes +**Note:** Version bump only for package @commitlint/cli -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) +**Note:** Version bump only for package @commitlint/cli +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) +**Note:** Version bump only for package @commitlint/cli +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +**Note:** Version bump only for package @commitlint/cli +## [16.0.3](https://github.com/conventional-changelog/commitlint/compare/v16.0.2...v16.0.3) (2022-01-19) -### Bug Fixes +**Note:** Version bump only for package @commitlint/cli -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +## [16.0.2](https://github.com/conventional-changelog/commitlint/compare/v16.0.1...v16.0.2) (2022-01-09) +**Note:** Version bump only for package @commitlint/cli +## [16.0.1](https://github.com/conventional-changelog/commitlint/compare/v16.0.0...v16.0.1) (2021-12-28) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +### Features -### Bug Fixes +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) +### Features +- simplify config resolution ([#2398](https://github.com/conventional-changelog/commitlint/issues/2398)) ([8a8384f](https://github.com/conventional-changelog/commitlint/commit/8a8384f3c18954447cb633e76a573e1db71a1440)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +**Note:** Version bump only for package @commitlint/cli +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) -### Bug Fixes +**Note:** Version bump only for package @commitlint/cli -* **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) -* ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) +**Note:** Version bump only for package @commitlint/cli +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) +**Note:** Version bump only for package @commitlint/cli -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) +### Bug Fixes +- **cli:** remove hard coded comment char with linting `COMMIT_EDIT_MSG` ([#2618](https://github.com/conventional-changelog/commitlint/issues/2618)) ([5badf6d](https://github.com/conventional-changelog/commitlint/commit/5badf6dc08116ed3557e6c780e55764b4f07ca67)), closes [#2351](https://github.com/conventional-changelog/commitlint/issues/2351) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) -### Bug Fixes +### BREAKING CHANGES -* **cli:** remove destructuring for node 4 support ([94437e8](https://github.com/conventional-changelog/commitlint/commit/94437e8)) -* ensure node4 compat ([a5e658a](https://github.com/conventional-changelog/commitlint/commit/a5e658a)) +- minimum node version is 12 +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) +### Bug Fixes +- update dependency fs-extra to v10 ([#2575](https://github.com/conventional-changelog/commitlint/issues/2575)) ([d47d2b5](https://github.com/conventional-changelog/commitlint/commit/d47d2b595b980adadd4fb8ff198c1914caeff18f)) +- update dependency yargs to v17 ([#2574](https://github.com/conventional-changelog/commitlint/issues/2574)) ([81c38dd](https://github.com/conventional-changelog/commitlint/commit/81c38ddf15f239b525f673b26b2ee6606f2ee8f6)) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) +**Note:** Version bump only for package @commitlint/cli + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/cli + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/cli + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/cli + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) +- update dependency yargs to v16 ([204f36d](https://github.com/conventional-changelog/commitlint/commit/204f36d0a522afaf3a88739b401aea15ffa0b891)) + +### Features + +- **cli:** implement print-config cli flag ([#2391](https://github.com/conventional-changelog/commitlint/issues/2391)) ([8626883](https://github.com/conventional-changelog/commitlint/commit/86268833946dea9dcf1c15459456cd4427d17835)) +- **load:** allow specifying helpUrl via config ([#2180](https://github.com/conventional-changelog/commitlint/issues/2180)) ([d6795a3](https://github.com/conventional-changelog/commitlint/commit/d6795a3c4633ba6efd7a0fcff48339dc291cd832)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +### Bug Fixes + +- **cli:** remove default value from edit option [#2065](https://github.com/conventional-changelog/commitlint/issues/2065) ([3d4116d](https://github.com/conventional-changelog/commitlint/commit/3d4116d044a2f5149a9c9c1d9fa35abf5e232479)) + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) +- update dependency fs-extra to v9 ([#1018](https://github.com/conventional-changelog/commitlint/issues/1018)) ([2df49fa](https://github.com/conventional-changelog/commitlint/commit/2df49fac907993ae78199a1012e918b0e2ff5621)) +- update dependency get-stdin to v8 ([#1938](https://github.com/conventional-changelog/commitlint/issues/1938)) ([f94a5c8](https://github.com/conventional-changelog/commitlint/commit/f94a5c82861523aa1cf407ffe062f99ecbbfb4e4)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/cli + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/cli + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency chalk to v4 ([#1275](https://github.com/conventional-changelog/commitlint/issues/1275)) ([a5d8fa1](https://github.com/conventional-changelog/commitlint/commit/a5d8fa118e8221361f14f5fd2b21d7aaad008a27)) +- update dependency regenerator-runtime to v0.13.5 ([#1017](https://github.com/conventional-changelog/commitlint/issues/1017)) ([9c4fdf1](https://github.com/conventional-changelog/commitlint/commit/9c4fdf1b5f42677422532dad655af9aed9b43881)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +### Bug Fixes + +- add missing @babel/runtime dep [#1738](https://github.com/conventional-changelog/commitlint/issues/1738) ([#1754](https://github.com/conventional-changelog/commitlint/issues/1754)) ([09afcd6](https://github.com/conventional-changelog/commitlint/commit/09afcd647a2c1d00538cf1c970e3790d936111f8)) + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- **cli:** add missing regenerator-runtime to dependencies ([#919](https://github.com/conventional-changelog/commitlint/issues/919)) ([ee5eac9](https://github.com/conventional-changelog/commitlint/commit/ee5eac98fa97ba5ba17030c8d2705aee5c7f3a3a)) +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +**Note:** Version bump only for package @commitlint/cli + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/cli + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +**Note:** Version bump only for package @commitlint/cli + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +### Features + +- **cli:** add helpurl flag ([#789](https://github.com/conventional-changelog/commitlint/issues/789)) ([75cef4e](https://github.com/conventional-changelog/commitlint/commit/75cef4e)) + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +### Bug Fixes + +- pass defaultIgnores from configuration in @commitlint/cli ([#771](https://github.com/conventional-changelog/commitlint/issues/771)) ([a259014](https://github.com/conventional-changelog/commitlint/commit/a259014)) + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +### Bug Fixes + +- pass ignores from configuration in @commitlint/cli ([#668](https://github.com/conventional-changelog/commitlint/issues/668)) ([da99aaa](https://github.com/conventional-changelog/commitlint/commit/da99aaa)) + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +**Note:** Version bump only for package @commitlint/cli + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes + +- avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) + +### Features + +- adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) + +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +### Bug Fixes + +- **cli:** replace old links with new organisation links ([#578](https://github.com/conventional-changelog/commitlint/issues/578)) ([4075903](https://github.com/conventional-changelog/commitlint/commit/4075903)) + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package @commitlint/cli + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- **cli:** avoid linebreak in empty input ([#523](https://github.com/conventional-changelog/commitlint/issues/523)) ([3141882](https://github.com/conventional-changelog/commitlint/commit/3141882)) +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.4.0"></a> + +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +**Note:** Version bump only for package @commitlint/cli + +<a name="7.3.2"></a> + +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) + +**Note:** Version bump only for package @commitlint/cli + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/cli + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- add fallback with husky git params to deprecation handling ([#498](https://github.com/conventional-changelog/commitlint/issues/498)) ([5a34b8c](https://github.com/conventional-changelog/commitlint/commit/5a34b8c)) +- avoid truncated output on macOS ([#503](https://github.com/conventional-changelog/commitlint/issues/503)) ([3192368](https://github.com/conventional-changelog/commitlint/commit/3192368)) +- respect String.protoype.repeat API contract ([f27e7ac](https://github.com/conventional-changelog/commitlint/commit/f27e7ac)) +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) + +### Features + +- check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) +- warn on empty config ([#491](https://github.com/conventional-changelog/commitlint/issues/491)) ([b6bd36e](https://github.com/conventional-changelog/commitlint/commit/b6bd36e)), closes [#107](https://github.com/conventional-changelog/commitlint/issues/107) [#107](https://github.com/conventional-changelog/commitlint/issues/107) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +### Bug Fixes + +- improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +### Features + +- **cli:** add format option for report output ([1ecf097](https://github.com/conventional-changelog/commitlint/commit/1ecf097)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/cli + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.2.0"></a> + +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) + +### Features + +- print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +### Features + +- add "--config" option ([#261](https://github.com/conventional-changelog/commitlint/issues/261)) ([2c03ec6](https://github.com/conventional-changelog/commitlint/commit/2c03ec6)) + +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/cli + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +### Bug Fixes + +- correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package @commitlint/cli + +<a name="5.2.5"></a> + +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) + +**Note:** Version bump only for package @commitlint/cli + +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) + +**Note:** Version bump only for package @commitlint/cli + +<a name="5.2.3"></a> + +## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) + +### Bug Fixes + +- **cli:** add support for GIT_PARAMS on windows ([c62bd41](https://github.com/conventional-changelog/commitlint/commit/c62bd41)), closes [#103](https://github.com/conventional-changelog/commitlint/issues/103) [#175](https://github.com/conventional-changelog/commitlint/issues/175) + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package @commitlint/cli + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/cli + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Bug Fixes + +- update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) + +### Features + +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package @commitlint/cli + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package @commitlint/cli + +<a name="4.2.2"></a> + +## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) + +**Note:** Version bump only for package @commitlint/cli + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +### Bug Fixes + +- nicer error messages ([#93](https://github.com/conventional-changelog/commitlint/issues/93)) ([dcfad61](https://github.com/conventional-changelog/commitlint/commit/dcfad61)) +- **core:** consider config outside of current git repo ([f7234b6](https://github.com/conventional-changelog/commitlint/commit/f7234b6)) + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +### Features + +- edit flag now accepts the path to the commit file ([c881433](https://github.com/conventional-changelog/commitlint/commit/c881433)), closes [#40](https://github.com/conventional-changelog/commitlint/issues/40) + +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) + +**Note:** Version bump only for package @commitlint/cli + +<a name="4.1.0"></a> + +# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) + +**Note:** Version bump only for package @commitlint/cli + +<a name="4.0.0"></a> + +# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) + +### Features + +- enable alternative config formats ([#83](https://github.com/conventional-changelog/commitlint/issues/83)) ([91968b8](https://github.com/conventional-changelog/commitlint/commit/91968b8)), closes [#73](https://github.com/conventional-changelog/commitlint/issues/73) + +### BREAKING CHANGES + +- discontinue support of conventional-changelog-lintrc + +- test: make git setup reliable + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +### Features + +- add preset parser ([5cd2335](https://github.com/conventional-changelog/commitlint/commit/5cd2335)) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +### Bug Fixes + +- **core:** determine git root correctly in sub directories ([#64](https://github.com/conventional-changelog/commitlint/issues/64)) ([d594ec4](https://github.com/conventional-changelog/commitlint/commit/d594ec4)), closes [#62](https://github.com/conventional-changelog/commitlint/issues/62) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +### Bug Fixes + +- **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +### Bug Fixes + +- **core:** determine git root correctly in sub directories ([#64](https://github.com/conventional-changelog/commitlint/issues/64)) ([d594ec4](https://github.com/conventional-changelog/commitlint/commit/d594ec4)), closes [#62](https://github.com/conventional-changelog/commitlint/issues/62) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +### Bug Fixes + +- **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +### Bug Fixes + +- **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +### Bug Fixes + +- **core:** correct type validation message ([09c2b26](https://github.com/conventional-changelog/commitlint/commit/09c2b26)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([fe8caff](https://github.com/conventional-changelog/commitlint/commit/fe8caff)) +- ensure node4 compat ([bfeb653](https://github.com/conventional-changelog/commitlint/commit/bfeb653)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) + +### Bug Fixes + +- **cli:** remove destructuring for node 4 support ([94437e8](https://github.com/conventional-changelog/commitlint/commit/94437e8)) +- ensure node4 compat ([a5e658a](https://github.com/conventional-changelog/commitlint/commit/a5e658a)) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) ### Bug Fixes -* **cli:** remove destructuring for node 4 support ([94437e8](https://github.com/conventional-changelog/commitlint/commit/94437e8)) -* ensure node4 compat ([a5e658a](https://github.com/conventional-changelog/commitlint/commit/a5e658a)) +- **cli:** remove destructuring for node 4 support ([94437e8](https://github.com/conventional-changelog/commitlint/commit/94437e8)) +- ensure node4 compat ([a5e658a](https://github.com/conventional-changelog/commitlint/commit/a5e658a)) diff --git a/@commitlint/cli/README.md b/@commitlint/cli/README.md index 75f3b0fa4c..d05f13f175 100644 --- a/@commitlint/cli/README.md +++ b/@commitlint/cli/README.md @@ -1,16 +1,11 @@ -> Lint commit messages +# @commitlint/cli <p align="center"> - <img width="750" src="https://conventional-changelog.github.io/commitlint/assets/commitlint.svg"> + <img width="750" src="https://commitlint.js.org/assets/commitlint.svg"> </p> -# @commitlint/cli - -## Getting started +Lint commit messages -``` -npm install --save-dev @commitlint/cli @commitlint/config-angular -echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js -``` +## Documentation -Consult [docs/cli](https://conventional-changelog.github.io/commitlint/#/reference-cli) for comprehensive documentation. +Consult [CLI reference](https://commitlint.js.org/reference/cli) for comprehensive documentation. diff --git a/@commitlint/cli/cli.js b/@commitlint/cli/cli.js new file mode 100755 index 0000000000..940e27804b --- /dev/null +++ b/@commitlint/cli/cli.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +import "./lib/cli.js"; diff --git a/@commitlint/cli/fixtures/comment-char/commitlint.config.js b/@commitlint/cli/fixtures/comment-char/commitlint.config.js new file mode 100644 index 0000000000..98ea1686e0 --- /dev/null +++ b/@commitlint/cli/fixtures/comment-char/commitlint.config.js @@ -0,0 +1,10 @@ +module.exports = { + rules: { + 'body-empty': [2, 'never'] + }, + parserPreset: { + parserOpts: { + commentChar: '$' + } + }, +}; diff --git a/@commitlint/cli/fixtures/help-url/commitlint.config.js b/@commitlint/cli/fixtures/help-url/commitlint.config.js new file mode 100644 index 0000000000..ab43d7482a --- /dev/null +++ b/@commitlint/cli/fixtures/help-url/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + rules: { + 'type-enum': [2, 'never', ['foo']] + }, + helpUrl: 'https://www.example.com/foo' +}; diff --git a/@commitlint/cli/fixtures/husky/integration/package.json b/@commitlint/cli/fixtures/husky/integration/package.json index 7acad2eaac..da9eb87a29 100644 --- a/@commitlint/cli/fixtures/husky/integration/package.json +++ b/@commitlint/cli/fixtures/husky/integration/package.json @@ -1,6 +1,6 @@ { "scripts": {}, "devDependencies": { - "husky": "3.0.5" + "husky": "^5.1.1" } } diff --git a/@commitlint/cli/fixtures/husky/package.json b/@commitlint/cli/fixtures/husky/package.json index 4e44eea7f9..da9eb87a29 100644 --- a/@commitlint/cli/fixtures/husky/package.json +++ b/@commitlint/cli/fixtures/husky/package.json @@ -1,6 +1,6 @@ { - "scripts": {}, - "devDependencies": { - "husky": "3.0.5" - } + "scripts": {}, + "devDependencies": { + "husky": "^5.1.1" + } } 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/fixtures/package.json b/@commitlint/cli/fixtures/package.json new file mode 100644 index 0000000000..5bbefffbab --- /dev/null +++ b/@commitlint/cli/fixtures/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/@commitlint/cli/fixtures/signoff/package.json b/@commitlint/cli/fixtures/signoff/package.json index 4e44eea7f9..da9eb87a29 100644 --- a/@commitlint/cli/fixtures/signoff/package.json +++ b/@commitlint/cli/fixtures/signoff/package.json @@ -1,6 +1,6 @@ { - "scripts": {}, - "devDependencies": { - "husky": "3.0.5" - } + "scripts": {}, + "devDependencies": { + "husky": "^5.1.1" + } } diff --git a/@commitlint/cli/fixtures/warning/commitlint.config.js b/@commitlint/cli/fixtures/warning/commitlint.config.js new file mode 100644 index 0000000000..6d5ae18c22 --- /dev/null +++ b/@commitlint/cli/fixtures/warning/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + rules: { + 'type-enum': [2, 'always', ['feat']], + 'subject-max-length': [1, 'always', 4] + } +}; diff --git a/@commitlint/cli/index.cjs b/@commitlint/cli/index.cjs new file mode 100644 index 0000000000..6d5d6c0e62 --- /dev/null +++ b/@commitlint/cli/index.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const path = require('node:path'); + +module.exports = path.join(__dirname, 'cli.js'); diff --git a/@commitlint/cli/index.js b/@commitlint/cli/index.js deleted file mode 100644 index 6babb12a58..0000000000 --- a/@commitlint/cli/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const path = require('path'); - -module.exports = path.join(__dirname, 'lib/cli.js'); diff --git a/@commitlint/cli/package.json b/@commitlint/cli/package.json index 380f82627c..7a5ccfc778 100644 --- a/@commitlint/cli/package.json +++ b/@commitlint/cli/package.json @@ -1,47 +1,33 @@ { "name": "@commitlint/cli", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "Lint your commit messages", "files": [ - "index.js", - "lib", - "!*.test.js*" + "index.cjs", + "cli.js", + "lib" ], + "main": "index.cjs", "bin": { - "commitlint": "./lib/cli.js" + "commitlint": "./cli.js" }, "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "lib/**/*.test.js" - ], - "source": [ - "lib/**/*.js" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/cli" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -53,33 +39,22 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.18.2", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.6.1", - "cross-env": "6.0.0", - "execa": "0.11.0", - "mkdirp": "0.5.1", - "pkg-dir": "4.2.0", - "resolve-bin": "0.4.0", - "sander": "0.6.0", - "string-to-stream": "1.1.1", - "tmp": "0.1.0" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "@types/lodash.merge": "^4.6.8", + "@types/node": "^18.19.17", + "@types/yargs": "^17.0.29", + "fs-extra": "^11.0.0", + "lodash.merge": "^4.6.2" }, "dependencies": { - "@commitlint/format": "^8.2.0", - "@commitlint/lint": "^8.2.0", - "@commitlint/load": "^8.2.0", - "@commitlint/read": "^8.2.0", - "babel-polyfill": "6.26.0", - "chalk": "2.4.2", - "get-stdin": "7.0.0", - "lodash": "4.17.15", - "meow": "5.0.0", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0" - } + "@commitlint/format": "^20.0.0", + "@commitlint/lint": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/read": "^20.0.0", + "@commitlint/types": "^20.0.0", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/cli/src/cli-error.ts b/@commitlint/cli/src/cli-error.ts new file mode 100644 index 0000000000..8b21ae31ee --- /dev/null +++ b/@commitlint/cli/src/cli-error.ts @@ -0,0 +1,27 @@ +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: ExitCode; + + constructor( + message: string, + type: string, + error_code = ExitCode.CommitlintErrorDefault, + ) { + super(message); + + this.type = type; + this.error_code = error_code; + + Object.setPrototypeOf(this, CliError.prototype); + } +} diff --git a/@commitlint/cli/src/cli.js b/@commitlint/cli/src/cli.js deleted file mode 100755 index b71c030c9f..0000000000 --- a/@commitlint/cli/src/cli.js +++ /dev/null @@ -1,357 +0,0 @@ -#!/usr/bin/env node -require('babel-polyfill'); // eslint-disable-line import/no-unassigned-import - -const load = require('@commitlint/load'); -const lint = require('@commitlint/lint'); -const read = require('@commitlint/read'); -const meow = require('meow'); -const {merge, pick, isFunction} = require('lodash'); -const stdin = require('get-stdin'); -const resolveFrom = require('resolve-from'); -const resolveGlobal = require('resolve-global'); - -const pkg = require('../package'); -const help = require('./help'); - -const flags = { - color: { - alias: 'c', - default: true, - description: 'toggle colored output', - type: 'boolean' - }, - config: { - alias: 'g', - default: null, - description: 'path to the config file', - type: 'string' - }, - cwd: { - alias: 'd', - default: process.cwd(), - description: 'directory to execute in', - type: 'string' - }, - edit: { - alias: 'e', - default: false, - description: - 'read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG', - type: 'string' - }, - env: { - alias: 'E', - default: null, - description: - '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: 'string' - }, - help: { - alias: 'h', - type: 'boolean', - description: 'display this help message' - }, - 'help-url': { - alias: 'H', - type: 'string', - description: 'helpurl in error message' - }, - from: { - alias: 'f', - default: null, - description: 'lower end of the commit range to lint; applies if edit=false', - type: 'string' - }, - format: { - alias: 'o', - default: null, - description: 'output format of the results', - type: 'string' - }, - 'parser-preset': { - alias: 'p', - description: 'configuration preset to use for conventional-commits-parser', - type: 'string' - }, - quiet: { - alias: 'q', - default: false, - description: 'toggle console output', - type: 'boolean' - }, - to: { - alias: 't', - default: null, - description: 'upper end of the commit range to lint; applies if edit=false', - type: 'string' - }, - version: { - alias: 'v', - type: 'boolean', - description: 'display version information' - }, - verbose: { - alias: 'V', - type: 'boolean', - description: 'enable verbose output for reports without problems' - } -}; - -const cli = meow({ - description: `${pkg.name}@${pkg.version} - ${pkg.description}`, - flags, - help: `[input] reads from stdin if --edit, --env, --from and --to are omitted\n${help( - flags - )}`, - unknown(arg) { - throw new Error(`unknown flags: ${arg}`); - } -}); - -main(cli).catch(err => - setTimeout(() => { - if (err.type === pkg.name) { - process.exit(1); - } - throw err; - }) -); - -async function main(options) { - const raw = options.input; - const flags = normalizeFlags(options.flags); - const fromStdin = checkFromStdin(raw, flags); - - const range = pick(flags, 'edit', 'from', 'to'); - - const input = await (fromStdin ? stdin() : read(range, {cwd: flags.cwd})); - - const messages = (Array.isArray(input) ? input : [input]) - .filter(message => typeof message === 'string') - .filter(message => message.trim() !== '') - .filter(Boolean); - - if (messages.length === 0 && !checkFromRepository(flags)) { - const err = new Error( - '[input] is required: supply via stdin, or --env or --edit or --from and --to' - ); - err.type = pkg.name; - console.log(`${cli.help}\n`); - console.log(err.message); - throw err; - } - - const loadOpts = {cwd: flags.cwd, file: flags.config}; - const loaded = await load(getSeed(flags), loadOpts); - const parserOpts = selectParserOpts(loaded.parserPreset); - const opts = { - parserOpts: {}, - plugins: {}, - ignores: [], - defaultIgnores: true - }; - if (parserOpts) { - opts.parserOpts = parserOpts; - } - if (loaded.plugins) { - opts.plugins = loaded.plugins; - } - if (loaded.ignores) { - opts.ignores = loaded.ignores; - } - if (loaded.defaultIgnores === false) { - opts.defaultIgnores = false; - } - const format = loadFormatter(loaded, flags); - - // Strip comments if reading from `.git/COMMIT_EDIT_MSG` - if (range.edit) { - opts.parserOpts.commentChar = '#'; - } - - const results = await Promise.all( - messages.map(message => lint(message, loaded.rules, opts)) - ); - - if (Object.keys(loaded.rules).length === 0) { - let input = ''; - - if (results.length !== 0) { - const originalInput = results[0].input; - input = originalInput; - } - - results.splice(0, results.length, { - valid: false, - errors: [ - { - level: 2, - valid: false, - name: 'empty-rules', - message: [ - 'Please add rules to your `commitlint.config.js`', - ' - Getting started guide: https://git.io/fhHij', - ' - Example config: https://git.io/fhHip' - ].join('\n') - } - ], - warnings: [], - input - }); - } - - const report = results.reduce( - (info, result) => { - info.valid = result.valid ? info.valid : false; - info.errorCount += result.errors.length; - info.warningCount += result.warnings.length; - info.results.push(result); - - return info; - }, - { - valid: true, - errorCount: 0, - warningCount: 0, - results: [] - } - ); - - const output = format(report, { - color: flags.color, - verbose: flags.verbose, - helpUrl: flags.helpUrl - ? flags.helpUrl.trim() - : 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint' - }); - - if (!flags.quiet && output !== '') { - console.log(output); - } - - if (!report.valid) { - const err = new Error(output); - err.type = pkg.name; - throw err; - } -} - -function checkFromStdin(input, flags) { - return input.length === 0 && !checkFromRepository(flags); -} - -function checkFromRepository(flags) { - return checkFromHistory(flags) || checkFromEdit(flags); -} - -function checkFromEdit(flags) { - return Boolean(flags.edit) || flags.env; -} - -function checkFromHistory(flags) { - return typeof flags.from === 'string' || typeof flags.to === 'string'; -} - -function normalizeFlags(flags) { - const edit = getEditValue(flags); - return merge({}, flags, {edit, e: edit}); -} - -function getEditValue(flags) { - if (flags.env) { - if (!(flags.env in process.env)) { - throw new Error( - `Recieved '${ - flags.env - }' as value for -E | --env, but environment variable '${ - flags.env - }' is not available globally` - ); - } - return process.env[flags.env]; - } - const {edit} = flags; - // If the edit flag is set but empty (i.e '-e') we default - // to .git/COMMIT_EDITMSG - if (edit === '') { - return true; - } - if (typeof edit === 'boolean') { - return edit; - } - // The recommended method to specify -e with husky was `commitlint -e $HUSKY_GIT_PARAMS` - // This does not work properly with win32 systems, where env variable declarations - // 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 isHuskyParams = - 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) { - return process.env.GIT_PARAMS; - } - 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.` - ); - } - return edit; -} - -function getSeed(seed) { - const e = Array.isArray(seed.extends) ? seed.extends : [seed.extends]; - const n = e.filter(i => typeof i === 'string'); - return n.length > 0 - ? {extends: n, parserPreset: seed.parserPreset} - : {parserPreset: seed.parserPreset}; -} - -function selectParserOpts(parserPreset) { - if (typeof parserPreset !== 'object') { - return undefined; - } - - if (typeof parserPreset.parserOpts !== 'object') { - return undefined; - } - - return parserPreset.parserOpts; -} - -function loadFormatter(config, flags) { - const moduleName = flags.format || config.formatter || '@commitlint/format'; - const modulePath = - resolveFrom.silent(__dirname, moduleName) || - resolveFrom.silent(flags.cwd, moduleName) || - resolveGlobal.silent(moduleName); - - if (modulePath) { - const moduleInstance = require(modulePath); - - if (isFunction(moduleInstance.default)) { - return moduleInstance.default; - } - - return moduleInstance; - } - - throw new Error(`Using format ${moduleName}, but cannot find the module.`); -} - -// Catch unhandled rejections globally -process.on('unhandledRejection', (reason, promise) => { - console.log('Unhandled Rejection at: Promise ', promise, ' reason: ', reason); - throw reason; -}); diff --git a/@commitlint/cli/src/cli.test.js b/@commitlint/cli/src/cli.test.js deleted file mode 100644 index 2ea093e8be..0000000000 --- a/@commitlint/cli/src/cli.test.js +++ /dev/null @@ -1,397 +0,0 @@ -import path from 'path'; -import {fix, git} from '@commitlint/test'; -import test from 'ava'; -import execa from 'execa'; -import {merge} from 'lodash'; -import * as sander from 'sander'; -import stream from 'string-to-stream'; - -const bin = path.join(__dirname, './cli.js'); - -const cli = (args, options) => { - return (input = '') => { - const c = execa(bin, args, { - capture: ['stdout'], - cwd: options.cwd, - env: options.env - }); - stream(input).pipe(c.stdin); - return c.catch(err => err); - }; -}; - -test('should throw when called without [input]', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli([], {cwd})(); - t.is(actual.code, 1); -}); - -test('should reprint input from stdin', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli([], {cwd})('foo: bar'); - t.true(actual.stdout.includes('foo: bar')); -}); - -test('should produce success output with --verbose flag', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli(['--verbose'], {cwd})('type: bar'); - t.true(actual.stdout.includes('0 problems, 0 warnings')); - t.is(actual.stderr, ''); -}); - -test('should produce no output with --quiet flag', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli(['--quiet'], {cwd})('foo: bar'); - t.is(actual.stdout, ''); - t.is(actual.stderr, ''); -}); - -test('should produce no output with -q flag', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli(['-q'], {cwd})('foo: bar'); - t.is(actual.stdout, ''); - t.is(actual.stderr, ''); -}); - -test('should produce help for empty config', async t => { - const cwd = await git.bootstrap('fixtures/empty'); - const actual = await cli([], {cwd})('foo: bar'); - t.true(actual.stdout.includes('Please add rules')); - t.is(actual.code, 1); -}); - -test('should produce help for problems', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli([], {cwd})('foo: bar'); - t.true( - actual.stdout.includes( - 'Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint' - ) - ); - t.is(actual.code, 1); -}); - -test('should produce help for problems with correct helpurl', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli( - ['-H https://github.com/conventional-changelog/commitlint/#testhelpurl'], - {cwd} - )('foo: bar'); - t.true( - actual.stdout.includes( - 'Get help: https://github.com/conventional-changelog/commitlint/#testhelpurl' - ) - ); - t.is(actual.code, 1); -}); - -test('should fail for input from stdin without rules', async t => { - const cwd = await git.bootstrap('fixtures/empty'); - const actual = await cli([], {cwd})('foo: bar'); - t.is(actual.code, 1); -}); - -test('should succeed for input from stdin with rules', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const actual = await cli([], {cwd})('type: bar'); - t.is(actual.code, 0); -}); - -test('should fail for input from stdin with rule from rc', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - const actual = await cli([], {cwd})('foo: bar'); - t.true(actual.stdout.includes('type must not be one of [foo]')); - t.is(actual.code, 1); -}); - -test('should work with --config option', async t => { - const file = 'config/commitlint.config.js'; - const cwd = await git.bootstrap('fixtures/specify-config-file'); - const actual = await cli(['--config', file], {cwd})('foo: bar'); - t.true(actual.stdout.includes('type must not be one of [foo]')); - t.is(actual.code, 1); -}); - -test('should fail for input from stdin with rule from js', async t => { - const cwd = await git.bootstrap('fixtures/extends-root'); - const actual = await cli(['--extends', './extended'], {cwd})('foo: bar'); - t.true(actual.stdout.includes('type must not be one of [foo]')); - t.is(actual.code, 1); -}); - -test('should produce no error output with --quiet flag', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - const actual = await cli(['--quiet'], {cwd})('foo: bar'); - t.is(actual.stdout, ''); - t.is(actual.stderr, ''); - t.is(actual.code, 1); -}); - -test('should produce no error output with -q flag', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - const actual = await cli(['-q'], {cwd})('foo: bar'); - t.is(actual.stdout, ''); - t.is(actual.stderr, ''); - t.is(actual.code, 1); -}); - -test('should work with husky commitmsg hook and git commit', async () => { - const cwd = await git.bootstrap('fixtures/husky/integration'); - await writePkg({scripts: {commitmsg: `'${bin}' -e`}}, {cwd}); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should work with husky commitmsg hook in sub packages', async () => { - const upper = await git.bootstrap('fixtures/husky'); - const cwd = path.join(upper, 'integration'); - await writePkg({scripts: {commitmsg: `'${bin}' -e`}}, {cwd: upper}); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should work with husky via commitlint -e $GIT_PARAMS', async () => { - const cwd = await git.bootstrap('fixtures/husky/integration'); - await writePkg({scripts: {commitmsg: `'${bin}' -e $GIT_PARAMS`}}, {cwd}); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should work with husky via commitlint -e %GIT_PARAMS%', async () => { - const cwd = await git.bootstrap('fixtures/husky/integration'); - await writePkg({scripts: {commitmsg: `'${bin}' -e %GIT_PARAMS%`}}, {cwd}); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should work with husky via commitlint -e $HUSKY_GIT_PARAMS', async () => { - const cwd = await git.bootstrap('fixtures/husky/integration'); - await writePkg( - {scripts: {commitmsg: `'${bin}' -e $HUSKY_GIT_PARAMS`}}, - {cwd} - ); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should work with husky via commitlint -e %HUSKY_GIT_PARAMS%', async () => { - const cwd = await git.bootstrap('fixtures/husky/integration'); - await writePkg( - {scripts: {commitmsg: `'${bin}' -e %HUSKY_GIT_PARAMS%`}}, - {cwd} - ); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa('git', ['commit', '-m', '"test: this should work"'], {cwd}); -}); - -test('should allow reading of environment variables for edit file, succeeding if valid', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - await sander.writeFile(cwd, 'commit-msg-file', 'foo'); - const actual = await cli(['--env', 'variable'], { - cwd, - env: {variable: 'commit-msg-file'} - })(); - t.is(actual.code, 0); -}); - -test('should allow reading of environment variables for edit file, failing if invalid', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - await sander.writeFile( - cwd, - 'commit-msg-file', - 'foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.' - ); - const actual = await cli(['--env', 'variable'], { - cwd, - env: {variable: 'commit-msg-file'} - })(); - t.is(actual.code, 1); -}); - -test('should pick up parser preset and fail accordingly', async t => { - const cwd = await git.bootstrap('fixtures/parser-preset'); - const actual = await cli(['--parser-preset', './parser-preset'], {cwd})( - 'type(scope): subject' - ); - t.is(actual.code, 1); - t.true(actual.stdout.includes('may not be empty')); -}); - -test('should pick up parser preset and succeed accordingly', async t => { - const cwd = await git.bootstrap('fixtures/parser-preset'); - const actual = await cli(['--parser-preset', './parser-preset'], {cwd})( - '----type(scope): subject' - ); - t.is(actual.code, 0); -}); - -test('should pick up config from outside git repo and fail accordingly', async t => { - const outer = await fix.bootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - - const actual = await cli([], {cwd})('inner: bar'); - t.is(actual.code, 1); -}); - -test('should pick up config from outside git repo and succeed accordingly', async t => { - const outer = await fix.bootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - - const actual = await cli([], {cwd})('outer: bar'); - t.is(actual.code, 0); -}); - -test('should pick up config from inside git repo with precedence and succeed accordingly', async t => { - const outer = await fix.bootstrap('fixtures/inner-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - - const actual = await cli([], {cwd})('inner: bar'); - t.is(actual.code, 0); -}); - -test('should pick up config from inside git repo with precedence and fail accordingly', async t => { - const outer = await fix.bootstrap('fixtures/inner-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - - const actual = await cli([], {cwd})('outer: bar'); - t.is(actual.code, 1); -}); - -test('should handle --amend with signoff', async () => { - const cwd = await git.bootstrap('fixtures/signoff'); - await writePkg({scripts: {commitmsg: `'${bin}' -e`}}, {cwd}); - - await execa('npm', ['install'], {cwd}); - await execa('git', ['add', 'package.json'], {cwd}); - await execa( - 'git', - ['commit', '-m', '"test: this should work"', '--signoff'], - {cwd} - ); - await execa('git', ['commit', '--amend', '--no-edit'], {cwd}); -}); - -test('should handle linting with issue prefixes', async t => { - const cwd = await git.bootstrap('fixtures/issue-prefixes'); - const actual = await cli([], {cwd})('foobar REF-1'); - t.is(actual.code, 0); -}); - -test('should print full commit message when input from stdin fails', async t => { - const cwd = await git.bootstrap('fixtures/simple'); - const input = 'foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.'; - const actual = await cli([], {cwd})(input); - - t.true(actual.stdout.includes(input)); - t.is(actual.code, 1); -}); - -test('should not print commit message fully or partially when input succeeds', async t => { - const cwd = await git.bootstrap('fixtures/default'); - const message = 'type: bar\n\nFoo bar bizz buzz.\n\nCloses #123.'; - const actual = await cli([], {cwd})(message); - - t.false(actual.stdout.includes(message)); - t.false(actual.stdout.includes(message.split('\n')[0])); - t.is(actual.code, 0); -}); - -test('should fail for invalid formatters from configuration', async t => { - const cwd = await git.bootstrap('fixtures/custom-formatter'); - const actual = await cli([], {cwd})('foo: bar'); - t.true( - actual.stderr.includes( - `Using format custom-formatter, but cannot find the module` - ) - ); - t.is(actual.stdout, ''); - t.is(actual.code, 1); -}); - -test('should skip linting if message matches ignores config', async t => { - const cwd = await git.bootstrap('fixtures/ignores'); - const actual = await cli([], {cwd})('WIP'); - t.is(actual.code, 0); -}); - -test('should not skip linting if message does not match ignores config', async t => { - const cwd = await git.bootstrap('fixtures/ignores'); - const actual = await cli([], {cwd})('foo'); - t.is(actual.code, 1); -}); - -test('should not skip linting if defaultIgnores is false', async t => { - const cwd = await git.bootstrap('fixtures/default-ignores-false'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - t.is(actual.code, 1); -}); - -test('should skip linting if defaultIgnores is true', async t => { - const cwd = await git.bootstrap('fixtures/default-ignores-true'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - t.is(actual.code, 0); -}); - -test('should skip linting if defaultIgnores is unset', async t => { - const cwd = await git.bootstrap('fixtures/default-ignores-unset'); - const actual = await cli([], {cwd})('fixup! foo: bar'); - t.is(actual.code, 0); -}); - -test('should fail for invalid formatters from flags', async t => { - const cwd = await git.bootstrap('fixtures/custom-formatter'); - const actual = await cli(['--format', 'through-flag'], {cwd})('foo: bar'); - t.true( - actual.stderr.includes( - `Using format through-flag, but cannot find the module` - ) - ); - t.is(actual.stdout, ''); - t.is(actual.code, 1); -}); - -test('should work with absolute formatter path', async t => { - const formatterPath = path.resolve( - __dirname, - '../fixtures/custom-formatter/formatters/custom.js' - ); - const cwd = await git.bootstrap('fixtures/custom-formatter'); - const actual = await cli(['--format', formatterPath], {cwd})( - 'test: this should work' - ); - - t.true(actual.stdout.includes('custom-formatter-ok')); - t.is(actual.code, 0); -}); - -test('should work with relative formatter path', async t => { - const cwd = path.resolve( - await git.bootstrap('fixtures/custom-formatter'), - './formatters' - ); - const actual = await cli(['--format', './custom.js'], {cwd})( - 'test: this should work' - ); - - t.true(actual.stdout.includes('custom-formatter-ok')); - t.is(actual.code, 0); -}); - -async function writePkg(payload, options) { - const pkgPath = path.join(options.cwd, 'package.json'); - const pkg = JSON.parse(await sander.readFile(pkgPath)); - const result = merge(pkg, payload); - await sander.writeFile(pkgPath, JSON.stringify(result, null, ' ')); -} diff --git a/@commitlint/cli/src/cli.test.ts b/@commitlint/cli/src/cli.test.ts new file mode 100644 index 0000000000..d65a5e57ab --- /dev/null +++ b/@commitlint/cli/src/cli.test.ts @@ -0,0 +1,687 @@ +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 bin = require.resolve("../cli.js"); + +interface TestOptions { + cwd: string; + env?: Record<string, string>; +} + +const cli = (args: string[], options: TestOptions) => { + 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 result = cli([], { cwd })(); + await result; + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); +}); + +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 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 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(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(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); +}); + +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 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 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 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 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 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 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 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 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 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"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e $GIT_PARAMS` } } }, + { 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"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e %GIT_PARAMS%` } } }, + { 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"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e $HUSKY_GIT_PARAMS` } } }, + { 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"); + await writePkg( + { husky: { hooks: { "commit-msg": `'${bin}' -e %HUSKY_GIT_PARAMS%` } } }, + { 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 result = cli(["--env", "variable"], { + cwd, + env: { variable: "commit-msg-file" }, + })(); + 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"); + await fs.writeFile( + path.join(cwd, "commit-msg-file"), + "foo: bar\n\nFoo bar bizz buzz.\n\nCloses #123.", + ); + const result = cli(["--env", "variable"], { + cwd, + env: { variable: "commit-msg-file" }, + })(); + 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 result = cli(["--parser-preset", "./parser-preset"], { cwd })( + "type(scope): subject", + ); + 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 result = cli(["--parser-preset", "./parser-preset"], { cwd })( + "----type(scope): subject", + ); + 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")); + + 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")); + + 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")); + + 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")); + + 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 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"; + + 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"); + await fs.writeFile( + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n$body\n", + ); + + 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 x("git", ["config", "--local", "core.commentChar", "$"], { + nodeOptions: { cwd }, + }); + await fs.writeFile( + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n$body\n", + ); + + 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"); + await fs.writeFile( + path.join(cwd, ".git", "COMMIT_EDITMSG"), + "header: foo\n\n#body\n", + ); + + 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 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."; + // output text in plain text so we can compare it + 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."; + // output text in plain text so we can compare it + 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(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 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 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 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 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 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 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(output.stdout.trim()).toEqual(""); + expect(result.exitCode).toBe(ExitCode.CommitlintErrorDefault); +}); + +test("should work with absolute formatter path", async () => { + const formatterPath = path.resolve( + __dirname, + "../fixtures/custom-formatter/formatters/custom.js", + ); + const cwd = await gitBootstrap("fixtures/custom-formatter"); + const result = cli(["--format", formatterPath], { cwd })( + "test: this should work", + ); + 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 () => { + const cwd = path.resolve( + await gitBootstrap("fixtures/custom-formatter"), + "./formatters", + ); + const result = cli(["--format", "./custom.js"], { cwd })( + "test: this should work", + ); + 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 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 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 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 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 + + [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; 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] + -E, --env check message in the file at path given by environment variable value [string] + -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 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 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: [], + formatter: '@commitlint/format', + parserPreset: undefined, + ignores: undefined, + defaultIgnores: undefined, + 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 `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: [], + formatter: '@commitlint/format', + parserPreset: undefined, + ignores: undefined, + defaultIgnores: undefined, + 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 result = merge(pkg, payload); + await fs.writeFile(pkgPath, JSON.stringify(result, null, " ")); +} diff --git a/@commitlint/cli/src/cli.ts b/@commitlint/cli/src/cli.ts new file mode 100644 index 0000000000..50cfed53f9 --- /dev/null +++ b/@commitlint/cli/src/cli.ts @@ -0,0 +1,514 @@ +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, + LintOutcome, + ParserPreset, + QualifiedConfig, + UserConfig, +} 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 { CliError, ExitCode } from "./cli-error.js"; + +const require = createRequire(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; +}; + +const pkg: typeof import("../package.json") = require("../package.json"); + +const gitDefaultCommentChar = "#"; + +const cli = yargs(process.argv.slice(2)) + .options({ + color: { + alias: "c", + default: true, + description: "toggle colored output", + type: "boolean", + }, + config: { + 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", + }, + cwd: { + alias: "d", + default: process.cwd(), + defaultDescription: "(Working Directory)", + description: "directory to execute in", + type: "string", + }, + edit: { + alias: "e", + description: + "read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG", + type: "string", + }, + env: { + alias: "E", + description: + "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", + }, + "help-url": { + alias: "H", + type: "string", + description: "help url in error message", + }, + from: { + alias: "f", + description: + "lower end of the commit range to lint; applies if edit=false", + type: "string", + }, + "from-last-tag": { + description: + "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": { + description: + "additional git log arguments as space separated string, example '--first-parent --cherry-pick'", + 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", + }, + "parser-preset": { + alias: "p", + description: + "configuration preset to use for conventional-commits-parser", + type: "string", + }, + quiet: { + alias: "q", + default: false, + description: "toggle console output", + type: "boolean", + }, + to: { + alias: "t", + description: + "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", + }, + strict: { + alias: "s", + type: "boolean", + description: + "enable strict mode; result code 2 for warnings, 3 for errors", + }, + }) + .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, + ) + .usage(`${pkg.name}@${pkg.version} - ${pkg.description}\n`) + .usage( + `[input] reads from stdin if --edit, --env, --from and --to are omitted`, + ) + .strict(); + +/** + * avoid description words to be divided in new lines when there is enough space + * @see https://github.com/conventional-changelog/commitlint/pull/3850#discussion_r1472251234 + */ +cli.wrap(cli.terminalWidth()); + +main(cli.argv).catch((err) => { + setTimeout(() => { + if (err.type === pkg.name) { + process.exit(err.error_code); + } + throw err; + }, 0); +}); + +async function stdin() { + let result = ""; + + if (process.stdin.isTTY) { + return result; + } + + process.stdin.setEncoding("utf8"); + + for await (const chunk of process.stdin) { + result += chunk; + } + + return result; +} + +type MainArgsObject = { + [key in keyof Arguments<CliFlags>]: Arguments<CliFlags>[key]; +}; +type MainArgsPromise = Promise<MainArgsObject>; +type MainArgs = MainArgsObject | MainArgsPromise; + +async function resolveArgs(args: MainArgs): Promise<MainArgsObject> { + 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") { + options.edit = false; + } + + const raw = options._; + const flags = normalizeFlags(options); + + if (typeof options["print-config"] === "string") { + const loaded = await load(getSeed(flags), { + cwd: flags.cwd, + file: flags.config, + }); + + switch (options["print-config"]) { + case "json": + console.log(JSON.stringify(loaded)); + return; + + case "text": + default: + console.log(util.inspect(loaded, false, null, options.color)); + return; + } + } + + 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"], + })); + + const messages = (Array.isArray(input) ? input : [input]) + .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 --last or --from and --to", + pkg.name, + ); + cli.showHelp("log"); + console.log(err.message); + throw err; + } + + const loaded = await load(getSeed(flags), { + cwd: flags.cwd, + file: flags.config, + }); + const parserOpts = selectParserOpts(loaded.parserPreset); + const opts: LintOptions & { parserOpts: Options } = { + parserOpts: {}, + plugins: {}, + ignores: [], + defaultIgnores: true, + }; + if (parserOpts) { + opts.parserOpts = parserOpts; + } + if (loaded.plugins) { + opts.plugins = loaded.plugins; + } + if (loaded.ignores) { + opts.ignores = loaded.ignores; + } + if (loaded.defaultIgnores === false) { + opts.defaultIgnores = false; + } + const format = await loadFormatter(loaded, flags); + + // If reading from `.git/COMMIT_EDIT_MSG`, strip comments using + // core.commentChar from git configuration, falling back to '#'. + if (flags.edit) { + 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)), + ); + + let isRulesEmpty = false; + if (Object.keys(loaded.rules).length === 0) { + let input = ""; + + if (results.length !== 0) { + input = results[0].input; + } + + results.splice(0, results.length, { + valid: false, + errors: [ + { + level: 2, + valid: false, + 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"), + }, + ], + warnings: [], + input, + }); + + isRulesEmpty = true; + } + + const report = results.reduce<{ + valid: boolean; + errorCount: number; + warningCount: number; + results: LintOutcome[]; + }>( + (info, result) => { + info.valid = result.valid ? info.valid : false; + info.errorCount += result.errors.length; + info.warningCount += result.warnings.length; + info.results.push(result); + + return info; + }, + { + valid: true, + errorCount: 0, + warningCount: 0, + results: [], + }, + ); + + const helpUrl = flags["help-url"]?.trim() || loaded.helpUrl; + + const output = format(report, { + color: flags.color, + verbose: flags.verbose, + helpUrl, + }); + + if (!flags.quiet && output !== "") { + console.log(output); + } + + if (flags.strict) { + if (report.errorCount > 0) { + throw new CliError(output, pkg.name, ExitCode.CommitLintError); + } + if (report.warningCount > 0) { + 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); + } +} + +function checkFromStdin(input: (string | number)[], flags: CliFlags): boolean { + return input.length === 0 && !checkFromRepository(flags); +} + +function checkFromRepository(flags: CliFlags): boolean { + return checkFromHistory(flags) || checkFromEdit(flags); +} + +function checkFromEdit(flags: CliFlags): boolean { + return Boolean(flags.edit) || Boolean(flags.env); +} + +function checkFromHistory(flags: CliFlags): boolean { + return ( + typeof flags.from === "string" || + typeof flags["from-last-tag"] === "boolean" || + typeof flags.to === "string" || + typeof flags.last === "boolean" + ); +} + +function normalizeFlags(flags: CliFlags): CliFlags { + const edit = getEditValue(flags); + return { + ...flags, + edit, + }; +} + +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`, + ); + } + return process.env[flags.env]; + } + const { edit } = flags; + // If the edit flag is set but empty (i.e '-e') we default + // to .git/COMMIT_EDITMSG + if (edit === "") { + return true; + } + if (typeof edit === "boolean") { + return edit; + } + // The recommended method to specify -e with husky was `commitlint -e $HUSKY_GIT_PARAMS` + // This does not work properly with win32 systems, where env variable declarations + // 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 isHuskyParams = + 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) { + return process.env.GIT_PARAMS; + } + 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.`, + ); + } + return edit; +} + +function getSeed(flags: CliFlags): UserConfig { + const n = (flags.extends || []).filter( + (i): i is string => typeof i === "string", + ); + return n.length > 0 + ? { extends: n, parserPreset: flags["parser-preset"] } + : { parserPreset: flags["parser-preset"] }; +} + +function selectParserOpts(parserPreset: ParserPreset | undefined) { + if (typeof parserPreset !== "object") { + return undefined; + } + + if (typeof parserPreset.parserOpts !== "object") { + return undefined; + } + + return parserPreset.parserOpts; +} + +function loadFormatter( + config: QualifiedConfig, + flags: CliFlags, +): Promise<Formatter> { + const moduleName = flags.format || config.formatter || "@commitlint/format"; + const modulePath = + resolveFromSilent(moduleName, __dirname) || + resolveFromSilent(moduleName, flags.cwd) || + resolveGlobalSilent(moduleName); + + if (modulePath) { + return dynamicImport<Formatter>(modulePath); + } + + throw new Error(`Using format ${moduleName}, but cannot find the module.`); +} + +// Catch unhandled rejections globally +process.on("unhandledRejection", (reason, promise) => { + console.log("Unhandled Rejection at: Promise ", promise, " reason: ", reason); + throw reason; +}); diff --git a/@commitlint/cli/src/help.js b/@commitlint/cli/src/help.js deleted file mode 100644 index 42c0d597c9..0000000000 --- a/@commitlint/cli/src/help.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = flags => { - const lines = Object.entries(flags).map(entry => { - const name = entry[0]; - const value = entry[1]; - return [ - [name, value.alias].filter(Boolean), - value.description, - value.default - ].filter(Boolean); - }); - - const longest = lines - .map(line => { - const flags = line[0]; - return flags.reduce((sum, flag) => sum + flag.length, 0); - }) - .sort((a, b) => b - a)[0]; - - return lines - .map(line => { - const flags = line[0]; - const desc = line[1]; - const defaults = line[2]; - const fs = flags.map(flag => - flag.length > 1 ? `--${flag}` : ` -${flag}` - ); - const ds = defaults ? `, defaults to: ${defaults}` : ''; - const length = flags.reduce((sum, flag) => sum + flag.length, 0); - return `${fs.join(',')}${' '.repeat( - Math.max(4 + longest - length, 0) - )}${desc}${ds}`; - }) - .join('\n'); -}; diff --git a/@commitlint/cli/src/types.ts b/@commitlint/cli/src/types.ts new file mode 100644 index 0000000000..cbc9a8956a --- /dev/null +++ b/@commitlint/cli/src/types.ts @@ -0,0 +1,25 @@ +export interface CliFlags { + color: boolean; + config?: string; + cwd: string; + edit?: string | boolean; + env?: string; + extends?: (string | number)[]; + help?: boolean; + "help-url"?: string; + from?: string; + "from-last-tag"?: boolean; + "git-log-args"?: string; + last?: boolean; + format?: string; + "parser-preset"?: string; + quiet: boolean; + to?: string; + version?: boolean; + verbose?: boolean; + /** @type {'' | 'text' | 'json'} */ + "print-config"?: string; + strict?: boolean; + _: (string | number)[]; + $0: string; +} diff --git a/@commitlint/cli/tsconfig.json b/@commitlint/cli/tsconfig.json new file mode 100644 index 0000000000..8d5ce01f6d --- /dev/null +++ b/@commitlint/cli/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] +} diff --git a/@commitlint/config-angular-type-enum/CHANGELOG.md b/@commitlint/config-angular-type-enum/CHANGELOG.md index 5ca530ec5d..51e6839438 100644 --- a/@commitlint/config-angular-type-enum/CHANGELOG.md +++ b/@commitlint/config-angular-type-enum/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/config-angular-type-enum @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/config-angular-type-enum @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,104 +27,362 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +* 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)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews +* refactor(load): rewrite resolve logic +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package @commitlint/config-angular-type-enum +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) **Note:** Version bump only for package @commitlint/config-angular-type-enum -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) +**Note:** Version bump only for package @commitlint/config-angular-type-enum -### Features +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +**Note:** Version bump only for package @commitlint/config-angular-type-enum +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/config-angular-type-enum + +<a name="5.1.0"></a> +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Features + +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) **Note:** Version bump only for package @commitlint/config-angular-type-enum diff --git a/@commitlint/config-angular-type-enum/README.md b/@commitlint/config-angular-type-enum/README.md index 1ee08c66de..09df8aa8de 100644 --- a/@commitlint/config-angular-type-enum/README.md +++ b/@commitlint/config-angular-type-enum/README.md @@ -8,7 +8,7 @@ See [@commitlint/config-angular](../config-angular) for full angular conventions ## Getting started ```sh -npm install --save-dev @commitlint/config-angular-types @commitlint/cli +npm install --save-dev @commitlint/config-angular-type-enum @commitlint/cli echo "module.exports = {extends: ['@commitlint/config-angular-type-enum']};" > commitlint.config.js ``` @@ -28,14 +28,14 @@ const types = require("@commitlint/config-angular-type-enum"); // Use as rule creating errors for non-allowed types module.exports = { rules: { - ...types.rules - } + ...types.rules, + }, }; // 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 4d9ff71ab8..658d6259d2 100644 --- a/@commitlint/config-angular-type-enum/index.js +++ b/@commitlint/config-angular-type-enum/index.js @@ -1,18 +1,19 @@ const types = [ - 'build', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test' + "build", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", ]; -module.exports.rules = { - 'type-enum': [2, 'always', types] +export default { + rules: { + "type-enum": [2, "always", types], + }, + value: () => types, }; - -module.exports.value = () => types; diff --git a/@commitlint/config-angular-type-enum/package.json b/@commitlint/config-angular-type-enum/package.json index 59c5c2f9ef..44abe83730 100644 --- a/@commitlint/config-angular-type-enum/package.json +++ b/@commitlint/config-angular-type-enum/package.json @@ -1,20 +1,20 @@ { "name": "@commitlint/config-angular-type-enum", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Shareable commitlint config enforcing the angular commit convention types", + "main": "index.js", "files": [ "index.js" ], "scripts": { - "clean": "exit 0", "deps": "dep-check", - "pkg": "pkg-check", - "start": "exit 0", - "test": "exit 0" + "pkg": "pkg-check" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-angular-type-enum" }, "keywords": [ "conventional-changelog", @@ -27,8 +27,12 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-angular/CHANGELOG.md b/@commitlint/config-angular/CHANGELOG.md index 29ea1095ac..f16785c1ff 100644 --- a/@commitlint/config-angular/CHANGELOG.md +++ b/@commitlint/config-angular/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/config-angular @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/config-angular @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,175 +27,617 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [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 -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +**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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [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 -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [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 -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [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 -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [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 -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package @commitlint/config-angular -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/config-angular -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-angular + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-angular + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/config-angular + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/config-angular + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/config-angular + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/config-angular + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package @commitlint/config-angular + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/config-angular + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package @commitlint/config-angular + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-angular + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/config-angular + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/config-angular + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/config-angular + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/config-angular + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/config-angular + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/config-angular + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + ### Features -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +- add subject-exclamation-mark rule to improve error messages ([#2593](https://github.com/conventional-changelog/commitlint/issues/2593)) ([be701bd](https://github.com/conventional-changelog/commitlint/commit/be701bdb1de4e667b7a872767244285c4fa4fda4)) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/config-angular +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +**Note:** Version bump only for package @commitlint/config-angular +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) **Note:** Version bump only for package @commitlint/config-angular -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/config-angular + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/config-angular + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/config-angular + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/config-angular + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/config-angular + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/config-angular + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/config-angular + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/config-angular + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/config-angular + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/config-angular + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/config-angular + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/config-angular + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) ### Bug Fixes -* **core:** deprecate nlp rules ([bbab1d8](https://github.com/conventional-changelog/commitlint/commit/bbab1d8)), closes [#54](https://github.com/conventional-changelog/commitlint/issues/54) +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +**Note:** Version bump only for package @commitlint/config-angular -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-angular +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) **Note:** Version bump only for package @commitlint/config-angular -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +<a name="6.1.1"></a> +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +**Note:** Version bump only for package @commitlint/config-angular +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) **Note:** Version bump only for package @commitlint/config-angular -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +<a name="6.0.4"></a> +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +**Note:** Version bump only for package @commitlint/config-angular -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +<a name="6.0.3"></a> +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +**Note:** Version bump only for package @commitlint/config-angular -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +<a name="6.0.2"></a> +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +**Note:** Version bump only for package @commitlint/config-angular +<a name="5.1.1"></a> -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +**Note:** Version bump only for package @commitlint/config-angular +<a name="5.1.0"></a> -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Features + +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package @commitlint/config-angular +<a name="4.3.0"></a> +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +### Bug Fixes + +- **core:** deprecate nlp rules ([bbab1d8](https://github.com/conventional-changelog/commitlint/commit/bbab1d8)), closes [#54](https://github.com/conventional-changelog/commitlint/issues/54) + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package @commitlint/config-angular + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package @commitlint/config-angular + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) <a name="3.0.2"></a> + ## 3.0.2 (2017-07-11) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) +<a name="3.0.1"></a> +## 3.0.1 (2017-07-11) <a name="3.0.0"></a> + # 3.0.0 (2017-07-10) diff --git a/@commitlint/config-angular/README.md b/@commitlint/config-angular/README.md index 62ae7f98ae..49bfc60726 100644 --- a/@commitlint/config-angular/README.md +++ b/@commitlint/config-angular/README.md @@ -1,34 +1,31 @@ -> Lint your commits, angular-style - # @commitlint/config-angular -Shareable `commitlint` config enforcing the [Angular commit convention](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-guidelines). -Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). +Lint your commits, angular-style -|:warning:| | -|:-------:|--| -| **IMPORTANT** | As of version 5.0.0 of this package the `chore` type is no longer allowed. This breaks compat with most of the tooling present in the conventional-changelog community. See [config-conventional](../config-conventional) for a replacement that retains compatibility. | +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 ```sh npm install --save-dev @commitlint/config-angular @commitlint/cli -echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js +echo "export default {extends: ['@commitlint/config-angular']};" > commitlint.config.js ``` ## Rules + ### Problems The following rules are considered problems for `@commitlint/config-angular` and will yield a non-zero exit code when not met. -Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/reference-rules) for a list of available rules. - +Consult [Rules reference](https://commitlint.js.org/reference/rules) for a list of available rules. #### type-enum -* **condition**: `type` is found in value -* **rule**: `always` -* **value** - ```js +- **condition**: `type` is found in value +- **rule**: `always` +- **value** + + ``` [ 'build', 'ci', @@ -40,7 +37,7 @@ Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/refer 'revert', 'style', 'test' - ] + ] ``` ```sh @@ -49,11 +46,12 @@ echo "fix: some message" # passes ``` #### type-case -* **description**: `type` is in case `value` -* **rule**: `always` -* **value** - ```js - 'lowerCase' + +- **description**: `type` is in case `value` +- **rule**: `always` +- **value** + ``` + 'lowerCase' ``` ```sh @@ -62,8 +60,9 @@ echo "fix: some message" # passes ``` #### type-empty -* **condition**: `type` is empty -* **rule**: `never` + +- **condition**: `type` is empty +- **rule**: `never` ```sh echo ": some message" # fails @@ -71,10 +70,12 @@ echo "fix: some message" # passes ``` #### scope-case -* **condition**: `scope` is in case `value` -* **rule**: `always` -```js - 'lowerCase' + +- **condition**: `scope` is in case `value` +- **rule**: `always` + +``` +'lowerCase' ``` ```sh @@ -83,8 +84,9 @@ echo "fix(scope): some message" # passes ``` #### subject-case -* **condition**: `subject` is in one of the cases `['sentence-case', 'start-case', 'pascal-case', 'upper-case']` -* **rule**: `never` + +- **condition**: `subject` is in one of the cases `['sentence-case', 'start-case', 'pascal-case', 'upper-case']` +- **rule**: `never` ```sh echo "fix(SCOPE): Some message" # fails @@ -96,8 +98,9 @@ echo "fix(scope): some Message" # passes ``` #### subject-empty -* **condition**: `subject` is empty -* **rule**: `never` + +- **condition**: `subject` is empty +- **rule**: `never` ```sh echo "fix:" # fails @@ -105,11 +108,13 @@ echo "fix: some message" # passes ``` #### subject-full-stop -* **condition**: `subject` ends with `value` -* **rule**: `never` -* **value** -```js - '.' + +- **condition**: `subject` ends with `value` +- **rule**: `never` +- **value** + +``` +'.' ``` ```sh @@ -117,13 +122,25 @@ echo "fix: some message." # fails echo "fix: some message" # passes ``` +#### subject-exclamation-mark + +- **condition**: `subject` must not have a `!` before the `:` marker +- **rule**: `never` + +The [angular 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). #### header-max-length -* **condition**: `header` has `value` or less characters -* **rule**: `always` -* **value** -```js - 72 + +- **condition**: `header` has `value` or less characters +- **rule**: `always` +- **value** + +``` +72 ``` ```sh @@ -132,8 +149,10 @@ echo "fix: some message" # passes ``` ### Warnings + The following rules are considered warnings for `@commitlint/config-angular` and will print warning messages when not met. #### body-leading-blank -* **condition**: Body begins with blank line -* **rule**: `always` + +- **condition**: Body begins with blank line +- **rule**: `always` diff --git a/@commitlint/config-angular/index.js b/@commitlint/config-angular/index.js index 00c76b49d3..81848fb82c 100644 --- a/@commitlint/config-angular/index.js +++ b/@commitlint/config-angular/index.js @@ -1,20 +1,24 @@ -const typeEnum = require('@commitlint/config-angular-type-enum'); +import typeEnum from "@commitlint/config-angular-type-enum"; -module.exports = { +export default { + parserPreset: { + parserOpts: { headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/ }, + }, rules: { - '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 new file mode 100644 index 0000000000..d76a84c585 --- /dev/null +++ b/@commitlint/config-angular/index.test.js @@ -0,0 +1,108 @@ +import { test, expect } from "vitest"; +import lint from "@commitlint/lint"; + +import config from "./index.js"; + +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 }); + + if (result.errors.length > 1) { + throw new Error( + "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", + ); + } + + return result; +}; + +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 () => { + const result = await lintMessage( + "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 () => { + const result = await lintMessage( + `test(scope): a valid angular commit with a scope + + 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 () => { + const result = await lintMessage( + `test(scope): a valid angular commit with a scope + 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"); +}); + +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]", + ); + expect(result.warnings).toStrictEqual([]); +}); + +test("a long header", async () => { + const result = await lintMessage( + `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", + ); + expect(result.warnings).toStrictEqual([]); +}); + +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", + ); + expect(result.warnings).toStrictEqual([]); +}); + +test("message header with ! in it and a scope", async () => { + const result = await lintMessage( + `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", + ); + expect(result.warnings).toStrictEqual([]); +}); diff --git a/@commitlint/config-angular/package.json b/@commitlint/config-angular/package.json index 191171c014..25d65bbc27 100644 --- a/@commitlint/config-angular/package.json +++ b/@commitlint/config-angular/package.json @@ -1,20 +1,20 @@ { "name": "@commitlint/config-angular", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Shareable commitlint config enforcing the angular commit convention", + "main": "index.js", "files": [ "index.js" ], "scripts": { - "clean": "exit 0", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "exit 0", - "test": "exit 0" + "pkg": "pkg-check --skip-import" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-angular" }, "keywords": [ "conventional-changelog", @@ -27,11 +27,16 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "devDependencies": { - "@commitlint/utils": "^8.2.0" + "@commitlint/lint": "^20.0.0", + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "@commitlint/config-angular-type-enum": "^8.2.0" - } + "@commitlint/config-angular-type-enum": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-conventional/CHANGELOG.md b/@commitlint/config-conventional/CHANGELOG.md index 28771bf54c..0242ace145 100644 --- a/@commitlint/config-conventional/CHANGELOG.md +++ b/@commitlint/config-conventional/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/config-conventional @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/config-conventional @@ -19,7 +19,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,130 +38,613 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.3](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v18.6.3) (2024-03-11) ### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +* 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) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +## [18.6.2](https://github.com/conventional-changelog/commitlint/compare/v18.6.1...v18.6.2) (2024-02-14) + + +### Bug Fixes + +* **config-conventional:** use default export ([#3911](https://github.com/conventional-changelog/commitlint/issues/3911)) ([bc48408](https://github.com/conventional-changelog/commitlint/commit/bc4840832f9484186d3281d13ab5e0b4f9f63113)) + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + + +### Features + +* **rules:** add header-trim rule ([#3199](https://github.com/conventional-changelog/commitlint/issues/3199)) ([#3871](https://github.com/conventional-changelog/commitlint/issues/3871)) ([331579a](https://github.com/conventional-changelog/commitlint/commit/331579a8796af901b5e5103c44fedf1cb3a2f661)) + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="5.2.3"></a> -## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package @commitlint/config-conventional -<a name="5.1.3"></a> -## [5.1.3](https://github.com/conventional-changelog/commitlint/compare/v5.1.2...v5.1.3) (2017-11-24) + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-conventional + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) + ### Bug Fixes -* **config-conventional:** add missing applicable attribute to type-enum ([a8db0b1](https://github.com/conventional-changelog/commitlint/commit/a8db0b1)) +- update dependency conventional-changelog-conventionalcommits to v5 ([#3201](https://github.com/conventional-changelog/commitlint/issues/3201)) ([c20fd19](https://github.com/conventional-changelog/commitlint/commit/c20fd1952ed02df987165d96e4cef650c7fbaa4b)) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +- drop node v12 support + +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) ### Bug Fixes -* set access for npm ([8aeaec2](https://github.com/conventional-changelog/commitlint/commit/8aeaec2)) +- **cz-commitlint:** fix minor formatting issues ([99d8881](https://github.com/conventional-changelog/commitlint/commit/99d8881d0d951deded6d9e31bbb279d04101549b)) + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +### Features +- add subject-exclamation-mark rule to improve error messages ([#2593](https://github.com/conventional-changelog/commitlint/issues/2593)) ([be701bd](https://github.com/conventional-changelog/commitlint/commit/be701bdb1de4e667b7a872767244285c4fa4fda4)) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency ([#1993](https://github.com/conventional-changelog/commitlint/issues/1993)) ([32667e8](https://github.com/conventional-changelog/commitlint/commit/32667e8aa665cf94fe669ba048ad7abaf6abac6e)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/config-conventional + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency conventional-changelog-conventionalcommits to v4.3.0 ([#1816](https://github.com/conventional-changelog/commitlint/issues/1816)) ([f99aeda](https://github.com/conventional-changelog/commitlint/commit/f99aeda068aabdb250e2c9819da7229a695154b9)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- drop support for 'improvement' type ([#899](https://github.com/conventional-changelog/commitlint/issues/899)) ([b27ab08](https://github.com/conventional-changelog/commitlint/commit/b27ab08544373cfb72a4808756e2e8126ea96a97)) + +### Features +- **config-conventional:** footer/body-max-line ([#436](https://github.com/conventional-changelog/commitlint/issues/436)) ([8b394c9](https://github.com/conventional-changelog/commitlint/commit/8b394c94ffe37322d734bd4944add4a6cb2a4689)) +- **config-conventional:** increase header-max-length to 100 ([#860](https://github.com/conventional-changelog/commitlint/issues/860)) ([ff11998](https://github.com/conventional-changelog/commitlint/commit/ff11998e0cf6fcd4f03bc18ab27b1bdd6bf21906)), closes [#859](https://github.com/conventional-changelog/commitlint/issues/859) + +### BREAKING CHANGES + +- 'improvement' type will now be rejected by this config. + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +### Features + +- **config-conventional:** use parser with short breaking change support ([#821](https://github.com/conventional-changelog/commitlint/issues/821)) ([4b5300a](https://github.com/conventional-changelog/commitlint/commit/4b5300a)) + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/config-conventional + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) ### Bug Fixes -* **config-conventional:** remove unneeded dependency ([d0e62fd](https://github.com/conventional-changelog/commitlint/commit/d0e62fd)) +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="5.2.3"></a> + +## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) + +**Note:** Version bump only for package @commitlint/config-conventional + +<a name="5.1.3"></a> + +## [5.1.3](https://github.com/conventional-changelog/commitlint/compare/v5.1.2...v5.1.3) (2017-11-24) + +### Bug Fixes + +- **config-conventional:** add missing applicable attribute to type-enum ([a8db0b1](https://github.com/conventional-changelog/commitlint/commit/a8db0b1)) + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +### Bug Fixes + +- set access for npm ([8aeaec2](https://github.com/conventional-changelog/commitlint/commit/8aeaec2)) + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Bug Fixes +- **config-conventional:** remove unneeded dependency ([d0e62fd](https://github.com/conventional-changelog/commitlint/commit/d0e62fd)) ### Features -* add conventional-changelog package ([8bb0a85](https://github.com/conventional-changelog/commitlint/commit/8bb0a85)) +- add conventional-changelog package ([8bb0a85](https://github.com/conventional-changelog/commitlint/commit/8bb0a85)) diff --git a/@commitlint/config-conventional/README.md b/@commitlint/config-conventional/README.md index 2ea5a669b4..f83e2028e7 100644 --- a/@commitlint/config-conventional/README.md +++ b/@commitlint/config-conventional/README.md @@ -1,39 +1,37 @@ -> Lint your conventional commits - # @commitlint/config-conventional +Lint your conventional commits + Shareable `commitlint` config enforcing [conventional commits](https://conventionalcommits.org/). Use with [@commitlint/cli](https://npm.im/@commitlint/cli) and [@commitlint/prompt-cli](https://npm.im/@commitlint/prompt-cli). -| :warning: | | -|:-------:|--| -| **IMPORTANT** | This is a direct replacement for [@commitlint/config-angular](https://npm.im/@commitlint/config-angular) prior to version 4. `config-angular` diverged from the conventional commit convention as of version 5. See [#146](https://github.com/conventional-changelog/commitlint/issues/146) for details. | - ## Getting started ```sh npm install --save-dev @commitlint/config-conventional @commitlint/cli -echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js +echo "export default {extends: ['@commitlint/config-conventional']};" > commitlint.config.js ``` ## Rules + ### Problems The following rules are considered problems for `@commitlint/config-conventional` and will yield a non-zero exit code when not met. -Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/reference-rules) for a list of available rules. - +Consult [Rules reference](https://commitlint.js.org/reference/rules) for a list of available rules. #### type-enum -* **condition**: `type` is found in value -* **rule**: `always` -* **value** - ```js +- **condition**: `type` is found in value +- **rule**: `always` +- **level**: `error` +- **value** + + ``` [ 'build', - 'ci', 'chore', + 'ci', 'docs', 'feat', 'fix', @@ -42,7 +40,7 @@ Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/refer 'revert', 'style', 'test' - ] + ]; ``` ```sh @@ -51,11 +49,13 @@ echo "fix: some message" # passes ``` #### type-case -* **description**: `type` is in case `value` -* **rule**: `always` -* **value** - ```js - 'lowerCase' + +- **description**: `type` is in case `value` +- **rule**: `always` +- **level**: `error` +- **value** + ``` + 'lowerCase' ``` ```sh @@ -64,29 +64,21 @@ echo "fix: some message" # passes ``` #### type-empty -* **condition**: `type` is empty -* **rule**: `never` + +- **condition**: `type` is empty +- **rule**: `never` +- **level**: `error` ```sh echo ": some message" # fails echo "fix: some message" # passes ``` -#### scope-case -* **condition**: `scope` is in case `value` -* **rule**: `always` -```js - 'lowerCase' -``` - -```sh -echo "fix(SCOPE): some message" # fails -echo "fix(scope): some message" # passes -``` - #### subject-case -* **condition**: `subject` is in one of the cases `['sentence-case', 'start-case', 'pascal-case', 'upper-case']` -* **rule**: `never` + +- **condition**: `subject` is in one of the cases `['sentence-case', 'start-case', 'pascal-case', 'upper-case']` +- **rule**: `never` +- **level**: `error` ```sh echo "fix(SCOPE): Some message" # fails @@ -98,8 +90,10 @@ echo "fix(scope): some Message" # passes ``` #### subject-empty -* **condition**: `subject` is empty -* **rule**: `never` + +- **condition**: `subject` is empty +- **rule**: `never` +- **level**: `error` ```sh echo "fix:" # fails @@ -107,11 +101,14 @@ echo "fix: some message" # passes ``` #### subject-full-stop -* **condition**: `subject` ends with `value` -* **rule**: `never` -* **value** -```js - '.' + +- **condition**: `subject` ends with `value` +- **rule**: `never` +- **level**: `error` +- **value** + +``` +'.' ``` ```sh @@ -119,16 +116,94 @@ echo "fix: some message." # fails echo "fix: some message" # passes ``` - #### header-max-length -* **condition**: `header` has `value` or less characters -* **rule**: `always` -* **value** -```js - 72 + +- **condition**: `header` has `value` or less characters +- **rule**: `always` +- **level**: `error` +- **value** + +``` +100 ``` ```sh echo "fix: some message that is way too long and breaks the line max-length by several characters" # fails echo "fix: some message" # passes ``` + +#### footer-leading-blank + +- **condition**: `footer` should have a leading blank line +- **rule**: `always` +- **level**: `warning` + +```sh +echo "fix: some message +BREAKING CHANGE: It will be significant" # warning + +echo "fix: some message + +BREAKING CHANGE: It will be significant" # passes +``` + +#### footer-max-line-length + +- **condition**: `footer` each line has `value` or less characters +- **rule**: `always` +- **level**: `error` +- **value** + +``` +100 +``` + +```sh +echo "fix: some message + +BREAKING CHANGE: footer with multiple lines +has a message that is way too long and will break the line rule 'line-max-length' by several characters" # fails + +echo "fix: some message + +BREAKING CHANGE: footer with multiple lines +but still no line is too long" # passes +``` + +#### body-leading-blank + +- **condition**: `body` should have a leading blank line +- **rule**: `always` +- **level**: `warning` + +```sh +echo "fix: some message +body" # warning + +echo "fix: some message + +body" # passes +``` + +#### body-max-line-length + +- **condition**: `body` each line has `value` or less characters +- **rule**: `always` +- **level**: `error` +- **value** + +``` +100 +``` + +```sh +echo "fix: some message + +body with multiple lines +has a message that is way too long and will break the line rule 'line-max-length' by several characters" # fails + +echo "fix: some message + +body with multiple lines +but still no line is too long" # passes +``` diff --git a/@commitlint/config-conventional/index.js b/@commitlint/config-conventional/index.js deleted file mode 100644 index f26ad5a57f..0000000000 --- a/@commitlint/config-conventional/index.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = { - rules: { - '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'] - ], - 'subject-empty': [2, 'never'], - 'subject-full-stop': [2, 'never', '.'], - 'type-case': [2, 'always', 'lower-case'], - 'type-empty': [2, 'never'], - 'type-enum': [ - 2, - 'always', - [ - 'build', - 'chore', - 'ci', - 'docs', - 'feat', - 'fix', - 'perf', - 'refactor', - 'revert', - 'style', - 'test' - ] - ] - } -}; diff --git a/@commitlint/config-conventional/package.json b/@commitlint/config-conventional/package.json index df6174a42d..5ef4fc7bb5 100644 --- a/@commitlint/config-conventional/package.json +++ b/@commitlint/config-conventional/package.json @@ -1,23 +1,23 @@ { "name": "@commitlint/config-conventional", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Shareable commitlint config enforcing conventional commits", + "main": "lib/index.js", "files": [ - "index.js" + "lib/" ], "scripts": { - "clean": "exit 0", "deps": "dep-check", - "pkg": "pkg-check", - "start": "exit 0", - "test": "exit 0" + "pkg": "pkg-check" }, "publishConfig": { "access": "public" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-conventional" }, "keywords": [ "conventional-changelog", @@ -30,8 +30,17 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/lint": "^20.0.0", + "@commitlint/utils": "^20.0.0" + }, + "dependencies": { + "@commitlint/types": "^20.0.0", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-conventional/src/index.test.ts b/@commitlint/config-conventional/src/index.test.ts new file mode 100644 index 0000000000..3603fe74f6 --- /dev/null +++ b/@commitlint/config-conventional/src/index.test.ts @@ -0,0 +1,222 @@ +import { test, expect } from "vitest"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; + +import lint from "@commitlint/lint"; + +import config from "./index.js"; + +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; +}; + +const commitLint = async (message: string) => { + const preset = await (await dynamicImport(parserPreset))(); + return lint(message, rules, { ...preset }); +}; + +const messages = { + 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", + ], + 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", + warningFooterLeadingBlank: + "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", + 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", + ], +}; + +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", + valid: false, + }, + typeCase: { + level: 2, + message: "type must be lower-case", + name: "type-case", + valid: false, + }, + typeEmpty: { + level: 2, + 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", + valid: false, + }, + subjectEmpty: { + level: 2, + 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", + valid: false, + }, + headerMaxLength: { + level: 2, + message: + "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", + valid: false, + }, + bodyMaxLineLength: { + level: 2, + message: "body's lines must not be longer than 100 characters", + name: "body-max-line-length", + valid: false, + }, +}; + +const warnings = { + footerLeadingBlank: { + level: 1, + 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", + valid: false, + }, +}; + +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 () => { + const result = await commitLint(messages.invalidTypeCase); + + expect(result.valid).toBe(false); + expect(result.errors).toEqual([errors.typeCase, errors.typeEnum]); +}); + +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 () => { + const invalidInputs = await Promise.all( + messages.invalidSubjectCases.map((invalidInput) => + commitLint(invalidInput), + ), + ); + + invalidInputs.forEach((result) => { + expect(result.valid).toBe(false); + expect(result.errors).toEqual([errors.subjectCase]); + }); +}); + +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 () => { + const result = await commitLint(messages.invalidSubjectFullStop); + + expect(result.valid).toBe(false); + expect(result.errors).toEqual([errors.subjectFullStop]); +}); + +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 () => { + const result = await commitLint(messages.warningFooterLeadingBlank); + + expect(result.valid).toBe(true); + expect(result.warnings).toEqual([warnings.footerLeadingBlank]); +}); + +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 () => { + const result = await commitLint(messages.warningBodyLeadingBlank); + + expect(result.valid).toBe(true); + expect(result.warnings).toEqual([warnings.bodyLeadingBlank]); +}); + +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 () => { + const validInputs = await Promise.all( + messages.validMessages.map((input) => commitLint(input)), + ); + + validInputs.forEach((result) => { + expect(result.valid).toBe(true); + expect(result.errors).toEqual([]); + expect(result.warnings).toEqual([]); + }); +}); diff --git a/@commitlint/config-conventional/src/index.ts b/@commitlint/config-conventional/src/index.ts new file mode 100644 index 0000000000..09ee1c9a67 --- /dev/null +++ b/@commitlint/config-conventional/src/index.ts @@ -0,0 +1,146 @@ +import { + RuleConfigCondition, + RuleConfigSeverity, + TargetCaseType, +} from "@commitlint/types"; + +export default { + 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": [ + RuleConfigSeverity.Error, + "always", + 100, + ] as const, + "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"], + ] 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": [ + RuleConfigSeverity.Error, + "always", + [ + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", + ], + ] as [RuleConfigSeverity, RuleConfigCondition, string[]], + }, + prompt: { + questions: { + type: { + description: "Select the type of change that you're committing", + enum: { + feat: { + description: "A new feature", + title: "Features", + emoji: "✨", + }, + fix: { + description: "A bug fix", + title: "Bug Fixes", + emoji: "🐛", + }, + docs: { + 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: "💎", + }, + refactor: { + description: + "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: "🚀", + }, + test: { + 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: "🛠", + }, + ci: { + description: + "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: "♻️", + }, + revert: { + description: "Reverts a previous commit", + title: "Reverts", + emoji: "🗑", + }, + }, + }, + scope: { + description: + "What is the scope of this change (e.g. component or file name)", + }, + subject: { + description: + "Write a short, imperative tense description of the change", + }, + body: { + description: "Provide a longer description of the change", + }, + isBreaking: { + description: "Are there any breaking changes?", + }, + breakingBody: { + description: + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", + }, + breaking: { + description: "Describe the breaking changes", + }, + isIssueAffected: { + 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", + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }, +}; diff --git a/@commitlint/config-conventional/tsconfig.json b/@commitlint/config-conventional/tsconfig.json new file mode 100644 index 0000000000..49479bf34f --- /dev/null +++ b/@commitlint/config-conventional/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] +} diff --git a/@commitlint/config-lerna-scopes/CHANGELOG.md b/@commitlint/config-lerna-scopes/CHANGELOG.md index c0371cd307..fb311bbd39 100644 --- a/@commitlint/config-lerna-scopes/CHANGELOG.md +++ b/@commitlint/config-lerna-scopes/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/config-lerna-scopes @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/config-lerna-scopes @@ -19,15 +19,34 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 +### 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 -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +* 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 @@ -35,240 +54,577 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -### Bug Fixes +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +### Reverts +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility +* Apply suggestions from code review +* fix: should reuse `cli` instead call `yargs()` +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + + +### Bug Fixes + +* update dependency semver to v7.6.0 ([#3900](https://github.com/conventional-changelog/commitlint/issues/3900)) ([df33003](https://github.com/conventional-changelog/commitlint/commit/df33003dce77bc5ff48678cddf9401dffedaeb57)) + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + + +### Bug Fixes + +* **config-lerna-scopes:** add missing dependency ([#3607](https://github.com/conventional-changelog/commitlint/issues/3607)) ([2fff094](https://github.com/conventional-changelog/commitlint/commit/2fff0943899161b2159a4acddc9237c6ab60c7a5)) +* update dependency semver to v7.5.0 ([#3604](https://github.com/conventional-changelog/commitlint/issues/3604)) ([01e35e0](https://github.com/conventional-changelog/commitlint/commit/01e35e06cf9123a0c367e0d0ac79988ec4334e6a)) + + + + + +## [17.6.2](https://github.com/conventional-changelog/commitlint/compare/v17.6.1...v17.6.2) (2023-05-03) + + +### Bug Fixes + +* lerna package.json resolution ([#3600](https://github.com/conventional-changelog/commitlint/issues/3600)) ([6c5cd53](https://github.com/conventional-changelog/commitlint/commit/6c5cd535679ac9448a127a57e309276e699cebb9)) + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +### Bug Fixes + +- update dependency semver to v7.3.8 ([#3441](https://github.com/conventional-changelog/commitlint/issues/3441)) ([7599ad6](https://github.com/conventional-changelog/commitlint/commit/7599ad6ab622ecbb6efa9ddba7acc3bbf66db5b5)) + +## [17.2.1](https://github.com/conventional-changelog/commitlint/compare/v17.2.0...v17.2.1) (2022-11-01) + **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +### Bug Fixes + +- update dependency semver to v7.3.6 ([#3112](https://github.com/conventional-changelog/commitlint/issues/3112)) ([ad886fd](https://github.com/conventional-changelog/commitlint/commit/ad886fd7ea46bc2df346099f9d4f10defd51fe75)) +- update dependency semver to v7.3.7 ([#3119](https://github.com/conventional-changelog/commitlint/issues/3119)) ([c9c49b2](https://github.com/conventional-changelog/commitlint/commit/c9c49b2de935528d84a817de750cd65b8f765c48)) + +## [16.2.2](https://github.com/conventional-changelog/commitlint/compare/v16.2.1...v16.2.2) (2022-02-14) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +### Tests + +- **config-lerna-scopes:** reuse npm bootstrap to simplify tests ([#2479](https://github.com/conventional-changelog/commitlint/issues/2479)) ([9a7a43a](https://github.com/conventional-changelog/commitlint/commit/9a7a43aa8a7eca18f2fe05c78d27dcb1a128930c)), closes [#2447](https://github.com/conventional-changelog/commitlint/issues/2447) + +### BREAKING CHANGES + +- **config-lerna-scopes:** upgrade to lerna v4 + +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests +- test: fix issue after merge + +- test: one more fix after merge + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +### Bug Fixes + +- update dependency import-from to v4 ([#2629](https://github.com/conventional-changelog/commitlint/issues/2629)) ([5bcb604](https://github.com/conventional-changelog/commitlint/commit/5bcb60456cd9d4c8f0f0bae21ca7c3d1c73943ca)) +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +### Bug Fixes +- **config-lerna-scopes:** ignore packages without names ([#2514](https://github.com/conventional-changelog/commitlint/issues/2514)) ([df3bf71](https://github.com/conventional-changelog/commitlint/commit/df3bf71ab36a085ef35a1491025c0d2e2b92ff77)) +- update dependency semver to v7.3.5 ([#2519](https://github.com/conventional-changelog/commitlint/issues/2519)) ([5113f22](https://github.com/conventional-changelog/commitlint/commit/5113f22c620e7b187fd558e5befa541b448ea18b)) +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +### Features + +- **config-lerna-scopes:** keep supporting lerna v3 ([51b0f4a](https://github.com/conventional-changelog/commitlint/commit/51b0f4a56f111c61419247755b1404b4e20d3a09)) + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes +- update dependency semver to v7.3.4 ([#2336](https://github.com/conventional-changelog/commitlint/issues/2336)) ([790b61a](https://github.com/conventional-changelog/commitlint/commit/790b61afa668d0eab80bbe49db58d3d5d29bb16e)) ### Features -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +- **config-lerna-scopes:** support yarn workspaces ([#2149](https://github.com/conventional-changelog/commitlint/issues/2149)) ([b244246](https://github.com/conventional-changelog/commitlint/commit/b2442469afe3b11c20b0101be7656ced43fab366)) +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) +- refactor!: drop support for lerna v2 ([59667b3](https://github.com/conventional-changelog/commitlint/commit/59667b376118323b1312d3d1084b9178918f3d23)) +### BREAKING CHANGES -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +- remove lerna v2 support and tests + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES +- remove node 8 from circle-ci checks +also remove node 13 because we do not support experimental versions +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package @commitlint/config-lerna-scopes +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +### Bug Fixes + +- update dependency semver to v7.3.2 ([#1369](https://github.com/conventional-changelog/commitlint/issues/1369)) ([3c09722](https://github.com/conventional-changelog/commitlint/commit/3c09722d2db85a94cd1f4bf25c6b4251b2c41bbb)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) +### Bug Fixes +- **config-lerna-scopes:** correct lerna in peerDependencies ([#980](https://github.com/conventional-changelog/commitlint/issues/980)) ([f88f00d](https://github.com/conventional-changelog/commitlint/commit/f88f00d5d3d0a247b5635b50248bbb942b1ec962)) +- update dependency semver to v7.1.3 ([#995](https://github.com/conventional-changelog/commitlint/issues/995)) ([4ee307a](https://github.com/conventional-changelog/commitlint/commit/4ee307a1f8c861ae5d8a038560d166c5d00ea8ba)) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) +**Note:** Version bump only for package @commitlint/config-lerna-scopes +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) **Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) ### Bug Fixes -* **config-lerna-scopes:** fix package list get with recent lerna versions ([8f35dae](https://github.com/conventional-changelog/commitlint/commit/8f35dae)) +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +<a name="7.2.1"></a> +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -### Features +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) -* **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) +**Note:** Version bump only for package @commitlint/config-lerna-scopes +<a name="6.1.0"></a> +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +<a name="6.0.4"></a> +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +**Note:** Version bump only for package @commitlint/config-lerna-scopes -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) ### Features -* **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +<a name="5.0.1"></a> +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package @commitlint/config-lerna-scopes + +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) + +### Bug Fixes + +- **config-lerna-scopes:** fix package list get with recent lerna versions ([8f35dae](https://github.com/conventional-changelog/commitlint/commit/8f35dae)) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) <a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## 3.0.2 (2017-07-11) ### Features -* **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) +- **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) + +### Features +- **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) ### Features -* **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) +- **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) + +<a name="3.0.1"></a> +## 3.0.1 (2017-07-11) +### Features +- **config-lerna-scopes:** support non-standard lerna repos ([71fc40e](https://github.com/conventional-changelog/commitlint/commit/71fc40e)) <a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +# 3.0.0 (2017-07-10) ### Features -* **config-lerna-scopes:** support non-standard lerna repos ([903df4b](https://github.com/conventional-changelog/commitlint/commit/903df4b)) +- **config-lerna-scopes:** support non-standard lerna repos ([903df4b](https://github.com/conventional-changelog/commitlint/commit/903df4b)) diff --git a/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json b/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json index 7d013836f6..743ceadeaa 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/lerna.json @@ -1,7 +1,4 @@ { - "lerna": "3.2.1", - "version": "1.0.0", - "packages": [ - "packages/*" - ] + "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 1499f30ab3..7b7c45507d 100644 --- a/@commitlint/config-lerna-scopes/fixtures/basic/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/basic/package.json @@ -1,7 +1,4 @@ { - "name": "basic", - "version": "1.0.0", - "devDependencies": { - "lerna": "3.16.4" - } + "name": "basic", + "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 5693ad0511..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", - "version": "1.0.0" + "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 e63566ecae..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", - "version": "1.0.0" + "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 7d013836f6..743ceadeaa 100644 --- a/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/empty/lerna.json @@ -1,7 +1,4 @@ { - "lerna": "3.2.1", - "version": "1.0.0", - "packages": [ - "packages/*" - ] + "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 71332daff8..a0d311fba7 100644 --- a/@commitlint/config-lerna-scopes/fixtures/empty/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/empty/package.json @@ -1,7 +1,4 @@ { - "name": "empty", - "version": "1.0.0", - "devDependencies": { - "lerna": "3.16.4" - } + "name": "empty", + "version": "1.0.0" } diff --git a/@commitlint/config-lerna-scopes/fixtures/lerna-two/lerna.json b/@commitlint/config-lerna-scopes/fixtures/lerna-two/lerna.json deleted file mode 100644 index 91353a207e..0000000000 --- a/@commitlint/config-lerna-scopes/fixtures/lerna-two/lerna.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "lerna": "2.4.0", - "version": "1.0.0", - "packages": [ - "packages/*" - ] -} diff --git a/@commitlint/config-lerna-scopes/fixtures/lerna-two/package.json b/@commitlint/config-lerna-scopes/fixtures/lerna-two/package.json deleted file mode 100644 index 8cbd27be58..0000000000 --- a/@commitlint/config-lerna-scopes/fixtures/lerna-two/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "version-mismatch", - "version": "1.0.0", - "devDependencies": { - "lerna": "3.16.4" - } -} diff --git a/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json b/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json new file mode 100644 index 0000000000..743ceadeaa --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/modules/lerna.json @@ -0,0 +1,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 new file mode 100644 index 0000000000..7b7c45507d --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/modules/package.json @@ -0,0 +1,4 @@ +{ + "name": "basic", + "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 new file mode 100644 index 0000000000..1c6951c9b1 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/modules/packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@commitlint-lerna-scopes/modules-a", + "version": "1.0.0" +} diff --git a/@commitlint/config-lerna-scopes/fixtures/modules/packages/module/package.json b/@commitlint/config-lerna-scopes/fixtures/modules/packages/module/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/@commitlint/config-lerna-scopes/fixtures/modules/packages/module/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} 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 bd2d94edfe..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", - "version": "1.0.0" + "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 f0c995bc44..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", - "version": "1.0.0" + "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 4fec852f4c..daafb8e8db 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/lerna.json @@ -1,7 +1,4 @@ { - "lerna": "3.2.1", - "version": "1.0.0", - "packages": [ - "@packages/*" - ] + "version": "1.0.0", + "packages": ["@packages/**"] } diff --git a/@commitlint/config-lerna-scopes/fixtures/scoped/package.json b/@commitlint/config-lerna-scopes/fixtures/scoped/package.json index 360032f27c..3981adbef6 100644 --- a/@commitlint/config-lerna-scopes/fixtures/scoped/package.json +++ b/@commitlint/config-lerna-scopes/fixtures/scoped/package.json @@ -1,7 +1,4 @@ { - "name": "scoped", - "version": "1.0.0", - "devDependencies": { - "lerna": "3.16.4" - } + "name": "scoped", + "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 9a9a780255..a24642b5ae 100644 --- a/@commitlint/config-lerna-scopes/index.js +++ b/@commitlint/config-lerna-scopes/index.js @@ -1,45 +1,89 @@ -const Path = require('path'); -const importFrom = require('import-from'); -const resolvePkg = require('resolve-pkg'); -const semver = require('semver'); +import path from "node:path"; +import fs from "node:fs/promises"; +import fg from "fast-glob"; +import configWorkspaceScopes from "@commitlint/config-workspace-scopes"; -module.exports = { - utils: {getPackages}, +export default { + 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 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 repository = new Repository(cwd); - return PackageUtilities.getPackages({ - packageConfigs: repository.packageConfigs, - rootPath: cwd - }); - } +/** + * 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; +} + +/** + * 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", + }); + + const packages = JSON.parse(json)?.packages || []; + if (packages.length === 0) { + return []; + } - const Project = importFrom(cwd, '@lerna/project'); - const project = new Project(cwd); - return project.getPackages(); - }) - .then(packages => { - return packages - .map(pkg => pkg.name) - .map(name => (name.charAt(0) === '@' ? name.split('/')[1] : name)); - }); + const patterns = normalizePatterns(packages); + const entries = await fg(patterns, { + cwd, + ignore: ["**/node_modules/**", "**/bower_components/**"], + }); + + const pkgJsons = await Promise.all( + Array.from(new Set(entries.map((entry) => path.join(cwd, entry)))).map( + (pkgPath) => fs.readFile(pkgPath, { encoding: "utf-8" }), + ), + ); + + return pkgJsons.map((pkgJson) => JSON.parse(pkgJson) || {}); } -function getLernaVersion(cwd) { - return require(Path.join(resolvePkg('lerna', {cwd}), 'package.json')).version; +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, + }); + // 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 new file mode 100644 index 0000000000..3de602d281 --- /dev/null +++ b/@commitlint/config-lerna-scopes/index.test.js @@ -0,0 +1,119 @@ +import { test, expect, vi } from "vitest"; +import path from "path"; +import { fileURLToPath } from "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 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 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(["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); + + 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); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["scoped-a", "scoped-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("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(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 eb2790fb7e..1e7544a39e 100644 --- a/@commitlint/config-lerna-scopes/package.json +++ b/@commitlint/config-lerna-scopes/package.json @@ -1,29 +1,20 @@ { "name": "@commitlint/config-lerna-scopes", - "version": "8.2.0", - "description": "Shareable commitlint config enforcing lerna package names as scopes", + "type": "module", + "version": "20.0.0", + "description": "Shareable commitlint config enforcing lerna package and workspace names as scopes", + "main": "index.js", "files": [ "index.js" ], "scripts": { - "clean": "exit 0", - "start": "ava --watch --verbose", - "test": "ava --verbose", "deps": "dep-check", "pkg": "pkg-check" }, - "ava": { - "files": [ - "test.js" - ], - "sources": [ - "index.js", - "fixtures/**/*" - ] - }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-lerna-scopes" }, "keywords": [ "conventional-changelog", @@ -31,25 +22,30 @@ "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://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "peerDependencies": { - "lerna": "^3.0.0" + "lerna": "*" + }, + "peerDependenciesMeta": { + "lerna": { + "optional": true + } + }, + "engines": { + "node": ">=v18" }, "dependencies": { - "import-from": "3.0.0", - "resolve-pkg": "2.0.0", - "semver": "6.3.0" + "@commitlint/config-workspace-scopes": "^20.0.0", + "fast-glob": "^3.3.3" }, "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "@lerna/project": "3.16.0", - "ava": "0.22.0", - "lerna": "3.16.4" - } + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-lerna-scopes/readme.md b/@commitlint/config-lerna-scopes/readme.md index c06db1343f..3d9d9ee3ee 100644 --- a/@commitlint/config-lerna-scopes/readme.md +++ b/@commitlint/config-lerna-scopes/readme.md @@ -1,19 +1,23 @@ -> Lint your commits, angular-style - # @commitlint/config-lerna-scopes -Shareable `commitlint` config enforcing lerna package names as scopes. + +Lint your lerna project commits + +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 npm install --save-dev @commitlint/config-lerna-scopes @commitlint/cli -echo "module.exports = {extends: ['@commitlint/config-lerna-scopes']};" > commitlint.config.js +echo "export default {extends: ['@commitlint/config-lerna-scopes']};" > commitlint.config.js ``` ## Examples -``` +```text ❯ cat commitlint.config.js { extends: ['@commitlint/config-lerna-scopes'] @@ -40,4 +44,4 @@ packages ✔ found 0 problems, 0 warnings ``` -Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/reference-rules) for a list of available rules. +Consult [Rules reference](https://commitlint.js.org/reference/rules) for a list of available rules. diff --git a/@commitlint/config-lerna-scopes/test.js b/@commitlint/config-lerna-scopes/test.js deleted file mode 100644 index 9a8aa6035c..0000000000 --- a/@commitlint/config-lerna-scopes/test.js +++ /dev/null @@ -1,69 +0,0 @@ -import {npm} from '@commitlint/test'; -import test from 'ava'; -import config from '.'; - -test('exports rules key', t => { - t.true(Object.prototype.hasOwnProperty.call(config, 'rules')); -}); - -test('rules hold object', t => { - t.is(typeof config.rules, 'object'); -}); - -test('rules contain scope-enum', t => { - t.true(Object.prototype.hasOwnProperty.call(config.rules, 'scope-enum')); -}); - -test('scope-enum is function', t => { - const {'scope-enum': fn} = config.rules; - t.is(typeof fn, 'function'); -}); - -test('scope-enum does not throw for missing context', async t => { - const {'scope-enum': fn} = config.rules; - try { - await fn(); - t.pass(); - } catch (err) { - t.fail(); - } -}); - -test('scope-enum has expected severity', async t => { - const {'scope-enum': fn} = config.rules; - const [severity] = await fn(); - t.is(severity, 2); -}); - -test('scope-enum has expected modifier', async t => { - const {'scope-enum': fn} = config.rules; - const [, modifier] = await fn(); - t.is(modifier, 'always'); -}); - -test('returns empty value for empty lerna repository', async t => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/empty'); - const [, , value] = await fn({cwd}); - t.deepEqual(value, []); -}); - -test('returns expected value for basic lerna repository', async t => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/basic'); - const [, , value] = await fn({cwd}); - t.deepEqual(value, ['a', 'b']); -}); - -test('returns expected value for scoped lerna repository', async t => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/scoped'); - const [, , value] = await fn({cwd}); - t.deepEqual(value, ['a', 'b']); -}); - -test('works with lerna version < 3', async t => { - const {'scope-enum': fn} = config.rules; - const cwd = await npm.bootstrap('fixtures/lerna-two'); - await t.notThrows(async () => fn({cwd})); -}); diff --git a/@commitlint/config-nx-scopes/CHANGELOG.md b/@commitlint/config-nx-scopes/CHANGELOG.md new file mode 100644 index 0000000000..e94fbc25e6 --- /dev/null +++ b/@commitlint/config-nx-scopes/CHANGELOG.md @@ -0,0 +1,332 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [18.5.1](https://github.com/conventional-changelog/commitlint/compare/v18.5.0...v18.5.1) (2024-01-22) + + +### Bug Fixes + +* **config-nx-scopes:** replace import with require ([#3865](https://github.com/conventional-changelog/commitlint/issues/3865)) ([#3867](https://github.com/conventional-changelog/commitlint/issues/3867)) ([3ede3e0](https://github.com/conventional-changelog/commitlint/commit/3ede3e0e9d5af1302fff896aba049b487b90c0bf)) + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + + +### Bug Fixes + +* **config-nx-scopes:** restore compatibility with nx 17.2.0 and higher ([#3855](https://github.com/conventional-changelog/commitlint/issues/3855)) ([1e08a17](https://github.com/conventional-changelog/commitlint/commit/1e08a17eb354b40776be814e8d787eee44d5df2c)), closes [#3820](https://github.com/conventional-changelog/commitlint/issues/3820) + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [18.3.0](https://github.com/conventional-changelog/commitlint/compare/v18.2.0...v18.3.0) (2023-10-26) + + +### Features + +* **config-nx-scopes:** support latest nx version ([#3728](https://github.com/conventional-changelog/commitlint/issues/3728)) ([22e6f74](https://github.com/conventional-changelog/commitlint/commit/22e6f74e3cae74497162c8ae8f5d3888e3b19f6e)) + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [17.6.4](https://github.com/conventional-changelog/commitlint/compare/v17.6.3...v17.6.4) (2023-05-07) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +### Features + +- **config-nx-scopes:** add nx version ^15.0.0 as peerDependency ([#3416](https://github.com/conventional-changelog/commitlint/issues/3416)) ([f529a3f](https://github.com/conventional-changelog/commitlint/commit/f529a3f58e03d633bbd3949d397a38d9c993579b)) + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +### Features + +- add ability to filter Nx projects in @commitlint/config-nx-scopes ([#3155](https://github.com/conventional-changelog/commitlint/issues/3155)) ([e595693](https://github.com/conventional-changelog/commitlint/commit/e595693eb9be51a874cff01580b883982083ba0e)), closes [#3152](https://github.com/conventional-changelog/commitlint/issues/3152) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-nx-scopes + +# [16.2.0](https://github.com/conventional-changelog/commitlint/compare/v16.1.0...v16.2.0) (2022-01-25) + +### Features + +- add support for Nx monorepos via @commitlint/config-nx-scopes ([#2995](https://github.com/conventional-changelog/commitlint/issues/2995)) ([11879ad](https://github.com/conventional-changelog/commitlint/commit/11879adacbef3c939311b1ff597a7b894fcca0dc)) diff --git a/@commitlint/config-nx-scopes/fixtures/basic/nx.json b/@commitlint/config-nx-scopes/fixtures/basic/nx.json new file mode 100644 index 0000000000..7d14dd19e9 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/nx.json @@ -0,0 +1,39 @@ +{ + "npmScope": "secretarium", + "affected": { + "defaultBase": "main" + }, + "cli": { + "defaultCollection": "@nx/react" + }, + "tasksRunnerOptions": { + "default": { + "runner": "nx-cloud", + "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ] + } + } + }, + "generators": { + "@nx/react": { + "application": { + "style": "css", + "linter": "eslint", + "babel": true + }, + "component": { + "style": "css" + }, + "library": { + "style": "css", + "linter": "eslint" + } + } + }, + "defaultProject": "a" +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/basic/nx/a/package.json b/@commitlint/config-nx-scopes/fixtures/basic/nx/a/package.json new file mode 100644 index 0000000000..9113c2528e --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/nx/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/basic/nx/a/project.json b/@commitlint/config-nx-scopes/fixtures/basic/nx/a/project.json new file mode 100644 index 0000000000..6d65b16d03 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/nx/a/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/a", + "sourceRoot": "nx/a/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/a/**/*.ts" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": [ + "coverage/nx/a" + ], + "options": { + "jestConfig": "nx/a/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/basic/nx/b/package.json b/@commitlint/config-nx-scopes/fixtures/basic/nx/b/package.json new file mode 100644 index 0000000000..c2d84cc127 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/nx/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "b", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/basic/nx/b/project.json b/@commitlint/config-nx-scopes/fixtures/basic/nx/b/project.json new file mode 100644 index 0000000000..256f6af075 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/nx/b/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/b", + "sourceRoot": "nx/b/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/b/**/*.ts" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": [ + "coverage/nx/b" + ], + "options": { + "jestConfig": "nx/b/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/basic/package.json b/@commitlint/config-nx-scopes/fixtures/basic/package.json new file mode 100644 index 0000000000..557fdf5904 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/basic/package.json @@ -0,0 +1,7 @@ +{ + "name": "basic", + "version": "1.0.0", + "devDependencies": { + "nx": "^16.0.0" + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/empty/nx.json b/@commitlint/config-nx-scopes/fixtures/empty/nx.json new file mode 100644 index 0000000000..a5e2f1f8f9 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/empty/nx.json @@ -0,0 +1,34 @@ +{ + "npmScope": "empty", + "affected": { + "defaultBase": "main" + }, + "implicitDependencies": { + "package.json": { + "dependencies": "*", + "devDependencies": "*" + }, + ".eslintrc.json": "*" + }, + "tasksRunnerOptions": { + "default": { + "runner": "nx/tasks-runners/default", + "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ] + } + } + }, + "targetDependencies": { + "build": [ + { + "target": "build", + "projects": "dependencies" + } + ] + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/empty/package.json b/@commitlint/config-nx-scopes/fixtures/empty/package.json new file mode 100644 index 0000000000..af4f3c9f89 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/empty/package.json @@ -0,0 +1,7 @@ +{ + "name": "empty", + "version": "1.0.0", + "devDependencies": { + "nx": "^16.0.0" + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/nx.json b/@commitlint/config-nx-scopes/fixtures/nx14/nx.json new file mode 100644 index 0000000000..e1fda9a1e9 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/nx.json @@ -0,0 +1,39 @@ +{ + "npmScope": "secretarium", + "affected": { + "defaultBase": "main" + }, + "cli": { + "defaultCollection": "@nrwl/react" + }, + "tasksRunnerOptions": { + "default": { + "runner": "@nrwl/nx-cloud", + "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ] + } + } + }, + "generators": { + "@nrwl/react": { + "application": { + "style": "css", + "linter": "eslint", + "babel": true + }, + "component": { + "style": "css" + }, + "library": { + "style": "css", + "linter": "eslint" + } + } + }, + "defaultProject": "c" +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/package.json b/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/package.json new file mode 100644 index 0000000000..abd3384930 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/package.json @@ -0,0 +1,4 @@ +{ + "name": "c", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/project.json b/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/project.json new file mode 100644 index 0000000000..b70597129a --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/nx/c/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/c", + "sourceRoot": "nx/c/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/c/**/*.ts" + ] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": [ + "coverage/nx/c" + ], + "options": { + "jestConfig": "nx/c/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/package.json b/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/package.json new file mode 100644 index 0000000000..9a87c98d21 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/package.json @@ -0,0 +1,4 @@ +{ + "name": "d", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/project.json b/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/project.json new file mode 100644 index 0000000000..9b7a3a2d19 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/nx/d/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/d", + "sourceRoot": "nx/d/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/d/**/*.ts" + ] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": [ + "coverage/nx/d" + ], + "options": { + "jestConfig": "nx/d/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/package.json b/@commitlint/config-nx-scopes/fixtures/nx14/package.json new file mode 100644 index 0000000000..c3827cefb7 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/package.json @@ -0,0 +1,7 @@ +{ + "name": "basic", + "version": "1.0.0", + "devDependencies": { + "nx": "^14.0.0" + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx14/workspace.json b/@commitlint/config-nx-scopes/fixtures/nx14/workspace.json new file mode 100644 index 0000000000..ba6aa2d02c --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx14/workspace.json @@ -0,0 +1,7 @@ +{ + "version": 2, + "projects": { + "c": "nx/c", + "d": "nx/d" + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/nx.json b/@commitlint/config-nx-scopes/fixtures/nx15/nx.json new file mode 100644 index 0000000000..3f0e9751de --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/nx.json @@ -0,0 +1,39 @@ +{ + "npmScope": "secretarium", + "affected": { + "defaultBase": "main" + }, + "cli": { + "defaultCollection": "@nrwl/react" + }, + "tasksRunnerOptions": { + "default": { + "runner": "@nrwl/nx-cloud", + "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ] + } + } + }, + "generators": { + "@nrwl/react": { + "application": { + "style": "css", + "linter": "eslint", + "babel": true + }, + "component": { + "style": "css" + }, + "library": { + "style": "css", + "linter": "eslint" + } + } + }, + "defaultProject": "e" +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/package.json b/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/package.json new file mode 100644 index 0000000000..f3ca19803a --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/package.json @@ -0,0 +1,4 @@ +{ + "name": "e", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/project.json b/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/project.json new file mode 100644 index 0000000000..08ba437419 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/nx/e/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/e", + "sourceRoot": "nx/e/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/e/**/*.ts" + ] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": [ + "coverage/nx/e" + ], + "options": { + "jestConfig": "nx/e/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/package.json b/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/package.json new file mode 100644 index 0000000000..64560a1558 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/package.json @@ -0,0 +1,4 @@ +{ + "name": "f", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/project.json b/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/project.json new file mode 100644 index 0000000000..e3fb849310 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/nx/f/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/f", + "sourceRoot": "nx/f/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/f/**/*.ts" + ] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": [ + "coverage/nx/f" + ], + "options": { + "jestConfig": "nx/f/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx15/package.json b/@commitlint/config-nx-scopes/fixtures/nx15/package.json new file mode 100644 index 0000000000..038809a9ed --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx15/package.json @@ -0,0 +1,7 @@ +{ + "name": "basic", + "version": "1.0.0", + "devDependencies": { + "nx": "^15.0.0" + } +} \ No newline at end of file diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/nx.json b/@commitlint/config-nx-scopes/fixtures/nx17/nx.json new file mode 100644 index 0000000000..d9442f84fe --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/nx.json @@ -0,0 +1,38 @@ +{ + "affected": { + "defaultBase": "main" + }, + "cli": { + "defaultCollection": "@nx/react" + }, + "tasksRunnerOptions": { + "default": { + "runner": "nx-cloud", + "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ] + } + } + }, + "generators": { + "@nx/react": { + "application": { + "style": "css", + "linter": "eslint", + "babel": true + }, + "component": { + "style": "css" + }, + "library": { + "style": "css", + "linter": "eslint" + } + } + }, + "defaultProject": "g" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/package.json b/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/package.json new file mode 100644 index 0000000000..757f60613e --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/package.json @@ -0,0 +1,4 @@ +{ + "name": "g", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/project.json b/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/project.json new file mode 100644 index 0000000000..6e48e966bd --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/nx/g/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/g", + "sourceRoot": "nx/g/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/g/**/*.ts" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": [ + "coverage/nx/g" + ], + "options": { + "jestConfig": "nx/g/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/package.json b/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/package.json new file mode 100644 index 0000000000..3badb57d77 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/package.json @@ -0,0 +1,4 @@ +{ + "name": "h", + "version": "1.0.0" +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/project.json b/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/project.json new file mode 100644 index 0000000000..76f93a4bf2 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/nx/h/project.json @@ -0,0 +1,29 @@ +{ + "root": "nx/h", + "sourceRoot": "nx/h/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "nx/h/**/*.ts" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": [ + "coverage/nx/h" + ], + "options": { + "jestConfig": "nx/h/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/@commitlint/config-nx-scopes/fixtures/nx17/package.json b/@commitlint/config-nx-scopes/fixtures/nx17/package.json new file mode 100644 index 0000000000..c8f6b3a845 --- /dev/null +++ b/@commitlint/config-nx-scopes/fixtures/nx17/package.json @@ -0,0 +1,7 @@ +{ + "name": "basic", + "version": "1.0.0", + "devDependencies": { + "nx": "^17.0.0" + } +} diff --git a/@commitlint/config-nx-scopes/index.js b/@commitlint/config-nx-scopes/index.js new file mode 100644 index 0000000000..25debbeba3 --- /dev/null +++ b/@commitlint/config-nx-scopes/index.js @@ -0,0 +1,35 @@ +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 }, + rules: { + "scope-enum": (ctx) => + Promise.resolve([RuleConfigSeverity.Error, "always", getProjects(ctx)]), + }, +}; + +/** + * @param {(params: Pick<Nx.ProjectConfiguration, 'name' | 'projectType' | 'tags'>) => boolean} selector + */ +function getProjects(context, selector = () => true) { + const ctx = context || {}; + const cwd = ctx.cwd || process.cwd(); + + const projects = getNXProjects(new FsTree(cwd, false)); + return Array.from(projects.entries()) + .map(([name, project]) => ({ + name, + ...project, + })) + .filter((project) => + selector({ + name: project.name, + projectType: project.projectType, + tags: project.tags, + }), + ) + .map((project) => project.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 new file mode 100644 index 0000000000..1a6f863ef3 --- /dev/null +++ b/@commitlint/config-nx-scopes/index.test.js @@ -0,0 +1,91 @@ +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 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); + + 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); + + 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); + + 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); + + const [, , value] = await fn({ cwd }); + expect(value).toEqual(["g", "h"]); +}); diff --git a/@commitlint/config-nx-scopes/license.md b/@commitlint/config-nx-scopes/license.md new file mode 100644 index 0000000000..d53adb06e4 --- /dev/null +++ b/@commitlint/config-nx-scopes/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 - present Florian Guitton + +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-nx-scopes/package.json b/@commitlint/config-nx-scopes/package.json new file mode 100644 index 0000000000..63ad4e7848 --- /dev/null +++ b/@commitlint/config-nx-scopes/package.json @@ -0,0 +1,50 @@ +{ + "name": "@commitlint/config-nx-scopes", + "type": "module", + "version": "20.0.0", + "description": "Shareable commitlint config enforcing nx project names as scopes", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "deps": "dep-check", + "pkg": "pkg-check" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-nx-scopes" + }, + "keywords": [ + "conventional-changelog", + "commitlint", + "commitlint-config", + "nx" + ], + "author": "Florian Guitton <florian@secretarium.com>", + "license": "MIT", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "peerDependencies": { + "nx": ">=14.0.0" + }, + "peerDependenciesMeta": { + "nx": { + "optional": true + } + }, + "engines": { + "node": ">=v18" + }, + "dependencies": { + "@commitlint/types": "^20.0.0" + }, + "devDependencies": { + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/config-nx-scopes/readme.md b/@commitlint/config-nx-scopes/readme.md new file mode 100644 index 0000000000..2890f85872 --- /dev/null +++ b/@commitlint/config-nx-scopes/readme.md @@ -0,0 +1,113 @@ +# @commitlint/config-nx-scopes + +Lint your nx project commits + +Shareable `commitlint` config enforcing nx project and workspace names as scopes. +Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). + +## Getting started + +``` +npm install --save-dev @commitlint/config-nx-scopes @commitlint/cli +echo "module.exports = {extends: ['@commitlint/config-nx-scopes']};" > commitlint.config.js +``` + +## Filtering projects + +You can filter projects by providing a filter function as the second parameter to `getProjects()`. The function will be called with an object containing each projects' `name`, `projectType`, and `tags`. Simply return a boolean to indicate whether the project should be included or not. + +As an example, the following code demonstrates how to select only applications that are not end-to-end tests. + +In your .commitlintrc.js file: + +```javascript +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. + +In your .commitlintrc.js file: + +```javascript +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 + +``` +❯ cat commitlint.config.js +{ + extends: ['@commitlint/config-nx-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/config-patternplate/CHANGELOG.md b/@commitlint/config-patternplate/CHANGELOG.md index b1043d7725..2b236b1179 100644 --- a/@commitlint/config-patternplate/CHANGELOG.md +++ b/@commitlint/config-patternplate/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/config-patternplate @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/config-patternplate @@ -19,7 +19,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,183 +38,616 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +**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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + + + +## [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 -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +* 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)) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +## [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) -### Features -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support +* ci: remove node v14/16 checks +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) **Note:** Version bump only for package @commitlint/config-patternplate -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + **Note:** Version bump only for package @commitlint/config-patternplate -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) +**Note:** Version bump only for package @commitlint/config-patternplate -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/config-patternplate -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-patternplate + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/config-patternplate + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/config-patternplate + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Features + +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package @commitlint/config-patternplate + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) <a name="3.0.2"></a> + ## 3.0.2 (2017-07-11) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## 3.0.2 (2017-07-11) +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) +<a name="3.0.1"></a> +## 3.0.1 (2017-07-11) <a name="3.0.0"></a> + # 3.0.0 (2017-07-10) diff --git a/@commitlint/config-patternplate/README.md b/@commitlint/config-patternplate/README.md index cccc35be42..66b46901b7 100644 --- a/@commitlint/config-patternplate/README.md +++ b/@commitlint/config-patternplate/README.md @@ -1,25 +1,30 @@ -> Lint your commits, patternplate-style - # @commitlint/config-patternplate + +Lint your commits, patternplate-style + Shareable `commitlint` config enforcing the patternplate commit convention. Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). ## Getting started + ```sh npm install --save-dev @commitlint/config-patternplate @commitlint/cli echo "module.exports = {extends: ['@commitlint/config-patternplate']};" > commitlint.config.js ``` ## Rules + `@commitlint/config-patternplate` extends the [shareable angular config](../config-angular#rules). Additionally these rules apply: ### Problems -The following rules are considered problems for `@commitlint/config-patterplate` and will yield a non-zero exit code when not met. + +The following rules are considered problems for `@commitlint/config-patternplate` and will yield a non-zero exit code when not met. #### scope-enum -* **description**: `scope` is found in `value` -* **rule**: `always` -* **value**: determined based on pattern tree. `system` and all pattern ids present in `patterns` are allowed -Consult [docs/rules](https://conventional-changelog.github.io/commitlint/#/reference-rules) for a list of available rules. +- **description**: `scope` is found in `value` +- **rule**: `always` +- **value**: determined based on pattern tree. `system` and all pattern ids present in `patterns` are allowed + +Consult [Rules reference](https://commitlint.js.org/reference/rules) for a list of available rules. diff --git a/@commitlint/config-patternplate/index.js b/@commitlint/config-patternplate/index.js index 8bb07cac52..240efb9655 100644 --- a/@commitlint/config-patternplate/index.js +++ b/@commitlint/config-patternplate/index.js @@ -1,26 +1,24 @@ -const path = require('path'); -const globby = require('globby'); -const {merge} = require('lodash'); +import path from "node:path"; + +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("/"); } -function getPatternIDs() { - const root = path.resolve(process.cwd(), './patterns'); - const glob = path.resolve(root, '**/pattern.json'); - return globby(glob).then(results => - results.map(result => pathToId(root, result)) - ); +async function getPatternIDs() { + 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)); } -module.exports = merge(require('@commitlint/config-angular'), { +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 483de3bb19..91d166fd6f 100644 --- a/@commitlint/config-patternplate/package.json +++ b/@commitlint/config-patternplate/package.json @@ -1,20 +1,20 @@ { "name": "@commitlint/config-patternplate", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commits, patternplate-style", + "main": "index.js", "files": [ "index.js" ], "scripts": { - "clean": "exit 0", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "exit 0", - "test": "exit 0" + "pkg": "pkg-check --skip-import" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-patternplate" }, "keywords": [ "conventional-changelog", @@ -27,13 +27,18 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "dependencies": { - "@commitlint/config-angular": "^8.2.0", - "globby": "10.0.1", - "lodash": "4.17.15" + "@commitlint/config-angular": "^20.0.0", + "glob": "^10.3.10", + "lodash.merge": "^4.6.2" }, "devDependencies": { - "@commitlint/utils": "^8.2.0" - } + "@commitlint/utils": "^20.0.0", + "@types/lodash.merge": "^4.6.8" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/config-pnpm-scopes/CHANGELOG.md b/@commitlint/config-pnpm-scopes/CHANGELOG.md new file mode 100644 index 0000000000..27daf022c2 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/CHANGELOG.md @@ -0,0 +1,261 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + + +### Features + +* **config-pnpm-scopes:** allow global scope ([#4553](https://github.com/conventional-changelog/commitlint/issues/4553)) ([e571970](https://github.com/conventional-changelog/commitlint/commit/e57197061447eb9ea74b8d81ab003ad3b4652be6)) + + + + + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +## [19.9.1](https://github.com/conventional-changelog/commitlint/compare/v19.9.0...v19.9.1) (2025-08-29) + + +### Bug Fixes + +* add TypeScript support and configuration for pnpm scopes ([#4544](https://github.com/conventional-changelog/commitlint/issues/4544)) ([ea75778](https://github.com/conventional-changelog/commitlint/commit/ea75778e8d32c932d85062902456cd821e471fdd)) + + + + + +# [19.9.0](https://github.com/conventional-changelog/commitlint/compare/v19.8.1...v19.9.0) (2025-08-26) + + +### Features + +* **config-pnpm-scopes:** migrate package to TypeScript ([#4541](https://github.com/conventional-changelog/commitlint/issues/4541)) ([6ae36ea](https://github.com/conventional-changelog/commitlint/commit/6ae36ea5a55d7736024461ec6af94a14b821acc4)) + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) + + +### Bug Fixes + +* **config-pnpm-scopes:** refactor to remove peer dependencies ([#3564](https://github.com/conventional-changelog/commitlint/issues/3564)) ([f1f3bd5](https://github.com/conventional-changelog/commitlint/commit/f1f3bd5b7f33f7198719ed4aead3417e894a10ec)), closes [#3556](https://github.com/conventional-changelog/commitlint/issues/3556) + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-pnpm-scopes + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +### Features + +- **config-pnpm-scopes:** implement config-pnpm-scopes ([#3427](https://github.com/conventional-changelog/commitlint/issues/3427)) ([ca3ae8b](https://github.com/conventional-changelog/commitlint/commit/ca3ae8b14271c62910d228a622bec20b1be8ed63)) diff --git a/@commitlint/config-pnpm-scopes/fixtures/basic/package.json b/@commitlint/config-pnpm-scopes/fixtures/basic/package.json new file mode 100644 index 0000000000..d05965fc49 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/basic/package.json @@ -0,0 +1,6 @@ +{ + "name": "basic", + "version": "1.0.0", + "private": true, + "devDependencies": {} +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/basic/packages/a/package.json b/@commitlint/config-pnpm-scopes/fixtures/basic/packages/a/package.json new file mode 100644 index 0000000000..9113c2528e --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/basic/packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "version": "1.0.0" +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/basic/packages/b/package.json b/@commitlint/config-pnpm-scopes/fixtures/basic/packages/b/package.json new file mode 100644 index 0000000000..c2d84cc127 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/basic/packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "b", + "version": "1.0.0" +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/basic/pnpm-workspace.yaml b/@commitlint/config-pnpm-scopes/fixtures/basic/pnpm-workspace.yaml new file mode 100644 index 0000000000..18ec407efc --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/basic/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' diff --git a/@commitlint/config-pnpm-scopes/fixtures/empty/package.json b/@commitlint/config-pnpm-scopes/fixtures/empty/package.json new file mode 100644 index 0000000000..d1f96fc54d --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/empty/package.json @@ -0,0 +1,6 @@ +{ + "name": "empty", + "version": "1.0.0", + "private": true, + "devDependencies": {} +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/empty/pnpm-workspace.yaml b/@commitlint/config-pnpm-scopes/fixtures/empty/pnpm-workspace.yaml new file mode 100644 index 0000000000..18ec407efc --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/empty/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' diff --git a/@commitlint/config-pnpm-scopes/fixtures/scoped/package.json b/@commitlint/config-pnpm-scopes/fixtures/scoped/package.json new file mode 100644 index 0000000000..d05965fc49 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/scoped/package.json @@ -0,0 +1,6 @@ +{ + "name": "basic", + "version": "1.0.0", + "private": true, + "devDependencies": {} +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/a/package.json b/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/a/package.json new file mode 100644 index 0000000000..38d30f225c --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@scope/a", + "version": "1.0.0" +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/b/package.json b/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/b/package.json new file mode 100644 index 0000000000..812c697ce5 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/scoped/packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@scope/b", + "version": "1.0.0" +} diff --git a/@commitlint/config-pnpm-scopes/fixtures/scoped/pnpm-workspace.yaml b/@commitlint/config-pnpm-scopes/fixtures/scoped/pnpm-workspace.yaml new file mode 100644 index 0000000000..18ec407efc --- /dev/null +++ b/@commitlint/config-pnpm-scopes/fixtures/scoped/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' diff --git a/@commitlint/config-pnpm-scopes/index.test.ts b/@commitlint/config-pnpm-scopes/index.test.ts new file mode 100644 index 0000000000..8fd934b3e6 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/index.test.ts @@ -0,0 +1,76 @@ +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 global scope 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(["global"]); +}); + +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", "global"]); +}); + +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 }); + + expect(value).toEqual(["a", "b", "global"]); +}); diff --git a/@commitlint/config-pnpm-scopes/index.ts b/@commitlint/config-pnpm-scopes/index.ts new file mode 100644 index 0000000000..10dde7a74c --- /dev/null +++ b/@commitlint/config-pnpm-scopes/index.ts @@ -0,0 +1,85 @@ +import path from "node:path"; + +import fg from "fast-glob"; +import readYamlFileModule from "read-yaml-file"; +import { readExactProjectManifest } from "@pnpm/read-project-manifest"; +const readYamlFile = readYamlFileModule.default; + +export default { + utils: { getProjects }, + rules: { + "scope-enum": (ctx = {}) => + getProjects(ctx).then((packages: any) => [2, "always", packages]), + }, +}; + +function requirePackagesManifest(dir: any) { + return readYamlFile(path.join(dir, "pnpm-workspace.yaml")).catch( + (err: any) => { + if (err.code === "ENOENT") { + return null; + } + + throw err; + }, + ); +} + +function normalizePatterns(patterns: any) { + 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")); + } + return normalizedPatterns; +} + +function findWorkspacePackages(cwd: any) { + return requirePackagesManifest(cwd) + .then((manifest: any) => { + const patterns = normalizePatterns( + (manifest && manifest.packages) || ["**"], + ); + const opts = { + cwd, + ignore: ["**/node_modules/**", "**/bower_components/**"], + }; + + return fg(patterns, opts); + }) + .then((entries: any) => { + const paths = Array.from( + new Set(entries.map((entry: any) => path.join(cwd, entry))), + ); + + return Promise.all( + paths.map((manifestPath: any) => + readExactProjectManifest(manifestPath), + ), + ); + }) + .then((manifests: any) => { + return manifests.map((manifest: any) => manifest.manifest); + }); +} + +function getProjects(context: any) { + const ctx = context || {}; + const cwd = ctx.cwd || process.cwd(); + + return findWorkspacePackages(cwd).then((projects: any) => { + const scopes = projects.reduce((acc: any, project: any) => { + const name = project.name; + + if (name) { + acc.add(name.charAt(0) === "@" ? name.split("/")[1] : name); + } + + return acc; + }, new Set()); + scopes.add("global"); + + return Array.from(scopes).sort(); + }); +} diff --git a/@commitlint/config-pnpm-scopes/license.md b/@commitlint/config-pnpm-scopes/license.md new file mode 100644 index 0000000000..8f8a80980d --- /dev/null +++ b/@commitlint/config-pnpm-scopes/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 - present Dan Onoshko + +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-pnpm-scopes/package.json b/@commitlint/config-pnpm-scopes/package.json new file mode 100644 index 0000000000..861dffcf97 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/package.json @@ -0,0 +1,56 @@ +{ + "name": "@commitlint/config-pnpm-scopes", + "type": "module", + "version": "20.1.0", + "description": "Shareable commitlint config enforcing pnpm workspaces names as scopes", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsc", + "test": "jest", + "deps": "dep-check", + "pkg": "pkg-check" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-pnpm-scopes" + }, + "keywords": [ + "conventional-changelog", + "commitlint", + "commitlint-config", + "pnpm" + ], + "author": "Dan Onoshko <danon0404@gmail.com>", + "license": "MIT", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, + "dependencies": { + "@pnpm/read-project-manifest": "^5.0.10", + "fast-glob": "^3.3.1", + "read-yaml-file": "^2.1.0" + }, + "devDependencies": { + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "@types/node": "^18.19.17", + "typescript": "^5.2.2" + }, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/config-pnpm-scopes/readme.md b/@commitlint/config-pnpm-scopes/readme.md new file mode 100644 index 0000000000..45d65af9dc --- /dev/null +++ b/@commitlint/config-pnpm-scopes/readme.md @@ -0,0 +1,44 @@ +# @commitlint/config-pnpm-scopes + +Lint your pnpm workspaces project commits + +Shareable `commitlint` config enforcing pnpm workspaces names as scopes. +Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). + +## Getting started + +``` +npm install --save-dev @commitlint/config-pnpm-scopes @commitlint/cli +echo "module.exports = {extends: ['@commitlint/config-pnpm-scopes']};" > commitlint.config.js +``` + +## Examples + +``` +❯ cat commitlint.config.js +{ + extends: ['@commitlint/config-pnpm-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/config-pnpm-scopes/tsconfig.json b/@commitlint/config-pnpm-scopes/tsconfig.json new file mode 100644 index 0000000000..dddda3a388 --- /dev/null +++ b/@commitlint/config-pnpm-scopes/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./", + "outDir": "./dist" + }, + "include": ["*.ts"], + "exclude": ["./dist/**/*"], + "references": [{ "path": "../types" }] +} diff --git a/@commitlint/config-rush-scopes/CHANGELOG.md b/@commitlint/config-rush-scopes/CHANGELOG.md new file mode 100644 index 0000000000..1caf82066a --- /dev/null +++ b/@commitlint/config-rush-scopes/CHANGELOG.md @@ -0,0 +1,229 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-rush-scopes + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Features + +- **config-rush-scopes:** add config for rush monorepo ([#2878](https://github.com/conventional-changelog/commitlint/issues/2878)) ([befa677](https://github.com/conventional-changelog/commitlint/commit/befa677c3c2bed38085a62da161366784d971906)) diff --git a/@commitlint/config-rush-scopes/fixtures/basic/packages/a/package.json b/@commitlint/config-rush-scopes/fixtures/basic/packages/a/package.json new file mode 100644 index 0000000000..9113c2528e --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/basic/packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "version": "1.0.0" +} diff --git a/@commitlint/config-rush-scopes/fixtures/basic/packages/b/package.json b/@commitlint/config-rush-scopes/fixtures/basic/packages/b/package.json new file mode 100644 index 0000000000..c2d84cc127 --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/basic/packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "b", + "version": "1.0.0" +} diff --git a/@commitlint/config-rush-scopes/fixtures/basic/rush.json b/@commitlint/config-rush-scopes/fixtures/basic/rush.json new file mode 100644 index 0000000000..a858a46ccc --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/basic/rush.json @@ -0,0 +1,441 @@ +/** + * This is the main configuration file for Rush. + * For full documentation, please see https://rushjs.io + */ + { + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + /** + * (Required) This specifies the version of the Rush engine to be used in this repo. + * Rush's "version selector" feature ensures that the globally installed tool will + * behave like this release, regardless of which version is installed globally. + * + * The common/scripts/install-run-rush.js automation script also uses this version. + * + * NOTE: If you upgrade to a new major version of Rush, you should replace the "v5" + * path segment in the "$schema" field for all your Rush config files. This will ensure + * correct error-underlining and tab-completion for editors such as VS Code. + */ + "rushVersion": "5.56.0", + /** + * The next field selects which package manager should be installed and determines its version. + * Rush installs its own local copy of the package manager to ensure that your build process + * is fully isolated from whatever tools are present in the local environment. + * + * Specify one of: "pnpmVersion", "npmVersion", or "yarnVersion". See the Rush documentation + * for details about these alternatives. + */ + "pnpmVersion": "6.20.3", + // "npmVersion": "6.14.15", + // "yarnVersion": "1.9.4", + /** + * Options that are only used when the PNPM package manager is selected + */ + "pnpmOptions": { + /** + * Specifies the location of the PNPM store. There are two possible values: + * + * - "local" - use the "pnpm-store" folder in the current configured temp folder: + * "common/temp/pnpm-store" by default. + * - "global" - use PNPM's global store, which has the benefit of being shared + * across multiple repo folders, but the disadvantage of less isolation for builds + * (e.g. bugs or incompatibilities when two repos use different releases of PNPM) + * + * RUSH_PNPM_STORE_PATH will override the directory that will be used as the store + * + * In all cases, the store path will be overridden by the environment variable RUSH_PNPM_STORE_PATH. + * + * The default value is "local". + */ + // "pnpmStore": "local", + /** + * If true, then Rush will add the "--strict-peer-dependencies" option when invoking PNPM. + * This causes "rush install" to fail if there are unsatisfied peer dependencies, which is + * an invalid state that can cause build failures or incompatible dependency versions. + * (For historical reasons, JavaScript package managers generally do not treat this invalid + * state as an error.) + * + * The default value is false to avoid legacy compatibility issues. + * It is strongly recommended to set strictPeerDependencies=true. + */ + // "strictPeerDependencies": true, + /** + * Configures the strategy used to select versions during installation. + * + * This feature requires PNPM version 3.1 or newer. It corresponds to the "--resolution-strategy" command-line + * option for PNPM. Possible values are "fast" and "fewer-dependencies". PNPM's default is "fast", but this may + * be incompatible with certain packages, for example the "@types" packages from DefinitelyTyped. Rush's default + * is "fewer-dependencies", which causes PNPM to avoid installing a newer version if an already installed version + * can be reused; this is more similar to NPM's algorithm. + * + * After modifying this field, it's recommended to run "rush update --full" so that the package manager + * will recalculate all version selections. + */ + // "resolutionStrategy": "fast", + /** + * If true, then `rush install` will report an error if manual modifications + * were made to the PNPM shrinkwrap file without running "rush update" afterwards. + * + * This feature protects against accidental inconsistencies that may be introduced + * if the PNPM shrinkwrap file ("pnpm-lock.yaml") is manually edited. When this + * feature is enabled, "rush update" will append a hash to the file as a YAML comment, + * and then "rush update" and "rush install" will validate the hash. Note that this does not prohibit + * manual modifications, but merely requires "rush update" be run + * afterwards, ensuring that PNPM can report or repair any potential inconsistencies. + * + * To temporarily disable this validation when invoking "rush install", use the + * "--bypass-policy" command-line parameter. + * + * The default value is false. + */ + // "preventManualShrinkwrapChanges": true, + /** + * If true, then `rush install` will use the PNPM workspaces feature to perform the + * install. + * + * This feature uses PNPM to perform the entire monorepo install. When using workspaces, Rush will + * generate a "pnpm-workspace.yaml" file referencing all local projects to install. Rush will + * also generate a "pnpmfile.js" which is used to provide preferred versions support. When install + * is run, this pnpmfile will be used to replace dependency version ranges with a smaller subset + * of the original range. If the preferred version is not fully a subset of the original version + * range, it will be left as-is. After this, the pnpmfile.js provided in the repository (if one + * exists) will be called to further modify package dependencies. + * + * This option is experimental. The default value is false. + */ + // "useWorkspaces": true + }, + /** + * Older releases of the Node.js engine may be missing features required by your system. + * Other releases may have bugs. In particular, the "latest" version will not be a + * Long Term Support (LTS) version and is likely to have regressions. + * + * Specify a SemVer range to ensure developers use a Node.js version that is appropriate + * for your repo. + * + * LTS schedule: https://nodejs.org/en/about/releases/ + * LTS versions: https://nodejs.org/en/download/releases/ + */ + "nodeSupportedVersionRange": ">=16.9.0 <17.0.0", + /** + * Odd-numbered major versions of Node.js are experimental. Even-numbered releases + * spend six months in a stabilization period before the first Long Term Support (LTS) version. + * For example, 8.9.0 was the first LTS version of Node.js 8. Pre-LTS versions are not recommended + * for production usage because they frequently have bugs. They may cause Rush itself + * to malfunction. + * + * Rush normally prints a warning if it detects a pre-LTS Node.js version. If you are testing + * pre-LTS versions in preparation for supporting the first LTS version, you can use this setting + * to disable Rush's warning. + */ + // "suppressNodeLtsWarning": false, + /** + * If you would like the version specifiers for your dependencies to be consistent, then + * uncomment this line. This is effectively similar to running "rush check" before any + * of the following commands: + * + * rush install, rush update, rush link, rush version, rush publish + * + * In some cases you may want this turned on, but need to allow certain packages to use a different + * version. In those cases, you will need to add an entry to the "allowedAlternativeVersions" + * section of the common-versions.json. + */ + // "ensureConsistentVersions": true, + /** + * Large monorepos can become intimidating for newcomers if project folder paths don't follow + * a consistent and recognizable pattern. When the system allows nested folder trees, + * we've found that teams will often use subfolders to create islands that isolate + * their work from others ("shipping the org"). This hinders collaboration and code sharing. + * + * The Rush developers recommend a "category folder" model, where buildable project folders + * must always be exactly two levels below the repo root. The parent folder acts as the category. + * This provides a basic facility for grouping related projects (e.g. "apps", "libraries", + * "tools", "prototypes") while still encouraging teams to organize their projects into + * a unified taxonomy. Limiting to 2 levels seems very restrictive at first, but if you have + * 20 categories and 20 projects in each category, this scheme can easily accommodate hundreds + * of projects. In practice, you will find that the folder hierarchy needs to be rebalanced + * occasionally, but if that's painful, it's a warning sign that your development style may + * discourage refactoring. Reorganizing the categories should be an enlightening discussion + * that brings people together, and maybe also identifies poor coding practices (e.g. file + * references that reach into other project's folders without using Node.js module resolution). + * + * The defaults are projectFolderMinDepth=1 and projectFolderMaxDepth=2. + * + * To remove these restrictions, you could set projectFolderMinDepth=1 + * and set projectFolderMaxDepth to a large number. + */ + // "projectFolderMinDepth": 2, + // "projectFolderMaxDepth": 2, + /** + * Today the npmjs.com registry enforces fairly strict naming rules for packages, but in the early + * days there was no standard and hardly any enforcement. A few large legacy projects are still using + * nonstandard package names, and private registries sometimes allow it. Set "allowMostlyStandardPackageNames" + * to true to relax Rush's enforcement of package names. This allows upper case letters and in the future may + * relax other rules, however we want to minimize these exceptions. Many popular tools use certain punctuation + * characters as delimiters, based on the assumption that they will never appear in a package name; thus if we relax + * the rules too much it is likely to cause very confusing malfunctions. + * + * The default value is false. + */ + // "allowMostlyStandardPackageNames": true, + /** + * This feature helps you to review and approve new packages before they are introduced + * to your monorepo. For example, you may be concerned about licensing, code quality, + * performance, or simply accumulating too many libraries with overlapping functionality. + * The approvals are tracked in two config files "browser-approved-packages.json" + * and "nonbrowser-approved-packages.json". See the Rush documentation for details. + */ + // "approvedPackagesPolicy": { + // /** + // * The review categories allow you to say for example "This library is approved for usage + // * in prototypes, but not in production code." + // * + // * Each project can be associated with one review category, by assigning the "reviewCategory" field + // * in the "projects" section of rush.json. The approval is then recorded in the files + // * "common/config/rush/browser-approved-packages.json" and "nonbrowser-approved-packages.json" + // * which are automatically generated during "rush update". + // * + // * Designate categories with whatever granularity is appropriate for your review process, + // * or you could just have a single category called "default". + // */ + // "reviewCategories": [ + // // Some example categories: + // "production", // projects that ship to production + // "tools", // non-shipping projects that are part of the developer toolchain + // "prototypes" // experiments that should mostly be ignored by the review process + // ], + // + // /** + // * A list of NPM package scopes that will be excluded from review. + // * We recommend to exclude TypeScript typings (the "@types" scope), because + // * if the underlying package was already approved, this would imply that the typings + // * are also approved. + // */ + // // "ignoredNpmScopes": ["@types"] + // }, + /** + * If you use Git as your version control system, this section has some additional + * optional features you can use. + */ + "gitPolicy": { + /** + * Work at a big company? Tired of finding Git commits at work with unprofessional Git + * emails such as "beer-lover@my-college.edu"? Rush can validate people's Git email address + * before they get started. + * + * Define a list of regular expressions describing allowable e-mail patterns for Git commits. + * They are case-insensitive anchored JavaScript RegExps. Example: ".*@example\.com" + * + * IMPORTANT: Because these are regular expressions encoded as JSON string literals, + * RegExp escapes need two backslashes, and ordinary periods should be "\\.". + */ + // "allowedEmailRegExps": [ + // "[^@]+@users\\.noreply\\.github\\.com", + // "travis@example\\.org" + // ], + /** + * When Rush reports that the address is malformed, the notice can include an example + * of a recommended email. Make sure it conforms to one of the allowedEmailRegExps + * expressions. + */ + // "sampleEmail": "mrexample@users.noreply.github.com", + /** + * The commit message to use when committing changes during 'rush publish'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "versionBumpCommitMessage": "chore: bump versions [skip ci]", + /** + * The commit message to use when committing changes during 'rush version'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "changeLogUpdateCommitMessage": "docs: update changelogs [skip ci]" + }, + "repository": { + /** + * The URL of this Git repository, used by "rush change" to determine the base branch for your PR. + * + * The "rush change" command needs to determine which files are affected by your PR diff. + * If you merged or cherry-picked commits from the master branch into your PR branch, those commits + * should be excluded from this diff (since they belong to some other PR). In order to do that, + * Rush needs to know where to find the base branch for your PR. This information cannot be + * determined from Git alone, since the "pull request" feature is not a Git concept. Ideally + * Rush would use a vendor-specific protocol to query the information from GitHub, Azure DevOps, etc. + * But to keep things simple, "rush change" simply assumes that your PR is against the "master" branch + * of the Git remote indicated by the repository.url setting in rush.json. If you are working in + * a GitHub "fork" of the real repo, this setting will be different from the repository URL of your + * your PR branch, and in this situation "rush change" will also automatically invoke "git fetch" + * to retrieve the latest activity for the remote master branch. + */ + /** TODO: CHANGE THIS **/ + "url": "https://github.com/microsoft/rush-example", + /** + * The default branch name. This tells "rush change" which remote branch to compare against. + * The default value is "master" + */ + "defaultBranch": "master", + /** + * The default remote. This tells "rush change" which remote to compare against if the remote URL is + * not set or if a remote matching the provided remote URL is not found. + */ + "defaultRemote": "origin" + }, + /** + * Event hooks are customized script actions that Rush executes when specific events occur + */ + "eventHooks": { + /** + * The list of shell commands to run before the Rush installation starts + */ + "preRushInstall": [ + // "common/scripts/pre-rush-install.js" + ], + /** + * The list of shell commands to run after the Rush installation finishes + */ + "postRushInstall": [], + /** + * The list of shell commands to run before the Rush build command starts + */ + "preRushBuild": [], + /** + * The list of shell commands to run after the Rush build command finishes + */ + "postRushBuild": [] + }, + /** + * Installation variants allow you to maintain a parallel set of configuration files that can be + * used to build the entire monorepo with an alternate set of dependencies. For example, suppose + * you upgrade all your projects to use a new release of an important framework, but during a transition period + * you intend to maintain compatibility with the old release. In this situation, you probably want your + * CI validation to build the entire repo twice: once with the old release, and once with the new release. + * + * Rush "installation variants" correspond to sets of config files located under this folder: + * + * common/config/rush/variants/<variant_name> + * + * The variant folder can contain an alternate common-versions.json file. Its "preferredVersions" field can be used + * to select older versions of dependencies (within a loose SemVer range specified in your package.json files). + * To install a variant, run "rush install --variant <variant_name>". + * + * For more details and instructions, see this article: https://rushjs.io/pages/advanced/installation_variants/ + */ + "variants": [ + // { + // /** + // * The folder name for this variant. + // */ + // "variantName": "old-sdk", + // + // /** + // * An informative description + // */ + // "description": "Build this repo using the previous release of the SDK" + // } + ], + /** + * Rush can collect anonymous telemetry about everyday developer activity such as + * success/failure of installs, builds, and other operations. You can use this to identify + * problems with your toolchain or Rush itself. THIS TELEMETRY IS NOT SHARED WITH MICROSOFT. + * It is written into JSON files in the common/temp folder. It's up to you to write scripts + * that read these JSON files and do something with them. These scripts are typically registered + * in the "eventHooks" section. + */ + // "telemetryEnabled": false, + /** + * Allows creation of hotfix changes. This feature is experimental so it is disabled by default. + * If this is set, 'rush change' only allows a 'hotfix' change type to be specified. This change type + * will be used when publishing subsequent changes from the monorepo. + */ + // "hotfixChangeEnabled": false, + /** + * (Required) This is the inventory of projects to be managed by Rush. + * + * Rush does not automatically scan for projects using wildcards, for a few reasons: + * 1. Depth-first scans are expensive, particularly when tools need to repeatedly collect the list. + * 2. On a caching CI machine, scans can accidentally pick up files left behind from a previous build. + * 3. It's useful to have a centralized inventory of all projects and their important metadata. + */ + "projects": [ + { + "packageName": "a", + "projectFolder": "packages/a" + }, + { + "packageName": "b", + "projectFolder": "packages/b" + } + // { + // /** + // * The NPM package name of the project (must match package.json) + // */ + // "packageName": "my-app", + // + // /** + // * The path to the project folder, relative to the rush.json config file. + // */ + // "projectFolder": "apps/my-app", + // + // /** + // * An optional category for usage in the "browser-approved-packages.json" + // * and "nonbrowser-approved-packages.json" files. The value must be one of the + // * strings from the "reviewCategories" defined above. + // */ + // "reviewCategory": "production", + // + // /** + // * A list of local projects that appear as devDependencies for this project, but cannot be + // * locally linked because it would create a cyclic dependency; instead, the last published + // * version will be installed in the Common folder. + // */ + // "cyclicDependencyProjects": [ + // // "my-toolchain" + // ], + // + // /** + // * If true, then this project will be ignored by the "rush check" command. + // * The default value is false. + // */ + // // "skipRushCheck": false, + // + // /** + // * A flag indicating that changes to this project will be published to npm, which affects + // * the Rush change and publish workflows. The default value is false. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "shouldPublish": false, + // + // /** + // * Facilitates postprocessing of a project's files prior to publishing. + // * + // * If specified, the "publishFolder" is the relative path to a subfolder of the project folder. + // * The "rush publish" command will publish the subfolder instead of the project folder. The subfolder + // * must contain its own package.json file, which is typically a build output. + // */ + // // "publishFolder": "temp/publish", + // + // /** + // * An optional version policy associated with the project. Version policies are defined + // * in "version-policies.json" file. See the "rush publish" documentation for more info. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "versionPolicyName": "" + // }, + // + // { + // "packageName": "my-controls", + // "projectFolder": "libraries/my-controls", + // "reviewCategory": "production" + // }, + // + // { + // "packageName": "my-toolchain", + // "projectFolder": "tools/my-toolchain", + // "reviewCategory": "tools" + // } + ] +} diff --git a/@commitlint/config-rush-scopes/fixtures/empty/rush.json b/@commitlint/config-rush-scopes/fixtures/empty/rush.json new file mode 100644 index 0000000000..af249b513b --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/empty/rush.json @@ -0,0 +1,433 @@ +/** + * This is the main configuration file for Rush. + * For full documentation, please see https://rushjs.io + */ + { + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + /** + * (Required) This specifies the version of the Rush engine to be used in this repo. + * Rush's "version selector" feature ensures that the globally installed tool will + * behave like this release, regardless of which version is installed globally. + * + * The common/scripts/install-run-rush.js automation script also uses this version. + * + * NOTE: If you upgrade to a new major version of Rush, you should replace the "v5" + * path segment in the "$schema" field for all your Rush config files. This will ensure + * correct error-underlining and tab-completion for editors such as VS Code. + */ + "rushVersion": "5.56.0", + /** + * The next field selects which package manager should be installed and determines its version. + * Rush installs its own local copy of the package manager to ensure that your build process + * is fully isolated from whatever tools are present in the local environment. + * + * Specify one of: "pnpmVersion", "npmVersion", or "yarnVersion". See the Rush documentation + * for details about these alternatives. + */ + "pnpmVersion": "6.20.3", + // "npmVersion": "6.14.15", + // "yarnVersion": "1.9.4", + /** + * Options that are only used when the PNPM package manager is selected + */ + "pnpmOptions": { + /** + * Specifies the location of the PNPM store. There are two possible values: + * + * - "local" - use the "pnpm-store" folder in the current configured temp folder: + * "common/temp/pnpm-store" by default. + * - "global" - use PNPM's global store, which has the benefit of being shared + * across multiple repo folders, but the disadvantage of less isolation for builds + * (e.g. bugs or incompatibilities when two repos use different releases of PNPM) + * + * RUSH_PNPM_STORE_PATH will override the directory that will be used as the store + * + * In all cases, the store path will be overridden by the environment variable RUSH_PNPM_STORE_PATH. + * + * The default value is "local". + */ + // "pnpmStore": "local", + /** + * If true, then Rush will add the "--strict-peer-dependencies" option when invoking PNPM. + * This causes "rush install" to fail if there are unsatisfied peer dependencies, which is + * an invalid state that can cause build failures or incompatible dependency versions. + * (For historical reasons, JavaScript package managers generally do not treat this invalid + * state as an error.) + * + * The default value is false to avoid legacy compatibility issues. + * It is strongly recommended to set strictPeerDependencies=true. + */ + // "strictPeerDependencies": true, + /** + * Configures the strategy used to select versions during installation. + * + * This feature requires PNPM version 3.1 or newer. It corresponds to the "--resolution-strategy" command-line + * option for PNPM. Possible values are "fast" and "fewer-dependencies". PNPM's default is "fast", but this may + * be incompatible with certain packages, for example the "@types" packages from DefinitelyTyped. Rush's default + * is "fewer-dependencies", which causes PNPM to avoid installing a newer version if an already installed version + * can be reused; this is more similar to NPM's algorithm. + * + * After modifying this field, it's recommended to run "rush update --full" so that the package manager + * will recalculate all version selections. + */ + // "resolutionStrategy": "fast", + /** + * If true, then `rush install` will report an error if manual modifications + * were made to the PNPM shrinkwrap file without running "rush update" afterwards. + * + * This feature protects against accidental inconsistencies that may be introduced + * if the PNPM shrinkwrap file ("pnpm-lock.yaml") is manually edited. When this + * feature is enabled, "rush update" will append a hash to the file as a YAML comment, + * and then "rush update" and "rush install" will validate the hash. Note that this does not prohibit + * manual modifications, but merely requires "rush update" be run + * afterwards, ensuring that PNPM can report or repair any potential inconsistencies. + * + * To temporarily disable this validation when invoking "rush install", use the + * "--bypass-policy" command-line parameter. + * + * The default value is false. + */ + // "preventManualShrinkwrapChanges": true, + /** + * If true, then `rush install` will use the PNPM workspaces feature to perform the + * install. + * + * This feature uses PNPM to perform the entire monorepo install. When using workspaces, Rush will + * generate a "pnpm-workspace.yaml" file referencing all local projects to install. Rush will + * also generate a "pnpmfile.js" which is used to provide preferred versions support. When install + * is run, this pnpmfile will be used to replace dependency version ranges with a smaller subset + * of the original range. If the preferred version is not fully a subset of the original version + * range, it will be left as-is. After this, the pnpmfile.js provided in the repository (if one + * exists) will be called to further modify package dependencies. + * + * This option is experimental. The default value is false. + */ + // "useWorkspaces": true + }, + /** + * Older releases of the Node.js engine may be missing features required by your system. + * Other releases may have bugs. In particular, the "latest" version will not be a + * Long Term Support (LTS) version and is likely to have regressions. + * + * Specify a SemVer range to ensure developers use a Node.js version that is appropriate + * for your repo. + * + * LTS schedule: https://nodejs.org/en/about/releases/ + * LTS versions: https://nodejs.org/en/download/releases/ + */ + "nodeSupportedVersionRange": ">=16.9.0 <17.0.0", + /** + * Odd-numbered major versions of Node.js are experimental. Even-numbered releases + * spend six months in a stabilization period before the first Long Term Support (LTS) version. + * For example, 8.9.0 was the first LTS version of Node.js 8. Pre-LTS versions are not recommended + * for production usage because they frequently have bugs. They may cause Rush itself + * to malfunction. + * + * Rush normally prints a warning if it detects a pre-LTS Node.js version. If you are testing + * pre-LTS versions in preparation for supporting the first LTS version, you can use this setting + * to disable Rush's warning. + */ + // "suppressNodeLtsWarning": false, + /** + * If you would like the version specifiers for your dependencies to be consistent, then + * uncomment this line. This is effectively similar to running "rush check" before any + * of the following commands: + * + * rush install, rush update, rush link, rush version, rush publish + * + * In some cases you may want this turned on, but need to allow certain packages to use a different + * version. In those cases, you will need to add an entry to the "allowedAlternativeVersions" + * section of the common-versions.json. + */ + // "ensureConsistentVersions": true, + /** + * Large monorepos can become intimidating for newcomers if project folder paths don't follow + * a consistent and recognizable pattern. When the system allows nested folder trees, + * we've found that teams will often use subfolders to create islands that isolate + * their work from others ("shipping the org"). This hinders collaboration and code sharing. + * + * The Rush developers recommend a "category folder" model, where buildable project folders + * must always be exactly two levels below the repo root. The parent folder acts as the category. + * This provides a basic facility for grouping related projects (e.g. "apps", "libraries", + * "tools", "prototypes") while still encouraging teams to organize their projects into + * a unified taxonomy. Limiting to 2 levels seems very restrictive at first, but if you have + * 20 categories and 20 projects in each category, this scheme can easily accommodate hundreds + * of projects. In practice, you will find that the folder hierarchy needs to be rebalanced + * occasionally, but if that's painful, it's a warning sign that your development style may + * discourage refactoring. Reorganizing the categories should be an enlightening discussion + * that brings people together, and maybe also identifies poor coding practices (e.g. file + * references that reach into other project's folders without using Node.js module resolution). + * + * The defaults are projectFolderMinDepth=1 and projectFolderMaxDepth=2. + * + * To remove these restrictions, you could set projectFolderMinDepth=1 + * and set projectFolderMaxDepth to a large number. + */ + // "projectFolderMinDepth": 2, + // "projectFolderMaxDepth": 2, + /** + * Today the npmjs.com registry enforces fairly strict naming rules for packages, but in the early + * days there was no standard and hardly any enforcement. A few large legacy projects are still using + * nonstandard package names, and private registries sometimes allow it. Set "allowMostlyStandardPackageNames" + * to true to relax Rush's enforcement of package names. This allows upper case letters and in the future may + * relax other rules, however we want to minimize these exceptions. Many popular tools use certain punctuation + * characters as delimiters, based on the assumption that they will never appear in a package name; thus if we relax + * the rules too much it is likely to cause very confusing malfunctions. + * + * The default value is false. + */ + // "allowMostlyStandardPackageNames": true, + /** + * This feature helps you to review and approve new packages before they are introduced + * to your monorepo. For example, you may be concerned about licensing, code quality, + * performance, or simply accumulating too many libraries with overlapping functionality. + * The approvals are tracked in two config files "browser-approved-packages.json" + * and "nonbrowser-approved-packages.json". See the Rush documentation for details. + */ + // "approvedPackagesPolicy": { + // /** + // * The review categories allow you to say for example "This library is approved for usage + // * in prototypes, but not in production code." + // * + // * Each project can be associated with one review category, by assigning the "reviewCategory" field + // * in the "projects" section of rush.json. The approval is then recorded in the files + // * "common/config/rush/browser-approved-packages.json" and "nonbrowser-approved-packages.json" + // * which are automatically generated during "rush update". + // * + // * Designate categories with whatever granularity is appropriate for your review process, + // * or you could just have a single category called "default". + // */ + // "reviewCategories": [ + // // Some example categories: + // "production", // projects that ship to production + // "tools", // non-shipping projects that are part of the developer toolchain + // "prototypes" // experiments that should mostly be ignored by the review process + // ], + // + // /** + // * A list of NPM package scopes that will be excluded from review. + // * We recommend to exclude TypeScript typings (the "@types" scope), because + // * if the underlying package was already approved, this would imply that the typings + // * are also approved. + // */ + // // "ignoredNpmScopes": ["@types"] + // }, + /** + * If you use Git as your version control system, this section has some additional + * optional features you can use. + */ + "gitPolicy": { + /** + * Work at a big company? Tired of finding Git commits at work with unprofessional Git + * emails such as "beer-lover@my-college.edu"? Rush can validate people's Git email address + * before they get started. + * + * Define a list of regular expressions describing allowable e-mail patterns for Git commits. + * They are case-insensitive anchored JavaScript RegExps. Example: ".*@example\.com" + * + * IMPORTANT: Because these are regular expressions encoded as JSON string literals, + * RegExp escapes need two backslashes, and ordinary periods should be "\\.". + */ + // "allowedEmailRegExps": [ + // "[^@]+@users\\.noreply\\.github\\.com", + // "travis@example\\.org" + // ], + /** + * When Rush reports that the address is malformed, the notice can include an example + * of a recommended email. Make sure it conforms to one of the allowedEmailRegExps + * expressions. + */ + // "sampleEmail": "mrexample@users.noreply.github.com", + /** + * The commit message to use when committing changes during 'rush publish'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "versionBumpCommitMessage": "chore: bump versions [skip ci]", + /** + * The commit message to use when committing changes during 'rush version'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "changeLogUpdateCommitMessage": "docs: update changelogs [skip ci]" + }, + "repository": { + /** + * The URL of this Git repository, used by "rush change" to determine the base branch for your PR. + * + * The "rush change" command needs to determine which files are affected by your PR diff. + * If you merged or cherry-picked commits from the master branch into your PR branch, those commits + * should be excluded from this diff (since they belong to some other PR). In order to do that, + * Rush needs to know where to find the base branch for your PR. This information cannot be + * determined from Git alone, since the "pull request" feature is not a Git concept. Ideally + * Rush would use a vendor-specific protocol to query the information from GitHub, Azure DevOps, etc. + * But to keep things simple, "rush change" simply assumes that your PR is against the "master" branch + * of the Git remote indicated by the repository.url setting in rush.json. If you are working in + * a GitHub "fork" of the real repo, this setting will be different from the repository URL of your + * your PR branch, and in this situation "rush change" will also automatically invoke "git fetch" + * to retrieve the latest activity for the remote master branch. + */ + /** TODO: CHANGE THIS **/ + "url": "https://github.com/microsoft/rush-example", + /** + * The default branch name. This tells "rush change" which remote branch to compare against. + * The default value is "master" + */ + "defaultBranch": "master", + /** + * The default remote. This tells "rush change" which remote to compare against if the remote URL is + * not set or if a remote matching the provided remote URL is not found. + */ + "defaultRemote": "origin" + }, + /** + * Event hooks are customized script actions that Rush executes when specific events occur + */ + "eventHooks": { + /** + * The list of shell commands to run before the Rush installation starts + */ + "preRushInstall": [ + // "common/scripts/pre-rush-install.js" + ], + /** + * The list of shell commands to run after the Rush installation finishes + */ + "postRushInstall": [], + /** + * The list of shell commands to run before the Rush build command starts + */ + "preRushBuild": [], + /** + * The list of shell commands to run after the Rush build command finishes + */ + "postRushBuild": [] + }, + /** + * Installation variants allow you to maintain a parallel set of configuration files that can be + * used to build the entire monorepo with an alternate set of dependencies. For example, suppose + * you upgrade all your projects to use a new release of an important framework, but during a transition period + * you intend to maintain compatibility with the old release. In this situation, you probably want your + * CI validation to build the entire repo twice: once with the old release, and once with the new release. + * + * Rush "installation variants" correspond to sets of config files located under this folder: + * + * common/config/rush/variants/<variant_name> + * + * The variant folder can contain an alternate common-versions.json file. Its "preferredVersions" field can be used + * to select older versions of dependencies (within a loose SemVer range specified in your package.json files). + * To install a variant, run "rush install --variant <variant_name>". + * + * For more details and instructions, see this article: https://rushjs.io/pages/advanced/installation_variants/ + */ + "variants": [ + // { + // /** + // * The folder name for this variant. + // */ + // "variantName": "old-sdk", + // + // /** + // * An informative description + // */ + // "description": "Build this repo using the previous release of the SDK" + // } + ], + /** + * Rush can collect anonymous telemetry about everyday developer activity such as + * success/failure of installs, builds, and other operations. You can use this to identify + * problems with your toolchain or Rush itself. THIS TELEMETRY IS NOT SHARED WITH MICROSOFT. + * It is written into JSON files in the common/temp folder. It's up to you to write scripts + * that read these JSON files and do something with them. These scripts are typically registered + * in the "eventHooks" section. + */ + // "telemetryEnabled": false, + /** + * Allows creation of hotfix changes. This feature is experimental so it is disabled by default. + * If this is set, 'rush change' only allows a 'hotfix' change type to be specified. This change type + * will be used when publishing subsequent changes from the monorepo. + */ + // "hotfixChangeEnabled": false, + /** + * (Required) This is the inventory of projects to be managed by Rush. + * + * Rush does not automatically scan for projects using wildcards, for a few reasons: + * 1. Depth-first scans are expensive, particularly when tools need to repeatedly collect the list. + * 2. On a caching CI machine, scans can accidentally pick up files left behind from a previous build. + * 3. It's useful to have a centralized inventory of all projects and their important metadata. + */ + "projects": [ + // { + // /** + // * The NPM package name of the project (must match package.json) + // */ + // "packageName": "my-app", + // + // /** + // * The path to the project folder, relative to the rush.json config file. + // */ + // "projectFolder": "apps/my-app", + // + // /** + // * An optional category for usage in the "browser-approved-packages.json" + // * and "nonbrowser-approved-packages.json" files. The value must be one of the + // * strings from the "reviewCategories" defined above. + // */ + // "reviewCategory": "production", + // + // /** + // * A list of local projects that appear as devDependencies for this project, but cannot be + // * locally linked because it would create a cyclic dependency; instead, the last published + // * version will be installed in the Common folder. + // */ + // "cyclicDependencyProjects": [ + // // "my-toolchain" + // ], + // + // /** + // * If true, then this project will be ignored by the "rush check" command. + // * The default value is false. + // */ + // // "skipRushCheck": false, + // + // /** + // * A flag indicating that changes to this project will be published to npm, which affects + // * the Rush change and publish workflows. The default value is false. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "shouldPublish": false, + // + // /** + // * Facilitates postprocessing of a project's files prior to publishing. + // * + // * If specified, the "publishFolder" is the relative path to a subfolder of the project folder. + // * The "rush publish" command will publish the subfolder instead of the project folder. The subfolder + // * must contain its own package.json file, which is typically a build output. + // */ + // // "publishFolder": "temp/publish", + // + // /** + // * An optional version policy associated with the project. Version policies are defined + // * in "version-policies.json" file. See the "rush publish" documentation for more info. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "versionPolicyName": "" + // }, + // + // { + // "packageName": "my-controls", + // "projectFolder": "libraries/my-controls", + // "reviewCategory": "production" + // }, + // + // { + // "packageName": "my-toolchain", + // "projectFolder": "tools/my-toolchain", + // "reviewCategory": "tools" + // } + ] +} diff --git a/@commitlint/config-rush-scopes/fixtures/scoped/@packages/a/package.json b/@commitlint/config-rush-scopes/fixtures/scoped/@packages/a/package.json new file mode 100644 index 0000000000..7ba283037e --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/scoped/@packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/a", + "version": "1.0.0" +} diff --git a/@commitlint/config-rush-scopes/fixtures/scoped/@packages/b/package.json b/@commitlint/config-rush-scopes/fixtures/scoped/@packages/b/package.json new file mode 100644 index 0000000000..3fd2cf7616 --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/scoped/@packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/b", + "version": "1.0.0" +} diff --git a/@commitlint/config-rush-scopes/fixtures/scoped/rush.json b/@commitlint/config-rush-scopes/fixtures/scoped/rush.json new file mode 100644 index 0000000000..fd49ec1d07 --- /dev/null +++ b/@commitlint/config-rush-scopes/fixtures/scoped/rush.json @@ -0,0 +1,441 @@ +/** + * This is the main configuration file for Rush. + * For full documentation, please see https://rushjs.io + */ + { + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + /** + * (Required) This specifies the version of the Rush engine to be used in this repo. + * Rush's "version selector" feature ensures that the globally installed tool will + * behave like this release, regardless of which version is installed globally. + * + * The common/scripts/install-run-rush.js automation script also uses this version. + * + * NOTE: If you upgrade to a new major version of Rush, you should replace the "v5" + * path segment in the "$schema" field for all your Rush config files. This will ensure + * correct error-underlining and tab-completion for editors such as VS Code. + */ + "rushVersion": "5.56.0", + /** + * The next field selects which package manager should be installed and determines its version. + * Rush installs its own local copy of the package manager to ensure that your build process + * is fully isolated from whatever tools are present in the local environment. + * + * Specify one of: "pnpmVersion", "npmVersion", or "yarnVersion". See the Rush documentation + * for details about these alternatives. + */ + "pnpmVersion": "6.20.3", + // "npmVersion": "6.14.15", + // "yarnVersion": "1.9.4", + /** + * Options that are only used when the PNPM package manager is selected + */ + "pnpmOptions": { + /** + * Specifies the location of the PNPM store. There are two possible values: + * + * - "local" - use the "pnpm-store" folder in the current configured temp folder: + * "common/temp/pnpm-store" by default. + * - "global" - use PNPM's global store, which has the benefit of being shared + * across multiple repo folders, but the disadvantage of less isolation for builds + * (e.g. bugs or incompatibilities when two repos use different releases of PNPM) + * + * RUSH_PNPM_STORE_PATH will override the directory that will be used as the store + * + * In all cases, the store path will be overridden by the environment variable RUSH_PNPM_STORE_PATH. + * + * The default value is "local". + */ + // "pnpmStore": "local", + /** + * If true, then Rush will add the "--strict-peer-dependencies" option when invoking PNPM. + * This causes "rush install" to fail if there are unsatisfied peer dependencies, which is + * an invalid state that can cause build failures or incompatible dependency versions. + * (For historical reasons, JavaScript package managers generally do not treat this invalid + * state as an error.) + * + * The default value is false to avoid legacy compatibility issues. + * It is strongly recommended to set strictPeerDependencies=true. + */ + // "strictPeerDependencies": true, + /** + * Configures the strategy used to select versions during installation. + * + * This feature requires PNPM version 3.1 or newer. It corresponds to the "--resolution-strategy" command-line + * option for PNPM. Possible values are "fast" and "fewer-dependencies". PNPM's default is "fast", but this may + * be incompatible with certain packages, for example the "@types" packages from DefinitelyTyped. Rush's default + * is "fewer-dependencies", which causes PNPM to avoid installing a newer version if an already installed version + * can be reused; this is more similar to NPM's algorithm. + * + * After modifying this field, it's recommended to run "rush update --full" so that the package manager + * will recalculate all version selections. + */ + // "resolutionStrategy": "fast", + /** + * If true, then `rush install` will report an error if manual modifications + * were made to the PNPM shrinkwrap file without running "rush update" afterwards. + * + * This feature protects against accidental inconsistencies that may be introduced + * if the PNPM shrinkwrap file ("pnpm-lock.yaml") is manually edited. When this + * feature is enabled, "rush update" will append a hash to the file as a YAML comment, + * and then "rush update" and "rush install" will validate the hash. Note that this does not prohibit + * manual modifications, but merely requires "rush update" be run + * afterwards, ensuring that PNPM can report or repair any potential inconsistencies. + * + * To temporarily disable this validation when invoking "rush install", use the + * "--bypass-policy" command-line parameter. + * + * The default value is false. + */ + // "preventManualShrinkwrapChanges": true, + /** + * If true, then `rush install` will use the PNPM workspaces feature to perform the + * install. + * + * This feature uses PNPM to perform the entire monorepo install. When using workspaces, Rush will + * generate a "pnpm-workspace.yaml" file referencing all local projects to install. Rush will + * also generate a "pnpmfile.js" which is used to provide preferred versions support. When install + * is run, this pnpmfile will be used to replace dependency version ranges with a smaller subset + * of the original range. If the preferred version is not fully a subset of the original version + * range, it will be left as-is. After this, the pnpmfile.js provided in the repository (if one + * exists) will be called to further modify package dependencies. + * + * This option is experimental. The default value is false. + */ + // "useWorkspaces": true + }, + /** + * Older releases of the Node.js engine may be missing features required by your system. + * Other releases may have bugs. In particular, the "latest" version will not be a + * Long Term Support (LTS) version and is likely to have regressions. + * + * Specify a SemVer range to ensure developers use a Node.js version that is appropriate + * for your repo. + * + * LTS schedule: https://nodejs.org/en/about/releases/ + * LTS versions: https://nodejs.org/en/download/releases/ + */ + "nodeSupportedVersionRange": ">=16.9.0 <17.0.0", + /** + * Odd-numbered major versions of Node.js are experimental. Even-numbered releases + * spend six months in a stabilization period before the first Long Term Support (LTS) version. + * For example, 8.9.0 was the first LTS version of Node.js 8. Pre-LTS versions are not recommended + * for production usage because they frequently have bugs. They may cause Rush itself + * to malfunction. + * + * Rush normally prints a warning if it detects a pre-LTS Node.js version. If you are testing + * pre-LTS versions in preparation for supporting the first LTS version, you can use this setting + * to disable Rush's warning. + */ + // "suppressNodeLtsWarning": false, + /** + * If you would like the version specifiers for your dependencies to be consistent, then + * uncomment this line. This is effectively similar to running "rush check" before any + * of the following commands: + * + * rush install, rush update, rush link, rush version, rush publish + * + * In some cases you may want this turned on, but need to allow certain packages to use a different + * version. In those cases, you will need to add an entry to the "allowedAlternativeVersions" + * section of the common-versions.json. + */ + // "ensureConsistentVersions": true, + /** + * Large monorepos can become intimidating for newcomers if project folder paths don't follow + * a consistent and recognizable pattern. When the system allows nested folder trees, + * we've found that teams will often use subfolders to create islands that isolate + * their work from others ("shipping the org"). This hinders collaboration and code sharing. + * + * The Rush developers recommend a "category folder" model, where buildable project folders + * must always be exactly two levels below the repo root. The parent folder acts as the category. + * This provides a basic facility for grouping related projects (e.g. "apps", "libraries", + * "tools", "prototypes") while still encouraging teams to organize their projects into + * a unified taxonomy. Limiting to 2 levels seems very restrictive at first, but if you have + * 20 categories and 20 projects in each category, this scheme can easily accommodate hundreds + * of projects. In practice, you will find that the folder hierarchy needs to be rebalanced + * occasionally, but if that's painful, it's a warning sign that your development style may + * discourage refactoring. Reorganizing the categories should be an enlightening discussion + * that brings people together, and maybe also identifies poor coding practices (e.g. file + * references that reach into other project's folders without using Node.js module resolution). + * + * The defaults are projectFolderMinDepth=1 and projectFolderMaxDepth=2. + * + * To remove these restrictions, you could set projectFolderMinDepth=1 + * and set projectFolderMaxDepth to a large number. + */ + // "projectFolderMinDepth": 2, + // "projectFolderMaxDepth": 2, + /** + * Today the npmjs.com registry enforces fairly strict naming rules for packages, but in the early + * days there was no standard and hardly any enforcement. A few large legacy projects are still using + * nonstandard package names, and private registries sometimes allow it. Set "allowMostlyStandardPackageNames" + * to true to relax Rush's enforcement of package names. This allows upper case letters and in the future may + * relax other rules, however we want to minimize these exceptions. Many popular tools use certain punctuation + * characters as delimiters, based on the assumption that they will never appear in a package name; thus if we relax + * the rules too much it is likely to cause very confusing malfunctions. + * + * The default value is false. + */ + // "allowMostlyStandardPackageNames": true, + /** + * This feature helps you to review and approve new packages before they are introduced + * to your monorepo. For example, you may be concerned about licensing, code quality, + * performance, or simply accumulating too many libraries with overlapping functionality. + * The approvals are tracked in two config files "browser-approved-packages.json" + * and "nonbrowser-approved-packages.json". See the Rush documentation for details. + */ + // "approvedPackagesPolicy": { + // /** + // * The review categories allow you to say for example "This library is approved for usage + // * in prototypes, but not in production code." + // * + // * Each project can be associated with one review category, by assigning the "reviewCategory" field + // * in the "projects" section of rush.json. The approval is then recorded in the files + // * "common/config/rush/browser-approved-packages.json" and "nonbrowser-approved-packages.json" + // * which are automatically generated during "rush update". + // * + // * Designate categories with whatever granularity is appropriate for your review process, + // * or you could just have a single category called "default". + // */ + // "reviewCategories": [ + // // Some example categories: + // "production", // projects that ship to production + // "tools", // non-shipping projects that are part of the developer toolchain + // "prototypes" // experiments that should mostly be ignored by the review process + // ], + // + // /** + // * A list of NPM package scopes that will be excluded from review. + // * We recommend to exclude TypeScript typings (the "@types" scope), because + // * if the underlying package was already approved, this would imply that the typings + // * are also approved. + // */ + // // "ignoredNpmScopes": ["@types"] + // }, + /** + * If you use Git as your version control system, this section has some additional + * optional features you can use. + */ + "gitPolicy": { + /** + * Work at a big company? Tired of finding Git commits at work with unprofessional Git + * emails such as "beer-lover@my-college.edu"? Rush can validate people's Git email address + * before they get started. + * + * Define a list of regular expressions describing allowable e-mail patterns for Git commits. + * They are case-insensitive anchored JavaScript RegExps. Example: ".*@example\.com" + * + * IMPORTANT: Because these are regular expressions encoded as JSON string literals, + * RegExp escapes need two backslashes, and ordinary periods should be "\\.". + */ + // "allowedEmailRegExps": [ + // "[^@]+@users\\.noreply\\.github\\.com", + // "travis@example\\.org" + // ], + /** + * When Rush reports that the address is malformed, the notice can include an example + * of a recommended email. Make sure it conforms to one of the allowedEmailRegExps + * expressions. + */ + // "sampleEmail": "mrexample@users.noreply.github.com", + /** + * The commit message to use when committing changes during 'rush publish'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "versionBumpCommitMessage": "chore: bump versions [skip ci]", + /** + * The commit message to use when committing changes during 'rush version'. + * + * For example, if you want to prevent these commits from triggering a CI build, + * you might configure your system's trigger to look for a special string such as "[skip-ci]" + * in the commit message, and then customize Rush's message to contain that string. + */ + "changeLogUpdateCommitMessage": "docs: update changelogs [skip ci]" + }, + "repository": { + /** + * The URL of this Git repository, used by "rush change" to determine the base branch for your PR. + * + * The "rush change" command needs to determine which files are affected by your PR diff. + * If you merged or cherry-picked commits from the master branch into your PR branch, those commits + * should be excluded from this diff (since they belong to some other PR). In order to do that, + * Rush needs to know where to find the base branch for your PR. This information cannot be + * determined from Git alone, since the "pull request" feature is not a Git concept. Ideally + * Rush would use a vendor-specific protocol to query the information from GitHub, Azure DevOps, etc. + * But to keep things simple, "rush change" simply assumes that your PR is against the "master" branch + * of the Git remote indicated by the repository.url setting in rush.json. If you are working in + * a GitHub "fork" of the real repo, this setting will be different from the repository URL of your + * your PR branch, and in this situation "rush change" will also automatically invoke "git fetch" + * to retrieve the latest activity for the remote master branch. + */ + /** TODO: CHANGE THIS **/ + "url": "https://github.com/microsoft/rush-example", + /** + * The default branch name. This tells "rush change" which remote branch to compare against. + * The default value is "master" + */ + "defaultBranch": "master", + /** + * The default remote. This tells "rush change" which remote to compare against if the remote URL is + * not set or if a remote matching the provided remote URL is not found. + */ + "defaultRemote": "origin" + }, + /** + * Event hooks are customized script actions that Rush executes when specific events occur + */ + "eventHooks": { + /** + * The list of shell commands to run before the Rush installation starts + */ + "preRushInstall": [ + // "common/scripts/pre-rush-install.js" + ], + /** + * The list of shell commands to run after the Rush installation finishes + */ + "postRushInstall": [], + /** + * The list of shell commands to run before the Rush build command starts + */ + "preRushBuild": [], + /** + * The list of shell commands to run after the Rush build command finishes + */ + "postRushBuild": [] + }, + /** + * Installation variants allow you to maintain a parallel set of configuration files that can be + * used to build the entire monorepo with an alternate set of dependencies. For example, suppose + * you upgrade all your projects to use a new release of an important framework, but during a transition period + * you intend to maintain compatibility with the old release. In this situation, you probably want your + * CI validation to build the entire repo twice: once with the old release, and once with the new release. + * + * Rush "installation variants" correspond to sets of config files located under this folder: + * + * common/config/rush/variants/<variant_name> + * + * The variant folder can contain an alternate common-versions.json file. Its "preferredVersions" field can be used + * to select older versions of dependencies (within a loose SemVer range specified in your package.json files). + * To install a variant, run "rush install --variant <variant_name>". + * + * For more details and instructions, see this article: https://rushjs.io/pages/advanced/installation_variants/ + */ + "variants": [ + // { + // /** + // * The folder name for this variant. + // */ + // "variantName": "old-sdk", + // + // /** + // * An informative description + // */ + // "description": "Build this repo using the previous release of the SDK" + // } + ], + /** + * Rush can collect anonymous telemetry about everyday developer activity such as + * success/failure of installs, builds, and other operations. You can use this to identify + * problems with your toolchain or Rush itself. THIS TELEMETRY IS NOT SHARED WITH MICROSOFT. + * It is written into JSON files in the common/temp folder. It's up to you to write scripts + * that read these JSON files and do something with them. These scripts are typically registered + * in the "eventHooks" section. + */ + // "telemetryEnabled": false, + /** + * Allows creation of hotfix changes. This feature is experimental so it is disabled by default. + * If this is set, 'rush change' only allows a 'hotfix' change type to be specified. This change type + * will be used when publishing subsequent changes from the monorepo. + */ + // "hotfixChangeEnabled": false, + /** + * (Required) This is the inventory of projects to be managed by Rush. + * + * Rush does not automatically scan for projects using wildcards, for a few reasons: + * 1. Depth-first scans are expensive, particularly when tools need to repeatedly collect the list. + * 2. On a caching CI machine, scans can accidentally pick up files left behind from a previous build. + * 3. It's useful to have a centralized inventory of all projects and their important metadata. + */ + "projects": [ + { + "packageName": "@packages/a", + "projectFolder": "@packages/a" + }, + { + "packageName": "@packages/b", + "projectFolder": "@packages/b" + } + // { + // /** + // * The NPM package name of the project (must match package.json) + // */ + // "packageName": "my-app", + // + // /** + // * The path to the project folder, relative to the rush.json config file. + // */ + // "projectFolder": "apps/my-app", + // + // /** + // * An optional category for usage in the "browser-approved-packages.json" + // * and "nonbrowser-approved-packages.json" files. The value must be one of the + // * strings from the "reviewCategories" defined above. + // */ + // "reviewCategory": "production", + // + // /** + // * A list of local projects that appear as devDependencies for this project, but cannot be + // * locally linked because it would create a cyclic dependency; instead, the last published + // * version will be installed in the Common folder. + // */ + // "cyclicDependencyProjects": [ + // // "my-toolchain" + // ], + // + // /** + // * If true, then this project will be ignored by the "rush check" command. + // * The default value is false. + // */ + // // "skipRushCheck": false, + // + // /** + // * A flag indicating that changes to this project will be published to npm, which affects + // * the Rush change and publish workflows. The default value is false. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "shouldPublish": false, + // + // /** + // * Facilitates postprocessing of a project's files prior to publishing. + // * + // * If specified, the "publishFolder" is the relative path to a subfolder of the project folder. + // * The "rush publish" command will publish the subfolder instead of the project folder. The subfolder + // * must contain its own package.json file, which is typically a build output. + // */ + // // "publishFolder": "temp/publish", + // + // /** + // * An optional version policy associated with the project. Version policies are defined + // * in "version-policies.json" file. See the "rush publish" documentation for more info. + // * NOTE: "versionPolicyName" and "shouldPublish" are alternatives; you cannot specify them both. + // */ + // // "versionPolicyName": "" + // }, + // + // { + // "packageName": "my-controls", + // "projectFolder": "libraries/my-controls", + // "reviewCategory": "production" + // }, + // + // { + // "packageName": "my-toolchain", + // "projectFolder": "tools/my-toolchain", + // "reviewCategory": "tools" + // } + ] +} diff --git a/@commitlint/config-rush-scopes/index.js b/@commitlint/config-rush-scopes/index.js new file mode 100644 index 0000000000..07fc2e1d07 --- /dev/null +++ b/@commitlint/config-rush-scopes/index.js @@ -0,0 +1,32 @@ +import Path from "node:path"; +import fs from "fs/promises"; + +import jsonc from "jsonc"; + +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(); + + return fs + .readFile(Path.join(cwd, "rush.json"), { encoding: "utf8" }) + .then((content) => jsonc.parse(content)) + .then(({ projects }) => projects) + .catch(() => []); + }) + .then((packages) => { + return packages + .map((pkg) => pkg.packageName) + .filter(Boolean) + .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 new file mode 100644 index 0000000000..a5ce89033e --- /dev/null +++ b/@commitlint/config-rush-scopes/index.test.js @@ -0,0 +1,76 @@ +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 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); + + 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); + + const [, , value] = await fn({ cwd }); + + expect(value).toEqual(["a", "b"]); +}); diff --git a/@packages/babel-preset-commitlint/license.md b/@commitlint/config-rush-scopes/license.md similarity index 100% rename from @packages/babel-preset-commitlint/license.md rename to @commitlint/config-rush-scopes/license.md diff --git a/@commitlint/config-rush-scopes/package.json b/@commitlint/config-rush-scopes/package.json new file mode 100644 index 0000000000..cf0b0136f8 --- /dev/null +++ b/@commitlint/config-rush-scopes/package.json @@ -0,0 +1,45 @@ +{ + "name": "@commitlint/config-rush-scopes", + "type": "module", + "version": "20.0.0", + "description": "Shareable commitlint config enforcing rush package and workspace names as scopes", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "deps": "dep-check", + "pkg": "pkg-check" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-rush-scopes" + }, + "keywords": [ + "conventional-changelog", + "commitlint", + "commitlint-config", + "rush" + ], + "author": { + "name": "Alexander Vyzhanov", + "email": "lembdev@gmail.com" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, + "dependencies": { + "jsonc": "^2.0.0" + }, + "devDependencies": { + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/config-rush-scopes/readme.md b/@commitlint/config-rush-scopes/readme.md new file mode 100644 index 0000000000..505b681720 --- /dev/null +++ b/@commitlint/config-rush-scopes/readme.md @@ -0,0 +1,44 @@ +# @commitlint/config-rush-scopes + +Lint your rush project commits + +Shareable `commitlint` config enforcing rush package and workspace names as scopes. +Use with [@commitlint/cli](../cli) and [@commitlint/prompt-cli](../prompt-cli). + +## Getting started + +```sh +npm install --save-dev @commitlint/config-rush-scopes @commitlint/cli +echo "export default {extends: ['@commitlint/config-rush-scopes']};" > commitlint.config.js +``` + +## Examples + +```text +❯ cat commitlint.config.js +{ + extends: ['@commitlint/config-rush-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/config-validator/CHANGELOG.md b/@commitlint/config-validator/CHANGELOG.md new file mode 100644 index 0000000000..070307d41e --- /dev/null +++ b/@commitlint/config-validator/CHANGELOG.md @@ -0,0 +1,260 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/config-validator + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/config-validator + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/config-validator + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/config-validator + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/config-validator + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +### Features + +- **load:** accept functions as parser presets ([#2982](https://github.com/conventional-changelog/commitlint/issues/2982)) ([420e8d6](https://github.com/conventional-changelog/commitlint/commit/420e8d6a4d5663ade953272275a9e0fa7c5ddff0)), closes [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Features + +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) diff --git a/@commitlint/config-validator/package.json b/@commitlint/config-validator/package.json new file mode 100644 index 0000000000..567436d46c --- /dev/null +++ b/@commitlint/config-validator/package.json @@ -0,0 +1,46 @@ +{ + "name": "@commitlint/config-validator", + "type": "module", + "version": "20.0.0", + "description": "config validator for commitlint.config.js", + "main": "lib/validate.js", + "types": "lib/validate.d.ts", + "files": [ + "lib/" + ], + "scripts": { + "deps": "dep-check", + "pkg": "pkg-check --skip-import" + }, + "engines": { + "node": ">=v18" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/config-validator" + }, + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "keywords": [ + "conventional-changelog", + "commitlint", + "library", + "core" + ], + "author": { + "name": "Mario Nebl", + "email": "hello@herebecode.com" + }, + "license": "MIT", + "devDependencies": { + "@commitlint/utils": "^20.0.0" + }, + "dependencies": { + "@commitlint/types": "^20.0.0", + "ajv": "^8.11.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/config-validator/src/__snapshots__/validate.test.ts.snap b/@commitlint/config-validator/src/__snapshots__/validate.test.ts.snap new file mode 100644 index 0000000000..5e8ec1505b --- /dev/null +++ b/@commitlint/config-validator/src/__snapshots__/validate.test.ts.snap @@ -0,0 +1,135 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`validation should fail for > defaultIgnoresNotBoolean 1`] = ` +[Error: Commitlint configuration in defaultIgnoresNotBoolean.js is invalid: + - Property "defaultIgnores" has the wrong type - must be boolean. +] +`; + +exports[`validation should fail for > extendsAsObject 1`] = ` +[Error: Commitlint configuration in extendsAsObject.js is invalid: + - Property "extends" has the wrong type - must be array. + - Property "extends" has the wrong type - must be string. + - "/extends" must match exactly one schema in oneOf. Value: {"test":1}. +] +`; + +exports[`validation should fail for > extendsWithFunction 1`] = ` +[Error: Commitlint configuration in extendsWithFunction.js is invalid: + - Property "extends/0" has the wrong type - must be string. + - Property "extends" has the wrong type - must be string. + - "/extends" must match exactly one schema in oneOf. Value: [null]. +] +`; + +exports[`validation should fail for > formatterAsObject 1`] = ` +[Error: Commitlint configuration in formatterAsObject.js is invalid: + - Property "formatter" has the wrong type - must be string. +] +`; + +exports[`validation should fail for > helpUrlAsArray 1`] = ` +[Error: Commitlint configuration in helpUrlAsArray.js is invalid: + - Property "helpUrl" has the wrong type - must be string. +] +`; + +exports[`validation should fail for > helpUrlNotString 1`] = ` +[Error: Commitlint configuration in helpUrlNotString.js is invalid: + - Property "helpUrl" has the wrong type - must be string. +] +`; + +exports[`validation should fail for > ignoresFunction 1`] = ` +[Error: Commitlint configuration in ignoresFunction.js is invalid: + - Property "ignores" has the wrong type - must be array. +] +`; + +exports[`validation should fail for > ignoresNotFunction 1`] = ` +[Error: Commitlint configuration in ignoresNotFunction.js is invalid: + - "/ignores/0" should be a function. Value: 1. +] +`; + +exports[`validation should fail for > parserPreset 1`] = ` +[Error: Commitlint configuration in parserPreset.js is invalid: + - Property "parserPreset" has the wrong type - must be string. + - Property "parserPreset" has the wrong type - must be object. + - "/parserPreset" should be a function. Value: []. + - "/parserPreset" must match exactly one schema in oneOf. Value: []. +] +`; + +exports[`validation should fail for > pluginsNotArray 1`] = ` +[Error: Commitlint configuration in pluginsNotArray.js is invalid: + - Property "plugins" has the wrong type - must be array. +] +`; + +exports[`validation should fail for > rules1 1`] = ` +[Error: Commitlint configuration in rules1.js is invalid: + - "/rules/a/0" must be equal to one of the allowed values. Value: 3. + - "/rules/a" should be a function. Value: [3]. + - "/rules/a" must match exactly one schema in oneOf. Value: [3]. +] +`; + +exports[`validation should fail for > rules2 1`] = ` +[Error: Commitlint configuration in rules2.js is invalid: + - "/rules/b" must NOT have more than 3 items. Value: [1,"test",2,2]. + - "/rules/b" should be a function. Value: [1,"test",2,2]. + - "/rules/b" must match exactly one schema in oneOf. Value: [1,"test",2,2]. +] +`; + +exports[`validation should fail for > rules3 1`] = ` +[Error: Commitlint configuration in rules3.js is invalid: + - "/rules/c" must NOT have fewer than 1 items. Value: []. + - "/rules/c" should be a function. Value: []. + - "/rules/c" must match exactly one schema in oneOf. Value: []. +] +`; + +exports[`validation should fail for > rules4 1`] = ` +[Error: Commitlint configuration in rules4.js is invalid: + - Property "rules/d/0" has the wrong type - must be number. + - "/rules/d/0" must be equal to one of the allowed values. Value: []. + - "/rules/d" should be a function. Value: [[],[],[]]. + - "/rules/d" must match exactly one schema in oneOf. Value: [[],[],[]]. +] +`; + +exports[`validation should fail for > rules5 1`] = ` +[Error: Commitlint configuration in rules5.js is invalid: + - Property "rules/e" has the wrong type - must be array. + - "/rules/e" should be a function. Value: {}. + - "/rules/e" must match exactly one schema in oneOf. Value: {}. +] +`; + +exports[`validation should fail for > rulesAsArray 1`] = ` +[Error: Commitlint configuration in rulesAsArray.js is invalid: + - Property "rules" has the wrong type - must be object. +] +`; + +exports[`validation should fail for > whenConfigIsNotObject 1`] = ` +[Error: Commitlint configuration in whenConfigIsNotObject.js is invalid: + - Config has the wrong type - must be object. +] +`; + +exports[`validation should fail for > whenConfigIsNotObject2 1`] = ` +[Error: Commitlint configuration in whenConfigIsNotObject2.js is invalid: + - Config has the wrong type - must be object. +] +`; + +exports[`validation should fail for > withPluginsAsObject 1`] = ` +[Error: Commitlint configuration in withPluginsAsObject.js is invalid: + - Property "plugins/0" has the wrong type - must be string. + - "/plugins/0" must have required property 'rules'. Value: {}. + - "/plugins/0" must match a schema in anyOf. Value: {}. +] +`; diff --git a/@commitlint/config-validator/src/commitlint.schema.json b/@commitlint/config-validator/src/commitlint.schema.json new file mode 100644 index 0000000000..2c6d2075a9 --- /dev/null +++ b/@commitlint/config-validator/src/commitlint.schema.json @@ -0,0 +1,105 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "definitions": { + "rule": { + "oneOf": [ + { + "description": "A rule", + "type": "array", + "items": [ + { + "description": "Level: 0 disables the rule. For 1 it will be considered a warning, for 2 an error", + "type": "number", + "enum": [0, 1, 2] + }, + { + "description": "Applicable: always|never: never inverts the rule", + "type": "string", + "enum": ["always", "never"] + }, + { + "description": "Value: the value for this rule" + } + ], + "minItems": 1, + "maxItems": 3, + "additionalItems": false + }, + { + "description": "A rule", + "typeof": "function" + } + ] + } + }, + "properties": { + "extends": { + "description": "Resolveable ids to commitlint configurations to extend", + "oneOf": [ + { + "type": "array", + "items": { "type": "string" } + }, + { "type": "string" } + ] + }, + "parserPreset": { + "description": "Resolveable id to conventional-changelog parser preset to import and use", + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "properties": { + "name": { "type": "string" }, + "path": { "type": "string" }, + "parserOpts": {} + }, + "additionalProperties": true + }, + { "typeof": "function" } + ] + }, + "helpUrl": { + "description": "Custom URL to show upon failure", + "type": "string" + }, + "formatter": { + "description": "Resolveable id to package, from node_modules, which formats the output", + "type": "string" + }, + "rules": { + "description": "Rules to check against", + "type": "object", + "propertyNames": { "type": "string" }, + "additionalProperties": { "$ref": "#/definitions/rule" } + }, + "plugins": { + "description": "Resolveable ids of commitlint plugins from node_modules", + "type": "array", + "items": { + "anyOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["rules"], + "properties": { + "rules": { + "type": "object" + } + } + } + ] + } + }, + "ignores": { + "type": "array", + "items": { "typeof": "function" }, + "description": "Additional commits to ignore, defined by ignore matchers" + }, + "defaultIgnores": { + "description": "Whether commitlint uses the default ignore rules", + "type": "boolean" + } + } +} diff --git a/@commitlint/config-validator/src/formatErrors.ts b/@commitlint/config-validator/src/formatErrors.ts new file mode 100644 index 0000000000..1021c92eb8 --- /dev/null +++ b/@commitlint/config-validator/src/formatErrors.ts @@ -0,0 +1,45 @@ +import type { ErrorObject } from "ajv"; + +/** + * Formats an array of schema validation errors. + * @param errors An array of error messages to format. + * @returns Formatted error message + * Based on https://github.com/eslint/eslint/blob/master/lib/shared/config-validator.js#L237-L261 + */ +export function formatErrors(errors: ErrorObject[]): string { + return errors + .map((error) => { + if ( + error.keyword === "additionalProperties" && + "additionalProperty" in error.params + ) { + const formattedPropertyPath = error.instancePath.length + ? `${error.instancePath.slice(1)}.${error.params.additionalProperty}` + : error.params.additionalProperty; + + return `Unexpected top-level property "${formattedPropertyPath}"`; + } + if (error.keyword === "type") { + const formattedField = error.instancePath.slice(1); + if (!formattedField) { + return `Config has the wrong type - ${error.message}`; + } + return `Property "${formattedField}" has the wrong type - ${error.message}`; + } + const field = + (error.instancePath[0] === "." + ? error.instancePath.slice(1) + : error.instancePath) || "Config"; + if (error.keyword === "typeof") { + return `"${field}" should be a ${error.schema}. Value: ${JSON.stringify( + error.data, + )}`; + } + + return `"${field}" ${error.message}. Value: ${JSON.stringify( + error.data, + )}`; + }) + .map((message) => `\t- ${message}.\n`) + .join(""); +} diff --git a/@commitlint/config-validator/src/validate.test.ts b/@commitlint/config-validator/src/validate.test.ts new file mode 100644 index 0000000000..1a3c402c4b --- /dev/null +++ b/@commitlint/config-validator/src/validate.test.ts @@ -0,0 +1,75 @@ +import { describe, test, expect } from "vitest"; +import { RuleConfigSeverity, UserConfig } from "@commitlint/types"; + +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: "" }, + withRules: { + rules: { + a: [RuleConfigSeverity.Disabled], + b: [RuleConfigSeverity.Warning, "never"], + c: [RuleConfigSeverity.Error, "never", true], + }, + }, + withParserPresetString: { parserPreset: "test" }, + withParserPresetObject: { parserPreset: {} }, + withParserPresetObject2: { parserPreset: { name: "string", path: "string" } }, + withParserPresetObjectPromise: { + parserPreset: Promise.resolve({ name: "string" }), + }, + withParserPresetOpts: { parserPreset: { parserOpts: { test: 1 } } }, + withParserPresetOptsPromise: { + 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 }, +}; + +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: {} }, +}; + +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) => { + expect(() => + validateConfig(`${file}.js`, config), + ).toThrowErrorMatchingSnapshot(); + }); +}); diff --git a/@commitlint/config-validator/src/validate.ts b/@commitlint/config-validator/src/validate.ts new file mode 100644 index 0000000000..d4c28a2c7a --- /dev/null +++ b/@commitlint/config-validator/src/validate.ts @@ -0,0 +1,56 @@ +import { createRequire } from "node:module"; + +import { UserConfig } from "@commitlint/types"; +import _Ajv from "ajv"; + +import { formatErrors } from "./formatErrors.js"; + +const require = createRequire(import.meta.url); + +const schema: typeof import("./commitlint.schema.json") = require("./commitlint.schema.json"); + +const TYPE_OF = [ + "undefined", + "string", + "number", + "object", + "function", + "boolean", + "symbol", +]; + +// FIXME: https://github.com/ajv-validator/ajv/issues/2132 +const Ajv = _Ajv as unknown as typeof _Ajv.default; + +export function validateConfig( + source: string, + config: unknown, +): asserts config is UserConfig { + const ajv = new Ajv({ + meta: false, + strict: false, + useDefaults: true, + validateSchema: false, + verbose: true, + }); + + ajv.addKeyword({ + keyword: "typeof", + validate: function typeOfFunc(schema: any, data: any) { + return typeof data === schema; + }, + metaSchema: { type: "string", enum: TYPE_OF }, + schema: true, + }); + + const validate = ajv.compile(schema); + const isValid = validate(config); + + if (!isValid && validate.errors && validate.errors.length) { + throw new Error( + `Commitlint configuration in ${source} is invalid:\n${formatErrors( + validate.errors, + )}`, + ); + } +} diff --git a/@commitlint/config-validator/tsconfig.json b/@commitlint/config-validator/tsconfig.json new file mode 100644 index 0000000000..5ef37ea5e3 --- /dev/null +++ b/@commitlint/config-validator/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts", "./src/**/*.json"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "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..3635a1164f --- /dev/null +++ b/@commitlint/config-workspace-scopes/CHANGELOG.md @@ -0,0 +1,37 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/config-workspace-scopes + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/config-workspace-scopes + + + + + +# [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-workspace-scopes/fixtures/basic/@packages/a/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/a/package.json new file mode 100644 index 0000000000..7ba283037e --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/a", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/basic/@packages/b/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/b/package.json new file mode 100644 index 0000000000..3fd2cf7616 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/basic/@packages/b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/b", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/basic/package.json b/@commitlint/config-workspace-scopes/fixtures/basic/package.json new file mode 100644 index 0000000000..1a28bd53f8 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/basic/package.json @@ -0,0 +1,7 @@ +{ + "name": "yarn", + "version": "1.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-workspace-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json new file mode 100644 index 0000000000..d22626edd3 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/a/nested-a/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/nested-a", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json new file mode 100644 index 0000000000..a2006192a7 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/@packages/b/nested-b/package.json @@ -0,0 +1,4 @@ +{ + "name": "@packages/nested-b", + "version": "1.0.0" +} diff --git a/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json new file mode 100644 index 0000000000..21e671fb54 --- /dev/null +++ b/@commitlint/config-workspace-scopes/fixtures/nested-workspaces/package.json @@ -0,0 +1,7 @@ +{ + "name": "nested-workspaces", + "version": "1.0.0", + "workspaces": [ + "@packages/**" + ] +} 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..d68b65fe6d --- /dev/null +++ b/@commitlint/config-workspace-scopes/package.json @@ -0,0 +1,41 @@ +{ + "name": "@commitlint/config-workspace-scopes", + "type": "module", + "version": "20.0.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": "^20.0.0", + "@commitlint/utils": "^20.0.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 8d4cd29f4d..51c59d17ca 100644 --- a/@commitlint/core/CHANGELOG.md +++ b/@commitlint/core/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) **Note:** Version bump only for package @commitlint/core @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/core @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/core @@ -27,7 +27,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -35,7 +35,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +## [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 @@ -43,7 +43,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +## [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 @@ -51,93 +51,675 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [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 -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) +## [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 -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +# [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [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 -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [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 -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [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 -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [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 -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/core + + + + + +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) + +**Note:** Version bump only for package @commitlint/core + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/core + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/core + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/core + +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) + +**Note:** Version bump only for package @commitlint/core + +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) + +**Note:** Version bump only for package @commitlint/core + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/core + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/core + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package @commitlint/core + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/core + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package @commitlint/core + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/core + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package @commitlint/core + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/core + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/core + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/core + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/core + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) + +**Note:** Version bump only for package @commitlint/core + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/core + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/core + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/core + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/core + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/core + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/core + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/core + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/core + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/core + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/core + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/core + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/core + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/core + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/core + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +**Note:** Version bump only for package @commitlint/core + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/core + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +**Note:** Version bump only for package @commitlint/core + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/core + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/core + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/core + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +**Note:** Version bump only for package @commitlint/core + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/core + +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +**Note:** Version bump only for package @commitlint/core + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.4.0"></a> + +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.3.2"></a> + +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/core + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +**Note:** Version bump only for package @commitlint/core + +<a name="6.2.0"></a> + +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) + +**Note:** Version bump only for package @commitlint/core + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + **Note:** Version bump only for package @commitlint/core diff --git a/@commitlint/core/index.js b/@commitlint/core/index.js deleted file mode 100644 index c845835ba9..0000000000 --- a/@commitlint/core/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports.format = require('@commitlint/format'); -module.exports.load = require('@commitlint/load'); -module.exports.lint = require('@commitlint/lint'); -module.exports.read = require('@commitlint/read'); diff --git a/@commitlint/core/package.json b/@commitlint/core/package.json index 7805b450c2..1407cce57f 100644 --- a/@commitlint/core/package.json +++ b/@commitlint/core/package.json @@ -1,25 +1,29 @@ { "name": "@commitlint/core", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "Lint your commit messages", + "main": "lib/core.js", + "types": "lib/core.d.ts", "files": [ - "index.js" + "lib/" ], "scripts": { "deps": "dep-check", "pkg": "pkg-check --skip-import" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/core" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -32,9 +36,13 @@ }, "license": "MIT", "dependencies": { - "@commitlint/format": "^8.2.0", - "@commitlint/lint": "^8.2.0", - "@commitlint/load": "^8.2.0", - "@commitlint/read": "^8.2.0" - } + "@commitlint/format": "^20.0.0", + "@commitlint/lint": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/read": "^20.0.0" + }, + "devDependencies": { + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/core/src/core.ts b/@commitlint/core/src/core.ts new file mode 100644 index 0000000000..3181e0ac71 --- /dev/null +++ b/@commitlint/core/src/core.ts @@ -0,0 +1,6 @@ +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 }; diff --git a/@commitlint/core/tsconfig.json b/@commitlint/core/tsconfig.json new file mode 100644 index 0000000000..8d5ce01f6d --- /dev/null +++ b/@commitlint/core/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] +} diff --git a/@commitlint/cz-commitlint/.gitignore b/@commitlint/cz-commitlint/.gitignore new file mode 100644 index 0000000000..722d5e71d9 --- /dev/null +++ b/@commitlint/cz-commitlint/.gitignore @@ -0,0 +1 @@ +.vscode diff --git a/@commitlint/cz-commitlint/CHANGELOG.md b/@commitlint/cz-commitlint/CHANGELOG.md new file mode 100644 index 0000000000..7f1b3bc6b8 --- /dev/null +++ b/@commitlint/cz-commitlint/CHANGELOG.md @@ -0,0 +1,483 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) + +**Note:** Version bump only for package @commitlint/cz-commitlint + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [16.0.3](https://github.com/conventional-changelog/commitlint/compare/v16.0.2...v16.0.3) (2022-01-19) + +### Bug Fixes + +- commit body should be empty by default ([#2980](https://github.com/conventional-changelog/commitlint/issues/2980)) ([e6582e0](https://github.com/conventional-changelog/commitlint/commit/e6582e03608621e46f617a097b4880750ae85021)) + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Bug Fixes + +- **cz-commitlint:** combine commit body with issuesBody/breakingBody when body has an empty string ([#2915](https://github.com/conventional-changelog/commitlint/issues/2915)) ([a038b41](https://github.com/conventional-changelog/commitlint/commit/a038b419f7f1d2073977ec1e6fe59ffcbba38931)) + +### Features + +- **cz-commitlint:** support select scope with radio list by setting disableMultipleScopes ([#2911](https://github.com/conventional-changelog/commitlint/issues/2911)) ([9d8d73f](https://github.com/conventional-changelog/commitlint/commit/9d8d73f36e0c62c8cd9e3e913b66a5ca46ebf622)), closes [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) + +### BREAKING CHANGES + +- **cz-commitlint:** users who is using multiple scopes need to set enableMultipleScopes to true + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +- support multiple scopes and multiple cases & fix sentence-case is not consistent with commitlint/cli (#2806) ([2c71a7e](https://github.com/conventional-changelog/commitlint/commit/2c71a7e2965a2beff805982d37243b79a48c9360)), closes [#2806](https://github.com/conventional-changelog/commitlint/issues/2806) [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) + +### BREAKING CHANGES + +- add prompt.settings configuration + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +### Bug Fixes + +- **cz-commitlint:** fix minor formatting issues ([99d8881](https://github.com/conventional-changelog/commitlint/commit/99d8881d0d951deded6d9e31bbb279d04101549b)) + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/cz-commitlint + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/cz-commitlint diff --git a/@commitlint/cz-commitlint/README.md b/@commitlint/cz-commitlint/README.md new file mode 100644 index 0000000000..fa92c1fe73 --- /dev/null +++ b/@commitlint/cz-commitlint/README.md @@ -0,0 +1,61 @@ +> Commitizen adapter using the commitlint.config.js + +# @commitlint/cz-commitlint + +This is a commitizen adapter, using this adapter, commitizen works based on commitlint.config.js. + +Submit by commitizen, lint by commitlint, just need maintain one configuration file, Consistent and Scalable. + +The interactive process is inspired by [cz-conventional-changelog](https://github.com/commitizen/cz-conventional-changelog). + +## Getting started + +### Configure commitizen adapter + +```bash +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@9 # inquirer is required as peer dependency +``` + +In package.json + +```json +{ + "scripts": { + "commit": "git-cz" + }, + "config": { + "commitizen": { + "path": "@commitlint/cz-commitlint" + } + } +} +``` + +### Configure commitlint + +**⚠️ Important: The required version of commitlint and shared configuration is above 12.1.2, update them if already existed in project** + +```bash +# Install commitlint cli and conventional config +npm install --save-dev @commitlint/config-conventional @commitlint/cli +# or yarn +yarn add @commitlint/config-conventional @commitlint/cli -D + +# Simple: config with conventional +echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js +``` + +### Try it out + +```bash +git add . +npm run commit +# or yarn +yarn commit +``` + +## Related + +- [Commitlint Reference Prompt](https://commitlint.js.org/reference/prompt) - How to customize prompt information by setting commitlint.config.js diff --git a/@commitlint/cz-commitlint/TODO b/@commitlint/cz-commitlint/TODO new file mode 100644 index 0000000000..689365d222 --- /dev/null +++ b/@commitlint/cz-commitlint/TODO @@ -0,0 +1,5 @@ +[x] jest Test +[x] insert prompt settings to commitlint.config.js +[] support multi line +[] support emoji and title +[] recognize "signed-off-by" and "references-empty" rules 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/license.md b/@commitlint/cz-commitlint/license.md new file mode 100644 index 0000000000..d13cc4b26a --- /dev/null +++ b/@commitlint/cz-commitlint/license.md @@ -0,0 +1,19 @@ +The MIT License (MIT) + +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/cz-commitlint/package.json b/@commitlint/cz-commitlint/package.json new file mode 100644 index 0000000000..dd10160dda --- /dev/null +++ b/@commitlint/cz-commitlint/package.json @@ -0,0 +1,65 @@ +{ + "name": "@commitlint/cz-commitlint", + "type": "module", + "version": "20.1.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": [ + "conventional-changelog", + "commitlint", + "cz", + "commitizen", + "cz-commitlint" + ], + "scripts": { + "commit": "git-cz" + }, + "homepage": "https://commitlint.js.org/", + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/cz-commitlint" + }, + "engineStrict": true, + "engines": { + "node": ">=v18" + }, + "author": "Curly Brackets <water.curly@outlook.com>", + "license": "MIT", + "config": { + "commitizen": { + "path": "./@commitlint/cz-commitlint" + } + }, + "dependencies": { + "@commitlint/ensure": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/types": "^20.0.0", + "chalk": "^5.3.0", + "lodash.isplainobject": "^4.0.6", + "word-wrap": "^1.2.5" + }, + "peerDependencies": { + "commitizen": "^4.0.3", + "inquirer": "^9.0.0" + }, + "devDependencies": { + "@types/inquirer": "^9.0.7", + "@types/lodash.isfunction": "^3.0.8", + "@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 new file mode 100644 index 0000000000..fefca0c40a --- /dev/null +++ b/@commitlint/cz-commitlint/src/Process.test.ts @@ -0,0 +1,245 @@ +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"; + +import process from "./Process.js"; + +const mockShowTitle = vi.fn(); +const mockShowValidation = vi.fn((message) => message); + +// mock inquirer +const mockPrompt = vi.fn(async function ( + questions: DistinctQuestion[], + answers: 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 + : ""; + mockShowTitle(title); + + const validation = + typeof validate !== "function" || + (await validate((name && answers[name]) ?? "", answers)); + + if (typeof validation === "string") { + mockShowValidation(validation); + break; + } else if (filter && name && answers[name]) { + answers[name] = filter(answers[name], answers); + } + } + } +}); + +function InquirerFactory(answers: Answers) { + const inquirer = { + async prompt(questions: DistinctQuestion[]) { + await mockPrompt(questions, answers); + return answers; + }, + }; + + return inquirer; +} + +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", +}; + +let rules: QualifiedRules; +let prompts: UserPromptConfig; + +afterEach(() => { + mockShowTitle.mockClear(); + mockShowValidation.mockClear(); +}); + +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": [ + RuleConfigSeverity.Error, + "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": [ + RuleConfigSeverity.Error, + "always", + [ + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", + ], + ], + }; + prompts = { + messages: MESSAGES, + questions: { + type: { + description: "Select the type of change that you're committing:", + enum: { + feat: { + description: "A new feature", + title: "Features", + emoji: "✨", + }, + fix: { + description: "A bug fix", + title: "Bug Fixes", + emoji: "🐛", + }, + docs: { + 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: "💎", + }, + refactor: { + description: + "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: "🚀", + }, + test: { + 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: "🛠", + }, + ci: { + description: + "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: "♻️", + }, + revert: { + description: "Reverts a previous commit", + title: "Reverts", + emoji: "🗑", + }, + }, + }, + scope: { + description: + "What is the scope of this change (e.g. component or file name)", + }, + subject: { + description: + "Write a short, imperative tense description of the change", + }, + body: { + description: "Provide a longer description of the change", + }, + isBreaking: { + description: "Are there any breaking changes?", + }, + breakingBody: { + description: + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", + }, + breaking: { + description: "Describe the breaking changes", + }, + isIssueAffected: { + 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", + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }; + }); + test("should process works well", () => { + const answers = { + type: "refactor", + scope: "prompt", + subject: "refactor prompt based on inquirer", + body: "inspired by commitizen/cz-conventional-changelog", + isBreaking: true, + breaking: "refactor types", + isIssueAffected: true, + 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", + ); + }, + ); + }); + + test("should show validation and stop process when subject is empty", () => { + const answers = { + type: "refactor", + scope: "prompt", + body: "inspired by commitizen/cz-conventional-changelog", + isBreaking: true, + breaking: "refactor types", + isIssueAffected: true, + issues: "https://github.com/conventional-changelog/commitlint/issues/94", + }; + return process(rules, prompts, InquirerFactory(answers)).then(() => { + expect(mockShowValidation).toHaveBeenCalledWith( + "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 new file mode 100644 index 0000000000..48ec039d6f --- /dev/null +++ b/@commitlint/cz-commitlint/src/Process.ts @@ -0,0 +1,39 @@ +import { QualifiedRules, UserPromptConfig } from "@commitlint/types"; +import type { Answers, DistinctQuestion } from "inquirer"; + +import { + combineCommitMessage as combineBody, + getQuestions as getBodyQuestions, +} from "./SectionBody.js"; +import { + combineCommitMessage as combineFooter, + getQuestions as getFooterQuestions, +} 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"; + +export default async function ( + rules: QualifiedRules, + prompts: UserPromptConfig, + inquirer: { + prompt(questions: DistinctQuestion[]): Promise<Answers>; + }, +): Promise<string> { + setRules(rules); + setPromptConfig(prompts); + const questions = [ + ...getHeaderQuestions(), + ...getBodyQuestions(), + ...getFooterQuestions(), + ]; + const answers = await inquirer.prompt(questions); + const header = combineHeader(answers); + const body = combineBody(answers); + const footer = combineFooter(answers); + + 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 new file mode 100644 index 0000000000..d04ba708fb --- /dev/null +++ b/@commitlint/cz-commitlint/src/Question.test.ts @@ -0,0 +1,368 @@ +import { describe, test, expect, vi } from "vitest"; +import chalk from "chalk"; +import inquirer, { Answers, InputQuestionOptions } from "inquirer"; + +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", +}; +const QUESTION_CONFIG = { + title: "please input", + messages: MESSAGES, +}; + +const caseFn = (input: string | string[], delimiter?: string) => + (Array.isArray(input) ? input : [input]) + .map((segment) => segment[0].toUpperCase() + segment.slice(1)) + .join(delimiter); + +describe("name", () => { + test("should throw error when name is not a meaningful string", () => { + expect( + () => + new Question("" as any, { + ...QUESTION_CONFIG, + }), + ).toThrow(); + + expect( + () => + new Question( + function () { + return "scope"; + } as any, + { + ...QUESTION_CONFIG, + }, + ), + ).toThrow(); + }); + + test("should set name when name is valid", () => { + expect( + new Question("test" as any, { + ...QUESTION_CONFIG, + }).question, + ).toHaveProperty("name", "test"); + }); +}); + +describe("type", () => { + test('should return "list" type when enumList is array and multipleSelectDefaultDelimiter is undefined', () => { + const question = new Question("scope", { + ...QUESTION_CONFIG, + enumList: ["cli", "core"], + }).question; + 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", { + ...QUESTION_CONFIG, + enumList: ["cli", "core"], + multipleSelectDefaultDelimiter: ",", + }).question; + 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", { + ...QUESTION_CONFIG, + enumList: ["cli", "core"], + skip: true, + }).question; + expect(question).toHaveProperty("type", "list"); + expect(question).toHaveProperty("choices", [ + "cli", + "core", + new inquirer.Separator(), + { + name: "empty", + value: "", + }, + ]); + expect(question).not.toHaveProperty("transformer"); + }); + + test('should return "confirm" type when name is start with "is"', () => { + 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"); + }); + + test('should return "input" type in other cases', () => { + 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)); + }); +}); + +describe("message", () => { + test("should display title when it is not input", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + enumList: ["cli", "core"], + }).question; + 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, { + ...QUESTION_CONFIG, + skip: true, + }).question; + expect(question).toHaveProperty("message", expect.any(Function)); + expect((question.message as any)()).toBe( + "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", { + ...QUESTION_CONFIG, + messages: {}, + skip: true, + } as any).question; + 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", { + ...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"); + }); + + 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.message as any)()).toBe( + "please input: 10 chars at least\n", + ); + }); + + 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.message as any)()).toBe( + "please input (press enter to skip): 10 chars at least, upper 80 chars\n", + ); + }); + + 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", { + ...QUESTION_CONFIG, + } as any).question; + expect(question).toHaveProperty("message", expect.any(Function)); + + const answers = { + 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", { + ...QUESTION_CONFIG, + caseFn, + fullStopFn: (input: string) => input + "!", + }).question; + + expect(question.filter?.("xxxx", {})).toBe("Xxxx!"); + }); + + test("should transform each item with same case when input is array", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + caseFn, + fullStopFn: (input: string) => input + "!", + }).question; + + expect(question.filter?.(["xxxx", "yyyy"], {})).toBe("Xxxx,Yyyy!"); + }); + + test("should concat items with multipleSelectDefaultDelimiter when input is array", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + caseFn, + fullStopFn: (input: string) => input + "!", + multipleSelectDefaultDelimiter: "|", + }).question; + + expect(question.filter?.(["xxxx", "yyyy"], {})).toBe("Xxxx|Yyyy!"); + }); + + test("should split the string to items when multipleValueDelimiters is defined", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + caseFn, + 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!"); + }); + + test("should works well when does not pass caseFn/fullStopFn", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + }).question; + + 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", { + ...QUESTION_CONFIG, + skip: false, + }).question; + + expect(question.validate?.("")).toBe("body can not be empty"); + }); + + test("should ignore empty validation when can skip", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + skip: true, + }).question; + + expect(question.validate?.("")).toBe(true); + }); + + 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"); + }); + + 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"); + }); + + test("should validate the final submit string", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + caseFn: () => "", + skip: false, + }).question; + + expect(question.validate?.("xxxx")).not.toBe(true); + }); +}); + +describe("transformer", () => { + test("should auto transform case and full-stop", () => { + const question = new Question("body", { + ...QUESTION_CONFIG, + caseFn, + fullStopFn: (input: string) => input + "!", + }).question; + + expect( + (question as InputQuestionOptions)?.transformer?.("xxxx", {}, {}), + ).toBe("Xxxx!"); + }); + + 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", {}, {}), + ).toEqual(chalk.green(`(3) xxx`)); + + question = new Question("body", { + ...QUESTION_CONFIG, + minLength: 2, + }).question; + + expect( + (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", { + ...QUESTION_CONFIG, + maxLength: 5, + }).question; + + expect( + (question as InputQuestionOptions)?.transformer?.("xxxxxx", {}, {}), + ).toEqual(chalk.red(`(6) xxxxxx`)); + + question = new Question("body", { + ...QUESTION_CONFIG, + minLength: 2, + }).question; + + expect( + (question as InputQuestionOptions)?.transformer?.("x", {}, {}), + ).toEqual(chalk.red(`(1) x`)); + }); +}); + +describe("inquirer question", () => { + test('should pass "when" and "default" field to inquirer question', () => { + const when = (answers: Answers) => !!answers.header; + const question = new Question("body", { + ...QUESTION_CONFIG, + when, + defaultValue: "update", + }).question; + + 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 new file mode 100644 index 0000000000..c6a7ab24ad --- /dev/null +++ b/@commitlint/cz-commitlint/src/Question.ts @@ -0,0 +1,227 @@ +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"; + +export type QuestionConfig = { + title: string; + messages: PromptMessages; + maxLength?: number; + minLength?: number; + defaultValue?: string; + when?: DistinctQuestion["when"]; + skip?: boolean; + enumList?: ChoiceCollection<{ + name: string; + value: string; + }> | null; + multipleValueDelimiters?: RegExp; + multipleSelectDefaultDelimiter?: string; + fullStopFn?: FullStopFn; + caseFn?: CaseFn; +}; + +export default class Question { + private _question: Readonly<DistinctQuestion>; + private messages: PromptMessages; + private skip: boolean; + private _maxLength: number; + private _minLength: number; + private title: string; + private caseFn: CaseFn; + private fullStopFn: FullStopFn; + private multipleValueDelimiters?: RegExp; + private multipleSelectDefaultDelimiter?: string; + constructor( + name: PromptName, + { + title, + enumList, + messages, + defaultValue, + when, + skip, + fullStopFn, + caseFn, + maxLength, + minLength, + multipleValueDelimiters, + multipleSelectDefaultDelimiter, + }: QuestionConfig, + ) { + 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.skip = skip ?? false; + this.fullStopFn = fullStopFn ?? ((_: string) => _); + this.caseFn = + caseFn ?? + ((input: string | string[], delimiter?: string) => + Array.isArray(input) ? input.join(delimiter) : input); + this.multipleValueDelimiters = multipleValueDelimiters; + this.multipleSelectDefaultDelimiter = multipleSelectDefaultDelimiter; + + if (enumList && Array.isArray(enumList)) { + this._question = { + type: multipleSelectDefaultDelimiter ? "checkbox" : "list", + choices: skip + ? [ + ...enumList, + new inquirer.Separator(), + { + name: "empty", + value: "", + }, + ] + : [...enumList], + }; + } else if (/^is[A-Z]/.test(name)) { + this._question = { + type: "confirm", + }; + } else { + this._question = { + type: "input", + transformer: this.transformer.bind(this), + }; + } + + Object.assign(this._question, { + name, + default: defaultValue, + when, + validate: this.validate.bind(this), + filter: this.filter.bind(this), + message: this.decorateMessage.bind(this), + }); + } + + getMessage(key: string): string { + return this.messages[key] ?? ""; + } + + get question(): Readonly<DistinctQuestion> { + return this._question; + } + + get maxLength(): number { + return this._maxLength; + } + + set maxLength(maxLength: number) { + this._maxLength = maxLength; + } + + get minLength(): number { + return this._minLength; + } + + set minLength(minLength: number) { + this._minLength = minLength; + } + + protected beforeQuestionStart(_answers: Answers): void { + return; + } + + protected validate(input: string): boolean | string { + const output = this.filter(input); + const questionName = this.question.name ?? ""; + if (!this.skip && output.length === 0) { + return this.getMessage("emptyWarning").replace(/%s/g, questionName); + } + + if (output.length > this.maxLength) { + return this.getMessage("upperLimitWarning") + .replace(/%s/g, questionName) + .replace(/%d/g, `${output.length - this.maxLength}`); + } + + if (output.length < this.minLength) { + return this.getMessage("lowerLimitWarning") + .replace(/%s/g, questionName) + .replace(/%d/g, `${this.minLength - output.length}`); + } + + return true; + } + + protected filter(input: string | string[]): string { + let toCased; + if (Array.isArray(input)) { + 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(","); + toCased = input.replace( + new RegExp(`[^${this.multipleValueDelimiters.source}]+`, "g"), + (segment) => { + return casedSegments[segments.indexOf(segment)]; + }, + ); + } else { + toCased = this.caseFn(input); + } + + return this.fullStopFn(toCased); + } + + protected transformer(input: string, _answers: Answers): string { + const output = this.filter(input); + + if (this.maxLength === Infinity && this.minLength === 0) { + return output; + } + const color = + output.length <= this.maxLength && output.length >= this.minLength + ? chalk.green + : chalk.red; + return color("(" + output.length + ") " + output); + } + + protected decorateMessage(_answers: Answers): string { + if (this.beforeQuestionStart) { + this.beforeQuestionStart(_answers); + } + if (this.question.type === "input") { + const countLimitMessage = (() => { + const messages = []; + if (this.minLength > 0 && this.getMessage("min")) { + messages.push( + this.getMessage("min").replace(/%d/g, this.minLength + ""), + ); + } + if (this.maxLength < Infinity && this.getMessage("max")) { + messages.push( + this.getMessage("max").replace(/%d/g, this.maxLength + ""), + ); + } + + return messages.join(", "); + })(); + + const skipMessage = this.skip && this.getMessage("skip"); + + return ( + this.title + + (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 new file mode 100644 index 0000000000..0d7e2bf9c9 --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionBody.test.ts @@ -0,0 +1,96 @@ +import { describe, test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import { combineCommitMessage, getQuestions } from "./SectionBody.js"; +import { setRules } from "./store/rules.js"; + +describe("getQuestions", () => { + test("should exclude question when body must be empty", () => { + setRules({ + "body-empty": [RuleConfigSeverity.Error, "always"], + }); + const questions = getQuestions(); + expect(questions).toHaveLength(0); + }); + + test("should only return body question", () => { + setRules({}); + const questions = getQuestions(); + expect(questions).toHaveLength(1); + expect(questions).toEqual([ + expect.objectContaining({ + name: "body", + }), + ]); + }); +}); + +describe("combineCommitMessage", () => { + test("should wrap message to multi lines when max-line-length set", () => { + setRules({ + "body-max-line-length": [RuleConfigSeverity.Error, "always", 10], + }); + + const commitMessage = combineCommitMessage({ + body: "This is the body message.", + }); + + expect(commitMessage).toBe("This is\nthe body\nmessage."); + }); + + test("should auto apply leading blank", () => { + setRules({ + "body-leading-blank": [RuleConfigSeverity.Error, "always"], + }); + + const commitMessage = combineCommitMessage({ + body: "This 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", () => { + setRules({ + "body-max-line-length": [RuleConfigSeverity.Error, "always", 10], + "body-leading-blank": [RuleConfigSeverity.Error, "always"], + }); + const commitMessage = combineCommitMessage({ + body: "This is the body message.", + }); + expect(commitMessage).toBe("\nThis is\nthe body\nmessage."); + }); + + test("should use breakingBody when body message is empty but commit has BREAK CHANGE", () => { + setRules({}); + const commitMessage = combineCommitMessage({ + breakingBody: "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", () => { + setRules({}); + const commitMessage = combineCommitMessage({ + issuesBody: "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", () => { + setRules({}); + const commitMessage = combineCommitMessage({ + body: "", + issuesBody: "This is issue body message.", + }); + expect(commitMessage).toBe("This is issue body message."); + }); + + test("should return empty message when body is empty", () => { + setRules({}); + const commitMessage = combineCommitMessage({ + body: "", + }); + expect(commitMessage).toBe(""); + }); +}); diff --git a/@commitlint/cz-commitlint/src/SectionBody.ts b/@commitlint/cz-commitlint/src/SectionBody.ts new file mode 100644 index 0000000000..07f1c22cd0 --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionBody.ts @@ -0,0 +1,38 @@ +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"; + +export function getQuestions(): Array<DistinctQuestion> { + // body + const questionConfig = getRuleQuestionConfig("body"); + + if (!questionConfig) return []; + 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 commitBody = body || breakingBody || issuesBody || ""; + + if (commitBody) { + return leadingBlankFn( + maxLineLength < Infinity + ? wrap(commitBody, { + width: maxLineLength, + trim: true, + indent: "", + }) + : commitBody.trim(), + ); + } else { + return ""; + } +} diff --git a/@commitlint/cz-commitlint/src/SectionFooter.test.ts b/@commitlint/cz-commitlint/src/SectionFooter.test.ts new file mode 100644 index 0000000000..e16c9fadc8 --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionFooter.test.ts @@ -0,0 +1,316 @@ +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"; + +beforeEach(() => { + setRules({}); + setPromptConfig({}); +}); +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", + }, + issues: { + description: "<issues> link", + }, + }, + }); + + const questions = getQuestions(); + + expect(questions).toHaveLength(2); + expect(questions).toEqual([ + expect.objectContaining({ + name: "issues", + }), + expect.objectContaining({ + name: "footer", + }), + ]); + }); + + test("should not have break change as default", () => { + setPromptConfig({ + questions: { + isBreaking: { + description: "Are there any breaking changes?", + }, + }, + }); + + const questions = getQuestions(); + expect(questions).toEqual([ + expect.objectContaining({ + name: "isBreaking", + default: false, + }), + ]); + }); + + test("should ask for break change info when have break change", () => { + setPromptConfig({ + questions: { + isBreaking: { + description: "Are there any breaking changes?", + }, + breaking: { + description: "Describe the breaking changes", + }, + }, + }); + + const questions = 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", () => { + setPromptConfig({ + questions: { + isBreaking: { + description: "Describe the breaking changes", + }, + breakingBody: { + description: + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", + }, + }, + }); + + const questions = getQuestions(); + + expect( + (questions[1].when as any)({ + isBreaking: true, + }), + ).toBe(true); + + expect( + (questions[1].when as any)({ + isBreaking: true, + body: "xxx", + }), + ).toBe(false); + + expect( + (questions[1].when as any)({ + isBreaking: false, + }), + ).toBe(false); + }); + + test("should change does not affect any issues as default", () => { + setPromptConfig({ + questions: { + isIssueAffected: { + description: "Does this change affect any open issues?", + }, + }, + }); + + const questions = getQuestions(); + expect(questions).toEqual([ + expect.objectContaining({ + name: "isIssueAffected", + default: false, + }), + ]); + }); + + test("should ask for issue info when have issue affected", () => { + setPromptConfig({ + questions: { + isIssueAffected: { + description: "Does this change affect any open issues?", + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }); + + const questions = 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", () => { + setPromptConfig({ + questions: { + isIssueAffected: { + 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", + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }); + + const questions = getQuestions(); + + expect( + (questions[1].when as any)({ + isIssueAffected: true, + }), + ).toBe(true); + + expect( + (questions[1].when as any)({ + isIssueAffected: true, + body: "xxx", + }), + ).toBe(false); + + expect( + (questions[1].when as any)({ + isIssueAffected: false, + breaking: "xxxxx", + }), + ).toBe(false); + }); +}); + +describe("combineCommitMessage", () => { + test('should return BreakChange start with "BREAKING CHANGE: "', () => { + let commitMessage = combineCommitMessage({ + breaking: "BREAKING CHANGE: xxxxxx", + }); + expect(commitMessage).toBe("BREAKING CHANGE: xxxxxx"); + + commitMessage = combineCommitMessage({ + breaking: "xxxxxx", + }); + expect(commitMessage).toBe("BREAKING CHANGE: xxxxxx"); + }); + 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.", + }); + expect(commitMessage).toBe( + "BREAKING CHANGE: xxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther footer information.", + ); + }); + + test("should return wrap string with footer-max-line-length", () => { + setRules({ + "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.", + }); + expect(commitMessage).toBe( + "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", () => { + setRules({ + "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.", + }); + expect(commitMessage).toBe( + "\nBREAKING\nCHANGE:\nxxxxxx\nhttps://github.com/conventional-changelog/commitlint/issues/2507\nOther\nfooter\ninformation.", + ); + }); + + test("when does not have break change", () => { + const commitMessage = combineCommitMessage({ + issues: + "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.", + ); + }); + + test("when does not have issue", () => { + const commitMessage = combineCommitMessage({ + footer: "Other footer information.", + }); + expect(commitMessage).toBe("Other footer information."); + }); +}); + +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], + }); + 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", + }, + questions: { + breaking: { + description: "Describe the breaking changes", + }, + issues: { + description: "<issues> link", + }, + footer: { + description: + "<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"), + }; + + const lastQuestion = questions[2]; + + (lastQuestion.message as any)(answers); + 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 new file mode 100644 index 0000000000..f278e226eb --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionFooter.ts @@ -0,0 +1,175 @@ +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"; + +export class FooterQuestion extends Question { + footerMaxLength: number; + footerMinLength: number; + constructor( + name: PromptName, + questionConfig: QuestionConfig, + footerMaxLength?: number, + footerMinLength?: number, + ) { + super(name, questionConfig); + this.footerMaxLength = footerMaxLength ?? Infinity; + this.footerMinLength = footerMinLength ?? 0; + } + beforeQuestionStart(answers: Answers): void { + const footerRemainLength = + 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"); + + if (!footerQuestionConfig) return []; + + const footerMaxLength = footerQuestionConfig.maxLength; + const footerMinLength = footerQuestionConfig.minLength; + + const fields: PromptName[] = [ + "isBreaking", + "breakingBody", + "breaking", + "isIssueAffected", + "issuesBody", + "issues", + "footer", + ]; + + return fields + .filter((name) => name in getPromptQuestions()) + .map((name) => { + const questions = getPromptQuestions(); + + const questionConfigs = { + title: questions[name]?.description ?? "", + messages: getPromptMessages(), + footerMaxLength, + footerMinLength, + }; + + if (name === "isBreaking") { + Object.assign(questionConfigs, { + defaultValue: false, + }); + } + + if (name === "breakingBody") { + Object.assign(questionConfigs, { + when: (answers: Answers) => { + return answers.isBreaking && !answers.body; + }, + }); + } + + if (name === "breaking") { + Object.assign(questionConfigs, { + when: (answers: Answers) => { + return answers.isBreaking; + }, + }); + } + + if (name === "isIssueAffected") { + Object.assign(questionConfigs, { + defaultValue: false, + }); + } + + if (name === "issuesBody") { + Object.assign(questionConfigs, { + when: (answers: Answers) => { + return ( + answers.isIssueAffected && !answers.body && !answers.breakingBody + ); + }, + }); + } + + if (name === "issues") { + Object.assign(questionConfigs, { + when: (answers: Answers) => { + return answers.isIssueAffected; + }, + }); + } + + if (name === "footer") { + Object.assign(questionConfigs, { + ...footerQuestionConfig, + }); + } + + const instance = new FooterQuestion( + name, + questionConfigs, + footerMaxLength, + footerMinLength, + ); + + return instance.question; + }); +} + +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 { footer, breaking, issues } = answers; + const footerNotes: string[] = []; + + if (breaking) { + const BREAKING_CHANGE = "BREAKING CHANGE: "; + const message = + BREAKING_CHANGE + breaking.replace(new RegExp(`^${BREAKING_CHANGE}`), ""); + footerNotes.push( + maxLineLength < Infinity + ? wrap(message, { + width: maxLineLength, + trim: true, + indent: "", + }) + : message.trim(), + ); + } + + if (issues) { + footerNotes.push( + maxLineLength < Infinity + ? wrap(issues, { + width: maxLineLength, + trim: true, + indent: "", + }) + : issues.trim(), + ); + } + + if (footer) { + footerNotes.push( + maxLineLength < Infinity + ? wrap(footer, { + width: maxLineLength, + trim: true, + indent: "", + }) + : footer, + ); + } + + return leadingBlankFn(footerNotes.join("\n")); +} diff --git a/@commitlint/cz-commitlint/src/SectionHeader.test.ts b/@commitlint/cz-commitlint/src/SectionHeader.test.ts new file mode 100644 index 0000000000..350c1fe746 --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionHeader.test.ts @@ -0,0 +1,156 @@ +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"; + +beforeEach(() => { + setRules({}); + setPromptConfig({}); +}); +describe("getQuestions", () => { + test("should contain 'type','scope','subject'", () => { + const questions = getQuestions(); + expect(questions).toHaveLength(3); + expect(questions).toEqual([ + expect.objectContaining({ + name: "type", + }), + expect.objectContaining({ + name: "scope", + }), + expect.objectContaining({ + name: "subject", + }), + ]); + }); + + test("should exclude question when must be empty", () => { + setRules({ + "scope-empty": [RuleConfigSeverity.Error, "always"], + }); + const questions = getQuestions(); + expect(questions).toHaveLength(2); + expect(questions).toEqual([ + expect.objectContaining({ + name: "type", + }), + expect.objectContaining({ + name: "subject", + }), + ]); + }); +}); + +describe("getQuestionConfig", () => { + test("should 'scope' supports multiple items separated with ',\\/'", () => { + 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: "/", + enableMultipleScopes: true, + }, + }); + const config = getQuestionConfig("scope"); + expect(config).toEqual( + expect.objectContaining({ + multipleSelectDefaultDelimiter: "/", + }), + ); + }); + + test("should 'scope' disable multiple select by default", () => { + const config = getQuestionConfig("scope"); + expect(config).not.toContain("multipleSelectDefaultDelimiter"); + }); +}); + +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", + }); + expect(commitMessage).toBe("build(typescript): update tsconfig.json"); + }); + test("when type is empty", () => { + let commitMessage = combineCommitMessage({ + scope: "typescript", + subject: "update tsconfig.json", + }); + expect(commitMessage).toBe("(typescript): update tsconfig.json"); + + commitMessage = combineCommitMessage({ + scope: "typescript", + }); + expect(commitMessage).toBe("(typescript)"); + }); + + test("when scope is empty", () => { + let commitMessage = combineCommitMessage({ + type: "build", + subject: "update tsconfig.json", + }); + expect(commitMessage).toBe("build: update tsconfig.json"); + + commitMessage = combineCommitMessage({ + subject: "update tsconfig.json", + }); + expect(commitMessage).toBe("update tsconfig.json"); + }); + + test("when subject is empty", () => { + const commitMessage = combineCommitMessage({ + type: "build", + scope: "typescript", + }); + expect(commitMessage).toBe("build(typescript)"); + }); +}); + +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], + }); + 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", + }, + }); + + const questions = getQuestions(); + const answers = { + 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", + ); + }); +}); diff --git a/@commitlint/cz-commitlint/src/SectionHeader.ts b/@commitlint/cz-commitlint/src/SectionHeader.ts new file mode 100644 index 0000000000..bf43f0a2a3 --- /dev/null +++ b/@commitlint/cz-commitlint/src/SectionHeader.ts @@ -0,0 +1,83 @@ +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"; + +export class HeaderQuestion extends Question { + headerMaxLength: number; + headerMinLength: number; + constructor( + name: PromptName, + questionConfig: QuestionConfig, + headerMaxLength?: number, + headerMinLength?: number, + ) { + super(name, questionConfig); + this.headerMaxLength = headerMaxLength ?? Infinity; + this.headerMinLength = headerMinLength ?? 0; + } + beforeQuestionStart(answers: Answers): void { + const headerRemainLength = + this.headerMaxLength - combineCommitMessage(answers).length; + this.maxLength = Math.min(this.maxLength, headerRemainLength); + this.minLength = Math.min(this.minLength, this.headerMinLength); + } +} + +export function combineCommitMessage(answers: Answers): string { + const { type = "", scope = "", subject = "" } = answers; + const prefix = `${type}${scope ? `(${scope})` : ""}`; + + if (subject) { + return ((prefix ? prefix + ": " : "") + subject).trim(); + } else { + return prefix.trim(); + } +} + +export function getQuestions(): Array<DistinctQuestion> { + // header: type, scope, subject + const questions: Array<DistinctQuestion> = []; + + const headerRuleFields: RuleField[] = ["type", "scope", "subject"]; + const headerRuleQuestionConfig = getRuleQuestionConfig("header"); + + if (!headerRuleQuestionConfig) { + return []; + } + + headerRuleFields.forEach((name) => { + const questionConfig = getQuestionConfig(name); + if (questionConfig) { + const instance = new HeaderQuestion( + name, + questionConfig, + headerRuleQuestionConfig.maxLength, + headerRuleQuestionConfig.minLength, + ); + questions.push(instance.question); + } + }); + return questions; +} + +export function getQuestionConfig( + name: RuleField, +): ReturnType<typeof getRuleQuestionConfig> { + const questionConfig = getRuleQuestionConfig(name); + + if (questionConfig) { + if (name === "scope") { + if (getPromptSettings()["enableMultipleScopes"]) { + questionConfig.multipleSelectDefaultDelimiter = + getPromptSettings()["scopeEnumSeparator"]; + } + // split scope string to segments, match commitlint rules + questionConfig.multipleValueDelimiters = /\/|\\|,/g; + } + } + + return questionConfig; +} diff --git a/@commitlint/cz-commitlint/src/index.ts b/@commitlint/cz-commitlint/src/index.ts new file mode 100644 index 0000000000..0baeefbf2c --- /dev/null +++ b/@commitlint/cz-commitlint/src/index.ts @@ -0,0 +1,22 @@ +import load from "@commitlint/load"; +import type { Answers, DistinctQuestion } from "inquirer"; + +import process from "./Process.js"; + +type Commit = (message: string) => void; +/** + * Entry point for commitizen + * @param inquirerIns instance passed by commitizen, unused + * @param commit callback to execute with complete commit message + * @return {void} + */ +export function prompter( + inquirerIns: { + prompt(questions: DistinctQuestion[]): Promise<Answers>; + }, + commit: Commit, +): void { + 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 new file mode 100644 index 0000000000..ddae52ae61 --- /dev/null +++ b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts @@ -0,0 +1,612 @@ +import { RuleConfigSeverity } from "@commitlint/types"; +import { describe, expect, test } from "vitest"; + +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", () => { + setRules({ + "body-empty": [RuleConfigSeverity.Error, "always"], + }); + expect(getRuleQuestionConfig("body")).toBe(null); + }); + + test("should field 'skip' be false when can not be empty", () => { + setRules({ + "body-empty": [RuleConfigSeverity.Error, "never"], + }); + 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], + }); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); + }); + + test('should field "skip" be true when disable empty rule', () => { + setRules({ + "body-empty": [RuleConfigSeverity.Disabled], + }); + + expect(getRuleQuestionConfig("body")?.skip).toBe(true); + + setRules({ + "body-empty": [RuleConfigSeverity.Disabled, "always"], + }); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); + + setRules({ + "body-empty": [RuleConfigSeverity.Disabled, "never"], + }); + expect(getRuleQuestionConfig("body")?.skip).toBe(true); + }); +}); + +describe("title", () => { + test("should field 'title' set by 'description config'", () => { + const TEST_DESC = "test the description"; + setPromptConfig({ + questions: { + body: { + description: TEST_DESC, + }, + }, + }); + + expect(getRuleQuestionConfig("body")?.title).toBe(TEST_DESC); + }); + + test("should field 'title' be default string when without 'description' config", () => { + setPromptConfig({ + questions: { + body: {}, + }, + }); + + expect(getRuleQuestionConfig("body")?.title).toBe("body:"); + }); +}); + +describe("enum list", () => { + test("should enumList be undefined when without enum rule", () => { + setRules({ + "scope-case": [RuleConfigSeverity.Warning, "never", "camel-case"], + }); + + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); + }); + + test("should enumList be undefined when enum rule is not active", () => { + setRules({ + "scope-enum": [RuleConfigSeverity.Disabled], + }); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); + + setRules({ + "scope-enum": [ + RuleConfigSeverity.Error, + "never", + ["cli", "core", "lint"], + ], + }); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); + + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always"], + } as any); + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); + }); + + test("should enumList be undefined when enum rule is not a array", () => { + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always", {}], + } as any); + + expect(getRuleQuestionConfig("scope")?.enumList).toBeUndefined(); + }); + + test("should enumList same with enum rule when without 'enum' config", () => { + const ENUM_RULE_LIST = ["cli", "core", "lint"]; + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + scope: { + description: "test scope", + }, + }, + }); + + 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"]; + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + scope: { + description: "test scope", + enum: { + cli: { + description: "CLI", + }, + core: { + description: "CORE", + }, + lint: {}, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("scope")?.enumList; + expect(enumList).toHaveLength(3); + expect(enumList).toEqual([ + { + name: expect.stringMatching(/cli:[\s]*CLI/), + value: "cli", + short: "cli", + }, + { + name: expect.stringMatching(/core:[\s]*CORE/), + value: "core", + short: "core", + }, + "lint", + ]); + }); + + test("should enumList item padding format with 4 blank", () => { + const LONGEST = 12; + const longestItem = "".padEnd(LONGEST, "x"); + const enumRuleList = ["cli", "core", longestItem]; + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always", enumRuleList], + } as any); + + setPromptConfig({ + questions: { + scope: { + description: "test scope", + enum: { + cli: { + description: "Test CLI", + }, + core: { + description: "Test CORE", + }, + [longestItem]: { + description: "Test", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("scope")?.enumList; + expect(enumList).toHaveLength(3); + expect(enumList).toEqual([ + { + name: expect.stringMatching( + new RegExp(`^cli:[\\s]{${LONGEST - 4 + 4}}Test CLI$`), + ), + value: "cli", + short: "cli", + }, + { + name: expect.stringMatching( + new RegExp(`^core:[\\s]{${LONGEST - 5 + 4}}Test CORE$`), + ), + value: "core", + short: "core", + }, + { + name: expect.stringMatching( + new RegExp(`^${longestItem}:[\\s]{${-1 + 4}}Test$`), + ), + value: longestItem, + short: longestItem, + }, + ]); + }); + + test("should enumList item sorted by 'enum' config order", () => { + const ENUM_RULE_LIST = ["cli", "core", "lint"]; + setRules({ + "scope-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + scope: { + description: "test scope", + enum: { + core: {}, + lint: {}, + cli: {}, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("scope")?.enumList; + expect(enumList).toHaveLength(3); + expect(enumList?.[0]).toBe("core"); + expect(enumList?.[1]).toBe("lint"); + expect(enumList?.[2]).toBe("cli"); + }); + + test("should format enum items with emojis and descriptions, ensuring consistent spacing", () => { + const ENUM_RULE_LIST = ["feat", "fix", "chore"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + enum: { + feat: { + description: "Features", + emoji: "✨", + }, + fix: { + description: "Bug fixes", + emoji: "🐛", + }, + chore: { + description: "Chore", + emoji: "♻️", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "✨ feat: Features", + value: "feat", + short: "feat", + }, + { + name: "🐛 fix: Bug fixes", + value: "fix", + short: "fix", + }, + { + name: "♻️ chore: Chore", + value: "chore", + short: "chore", + }, + ]); + }); + + test("should handle custom alignment for emoji and description with extra space", () => { + const ENUM_RULE_LIST = ["feat", "fix", "chore"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + enum: { + feat: { + description: "Features", + emoji: "✨ ", + }, + fix: { + description: "Bug fixes", + emoji: "🐛 ", + }, + chore: { + description: "Chore", + emoji: "♻️ ", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "✨ feat: Features", + value: "feat", + short: "feat", + }, + { + name: "🐛 fix: Bug fixes", + value: "fix", + short: "fix", + }, + { + name: "♻️ chore: Chore", + value: "chore", + short: "chore", + }, + ]); + }); + + test("should handle inconsistent emoji usage by using 4 blank spaces as a prefix", () => { + const ENUM_RULE_LIST = ["feat", "fix", "chore"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + enum: { + feat: { + description: "Features", + emoji: "✨", + }, + fix: { + description: "Bug fixes", + }, + chore: { + description: "Chore", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "✨ feat: Features", + value: "feat", + short: "feat", + }, + { + name: " fix: Bug fixes", + value: "fix", + short: "fix", + }, + { + name: " chore: Chore", + value: "chore", + short: "chore", + }, + ]); + }); + + test("should handle no enums having emojis correctly", () => { + const ENUM_RULE_LIST = ["feat", "fix", "chore"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + enum: { + feat: { + description: "Features", + }, + fix: { + description: "Bug fixes", + }, + chore: { + description: "Chore", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "feat: Features", + value: "feat", + short: "feat", + }, + { + name: "fix: Bug fixes", + value: "fix", + short: "fix", + }, + { + name: "chore: Chore", + value: "chore", + short: "chore", + }, + ]); + }); + + test("should include the emoji in the value when `emojiInHeader` is true", () => { + const ENUM_RULE_LIST = ["feat", "fix"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + emojiInHeader: true, + enum: { + feat: { + description: "Features", + emoji: "✨", + }, + fix: { + description: "Bug fixes", + emoji: "🐛", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "✨ feat: Features", + value: "✨ feat", + short: "feat", + }, + { + name: "🐛 fix: Bug fixes", + value: "🐛 fix", + short: "fix", + }, + ]); + }); + + test("should trim empty spaces from emoji in the answer", () => { + const ENUM_RULE_LIST = ["feat", "fix", "chore"]; + setRules({ + "type-enum": [RuleConfigSeverity.Error, "always", ENUM_RULE_LIST], + } as any); + + setPromptConfig({ + questions: { + type: { + emojiInHeader: true, + enum: { + feat: { + description: "Features", + emoji: "✨ ", + }, + fix: { + description: "Bug fixes", + emoji: "🐛 ", + }, + chore: { + description: "Chore", + emoji: "♻️ ", + }, + }, + }, + }, + }); + + const enumList = getRuleQuestionConfig("type")?.enumList; + expect(enumList).toEqual([ + { + name: "✨ feat: Features", + value: "✨ feat", + short: "feat", + }, + { + name: "🐛 fix: Bug fixes", + value: "🐛 fix", + short: "fix", + }, + { + name: "♻️ chore: Chore", + value: "♻️ chore", + short: "chore", + }, + ]); + }); +}); + +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"]], + } 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", + }; + setPromptConfig({ + messages: MESSAGES, + questions: { + body: { + description: "please input body: (Test)", + }, + scope: { + description: "please choose the scope: (Test)", + enum: { + core: { + description: "CORE", + }, + lint: { + description: "LINT", + }, + cli: { + description: "CLI", + }, + }, + }, + }, + }); + + const scopeQuestionConfig = getRuleQuestionConfig("scope"); + expect(scopeQuestionConfig).toEqual({ + skip: true, + title: "please choose the scope: (Test)", + messages: MESSAGES, + minLength: 0, + maxLength: Infinity, + enumList: [ + { + name: "core: CORE", + value: "core", + short: "core", + }, + { + name: "lint: LINT", + value: "lint", + short: "lint", + }, + { + 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"); + + const bodyQuestionConfig = getRuleQuestionConfig("body"); + expect(bodyQuestionConfig).toEqual({ + skip: false, + title: "please input body: (Test)", + messages: MESSAGES, + minLength: 10, + maxLength: 100, + enumList: undefined, + caseFn: expect.any(Function), + fullStopFn: expect.any(Function), + }); + 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 new file mode 100644 index 0000000000..50ee8a1907 --- /dev/null +++ b/@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts @@ -0,0 +1,92 @@ +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, + getMaxLength, + getMinLength, + ruleIsActive, + ruleIsApplicable, + ruleIsDisabled, +} from "../utils/rules.js"; + +export default function (rulePrefix: RuleField): QuestionConfig | null { + const questions = getPromptQuestions(); + const questionSettings = questions[rulePrefix]; + const emptyRule = getRule(rulePrefix, "empty"); + + const mustBeEmpty = + emptyRule && ruleIsActive(emptyRule) && ruleIsApplicable(emptyRule); + + if (mustBeEmpty) { + return null; + } + + const canBeSkip = !emptyRule || ruleIsDisabled(emptyRule); + + const enumRule = getRule(rulePrefix, "enum"); + const enumRuleList = + enumRule && enumRuleIsActive(enumRule) ? getEnumList(enumRule) : null; + let enumList; + + if (enumRuleList) { + const enumDescriptions = questionSettings?.["enum"]; + const emojiInHeader = questionSettings?.emojiInHeader; + + if (enumDescriptions) { + const enumNames = Object.keys(enumDescriptions); + const longest = Math.max( + ...enumRuleList.map((enumName) => enumName.length), + ); + const firstHasEmoji = + (enumDescriptions[enumNames[0]]?.emoji?.length ?? 0) > 0; + const hasConsistentEmojiUsage = !enumRuleList.some( + (enumName) => + (enumDescriptions[enumName]?.emoji?.length ?? 0) > 0 !== + firstHasEmoji, + ); + enumList = enumRuleList + .sort((a, b) => enumNames.indexOf(a) - enumNames.indexOf(b)) + .map((enumName) => { + const enumDescription = enumDescriptions[enumName]?.description; + if (enumDescription) { + const emoji = enumDescriptions[enumName]?.emoji; + + const emojiPrefix = emoji + ? `${emoji} ` + : hasConsistentEmojiUsage + ? "" + : " "; + + const paddedName = `${enumName}:`.padEnd(longest + 4); + + const name = `${emojiPrefix}${paddedName}${enumDescription}`; + + const value = + emojiInHeader && emoji ? `${emoji.trim()} ${enumName}` : enumName; + + return { name, value, short: enumName }; + } else { + return enumName; + } + }); + } else { + enumList = [...enumRuleList]; + } + } + + 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")), + messages: getPromptMessages(), + }; +} diff --git a/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts b/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts new file mode 100644 index 0000000000..650b3762d8 --- /dev/null +++ b/@commitlint/cz-commitlint/src/store/defaultPromptConfigs.ts @@ -0,0 +1,33 @@ +export default { + settings: { + 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", + }, + questions: { + type: { + description: "<type> holds information about the goal of a change.", + }, + scope: { + description: + "<scope> marks which sub-component of the project is affected", + }, + subject: { + description: "<subject> is a short, high-level description of the change", + }, + body: { + description: "<body> holds additional information about the change", + }, + footer: { + description: + "<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 new file mode 100644 index 0000000000..9d378b4ed5 --- /dev/null +++ b/@commitlint/cz-commitlint/src/store/prompts.test.ts @@ -0,0 +1,144 @@ +import { describe, test, expect, vi, beforeEach } from "vitest"; +import * as prompts from "./prompts.js"; + +let getPromptQuestions: typeof prompts.getPromptQuestions; +let getPromptMessages: typeof prompts.getPromptMessages; +let getPromptSettings: typeof prompts.getPromptSettings; +let setPromptConfig: typeof prompts.setPromptConfig; + +beforeEach(async () => { + vi.resetModules(); + ({ + getPromptQuestions, + getPromptMessages, + getPromptSettings, + setPromptConfig, + } = await import("./prompts.js")); +}); + +describe("setPromptConfig", () => { + test("should cover questions when prompt config questions is plain object", () => { + const promptConfig = { + questions: { + type: { + description: "input type", + }, + }, + }; + setPromptConfig(promptConfig); + expect(getPromptQuestions()).toBe(promptConfig.questions); + }); + + 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", + } as any); + expect(getPromptQuestions()).toEqual(initialQuestions); + + setPromptConfig({ + questions: [1, 2, 3], + } as any); + expect(getPromptQuestions()).toEqual(initialQuestions); + }); + + test("should merge message when prompt config message is string", () => { + const initialMessages = { ...getPromptMessages() }; + const promptConfig = { + messages: { + emptyWarning: "(%s can not be empty)", + }, + }; + setPromptConfig(promptConfig); + + expect(getPromptMessages()["emptyWarning"]).toBe( + promptConfig.messages.emptyWarning, + ); + expect(getPromptMessages()["lowerLimitWarning"]).toBe( + initialMessages["lowerLimitWarning"], + ); + }); + + 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)", + min: function () { + return "min:"; + }, + }, + }; + setPromptConfig(promptConfig as any); + + expect(getPromptMessages()["emptyWarning"]).toBe( + promptConfig.messages.emptyWarning, + ); + expect(getPromptMessages()["min"]).toBe(initialMessages["min"]); + }); + + test("should ignore non-essential message", () => { + const initialMessages = { ...getPromptMessages() }; + const promptConfig = { + messages: { + more: "learn more", + }, + }; + setPromptConfig(promptConfig); + expect(getPromptMessages()).toEqual(initialMessages); + }); + + test("should fields be independent", () => { + const initialQuestions = { ...getPromptQuestions() }; + setPromptConfig({ + messages: { + emptyWarning: "(%s can not be empty)", + }, + }); + expect(getPromptQuestions()).toEqual(initialQuestions); + + const initialMessages = { ...getPromptMessages() }; + setPromptConfig({ + questions: { + type: { + description: "input type", + }, + }, + }); + expect(getPromptMessages()).toEqual(initialMessages); + }); + + test('should settings scopeEnumSeparator be set when value is ",\\/"', () => { + setPromptConfig({ + settings: { + scopeEnumSeparator: "/", + }, + }); + expect(getPromptSettings()["scopeEnumSeparator"]).toEqual("/"); + + const processExit = vi + .spyOn(process, "exit") + .mockImplementation(() => undefined as never); + setPromptConfig({ + settings: { + scopeEnumSeparator: "-", + }, + }); + expect(processExit).toHaveBeenCalledWith(1); + processExit.mockClear(); + }); + + test("should pass on settings", () => { + setPromptConfig({ + settings: { + enableMultipleScopes: true, + }, + }); + expect(getPromptSettings()["enableMultipleScopes"]).toEqual(true); + }); +}); diff --git a/@commitlint/cz-commitlint/src/store/prompts.ts b/@commitlint/cz-commitlint/src/store/prompts.ts new file mode 100644 index 0000000000..dfa1846833 --- /dev/null +++ b/@commitlint/cz-commitlint/src/store/prompts.ts @@ -0,0 +1,57 @@ +import type { PromptConfig, UserPromptConfig } from "@commitlint/types"; +import isPlainObject from "lodash.isplainobject"; + +import defaultPromptConfigs from "./defaultPromptConfigs.js"; + +const storeKey = Symbol("promptConfig"); + +const store: { + [storeKey]: PromptConfig; +} = { + [storeKey]: defaultPromptConfigs, +}; + +export function setPromptConfig(newPromptConfig: UserPromptConfig): void { + 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 (questions && isPlainObject(questions)) { + store[storeKey]["questions"] = questions; + } + + if (settings && isPlainObject(settings)) { + if ( + settings["scopeEnumSeparator"] && + !/^\/|\\|,$/.test(settings["scopeEnumSeparator"]) + ) { + console.log( + `prompt.settings.scopeEnumSeparator must be one of ',', '\\', '/'.`, + ); + process.exit(1); + } + store[storeKey]["settings"] = { + ...defaultPromptConfigs.settings, + ...settings, + }; + } +} + +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 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 new file mode 100644 index 0000000000..373dd6f101 --- /dev/null +++ b/@commitlint/cz-commitlint/src/store/rules.test.ts @@ -0,0 +1,70 @@ +import { describe, test, expect, vi, beforeEach } from "vitest"; +import { QualifiedRules, RuleConfigSeverity } from "@commitlint/types"; + +import { GetRuleMethod, SetRulesMethod } from "./rules.js"; + +let getRule: GetRuleMethod; +let setRules: SetRulesMethod; + +beforeEach(async () => { + vi.resetModules(); + ({ getRule, setRules } = await import("./rules.js")); +}); + +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"], + }; + 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("subject", "empty")).toBe(rules["subject-empty"]); + }); + + test("should not get rule when prefix is invalid", () => { + const rules: QualifiedRules = { + "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(); + }); + + 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"], + }; + setRules(rules); + + 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(); + + let rules: QualifiedRules = { + "body-max-length": [RuleConfigSeverity.Error, "always", 100], + }; + setRules(rules); + expect(getRule("body", "max-length")).toBe(rules["body-max-length"]); + + rules = { + "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"]); + }); +}); diff --git a/@commitlint/cz-commitlint/src/store/rules.ts b/@commitlint/cz-commitlint/src/store/rules.ts new file mode 100644 index 0000000000..661d4e0ebd --- /dev/null +++ b/@commitlint/cz-commitlint/src/store/rules.ts @@ -0,0 +1,25 @@ +import { QualifiedRules } from "@commitlint/types"; + +import type { Rule } from "../types.js"; + +const storeKey = Symbol("rules"); + +const store: { + [storeKey]: QualifiedRules; +} = { + [storeKey]: {}, +}; + +export function getRule(key: string, property: string): Rule | undefined { + if (key.split("-").length > 1) { + return; + } + return store[storeKey][`${key}-${property}`]; +} + +export function setRules(newRules: QualifiedRules): void { + store[storeKey] = newRules; +} + +export type GetRuleMethod = typeof getRule; +export type SetRulesMethod = typeof setRules; diff --git a/@commitlint/cz-commitlint/src/types.ts b/@commitlint/cz-commitlint/src/types.ts new file mode 100644 index 0000000000..b0c2d2c528 --- /dev/null +++ b/@commitlint/cz-commitlint/src/types.ts @@ -0,0 +1,6 @@ +import { RuleConfigCondition, RuleConfigSeverity } from "@commitlint/types"; + +export type Rule = + | Readonly<[RuleConfigSeverity.Disabled]> + | Readonly<[RuleConfigSeverity, RuleConfigCondition]> + | Readonly<[RuleConfigSeverity, RuleConfigCondition, unknown]>; diff --git a/@commitlint/cz-commitlint/src/utils/case-fn.test.ts b/@commitlint/cz-commitlint/src/utils/case-fn.test.ts new file mode 100644 index 0000000000..a1c0a44f33 --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/case-fn.test.ts @@ -0,0 +1,93 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import getCaseFn from "./case-fn.js"; + +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"); + + 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"); +}); + +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"'); +}); + +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", "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", "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", "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", "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", "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", () => { + const rule = getCaseFn([ + 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("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 new file mode 100644 index 0000000000..81723af7ca --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/case-fn.ts @@ -0,0 +1,44 @@ +import { case as ensureCase, toCase } from "@commitlint/ensure"; +import { TargetCaseType } from "@commitlint/types"; + +import { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; + +export type CaseFn = (input: string | string[], delimiter?: string) => string; + +/** + * Get forced case for rule + * @param rule to parse + * @return transform function applying the enforced case + */ +export default function getCaseFn(rule?: Rule): CaseFn { + const noop = (input: string | string[], delimiter?: string) => + Array.isArray(input) ? input.join(delimiter) : input; + + if (!rule || !ruleIsActive(rule) || ruleIsNotApplicable(rule)) { + return noop; + } + + const value = rule[2]; + + const caseList = Array.isArray(value) ? value : [value]; + + return (input: string | string[], delimiter?: string) => { + let matchedCase: TargetCaseType = caseList[0]; + const segments = Array.isArray(input) ? input : [input]; + + for (const segment of segments) { + const check = caseList.find((a) => ensureCase(segment, a)); + if (check) { + matchedCase = check; + break; + } + } + + return segments + .map((segment) => { + return toCase(segment, matchedCase); + }) + .join(delimiter); + }; +} diff --git a/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts b/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts new file mode 100644 index 0000000000..418af8af35 --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/full-stop-fn.test.ts @@ -0,0 +1,69 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import getFullStopFn from "./full-stop-fn.js"; + +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(""); + + rule = getFullStopFn(); + 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, "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("."); + + 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"); + + 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 new file mode 100644 index 0000000000..659a15e915 --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/full-stop-fn.ts @@ -0,0 +1,34 @@ +import { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; + +export type FullStopFn = (input: string) => string; + +/** + * Get forced case for rule + * @param rule to parse + * @return transform function applying the enforced case + */ +export default function getFullStopFn(rule?: Rule): FullStopFn { + const noop = (_: string) => _; + + if (!rule || !ruleIsActive(rule)) { + return noop; + } + + if (typeof rule[2] !== "string") return noop; + + const symbol: string = rule[2]; + + if (ruleIsNotApplicable(rule)) { + return (input: string) => { + while (input.length > 0 && input.endsWith(symbol)) { + input = input.slice(0, input.length - 1); + } + return input; + }; + } else { + return (input: string) => { + return !input.endsWith(symbol) ? input + symbol : input; + }; + } +} diff --git a/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts new file mode 100644 index 0000000000..c82893859c --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.test.ts @@ -0,0 +1,39 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import getLeadingBlankFn from "./leading-blank-fn.js"; + +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(""); + + rule = getLeadingBlankFn(); + 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 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 new file mode 100644 index 0000000000..9400b8c1ed --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/leading-blank-fn.ts @@ -0,0 +1,29 @@ +import type { Rule } from "../types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./rules.js"; + +/** + * Get forced leading for rule + * @param rule to parse + * @return transform function applying the leading + */ +export default function getLeadingBlankFn( + 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] === "") { + fragments.shift(); + } + return fragments.join("\n"); + }; + const lead = (input: string): string => { + 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 new file mode 100644 index 0000000000..4c9855078c --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/rules.test.ts @@ -0,0 +1,127 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import { + enumRuleIsActive, + getEnumList, + getMaxLength, + getMinLength, + ruleIsActive, + ruleIsApplicable, + ruleIsDisabled, + ruleIsNotApplicable, +} from "./rules.js"; + +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.Error] 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); + 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); + expect(ruleIsApplicable(undefined as any)).toBe(false); + expect(ruleIsApplicable("" as any)).toBe(false); + expect(ruleIsApplicable([RuleConfigSeverity.Disabled])).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, + ); + expect(ruleIsNotApplicable(undefined 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, + ); +}); + +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], + }; + let lengthRule = rules["header-max-length"]; + expect(getMaxLength(lengthRule)).toBe(100); + + lengthRule = rules["body-max-line-length"]; + expect(getMaxLength(lengthRule)).toBe(100); + + lengthRule = rules["body-max-length"]; + expect(getMaxLength(lengthRule)).toBe(Infinity); + + 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); + 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], + }; + let lengthRule = rules["header-min-length"]; + expect(getMinLength(lengthRule)).toBe(0); + + lengthRule = rules["body-min-length"]; + expect(getMinLength(lengthRule)).toBe(10); + + lengthRule = rules["test-min-length"]; + expect(getMinLength(lengthRule)).toBe(0); +}); + +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"]], + }; + + 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", () => { + const rules: any = { + "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([]); +}); diff --git a/@commitlint/cz-commitlint/src/utils/rules.ts b/@commitlint/cz-commitlint/src/utils/rules.ts new file mode 100644 index 0000000000..d2570cd392 --- /dev/null +++ b/@commitlint/cz-commitlint/src/utils/rules.ts @@ -0,0 +1,98 @@ +import { RuleConfigSeverity } from "@commitlint/types"; +import type { Rule } from "../types.js"; + +export function ruleIsDisabled( + rule: Rule, +): rule is Readonly<[RuleConfigSeverity.Disabled]> { + if (rule && Array.isArray(rule) && rule[0] === RuleConfigSeverity.Disabled) { + return true; + } + return false; +} + +/** + * Check if a rule definition is active + * @param rule to check + * @return if the rule definition is active + */ +export function ruleIsActive<T extends Rule>( + rule: T, +): rule is Exclude<T, Readonly<[RuleConfigSeverity.Disabled]>> { + if (rule && Array.isArray(rule)) { + return rule[0] > RuleConfigSeverity.Disabled; + } + return false; +} + +/** + * Check if a rule definition is applicable + * @param rule to check + * @return if the rule definition is applicable + */ +export function ruleIsApplicable( + rule: Rule, +): rule is + | Readonly<[RuleConfigSeverity, "always"]> + | Readonly<[RuleConfigSeverity, "always", unknown]> { + if (rule && Array.isArray(rule)) { + return rule[1] === "always"; + } + return false; +} + +/** + * Check if a rule definition is applicable + * @param rule to check + * @return if the rule definition is applicable + */ +export function ruleIsNotApplicable( + rule: Rule, +): rule is + | Readonly<[RuleConfigSeverity, "never"]> + | Readonly<[RuleConfigSeverity, "never", unknown]> { + if (rule && Array.isArray(rule)) { + return rule[1] === "never"; + } + return false; +} + +export function enumRuleIsActive( + rule: Rule, +): rule is Readonly< + [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, "always", string[]] +> { + return ( + ruleIsActive(rule) && + ruleIsApplicable(rule) && + Array.isArray(rule[2]) && + rule[2].length > 0 + ); +} + +export function getEnumList(rule: Rule): string[] { + return Array.isArray(rule[2]) ? rule[2] : []; +} + +export function getMaxLength(rule?: Rule): number { + if ( + rule && + ruleIsActive(rule) && + ruleIsApplicable(rule) && + typeof rule[2] === "number" + ) { + return rule[2]; + } + return Infinity; +} + +export function getMinLength(rule?: Rule): number { + if ( + rule && + ruleIsActive(rule) && + ruleIsApplicable(rule) && + typeof rule[2] === "number" + ) { + return rule[2]; + } + return 0; +} diff --git a/@commitlint/cz-commitlint/tsconfig.json b/@commitlint/cz-commitlint/tsconfig.json new file mode 100644 index 0000000000..47e6ae4531 --- /dev/null +++ b/@commitlint/cz-commitlint/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./src/**/*-test.ts", "./lib/**/*"], + "references": [{ "path": "../cli" }] +} diff --git a/@commitlint/ensure/CHANGELOG.md b/@commitlint/ensure/CHANGELOG.md index 04b3f6dc92..611e79b829 100644 --- a/@commitlint/ensure/CHANGELOG.md +++ b/@commitlint/ensure/CHANGELOG.md @@ -3,7 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + + +* feat(rules)!: make body-max-line-length ignore lines with URLs (#4486) ([2f37a88](https://github.com/conventional-changelog/commitlint/commit/2f37a886be4b07bcd8e1126cc6a13256e7b6cc37)), closes [#4486](https://github.com/conventional-changelog/commitlint/issues/4486) + + +### BREAKING CHANGES + +* when lines contain URLs exceeding the maximum +line length `body-max-line-length` will be ignored + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/ensure @@ -11,7 +26,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +# [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,7 +45,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +## [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 @@ -27,127 +53,398 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -### Bug Fixes +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -* failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) +### Reverts +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) +### BREAKING CHANGES -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +* migrate to pure ESM +* feat: migrate to pure ESM -### Bug Fixes +* chore: update snapshot -* `sentence-case` allow upper-case characters in first word ([#531](https://github.com/conventional-changelog/commitlint/issues/531)) ([5a6a4a8](https://github.com/conventional-changelog/commitlint/commit/5a6a4a8)), closes [#211](https://github.com/conventional-changelog/commitlint/issues/211) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* slash in scope [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([#529](https://github.com/conventional-changelog/commitlint/issues/529)) ([b2b63e5](https://github.com/conventional-changelog/commitlint/commit/b2b63e5)) +* fix: load `parserPreset` with another `await` +* test: migrate to vitest +* test: remove no replacement `--runInBand` test-ci script +* chore: fix code reviews -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/ensure -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Bug Fixes -* fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/ensure -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) -### Bug Fixes +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) -* handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) +**Note:** Version bump only for package @commitlint/ensure -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/ensure + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) **Note:** Version bump only for package @commitlint/ensure -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) -### Features -* add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/ensure -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/ensure + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/ensure + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/ensure + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/ensure + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/ensure + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/ensure + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/ensure + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/ensure + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/ensure + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/ensure + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/ensure + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/ensure + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/ensure + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/ensure + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/ensure + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/ensure + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/ensure + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/ensure + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/ensure + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/ensure + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/ensure + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/ensure + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + ### Bug Fixes -* **ensure:** ignore word delimiters for case matching [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([fa69299](https://github.com/conventional-changelog/commitlint/commit/fa69299)) +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +**Note:** Version bump only for package @commitlint/ensure +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +**Note:** Version bump only for package @commitlint/ensure +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/ensure +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) **Note:** Version bump only for package @commitlint/ensure -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +**Note:** Version bump only for package @commitlint/ensure +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +### Bug Fixes + +- failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- `sentence-case` allow upper-case characters in first word ([#531](https://github.com/conventional-changelog/commitlint/issues/531)) ([5a6a4a8](https://github.com/conventional-changelog/commitlint/commit/5a6a4a8)), closes [#211](https://github.com/conventional-changelog/commitlint/issues/211) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- slash in scope [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([#529](https://github.com/conventional-changelog/commitlint/issues/529)) ([b2b63e5](https://github.com/conventional-changelog/commitlint/commit/b2b63e5)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/ensure -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +### Bug Fixes + +- handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) **Note:** Version bump only for package @commitlint/ensure -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +### Features + +- add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +### Bug Fixes + +- **ensure:** ignore word delimiters for case matching [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([fa69299](https://github.com/conventional-changelog/commitlint/commit/fa69299)) + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/ensure + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/ensure + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +**Note:** Version bump only for package @commitlint/ensure +<a name="6.0.2"></a> +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) **Note:** Version bump only for package @commitlint/ensure <a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) ### Bug Fixes -* sanitize ensure.case [#211](https://github.com/conventional-changelog/commitlint/issues/211) ([#217](https://github.com/conventional-changelog/commitlint/issues/217)) ([03aeefc](https://github.com/conventional-changelog/commitlint/commit/03aeefc)) +- sanitize ensure.case [#211](https://github.com/conventional-changelog/commitlint/issues/211) ([#217](https://github.com/conventional-changelog/commitlint/issues/217)) ([03aeefc](https://github.com/conventional-changelog/commitlint/commit/03aeefc)) diff --git a/@commitlint/ensure/jest.config.js b/@commitlint/ensure/jest.config.js deleted file mode 100644 index 20d2ea60f5..0000000000 --- a/@commitlint/ensure/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node' -}; diff --git a/@commitlint/ensure/package.json b/@commitlint/ensure/package.json index f2b31370b1..5b439abef3 100644 --- a/@commitlint/ensure/package.json +++ b/@commitlint/ensure/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/ensure", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/ensure" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,10 +36,21 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^8.2.0", - "globby": "10.0.1" + "@commitlint/utils": "^20.0.0", + "@types/lodash.camelcase": "^4.3.8", + "@types/lodash.kebabcase": "^4.1.8", + "@types/lodash.snakecase": "^4.1.8", + "@types/lodash.startcase": "^4.4.8", + "@types/lodash.upperfirst": "^4.3.8", + "glob": "^10.3.10" }, "dependencies": { - "lodash": "4.17.15" - } + "@commitlint/types": "^20.0.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": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/ensure/src/case.test.ts b/@commitlint/ensure/src/case.test.ts index dcb3fc5afc..d812da8bf4 100644 --- a/@commitlint/ensure/src/case.test.ts +++ b/@commitlint/ensure/src/case.test.ts @@ -1,338 +1,340 @@ -import ensure from './case'; +import { test, expect } from "vitest"; -test('true for no params', () => { +import ensure from "./case.js"; + +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); - expect(actualFn).toThrowError(TypeError); +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 909e73aa68..710f7e79b8 100644 --- a/@commitlint/ensure/src/case.ts +++ b/@commitlint/ensure/src/case.ts @@ -1,63 +1,24 @@ -import * as _ from 'lodash'; +import type { TargetCaseType } from "@commitlint/types"; -export default ensureCase; +import toCase from "./to-case.js"; -type TargetCaseType = - | 'camel-case' - | 'kebab-case' - | 'snake-case' - | 'pascal-case' - | 'start-case' - | 'upper-case' - | 'uppercase' - | 'sentence-case' - | 'sentencecase' - | 'lower-case' - | 'lowercase' - | 'lowerCase'; +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; } return transformed === input; } - -function toCase(input: string, target: TargetCaseType): string { - switch (target) { - case 'camel-case': - return _.camelCase(input); - case 'kebab-case': - return _.kebabCase(input); - case 'snake-case': - return _.snakeCase(input); - case 'pascal-case': - return _.upperFirst(_.camelCase(input)); - case 'start-case': - return _.startCase(input); - case 'upper-case': - case 'uppercase': - return input.toUpperCase(); - case 'sentence-case': - case 'sentencecase': - return input.charAt(0).toUpperCase() + input.slice(1); - case 'lower-case': - case 'lowercase': - case 'lowerCase': // Backwards compat config-angular v4 - return input.toLowerCase(); - default: - throw new TypeError(`ensure-case: Unknown target case "${target}"`); - } -} diff --git a/@commitlint/ensure/src/enum.test.ts b/@commitlint/ensure/src/enum.test.ts index a885e5ddc4..817f2ce072 100644 --- a/@commitlint/ensure/src/enum.test.ts +++ b/@commitlint/ensure/src/enum.test.ts @@ -1,42 +1,48 @@ -// import testAva from 'ava'; -import ensure from './enum'; +import { test, expect } from "vitest"; -test('false for no params', () => { +import ensure from "./enum.js"; + +test("false for no params", () => { const actual = (ensure as () => boolean)(); expect(actual).toBe(false); }); -test('true for a against a', () => { - const actual = ensure('a', ['a']); +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"]); 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 6af8313723..b58bb64adc 100644 --- a/@commitlint/ensure/src/index.test.ts +++ b/@commitlint/ensure/src/index.test.ts @@ -1,23 +1,33 @@ -import path from 'path'; -import globby from 'globby'; -import {camelCase, values} from 'lodash'; -import * as ensure from '.'; +import { test, expect } from "vitest"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -test('exports all checkers', async () => { - const expected = (await glob('*.ts')).map(f => camelCase(f)).sort(); +import { globSync } from "glob"; +import camelCase from "lodash.camelcase"; + +import * as ensure from "./index.js"; + +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); + +test("exports all checkers", async () => { + const ignore = ["types"]; + const expected = _glob("*.ts") + .map((f) => camelCase(f)) + .sort() + .filter((item) => !ignore.includes(item)); const actual = Object.keys(ensure).sort(); expect(actual).toEqual(expected); }); -test('rules export functions', () => { - const actual = values(ensure); - expect(actual.every(rule => typeof rule === 'function')).toBe(true); +test("rules export functions", () => { + const actual = Object.values(ensure); + expect(actual.every((rule) => typeof rule === "function")).toBe(true); }); -async function glob(pattern: string): Promise<string[]> { - const files = await globby([path.join(__dirname, pattern)], { - ignore: ['**/index.ts', '**/*.test.ts'], - cwd: __dirname +function _glob(pattern: string): string[] { + const files = globSync(pattern, { + 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 982e128525..0590b145a3 100644 --- a/@commitlint/ensure/src/index.ts +++ b/@commitlint/ensure/src/index.ts @@ -1,10 +1,11 @@ -import ensureCase from './case'; -import ensureEnum from './enum'; -import maxLength from './max-length'; -import maxLineLength from './max-line-length'; -import minLength from './min-length'; -import notEmpty from './not-empty'; +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}; +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 bce186b3bb..c18af918e8 100644 --- a/@commitlint/ensure/src/max-length.test.ts +++ b/@commitlint/ensure/src/max-length.test.ts @@ -1,26 +1,28 @@ -import ensure from './max-length'; +import { test, expect } from "vitest"; -test('false for no params', () => { +import ensure from "./max-length.js"; + +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 dd7a65eb9b..2c78246b8a 100644 --- a/@commitlint/ensure/src/max-length.ts +++ b/@commitlint/ensure/src/max-length.ts @@ -1,2 +1,2 @@ -export default (value: string, max: number): boolean => - typeof value === 'string' && value.length <= max; +export default (value: string | null, max: number): boolean => + 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 b852599660..8755824abd 100644 --- a/@commitlint/ensure/src/max-line-length.test.ts +++ b/@commitlint/ensure/src/max-line-length.test.ts @@ -1,47 +1,49 @@ -import ensure from './max-line-length'; +import { test, expect } from "vitest"; -test('false for no params', () => { +import ensure from "./max-line-length.js"; + +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 6132b3daa6..b25a2b6d1e 100644 --- a/@commitlint/ensure/src/max-line-length.ts +++ b/@commitlint/ensure/src/max-line-length.ts @@ -1,5 +1,13 @@ -import ensure from './max-length'; +import ensure from "./max-length.js"; + +// Allow an exception for long lines which contain URLs. +// +// This is overly lenient, in order to avoid costly regexps which +// have to worry about all the many edge cases of valid URLs. +const URL_REGEX = /\bhttps?:\/\/\S+/; export default (value: string, max: number): boolean => - typeof value === 'string' && - value.split(/\r?\n/).every(line => ensure(line, max)); + typeof value === "string" && + value + .split(/\r?\n/) + .every((line) => URL_REGEX.test(line) || ensure(line, max)); diff --git a/@commitlint/ensure/src/min-length.test.ts b/@commitlint/ensure/src/min-length.test.ts index 8a8fd605d8..a62395e3d1 100644 --- a/@commitlint/ensure/src/min-length.test.ts +++ b/@commitlint/ensure/src/min-length.test.ts @@ -1,26 +1,28 @@ -import ensure from './min-length'; +import { test, expect } from "vitest"; -test('false for no params', () => { +import ensure from "./min-length.js"; + +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 bc22ccb5d0..e7a8186bbb 100644 --- a/@commitlint/ensure/src/min-length.ts +++ b/@commitlint/ensure/src/min-length.ts @@ -1,2 +1,2 @@ -export default (value: string, min: number): boolean => - typeof value === 'string' && value.length >= min; +export default (value: string | null, min: number): boolean => + 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 027e66ecce..a0fa271b3d 100644 --- a/@commitlint/ensure/src/not-empty.test.ts +++ b/@commitlint/ensure/src/not-empty.test.ts @@ -1,16 +1,18 @@ -import ensure from './not-empty'; +import { test, expect } from "vitest"; -test('false for no params', () => { +import ensure from "./not-empty.js"; + +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 new file mode 100644 index 0000000000..df41e0033e --- /dev/null +++ b/@commitlint/ensure/src/to-case.ts @@ -0,0 +1,33 @@ +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": + return camelCase(input); + case "kebab-case": + return kebabCase(input); + case "snake-case": + return snakeCase(input); + case "pascal-case": + return upperFirst(camelCase(input)); + case "start-case": + return startCase(input); + case "upper-case": + case "uppercase": + return input.toUpperCase(); + case "sentence-case": + case "sentencecase": + return upperFirst(input); + 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 f4a57643f0..0cc393e13d 100644 --- a/@commitlint/ensure/tsconfig.json +++ b/@commitlint/ensure/tsconfig.json @@ -1,15 +1,11 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }] } diff --git a/@commitlint/execute-rule/CHANGELOG.md b/@commitlint/execute-rule/CHANGELOG.md index 4a6b0f6ad3..2e9d17a6c0 100644 --- a/@commitlint/execute-rule/CHANGELOG.md +++ b/@commitlint/execute-rule/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/execute-rule @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/execute-rule @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,85 +27,333 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/execute-rule -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/execute-rule -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/execute-rule + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/execute-rule + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/execute-rule +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +**Note:** Version bump only for package @commitlint/execute-rule + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/execute-rule + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/execute-rule + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/execute-rule + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/execute-rule + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/execute-rule + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/execute-rule diff --git a/@commitlint/execute-rule/jest.config.js b/@commitlint/execute-rule/jest.config.js deleted file mode 100644 index 20d2ea60f5..0000000000 --- a/@commitlint/execute-rule/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node' -}; diff --git a/@commitlint/execute-rule/package.json b/@commitlint/execute-rule/package.json index 63e18b3a41..507e533f1e 100644 --- a/@commitlint/execute-rule/package.json +++ b/@commitlint/execute-rule/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/execute-rule", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/execute-rule" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,11 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.2.0", - "@commitlint/utils": "^8.2.0", - "@types/jest": "24.0.18", - "@types/lodash": "4.14.140", - "jest": "24.8.0", - "ts-jest": "24.1.0" - } + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/execute-rule/src/index.test.ts b/@commitlint/execute-rule/src/index.test.ts index 2c9698de18..23a3259707 100644 --- a/@commitlint/execute-rule/src/index.test.ts +++ b/@commitlint/execute-rule/src/index.test.ts @@ -1,26 +1,28 @@ -import execute from '.'; +import { test, expect } from "vitest"; -test('does nothing without params', async () => { +import execute from "./index.js"; + +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 c0db79c7f0..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/execute-rule/tsconfig.json b/@commitlint/execute-rule/tsconfig.json index f4a57643f0..49479bf34f 100644 --- a/@commitlint/execute-rule/tsconfig.json +++ b/@commitlint/execute-rule/tsconfig.json @@ -1,15 +1,10 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] } diff --git a/@commitlint/format/CHANGELOG.md b/@commitlint/format/CHANGELOG.md index 8fe831e311..b809f3fa73 100644 --- a/@commitlint/format/CHANGELOG.md +++ b/@commitlint/format/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/format @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/format @@ -19,101 +19,398 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +# [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 -### Bug Fixes -* ensure format() is available as commonjs default export [#645](https://github.com/conventional-changelog/commitlint/issues/645) ([ec3da92](https://github.com/conventional-changelog/commitlint/commit/ec3da92)) +# [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 -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) -### Bug Fixes -* avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) +# [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)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +## [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 -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/format + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/format + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/format + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/format + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/format + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/format + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/format + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/format + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +### Features + +- extend helpUrl from shareable config ([#2846](https://github.com/conventional-changelog/commitlint/issues/2846)) ([d7e2e2b](https://github.com/conventional-changelog/commitlint/commit/d7e2e2b943be383f99f4000b6b6bed0eab03bfcf)) + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/format + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/format + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/format + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/format + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/format + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/format + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + ### Bug Fixes -* correction to need help link ([#540](https://github.com/conventional-changelog/commitlint/issues/540)) ([fa6168a](https://github.com/conventional-changelog/commitlint/commit/fa6168a)) +- **types:** correct chalkColor type ([#2420](https://github.com/conventional-changelog/commitlint/issues/2420)) ([ef8bdad](https://github.com/conventional-changelog/commitlint/commit/ef8bdad96c9ee7c3ad67f8280818c7f49c1df1fe)) + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +**Note:** Version bump only for package @commitlint/format +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) +**Note:** Version bump only for package @commitlint/format -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions +- docs: update node v10 to latest LTS 10 version +Co-authored-by: Cedric van Putten <me@bycedric.com> +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/format -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package @commitlint/format + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) ### Bug Fixes -* **format:** add new line to result ([#518](https://github.com/conventional-changelog/commitlint/issues/518)) ([f1d443b](https://github.com/conventional-changelog/commitlint/commit/f1d443b)), closes [#504](https://github.com/conventional-changelog/commitlint/issues/504) -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- update dependency chalk to v4 ([#1275](https://github.com/conventional-changelog/commitlint/issues/1275)) ([a5d8fa1](https://github.com/conventional-changelog/commitlint/commit/a5d8fa118e8221361f14f5fd2b21d7aaad008a27)) +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) +**Note:** Version bump only for package @commitlint/format +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +**Note:** Version bump only for package @commitlint/format +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +**Note:** Version bump only for package @commitlint/format +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) **Note:** Version bump only for package @commitlint/format -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/format + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/format + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +### Bug Fixes + +- ensure format() is available as commonjs default export [#645](https://github.com/conventional-changelog/commitlint/issues/645) ([ec3da92](https://github.com/conventional-changelog/commitlint/commit/ec3da92)) + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes + +- avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.4.0"></a> + +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +### Bug Fixes +- correction to need help link ([#540](https://github.com/conventional-changelog/commitlint/issues/540)) ([fa6168a](https://github.com/conventional-changelog/commitlint/commit/fa6168a)) +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/format -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- **format:** add new line to result ([#518](https://github.com/conventional-changelog/commitlint/issues/518)) ([f1d443b](https://github.com/conventional-changelog/commitlint/commit/f1d443b)), closes [#504](https://github.com/conventional-changelog/commitlint/issues/504) +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/format +<a name="7.2.0"></a> +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) **Note:** Version bump only for package @commitlint/format -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/format +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) **Note:** Version bump only for package @commitlint/format diff --git a/@commitlint/format/README.md b/@commitlint/format/README.md index bc1a398d9b..66de357636 100644 --- a/@commitlint/format/README.md +++ b/@commitlint/format/README.md @@ -1,63 +1,15 @@ -> Format commitlint reports - # @commitlint/format +Format commitlint reports + ## Getting started ```shell npm install --save @commitlint/format ``` -## Example - -```js -const format = require('@commitlint/format'); - -const output = format({ - valid: false, - errorCount: 1, - warningCount: 1, - results: [ - { - valid: false, - input: 'some: commit message', - errors: [ - { - valid: false, - level: 2, - name: 'some-error', - message: 'This will show up red as it has level 2' - } - ], - warnings: [ - { - valid: true, - level: 0, - name: 'some-hint', - message: 'This will not show up as it has level 0' - }, - { - valid: false, - level: 1, - name: 'some-warning', - message: 'This will show up yellow as it has level 1' - } - ] - } - ] -}, { - color: false -}); - -process.stdout.write(output); - -/* => [ - '✖ This will show up red as it has level 2 [some-error]', - ' This will not show up as it has level 0 [some-hint]', - '⚠ This will show up yellow as it has level 1 [some-warning]', - '✖ found 1 problems, 2 warnings' -] */ -``` +## Documentation -Consult [docs/api](https://conventional-changelog.github.io/commitlint/#/reference-api) for comprehensive documentation. +Consult [API docs](https://commitlint.js.org/api/format) for comprehensive documentation. +Documentation generated from [`docs` folder](../../docs/api/format.md). diff --git a/@commitlint/format/jest.config.js b/@commitlint/format/jest.config.js deleted file mode 100644 index 20d2ea60f5..0000000000 --- a/@commitlint/format/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node' -}; diff --git a/@commitlint/format/package.json b/@commitlint/format/package.json index dc353c2617..695428c758 100644 --- a/@commitlint/format/package.json +++ b/@commitlint/format/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/format", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Format commitlint reports", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check --skip-import" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/format" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,12 +36,11 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^8.2.0", - "@types/lodash": "4.14.140", - "lodash": "4.17.15", - "typescript": "3.5.3" + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "chalk": "^2.0.1" - } + "@commitlint/types": "^20.0.0", + "chalk": "^5.3.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/format/src/format.test.ts b/@commitlint/format/src/format.test.ts index 522dc9add0..3388e96afb 100644 --- a/@commitlint/format/src/format.test.ts +++ b/@commitlint/format/src/format.test.ts @@ -1,51 +1,76 @@ -import {format, formatResult} from '.'; +import { test, expect } from "vitest"; -test('does nothing without arguments', () => { +import { format, formatResult } from "./index.js"; + +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", () => { + const actual = format( + { + results: [ + { + errors: [], + warnings: [], + }, + ], + }, + { + verbose: true, + }, + ); + + expect(actual).toContain("0 problems, 0 warnings"); }); -test('returns empty summary if verbose', () => { +test("returns empty summary with full commit message if verbose", () => { const actual = format( { results: [ { errors: [], - warnings: [] - } - ] + warnings: [], + input: + "feat(cli): this is a valid header\n\nThis is a valid body\n\nSigned-off-by: tester", + }, + ], }, { - verbose: true - } + 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", + }, + ], + }, + ], }); const actualWarning = format({ @@ -54,33 +79,33 @@ 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", + }, + ], + }, + ], }); const actualWarning = format({ @@ -89,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: [ @@ -110,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( @@ -127,133 +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 - } + 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: [] + 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", () => { + const actual = formatResult( + { + warnings: [ + { + level: 2, + name: "warning-name", + message: "There was a warning", + }, + ], + }, + { + helpUrl: "", + }, + ); + + expect(actual).not.toEqual( + expect.arrayContaining([expect.stringContaining("Get help:")]), ); }); diff --git a/@commitlint/format/src/format.ts b/@commitlint/format/src/format.ts index 050c8fba63..8c43f74c64 100644 --- a/@commitlint/format/src/format.ts +++ b/@commitlint/format/src/format.ts @@ -1,72 +1,49 @@ -import chalk from 'chalk'; - -const DEFAULT_SIGNS = [' ', '⚠', '✖'] as const; -const DEFAULT_COLORS = ['white', 'yellow', 'red'] as const; - -export interface FormattableProblem { - level: 0 | 1 | 2; - name: string; - message: string; -} - -export interface FormattableResult { - errors?: FormattableProblem[]; - warnings?: FormattableProblem[]; -} - -export interface WithInput { - input?: string; -} - -export interface FormattableReport { - results?: (FormattableResult & WithInput)[]; -} - -export type ChalkColor = keyof typeof chalk; - -export interface FormatOptions { - color?: boolean; - signs?: readonly [string, string, string]; - colors?: readonly [ChalkColor, ChalkColor, ChalkColor]; - verbose?: boolean; - helpUrl?: string; -} +import chalk from "chalk"; +import { + ChalkColor, + FormattableReport, + FormatOptions, + FormattableResult, + WithInput, +} from "@commitlint/types"; + +const DEFAULT_SIGNS = [" ", "⚠", "✖"] as const; +const DEFAULT_COLORS = ["white", "yellow", "red"] as const; export function format( report: FormattableReport = {}, - options: FormatOptions = {} -) { - const {results = []} = report; + options: FormatOptions = {}, +): string { + const { results = [] } = report; const fi = (result: FormattableResult & WithInput) => formatInput(result, options); const fr = (result: FormattableResult) => formatResult(result, options); return results - .filter(r => Array.isArray(r.warnings) || Array.isArray(r.errors)) - .map(result => [...fi(result), ...fr(result)]) + .filter((r) => Array.isArray(r.warnings) || Array.isArray(r.errors)) + .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 @@ -76,19 +53,19 @@ function formatInput( export function formatResult( result: FormattableResult = {}, - options: FormatOptions = {} + options: FormatOptions = {}, ): string[] { const { signs = DEFAULT_SIGNS, colors = DEFAULT_COLORS, - color: enabled = true + 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 decoration = enabled ? ((chalk as any)[color] as any)(sign) : sign; + const problems = [...errors, ...warnings].map((problem) => { + 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}]`) : `[${problem.name}]`; @@ -98,7 +75,7 @@ export function formatResult( const sign = selectSign(result); const color = selectColor(result); - const deco = enabled ? (chalk[color] as any)(sign) : sign; + const deco = enabled ? chalk[color](sign) : sign; const el = errors.length; const wl = warnings.length; const hasProblems = problems.length > 0; @@ -109,31 +86,34 @@ 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 ? `ⓘ Get help: ${options.helpUrl}` : undefined; + const help = + hasProblems && options.helpUrl + ? `ⓘ Get help: ${options.helpUrl}` + : undefined; return [ ...problems, - hasProblems ? '' : undefined, + hasProblems ? "" : undefined, fmtSummary, help, - help ? '' : 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): keyof typeof chalk { +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 176b844618..6f7327f1bb 100644 --- a/@commitlint/format/src/index.ts +++ b/@commitlint/format/src/index.ts @@ -1,2 +1,2 @@ -export {default} from './format'; -export * from './format'; +export { default } from "./format.js"; +export * from "./format.js"; diff --git a/@commitlint/format/tsconfig.json b/@commitlint/format/tsconfig.json index f4a57643f0..d691164788 100644 --- a/@commitlint/format/tsconfig.json +++ b/@commitlint/format/tsconfig.json @@ -1,15 +1,11 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }] } diff --git a/@commitlint/is-ignored/CHANGELOG.md b/@commitlint/is-ignored/CHANGELOG.md index 4235ba9dbf..70f7b36b54 100644 --- a/@commitlint/is-ignored/CHANGELOG.md +++ b/@commitlint/is-ignored/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/is-ignored @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/is-ignored @@ -19,144 +19,558 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 -* config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) +* **is-ignored:** ignore reapply commits ([#4186](https://github.com/conventional-changelog/commitlint/issues/4186)) ([49ba56d](https://github.com/conventional-changelog/commitlint/commit/49ba56d9dd4c72e918005e6ca62f110a393b8f07)) -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +# [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 bitbuckets automatic merge ([#573](https://github.com/conventional-changelog/commitlint/issues/573)) ([e5bdc5c](https://github.com/conventional-changelog/commitlint/commit/e5bdc5c)) +* **is-ignored:** ignore "amend!" commits ([#4024](https://github.com/conventional-changelog/commitlint/issues/4024)) ([90078f6](https://github.com/conventional-changelog/commitlint/commit/90078f6a58523e0bde386b9b6aa3c05e8b916653)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) ### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +* update dependency semver to v7.6.0 ([#3900](https://github.com/conventional-changelog/commitlint/issues/3900)) ([df33003](https://github.com/conventional-changelog/commitlint/commit/df33003dce77bc5ff48678cddf9401dffedaeb57)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/is-ignored + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/is-ignored -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/is-ignored -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/is-ignored -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/is-ignored + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) ### Bug Fixes -* ignore merge messages with text after newline ([b32bc93](https://github.com/conventional-changelog/commitlint/commit/b32bc93)) -* use grouped regex to ignore merge commits ([#439](https://github.com/conventional-changelog/commitlint/issues/439)) ([905e9d5](https://github.com/conventional-changelog/commitlint/commit/905e9d5)) +* update dependency semver to v7.5.0 ([#3604](https://github.com/conventional-changelog/commitlint/issues/3604)) ([01e35e0](https://github.com/conventional-changelog/commitlint/commit/01e35e06cf9123a0c367e0d0ac79988ec4334e6a)) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/is-ignored + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + **Note:** Version bump only for package @commitlint/is-ignored -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) -### Features -* **wildcards:** add new wildcard patterns [#315](https://github.com/conventional-changelog/commitlint/issues/315) ([e9ea17f](https://github.com/conventional-changelog/commitlint/commit/e9ea17f)) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) +### Bug Fixes +- update dependency semver to v7.3.8 ([#3441](https://github.com/conventional-changelog/commitlint/issues/3441)) ([7599ad6](https://github.com/conventional-changelog/commitlint/commit/7599ad6ab622ecbb6efa9ddba7acc3bbf66db5b5)) -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package @commitlint/is-ignored + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) +**Note:** Version bump only for package @commitlint/is-ignored +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) **Note:** Version bump only for package @commitlint/is-ignored -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +### Bug Fixes + +- update dependency semver to v7.3.6 ([#3112](https://github.com/conventional-changelog/commitlint/issues/3112)) ([ad886fd](https://github.com/conventional-changelog/commitlint/commit/ad886fd7ea46bc2df346099f9d4f10defd51fe75)) +- update dependency semver to v7.3.7 ([#3119](https://github.com/conventional-changelog/commitlint/issues/3119)) ([c9c49b2](https://github.com/conventional-changelog/commitlint/commit/c9c49b2de935528d84a817de750cd65b8f765c48)) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/is-ignored -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +### Bug Fixes +- **is-ignored:** ignore merge tag commit messages ([#2920](https://github.com/conventional-changelog/commitlint/issues/2920)) ([914782a](https://github.com/conventional-changelog/commitlint/commit/914782aad70d353baf4d9fbbf9824c0211241484)) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) **Note:** Version bump only for package @commitlint/is-ignored -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/is-ignored +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/is-ignored + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/is-ignored + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) ### Bug Fixes -* update dependency semver to v5.5.0 ([#236](https://github.com/conventional-changelog/commitlint/issues/236)) ([6c52bd9](https://github.com/conventional-changelog/commitlint/commit/6c52bd9)) +- update dependency semver to v7.3.5 ([#2519](https://github.com/conventional-changelog/commitlint/issues/2519)) ([5113f22](https://github.com/conventional-changelog/commitlint/commit/5113f22c620e7b187fd558e5befa541b448ea18b)) +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) +**Note:** Version bump only for package @commitlint/is-ignored +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +**Note:** Version bump only for package @commitlint/is-ignored + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- update dependency semver to v7.3.4 ([#2336](https://github.com/conventional-changelog/commitlint/issues/2336)) ([790b61a](https://github.com/conventional-changelog/commitlint/commit/790b61afa668d0eab80bbe49db58d3d5d29bb16e)) +- **is-ignored:** ignore azure devops messages ([#2230](https://github.com/conventional-changelog/commitlint/issues/2230)) ([fe29ce7](https://github.com/conventional-changelog/commitlint/commit/fe29ce76bd87d5b42048228fbf0f47cc8d5411ec)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/is-ignored + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency semver to v7.3.2 ([#1369](https://github.com/conventional-changelog/commitlint/issues/1369)) ([3c09722](https://github.com/conventional-changelog/commitlint/commit/3c09722d2db85a94cd1f4bf25c6b4251b2c41bbb)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- update dependency semver to v7.1.3 ([#995](https://github.com/conventional-changelog/commitlint/issues/995)) ([4ee307a](https://github.com/conventional-changelog/commitlint/commit/4ee307a1f8c861ae5d8a038560d166c5d00ea8ba)) + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +### Bug Fixes + +- **is-ignored:** move types to dev dependencies ([#897](https://github.com/conventional-changelog/commitlint/issues/897)) ([aabc549](https://github.com/conventional-changelog/commitlint/commit/aabc549)) + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/is-ignored + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Features + +- config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +### Bug Fixes +- **is-ignored:** ignore bitbuckets automatic merge ([#573](https://github.com/conventional-changelog/commitlint/issues/573)) ([e5bdc5c](https://github.com/conventional-changelog/commitlint/commit/e5bdc5c)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) ### Bug Fixes -* ignore branch merges with multiple newlines ([#227](https://github.com/conventional-changelog/commitlint/issues/227)) ([1f0c5ca](https://github.com/conventional-changelog/commitlint/commit/1f0c5ca)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/is-ignored +<a name="7.2.0"></a> +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +### Bug Fixes + +- ignore merge messages with text after newline ([b32bc93](https://github.com/conventional-changelog/commitlint/commit/b32bc93)) +- use grouped regex to ignore merge commits ([#439](https://github.com/conventional-changelog/commitlint/issues/439)) ([905e9d5](https://github.com/conventional-changelog/commitlint/commit/905e9d5)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +### Features + +- **wildcards:** add new wildcard patterns [#315](https://github.com/conventional-changelog/commitlint/issues/315) ([e9ea17f](https://github.com/conventional-changelog/commitlint/commit/e9ea17f)) + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/is-ignored + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +### Bug Fixes + +- update dependency semver to v5.5.0 ([#236](https://github.com/conventional-changelog/commitlint/issues/236)) ([6c52bd9](https://github.com/conventional-changelog/commitlint/commit/6c52bd9)) + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +### Bug Fixes + +- ignore branch merges with multiple newlines ([#227](https://github.com/conventional-changelog/commitlint/issues/227)) ([1f0c5ca](https://github.com/conventional-changelog/commitlint/commit/1f0c5ca)) <a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) ### Bug Fixes -* ignore branch merges with newlines ([#214](https://github.com/conventional-changelog/commitlint/issues/214)) ([c94c4dc](https://github.com/conventional-changelog/commitlint/commit/c94c4dc)) +- ignore branch merges with newlines ([#214](https://github.com/conventional-changelog/commitlint/issues/214)) ([c94c4dc](https://github.com/conventional-changelog/commitlint/commit/c94c4dc)) diff --git a/@commitlint/is-ignored/package.json b/@commitlint/is-ignored/package.json index 5372636ba2..baccfbcc7f 100644 --- a/@commitlint/is-ignored/package.json +++ b/@commitlint/is-ignored/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/is-ignored", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/is-ignored" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,12 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.2.0", - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0" + "@commitlint/parse": "^20.0.0", + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "@types/semver": "^7.5.7" }, "dependencies": { - "@types/semver": "^6.0.1", - "semver": "6.3.0" - } + "@commitlint/types": "^20.0.0", + "semver": "^7.6.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/is-ignored/src/defaults.ts b/@commitlint/is-ignored/src/defaults.ts index 289e9d54e4..02fbcd6b46 100644 --- a/@commitlint/is-ignored/src/defaults.ts +++ b/@commitlint/is-ignored/src/defaults.ts @@ -1,15 +1,14 @@ -import * as semver from 'semver'; - -export type Matcher = (commit: string) => boolean; +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; }; @@ -17,13 +16,15 @@ 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) (.*)/), - test(/^Merge remote-tracking branch (.*)/), + test(/^(Merged (.*?)(in|into) (.*)|Merged PR (.*): (.*))/), + test(/^Merge remote-tracking branch(\s*)(.*)/), test(/^Automatic merge(.*)/), - test(/^Auto-merged (.*?) into (.*)/) + test(/^Auto-merged (.*?) into (.*)/), ]; diff --git a/@commitlint/is-ignored/src/index.ts b/@commitlint/is-ignored/src/index.ts index 52d319a0bc..1e53818df3 100644 --- a/@commitlint/is-ignored/src/index.ts +++ b/@commitlint/is-ignored/src/index.ts @@ -1,2 +1,2 @@ -export * from './is-ignored'; -export {Matcher} from './defaults'; +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 663080223b..07e25d1267 100644 --- a/@commitlint/is-ignored/src/is-ignored.test.ts +++ b/@commitlint/is-ignored/src/is-ignored.test.ts @@ -1,163 +1,207 @@ -import isIgnored from './is-ignored'; +import { test, expect } from "vitest"; + +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[]>( (results, message) => { return [ ...results, - ...AMENDMENTS.map(amendment => `${message}\n\n${amendment}`) + ...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 revert commits', () => { +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", () => { + 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", () => { + 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", () => { + 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", () => { 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', () => { - VERSION_MESSAGES.forEach(message => expect(isIgnored(message)).toBe(true)); +test("should ignore npm semver commits", () => { + VERSION_MESSAGES.forEach((message) => expect(isIgnored(message)).toBe(true)); }); -test('should ignore npm semver commits with chore', () => { - VERSION_MESSAGES.forEach(message => - expect(isIgnored(`chore: ${message}`)).toBe(true) +test("should ignore npm semver commits with chore", () => { + VERSION_MESSAGES.forEach((message) => + expect(isIgnored(`chore: ${message}`)).toBe(true), ); - VERSION_MESSAGES.forEach(message => - expect(isIgnored(`chore(release): ${message}`)).toBe(true) + VERSION_MESSAGES.forEach((message) => + expect(isIgnored(`chore(release): ${message}`)).toBe(true), ); }); -test('should ignore npm semver commits with footers', () => { - AMENDED_VERSION_MESSAGES.forEach(message => - expect(isIgnored(message)).toBe(true) +test("should ignore npm semver commits with footers", () => { + AMENDED_VERSION_MESSAGES.forEach((message) => + 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 fixup commits", () => { + expect(isIgnored("fixup! initial commit")).toBe(true); }); -test('should return true squash commits', () => { - expect(isIgnored('squash! initial commit')).toBe(true); +test("should return true squash commits", () => { + expect(isIgnored("squash! initial commit")).toBe(true); }); -test('should return true for bitbucket merge commits', () => { +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 azure devops merge commits", () => { + expect(isIgnored("Merged PR 123: Description here")).toBe(true); }); -test('should return true for automatic merge commits', () => { - expect(isIgnored('Auto-merged develop into master')).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", () => { + 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', { - defaults: false - }) + 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', { - defaults: false - }) + 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(); + }).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] - }) + 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"; + expect(() => { + isIgnored(ignoredString, { + ignores: ["throws error"], + } as any); + }).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 4ede7337e9..98faa4c38f 100644 --- a/@commitlint/is-ignored/src/is-ignored.ts +++ b/@commitlint/is-ignored/src/is-ignored.ts @@ -1,32 +1,28 @@ -import * as Defaults from './defaults'; - -export interface IsIgnoredOptions { - ignores?: Defaults.Matcher[]; - defaults?: boolean; -} +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(', ')}` + .map((i) => typeof i) + .join(", ")}`, ); } - const base = opts.defaults === false ? [] : Defaults.wildcards; - return [...base, ...ignores].some(w => w(commit)); + const base = opts.defaults === false ? [] : wildcards; + return [...base, ...ignores].some((w) => w(commit)); } diff --git a/@commitlint/is-ignored/tsconfig.json b/@commitlint/is-ignored/tsconfig.json index f4a57643f0..0cc393e13d 100644 --- a/@commitlint/is-ignored/tsconfig.json +++ b/@commitlint/is-ignored/tsconfig.json @@ -1,15 +1,11 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }] } diff --git a/@commitlint/lint/CHANGELOG.md b/@commitlint/lint/CHANGELOG.md index cde1ee18a9..4b349f746a 100644 --- a/@commitlint/lint/CHANGELOG.md +++ b/@commitlint/lint/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/lint @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/lint @@ -19,19 +19,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) -### Features +### Performance Improvements -* adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) -* config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) +* 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)) -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +## [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 @@ -39,7 +38,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +# [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 @@ -47,104 +46,549 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +## [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 + -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) +## [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 -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) -### Bug Fixes -* move loadsh to dependencies ([1bb66a4](https://github.com/conventional-changelog/commitlint/commit/1bb66a4)) +# [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +## [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review +* fix: should reuse `cli` instead call `yargs()` +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/lint -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/lint -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/lint -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/lint -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + +**Note:** Version bump only for package @commitlint/lint + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/lint + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/lint + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/lint + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/lint + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/lint + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/lint + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/lint + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/lint + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/lint + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/lint + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/lint + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/lint + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/lint + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/lint + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/lint + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/lint + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/lint + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/lint + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/lint + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/lint + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/lint + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/lint + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/lint + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/lint + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/lint + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +- ignore empty commit messages [#615](https://github.com/conventional-changelog/commitlint/issues/615) ([#676](https://github.com/conventional-changelog/commitlint/issues/676)) ([c3eb1a7](https://github.com/conventional-changelog/commitlint/commit/c3eb1a76e08213d7ce1f200e35f8d5d6de18982a)) + ### Features -* print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) +- add async promise based rules methods into lint ([#976](https://github.com/conventional-changelog/commitlint/issues/976)) ([4443062](https://github.com/conventional-changelog/commitlint/commit/444306249b8a3d04524538f61edca8f6cc10d75f)) +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) +**Note:** Version bump only for package @commitlint/lint +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +**Note:** Version bump only for package @commitlint/lint + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/lint + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/lint + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/lint + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Features + +- adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) +- config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) + +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +**Note:** Version bump only for package @commitlint/lint + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.4.0"></a> + +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.3.2"></a> + +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +### Bug Fixes + +- move loadsh to dependencies ([1bb66a4](https://github.com/conventional-changelog/commitlint/commit/1bb66a4)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/lint + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +**Note:** Version bump only for package @commitlint/lint + +<a name="6.2.0"></a> + +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) + +### Features +- print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) **Note:** Version bump only for package @commitlint/lint diff --git a/@commitlint/lint/README.md b/@commitlint/lint/README.md index 66095d2d9a..7849251ff7 100644 --- a/@commitlint/lint/README.md +++ b/@commitlint/lint/README.md @@ -1,33 +1,15 @@ -> Lint a string against commitlint rules - # @commitlint/lint +Lint a string against commitlint rules + ## Getting started ```shell npm install --save @commitlint/lint ``` -## Example - -```js -const lint = require('@commitlint/lint'); +## Documentation -lint('foo: bar', {'type-enum': [1, 'always', ['foo']]}) - .then(report => console.log(report)); - // => { valid: true, errors: [], warnings: [] } - -lint('foo: bar', {'type-enum': [1, 'always', ['bar']]}) - .then(report => console.log(report)); - /* => - { valid: true, - errors: [], - warnings: - [ { level: 1, - valid: false, - name: 'type-enum', - message: 'type must be one of [bar]' } ] } - */ -``` +Consult [API docs](https://commitlint.js.org/api/lint) for comprehensive documentation. -Consult [docs/api](https://conventional-changelog.github.io/commitlint/#/reference-api) for comprehensive documentation. +Documentation generated from [`docs` folder](../../docs/api/format.md). diff --git a/@commitlint/lint/package.json b/@commitlint/lint/package.json index c0b56d1fa9..5927c0d139 100644 --- a/@commitlint/lint/package.json +++ b/@commitlint/lint/package.json @@ -1,49 +1,29 @@ { "name": "@commitlint/lint", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint a string against commitlint rules", - "main": "lib/index.js", + "main": "lib/lint.js", + "types": "lib/lint.d.ts", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check --skip-import" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/lint" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -56,23 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.22.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.6.1", - "cross-env": "6.0.0", - "execa": "0.11.0", - "globby": "10.0.1", - "proxyquire": "2.1.3" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "@commitlint/is-ignored": "^8.2.0", - "@commitlint/parse": "^8.2.0", - "@commitlint/rules": "^8.2.0", - "babel-runtime": "^6.23.0", - "lodash": "4.17.15" - } + "@commitlint/is-ignored": "^20.0.0", + "@commitlint/parse": "^20.0.0", + "@commitlint/rules": "^20.0.0", + "@commitlint/types": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/lint/src/commit-message.ts b/@commitlint/lint/src/commit-message.ts new file mode 100644 index 0000000000..fb9d8363ee --- /dev/null +++ b/@commitlint/lint/src/commit-message.ts @@ -0,0 +1,18 @@ +export interface CommitMessageData { + header: string | null; + body?: string | null; + footer?: string | null; +} + +export const buildCommitMessage = ({ + header, + body, + footer, +}: CommitMessageData): string => { + let message = header; + + message = body ? `${message}\n\n${body}` : message; + message = footer ? `${message}\n\n${footer}` : message; + + return message || ""; +}; diff --git a/@commitlint/lint/src/index.js b/@commitlint/lint/src/index.js deleted file mode 100644 index 25e2fd64c9..0000000000 --- a/@commitlint/lint/src/index.js +++ /dev/null @@ -1,162 +0,0 @@ -import util from 'util'; -import isIgnored from '@commitlint/is-ignored'; -import parse from '@commitlint/parse'; -import implementations from '@commitlint/rules'; -import {toPairs, values} from 'lodash'; - -const buildCommitMesage = ({header, body, footer}) => { - let message = header; - - message = body ? `${message}\n\n${body}` : message; - message = footer ? `${message}\n\n${footer}` : message; - - return message; -}; - -export default async (message, rules = {}, opts = {}) => { - // Found a wildcard match, skip - if ( - isIgnored(message, {defaults: opts.defaultIgnores, ignores: opts.ignores}) - ) { - return { - valid: true, - errors: [], - warnings: [], - input: message - }; - } - - // Parse the commit message - const parsed = await parse(message, undefined, opts.parserOpts); - - const mergedImplementations = Object.assign({}, implementations); - if (opts.plugins) { - values(opts.plugins).forEach(plugin => { - if (plugin.rules) { - Object.keys(plugin.rules).forEach(ruleKey => { - mergedImplementations[ruleKey] = plugin.rules[ruleKey]; - }); - } - }); - } - - // Find invalid rules configs - const missing = Object.keys(rules).filter( - name => typeof mergedImplementations[name] !== 'function' - ); - - if (missing.length > 0) { - const names = Object.keys(mergedImplementations); - throw new RangeError( - `Found invalid rule names: ${missing.join( - ', ' - )}. Supported rule names are: ${names.join(', ')}` - ); - } - - const invalid = toPairs(rules) - .map(([name, config]) => { - if (!Array.isArray(config)) { - return new Error( - `config for rule ${name} must be array, received ${util.inspect( - config - )} of type ${typeof config}` - ); - } - - const [level, when] = config; - - if (typeof level !== 'number' || isNaN(level)) { - return new Error( - `level for rule ${name} must be number, received ${util.inspect( - level - )} of type ${typeof level}` - ); - } - - if (level === 0 && config.length === 1) { - return null; - } - - 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}` - ); - } - - if (level < 0 || level > 2) { - return new RangeError( - `level for rule ${name} must be between 0 and 2, received ${util.inspect( - level - )}` - ); - } - - if (typeof when !== 'string') { - return new Error( - `condition for rule ${name} must be string, received ${util.inspect( - when - )} of type ${typeof when}` - ); - } - - if (when !== 'never' && when !== 'always') { - return new Error( - `condition for rule ${name} must be "always" or "never", received ${util.inspect( - when - )}` - ); - } - - return null; - }) - .filter(item => item instanceof Error); - - if (invalid.length > 0) { - throw new Error(invalid.map(i => i.message).join('\n')); - } - - // Validate against all rules - const results = toPairs(rules) - .filter(entry => { - const [, [level]] = toPairs(entry); - return level > 0; - }) - .map(entry => { - const [name, config] = entry; - const [level, when, value] = config; - - // Level 0 rules are ignored - if (level === 0) { - return null; - } - - const rule = mergedImplementations[name]; - - const [valid, message] = rule(parsed, when, value); - - return { - level, - valid, - name, - message - }; - }) - .filter(Boolean); - - const errors = results.filter(result => result.level === 2 && !result.valid); - const warnings = results.filter( - result => result.level === 1 && !result.valid - ); - - const valid = errors.length === 0; - - return { - valid, - errors, - warnings, - input: buildCommitMesage(parsed) - }; -}; diff --git a/@commitlint/lint/src/index.test.js b/@commitlint/lint/src/index.test.js deleted file mode 100644 index 80ac3d8e8b..0000000000 --- a/@commitlint/lint/src/index.test.js +++ /dev/null @@ -1,292 +0,0 @@ -import test from 'ava'; -import lint from '.'; - -test('throws without params', async t => { - const error = await t.throws(lint()); - t.is(error.message, 'Expected a raw commit'); -}); - -test('throws with empty message', async t => { - const error = await t.throws(lint('')); - t.is(error.message, 'Expected a raw commit'); -}); - -test('positive on stub message and no rule', async t => { - const actual = await lint('foo: bar'); - t.true(actual.valid); -}); - -test('positive on stub message and adhered rule', async t => { - const actual = await lint('foo: bar', { - 'type-enum': [2, 'always', ['foo']] - }); - t.true(actual.valid); -}); - -test('negative on stub message and broken rule', async t => { - const actual = await lint('foo: bar', { - 'type-enum': [2, 'never', ['foo']] - }); - t.false(actual.valid); -}); - -test('positive on ignored message and broken rule', async t => { - const actual = await lint('Revert "some bogus commit"', { - 'type-empty': [2, 'never'] - }); - t.true(actual.valid); - t.is(actual.input, 'Revert "some bogus commit"'); -}); - -test('negative on ignored message, disabled ignored messages and broken rule', async t => { - const actual = await lint( - 'Revert "some bogus commit"', - { - 'type-empty': [2, 'never'] - }, - { - defaultIgnores: false - } - ); - t.false(actual.valid); -}); - -test('positive on custom ignored message and broken rule', async t => { - const ignoredMessage = 'some ignored custom message'; - const actual = await lint( - ignoredMessage, - { - 'type-empty': [2, 'never'] - }, - { - ignores: [c => c === ignoredMessage] - } - ); - t.true(actual.valid); - t.is(actual.input, ignoredMessage); -}); - -test('positive on stub message and opts', async t => { - const actual = await lint( - 'foo-bar', - { - 'type-enum': [2, 'always', ['foo']], - 'type-empty': [2, 'never'] - }, - { - parserOpts: { - headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ - } - } - ); - t.true(actual.valid); -}); - -test('throws for invalid rule names', async t => { - const error = await t.throws( - lint('foo', {foo: [2, 'always'], bar: [1, 'never']}) - ); - - t.is(error.message.indexOf('Found invalid rule names: foo, bar'), 0); -}); - -test('throws for invalid rule config', async t => { - const error = await t.throws( - lint('type(scope): foo', { - 'type-enum': 1, - 'scope-enum': {0: 2, 1: 'never', 2: ['foo'], length: 3} - }) - ); - - t.true(error.message.indexOf('type-enum must be array') > -1); - t.true(error.message.indexOf('scope-enum must be array') > -1); -}); - -test('allows disable shorthand', async t => { - await t.notThrows(lint('foo', {'type-enum': [0], 'scope-enum': [0]})); -}); - -test('throws for rule with invalid length', async t => { - const error = await t.throws( - lint('type(scope): foo', {'scope-enum': [1, 2, 3, 4]}) - ); - - t.true(error.message.indexOf('scope-enum must be 2 or 3 items long') > -1); -}); - -test('throws for rule with invalid level', async t => { - const error = await t.throws( - lint('type(scope): foo', { - 'type-enum': ['2', 'always'], - 'header-max-length': [{}, 'always'] - }) - ); - - t.true(error.message.indexOf('rule type-enum must be number') > -1); - t.true(error.message.indexOf('rule type-enum must be number') > -1); -}); - -test('throws for rule with out of range level', async t => { - const error = await t.throws( - lint('type(scope): foo', { - 'type-enum': [-1, 'always'], - 'header-max-length': [3, 'always'] - }) - ); - - t.true(error.message.indexOf('rule type-enum must be between 0 and 2') > -1); - t.true(error.message.indexOf('rule type-enum must be between 0 and 2') > -1); -}); - -test('throws for rule with invalid condition', async t => { - const error = await t.throws( - lint('type(scope): foo', { - 'type-enum': [1, 2], - 'header-max-length': [1, {}] - }) - ); - - t.true(error.message.indexOf('type-enum must be string') > -1); - t.true(error.message.indexOf('header-max-length must be string') > -1); -}); - -test('throws for rule with out of range condition', async t => { - const error = await t.throws( - lint('type(scope): foo', { - 'type-enum': [1, 'foo'], - 'header-max-length': [1, 'bar'] - }) - ); - - t.true(error.message.indexOf('type-enum must be "always" or "never"') > -1); - t.true( - error.message.indexOf('header-max-length must be "always" or "never"') > -1 - ); -}); - -test('succeds for issue', async t => { - const report = await lint('somehting #1', { - 'references-empty': [2, 'never'] - }); - - t.true(report.valid); -}); - -test('fails for issue', async t => { - const report = await lint('somehting #1', { - 'references-empty': [2, 'always'] - }); - - t.false(report.valid); -}); - -test('succeds for custom issue prefix', async t => { - const report = await lint( - 'somehting REF-1', - { - 'references-empty': [2, 'never'] - }, - { - parserOpts: { - issuePrefixes: ['REF-'] - } - } - ); - - t.true(report.valid); -}); - -test('fails for custom issue prefix', async t => { - const report = await lint( - 'somehting #1', - { - 'references-empty': [2, 'never'] - }, - { - parserOpts: { - issuePrefixes: ['REF-'] - } - } - ); - - t.false(report.valid); -}); - -test('fails for custom plugin rule', async t => { - const report = await lint( - 'somehting #1', - { - 'plugin-rule': [2, 'never'] - }, - { - plugins: { - 'plugin-example': { - rules: { - 'plugin-rule': () => [false] - } - } - } - } - ); - - t.false(report.valid); -}); - -test('passes for custom plugin rule', async t => { - const report = await lint( - 'somehting #1', - { - 'plugin-rule': [2, 'never'] - }, - { - plugins: { - 'plugin-example': { - rules: { - 'plugin-rule': () => [true] - } - } - } - } - ); - - t.true(report.valid); -}); - -test('returns original message only with commit header', async t => { - const message = 'foo: bar'; - const report = await lint(message); - - t.is(report.input, message); -}); - -test('returns original message with commit header and body', async t => { - const message = 'foo: bar/n/nFoo bar bizz buzz.'; - const report = await lint(message); - - t.is(report.input, message); -}); - -test('returns original message with commit header, body and footer', async t => { - const message = 'foo: bar/n/nFoo bar bizz buzz./n/nCloses #1'; - const report = await lint(message); - - t.is(report.input, message); -}); - -test('returns original message with commit header, body and footer, parsing comments', async t => { - 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': [2, 'never'] - }, - { - parserOpts: { - commentChar: '#' - } - } - ); - - t.is(report.input, expected); -}); diff --git a/@commitlint/lint/src/lint.test.ts b/@commitlint/lint/src/lint.test.ts new file mode 100644 index 0000000000..0d37aca402 --- /dev/null +++ b/@commitlint/lint/src/lint.test.ts @@ -0,0 +1,316 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import lint from "./lint.js"; + +test("throws without params", async () => { + const error = (lint as any)(); + await expect(error).rejects.toThrow("Expected a raw commit"); +}); + +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"); + 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"]], + }); + 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"]], + }); + expect(actual.valid).toBe(false); +}); + +test("positive on ignored message and broken rule", async () => { + const actual = await lint('Revert "some bogus commit"', { + "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 () => { + const actual = await lint( + 'Revert "some bogus commit"', + { + "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"; + const actual = await lint( + ignoredMessage, + { + "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 () => { + const actual = await lint( + "foo-bar", + { + "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"], + }); + + 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 }, + } as any); + + 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] }); + + await expect(result).resolves.toEqual({ + errors: [], + 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); + + 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, + }); + 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, + }); + + 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", + ); +}); + +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"); +}); + +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"', + ); +}); + +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"], + }); + + expect(report.valid).toBe(false); +}); + +test("succeds for custom issue prefix", async () => { + const report = await lint( + "somehting REF-1", + { + "references-empty": [RuleConfigSeverity.Error, "never"], + }, + { + parserOpts: { + issuePrefixes: ["REF-"], + }, + }, + ); + + expect(report.valid).toBe(true); +}); + +test("fails for custom issue prefix", async () => { + const report = await lint( + "somehting #1", + { + "references-empty": [RuleConfigSeverity.Error, "never"], + }, + { + parserOpts: { + issuePrefixes: ["REF-"], + }, + }, + ); + + expect(report.valid).toBe(false); +}); + +test("fails for custom plugin rule", async () => { + const report = await lint( + "somehting #1", + { + "plugin-rule": [RuleConfigSeverity.Error, "never"], + }, + { + plugins: { + "plugin-example": { + rules: { + "plugin-rule": () => [false], + }, + }, + }, + }, + ); + + expect(report.valid).toBe(false); +}); + +test("passes for custom plugin rule", async () => { + const report = await lint( + "somehting #1", + { + "plugin-rule": [RuleConfigSeverity.Error, "never"], + }, + { + plugins: { + "plugin-example": { + rules: { + "plugin-rule": () => [true], + }, + }, + }, + }, + ); + + expect(report.valid).toBe(true); +}); + +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."; + 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"; + 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"; + const message = `${expected}\n\n# Some comment to ignore`; + const report = await lint( + message, + { + "references-empty": [RuleConfigSeverity.Error, "never"], + }, + { + parserOpts: { + commentChar: "#", + }, + }, + ); + + expect(report.input).toBe(expected); +}); + +test("passes for async rule", async () => { + const report = await lint( + "somehting #1", + { + "async-rule": [RuleConfigSeverity.Error, "never"], + }, + { + plugins: { + "example-plugin": { + rules: { + "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 new file mode 100644 index 0000000000..c64bb829e0 --- /dev/null +++ b/@commitlint/lint/src/lint.ts @@ -0,0 +1,199 @@ +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, + LintRuleOutcome, + Rule, + BaseRule, + RuleType, + QualifiedRules, +} from "@commitlint/types"; +import { RuleConfigSeverity } from "@commitlint/types"; + +import { buildCommitMessage } from "./commit-message.js"; + +export default async function lint( + message: string, + rawRulesConfig?: QualifiedRules, + rawOpts?: LintOptions, +): Promise<LintOutcome> { + const opts = rawOpts + ? rawOpts + : { defaultIgnores: undefined, ignores: undefined }; + const rulesConfig = rawRulesConfig || {}; + + // Found a wildcard match, skip + if ( + isIgnored(message, { defaults: opts.defaultIgnores, ignores: opts.ignores }) + ) { + return { + valid: true, + errors: [], + warnings: [], + input: message, + }; + } + + // Parse the commit message + const parsed = + message === "" + ? { header: null, body: null, footer: null } + : await parse(message, undefined, opts.parserOpts); + + if ( + parsed.header === null && + parsed.body === null && + parsed.footer === null + ) { + // Commit is empty, skip + return { + valid: true, + errors: [], + warnings: [], + input: message, + }; + } + + const allRules: Map<string, BaseRule<never, RuleType>> = new Map( + 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]), + ); + } + }); + } + + // Find invalid rules configs + const missing = Object.keys(rulesConfig).filter( + (name) => typeof allRules.get(name) !== "function", + ); + + if (missing.length > 0) { + const names = [...allRules.keys()]; + throw new RangeError( + [ + `Found rules without implementation: ${missing.join(", ")}.`, + `Supported rules are: ${names.join(", ")}.`, + ].join("\n"), + ); + } + + const invalid = Object.entries(rulesConfig) + .map(([name, config]) => { + if (!Array.isArray(config)) { + return new Error( + `config for rule ${name} must be array, received ${util.inspect( + config, + )} of type ${typeof config}`, + ); + } + + const [level] = config; + + if (level === RuleConfigSeverity.Disabled && config.length === 1) { + return null; + } + + const [, when] = config; + + if (typeof level !== "number" || isNaN(level)) { + return new Error( + `level for rule ${name} must be number, received ${util.inspect( + 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}`, + ); + } + + if (level < 0 || level > 2) { + return new RangeError( + `level for rule ${name} must be between 0 and 2, received ${util.inspect( + level, + )}`, + ); + } + + if (typeof when !== "string") { + return new Error( + `condition for rule ${name} must be string, received ${util.inspect( + when, + )} of type ${typeof when}`, + ); + } + + if (when !== "never" && when !== "always") { + return new Error( + `condition for rule ${name} must be "always" or "never", received ${util.inspect( + when, + )}`, + ); + } + + return null; + }) + .filter((item): item is Error => item instanceof Error); + + if (invalid.length > 0) { + throw new Error(invalid.map((i) => i.message).join("\n")); + } + + // Validate against all rules + const pendingResults = Object.entries(rulesConfig) + // Level 0 rules are ignored + .filter(([, config]) => !!config && config.length && config[0] > 0) + .map(async (entry) => { + const [name, config] = entry; + const [level, when, value] = config!; // + + const rule = allRules.get(name); + + if (!rule) { + throw new Error(`Could not find rule implementation for ${name}`); + } + + const executableRule = rule as Rule<unknown>; + const [valid, message] = await executableRule(parsed, when, value); + + return { + level, + valid, + name, + message, + }; + }); + + const results = (await Promise.all(pendingResults)).filter( + (result): result is LintRuleOutcome => result !== null, + ); + + const errors = results.filter( + (result) => result.level === RuleConfigSeverity.Error && !result.valid, + ); + const warnings = results.filter( + (result) => result.level === RuleConfigSeverity.Warning && !result.valid, + ); + + const valid = errors.length === 0; + + return { + valid, + errors, + warnings, + input: buildCommitMessage(parsed), + }; +} diff --git a/@commitlint/lint/tsconfig.json b/@commitlint/lint/tsconfig.json new file mode 100644 index 0000000000..bcd59cb2a3 --- /dev/null +++ b/@commitlint/lint/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [ + { "path": "../is-ignored" }, + { "path": "../parse" }, + { "path": "../rules" }, + { "path": "../types" } + ] +} diff --git a/@commitlint/load/CHANGELOG.md b/@commitlint/load/CHANGELOG.md index e6fac03706..0e17e68544 100644 --- a/@commitlint/load/CHANGELOG.md +++ b/@commitlint/load/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) **Note:** Version bump only for package @commitlint/load @@ -11,117 +11,708 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [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 -* add explicit dependency on chalk ([#687](https://github.com/conventional-changelog/commitlint/issues/687)) ([9075844](https://github.com/conventional-changelog/commitlint/commit/9075844)) +* 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) -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) ### Bug Fixes -* handle absolute config paths correctly [#647](https://github.com/conventional-changelog/commitlint/issues/647) ([49b3a77](https://github.com/conventional-changelog/commitlint/commit/49b3a77)) +* **@commitlint/load:** Remove unused `@types/node` dependency ([#3801](https://github.com/conventional-changelog/commitlint/issues/3801)) ([7b3f8b3](https://github.com/conventional-changelog/commitlint/commit/7b3f8b3fe106311682a2e8ad281dd9a4e42443c6)) -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) ### Bug Fixes -* remove unneeded dev dependency ([6ccaf79](https://github.com/conventional-changelog/commitlint/commit/6ccaf79)) -* update cosmiconfig to safe >=5 [#599](https://github.com/conventional-changelog/commitlint/issues/599) ([f186fcb](https://github.com/conventional-changelog/commitlint/commit/f186fcb)) +* update cosmiconfig to specific version ([#3755](https://github.com/conventional-changelog/commitlint/issues/3755)) ([636b8b1](https://github.com/conventional-changelog/commitlint/commit/636b8b1338835b239ab0585e062bfe305fca4424)) + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) ### Features -* adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) -* config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) +* bump cosmiconfig version and conditionally support mjs config ([#3747](https://github.com/conventional-changelog/commitlint/issues/3747)) ([a2b65fc](https://github.com/conventional-changelog/commitlint/commit/a2b65fc0cfee2259e197c291ea40ef2d076ab837)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + + +### Features + +* **load:** use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load ([#3722](https://github.com/conventional-changelog/commitlint/issues/3722)) ([1ff49ea](https://github.com/conventional-changelog/commitlint/commit/1ff49ea14adb180eb54ec3d7479990b66ba26720)) + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + + +### Features + +* lazy load cosmiconfig-typescript-loader ([#3694](https://github.com/conventional-changelog/commitlint/issues/3694)) ([b058c7c](https://github.com/conventional-changelog/commitlint/commit/b058c7cc49333e7898402fa55467ec097801ce25)) + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) ### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +* update dependency @types/node to v20.5.1 ([#3653](https://github.com/conventional-changelog/commitlint/issues/3653)) ([cd8b775](https://github.com/conventional-changelog/commitlint/commit/cd8b7750d3a15fbfd96e20196d53df064df6e138)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + + +### Reverts + +* Revert "feat(load): use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load (#3633)" ([8e41897](https://github.com/conventional-changelog/commitlint/commit/8e41897a42c45988ff8c25576c4f13bb11d84c4e)), closes [#3633](https://github.com/conventional-changelog/commitlint/issues/3633) + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + + +### Features + +* **load:** use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load ([#3633](https://github.com/conventional-changelog/commitlint/issues/3633)) ([4aa46d7](https://github.com/conventional-changelog/commitlint/commit/4aa46d796ad74958f5569d3346b60a1f92c33892)) + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + **Note:** Version bump only for package @commitlint/load -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + + + +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) + + +### Features + +* support typescript 5.0 ([#3566](https://github.com/conventional-changelog/commitlint/issues/3566)) ([c0a27ff](https://github.com/conventional-changelog/commitlint/commit/c0a27ffa3dcaef296ef58ce37bd8ca0a9d315d6e)) + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/load + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) ### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +* **load:** fixes a bug when a ts commitlint config is compiled twice ([#3499](https://github.com/conventional-changelog/commitlint/issues/3499)) ([dc2c899](https://github.com/conventional-changelog/commitlint/commit/dc2c899b5d7e4e7a7be79901b28e46da9f519211)) + + + +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) + +**Note:** Version bump only for package @commitlint/load + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +### Bug Fixes + +- update dependency cosmiconfig to v8 ([#3459](https://github.com/conventional-changelog/commitlint/issues/3459)) ([ee732fe](https://github.com/conventional-changelog/commitlint/commit/ee732fe0ef2057bdae93b7c368392934ac0de3af)) + ### Features -* check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) +- support config .cts extension ([#3461](https://github.com/conventional-changelog/commitlint/issues/3461)) ([85ad18b](https://github.com/conventional-changelog/commitlint/commit/85ad18b8990567df516effcacbf04edbcbb6b6d7)) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) +**Note:** Version bump only for package @commitlint/load +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +**Note:** Version bump only for package @commitlint/load +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) ### Bug Fixes -* improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) +- **load:** add ts-node as direct dependency ([#3351](https://github.com/conventional-changelog/commitlint/issues/3351)) ([3b66891](https://github.com/conventional-changelog/commitlint/commit/3b668911d8f9fd93e0f613842d5c0b7c3f24360a)) +- update dependency cosmiconfig-typescript-loader to v4 ([#3346](https://github.com/conventional-changelog/commitlint/issues/3346)) ([5a9d80f](https://github.com/conventional-changelog/commitlint/commit/5a9d80fba352deae1c2855792be4f8458a973431)) +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) +### Bug Fixes +- **load:** peer-dep version [#3345](https://github.com/conventional-changelog/commitlint/issues/3345) ([2dd7b50](https://github.com/conventional-changelog/commitlint/commit/2dd7b50c983e2720ad25c368e5a0f13b80ab7927)) -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v3 ([#3253](https://github.com/conventional-changelog/commitlint/issues/3253)) ([4e87d14](https://github.com/conventional-changelog/commitlint/commit/4e87d1431df6d39990e5f56a579604b1b3268ce6)) + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/load + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v2 ([#3154](https://github.com/conventional-changelog/commitlint/issues/3154)) ([20122e8](https://github.com/conventional-changelog/commitlint/commit/20122e8d6e999b74eab3bab08a6d52cda3f13e37)) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/load + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +**Note:** Version bump only for package @commitlint/load + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) +### Bug Fixes + +- **load:** satisfy @types/node peer dependency for cosmiconfig-loader-typescript ([#3008](https://github.com/conventional-changelog/commitlint/issues/3008)) ([338180c](https://github.com/conventional-changelog/commitlint/commit/338180c7174625cddd7a0ea2b9d2786fee375756)), closes [#3007](https://github.com/conventional-changelog/commitlint/issues/3007) + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) ### Features -* **load:** add formatter option with default value ([b0e63d9](https://github.com/conventional-changelog/commitlint/commit/b0e63d9)) +- **load:** accept functions as parser presets ([#2982](https://github.com/conventional-changelog/commitlint/issues/2982)) ([420e8d6](https://github.com/conventional-changelog/commitlint/commit/420e8d6a4d5663ade953272275a9e0fa7c5ddff0)), closes [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +### Features +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) +### Bug Fixes +- **types:** fix signature of QualifiedRuleConfig for async configurations ([#2868](https://github.com/conventional-changelog/commitlint/issues/2868)) ([#2869](https://github.com/conventional-changelog/commitlint/issues/2869)) ([c7f355b](https://github.com/conventional-changelog/commitlint/commit/c7f355b25e5baddab0b9559892f5ce4112e4f93a)) +### Features + +- simplify config resolution ([#2398](https://github.com/conventional-changelog/commitlint/issues/2398)) ([8a8384f](https://github.com/conventional-changelog/commitlint/commit/8a8384f3c18954447cb633e76a573e1db71a1440)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +### Features + +- extend helpUrl from shareable config ([#2846](https://github.com/conventional-changelog/commitlint/issues/2846)) ([d7e2e2b](https://github.com/conventional-changelog/commitlint/commit/d7e2e2b943be383f99f4000b6b6bed0eab03bfcf)) +- **load:** add support for `.commitlintrc.cjs` and `commitlint.config.cjs` files ([#2797](https://github.com/conventional-changelog/commitlint/issues/2797)) ([fabb495](https://github.com/conventional-changelog/commitlint/commit/fabb49509730609276ff9ef6357536c95a1f6bb1)) + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) **Note:** Version bump only for package @commitlint/load -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) + +### Bug Fixes + +- **load:** added a direct dependency on typescript ([#2785](https://github.com/conventional-changelog/commitlint/issues/2785)) ([9c17f8d](https://github.com/conventional-changelog/commitlint/commit/9c17f8d423404b484f72df41358a18bd90014ecd)), closes [EndemolShineGroup/cosmiconfig-typescript-loader#147](https://github.com/EndemolShineGroup/cosmiconfig-typescript-loader/issues/147) [#2779](https://github.com/conventional-changelog/commitlint/issues/2779) + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +### Bug Fixes + +- **types:** user config prompt ([6d7a1c4](https://github.com/conventional-changelog/commitlint/commit/6d7a1c40e2f8a8ff22595e0e17f71f3702b0699c)) + +### Features + +- **load:** add cosmiconfig typescript loader ([b65aced](https://github.com/conventional-changelog/commitlint/commit/b65acedc3334a859811762539ec8716de3e73f85)) + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/load + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/load + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/load + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/load + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/load + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +### Bug Fixes + +- **load:** use `Rule | AsyncRule | SyncRule` as rule value type in `Plugin` ([#2146](https://github.com/conventional-changelog/commitlint/issues/2146)) ([75b67b8](https://github.com/conventional-changelog/commitlint/commit/75b67b8fb7fc4df21267b98f0c9daeeb1130b824)) + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- update dependency execa to v4.1.0 ([#2251](https://github.com/conventional-changelog/commitlint/issues/2251)) ([b5743dd](https://github.com/conventional-changelog/commitlint/commit/b5743dd1e49bbe7eac03f34bc38c59df5fbaf2a0)) +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) + +### Features + +- **load:** allow specifying helpUrl via config ([#2180](https://github.com/conventional-changelog/commitlint/issues/2180)) ([d6795a3](https://github.com/conventional-changelog/commitlint/commit/d6795a3c4633ba6efd7a0fcff48339dc291cd832)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) +**Note:** Version bump only for package @commitlint/load + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency cosmiconfig to v7 ([#2044](https://github.com/conventional-changelog/commitlint/issues/2044)) ([f4db933](https://github.com/conventional-changelog/commitlint/commit/f4db93324698ea39528be0d2692151546c2b5517)) +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/load + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +### Bug Fixes + +- **load:** resolve plugins from extended configs ([#1976](https://github.com/conventional-changelog/commitlint/issues/1976)) ([d0f0eb9](https://github.com/conventional-changelog/commitlint/commit/d0f0eb9fde7efc2dff7a3aad190ded14303d3079)) + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency chalk to v4 ([#1275](https://github.com/conventional-changelog/commitlint/issues/1275)) ([a5d8fa1](https://github.com/conventional-changelog/commitlint/commit/a5d8fa118e8221361f14f5fd2b21d7aaad008a27)) + +### Features + +- add local plugins support ([#1692](https://github.com/conventional-changelog/commitlint/issues/1692)) ([7b29c48](https://github.com/conventional-changelog/commitlint/commit/7b29c48321b513e091849fbb2cc2bf0e6ebb94a6)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/load + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +**Note:** Version bump only for package @commitlint/load + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/load + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +### Bug Fixes + +- **load:** resolve nested parser preset factories ([#831](https://github.com/conventional-changelog/commitlint/issues/831)) ([73a7df7](https://github.com/conventional-changelog/commitlint/commit/73a7df7)) + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +### Features + +- **config-conventional:** use parser with short breaking change support ([#821](https://github.com/conventional-changelog/commitlint/issues/821)) ([4b5300a](https://github.com/conventional-changelog/commitlint/commit/4b5300a)) + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/load + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +### Bug Fixes + +- add explicit dependency on chalk ([#687](https://github.com/conventional-changelog/commitlint/issues/687)) ([9075844](https://github.com/conventional-changelog/commitlint/commit/9075844)) + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +### Bug Fixes + +- handle absolute config paths correctly [#647](https://github.com/conventional-changelog/commitlint/issues/647) ([49b3a77](https://github.com/conventional-changelog/commitlint/commit/49b3a77)) + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes +- remove unneeded dev dependency ([6ccaf79](https://github.com/conventional-changelog/commitlint/commit/6ccaf79)) +- update cosmiconfig to safe >=5 [#599](https://github.com/conventional-changelog/commitlint/issues/599) ([f186fcb](https://github.com/conventional-changelog/commitlint/commit/f186fcb)) + +### Features + +- adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) +- config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/load + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +### Features + +- check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +### Bug Fixes + +- improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +### Features + +- **load:** add formatter option with default value ([b0e63d9](https://github.com/conventional-changelog/commitlint/commit/b0e63d9)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/load + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) **Note:** Version bump only for package @commitlint/load diff --git a/@commitlint/load/README.md b/@commitlint/load/README.md index b163d937a7..a65da640c0 100644 --- a/@commitlint/load/README.md +++ b/@commitlint/load/README.md @@ -1,21 +1,15 @@ -> Load shared commitlint configuration - # @commitlint/load +Load shared commitlint configuration + ## Getting started ```shell npm install --save-dev @commitlint/load ``` -## Example +## Documentation -```js -const load = require('@commitlint/load'); - -load({extends: ['./package']}) -.then(config => console.log(config)); -// => { extends: ['./package', './package-b'], rules: {} } -``` +Consult [API docs](https://commitlint.js.org/api/load) for comprehensive documentation. -Consult [docs/api](https://conventional-changelog.github.io/commitlint/#/reference-api) for comprehensive documentation. +Documentation generated from [`docs` folder](../../docs/api/format.md). diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc b/@commitlint/load/fixtures/basic-config/.commitlintrc new file mode 100644 index 0000000000..c0c57253b1 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc @@ -0,0 +1,5 @@ +formatter: '@commitlint/format' +rules: + zero: [0, 'never'] + one: [1, 'always'] + two: [2, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs b/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs new file mode 100644 index 0000000000..3c3d034f67 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.cjs @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.js b/@commitlint/load/fixtures/basic-config/.commitlintrc.js new file mode 100644 index 0000000000..2f37065f43 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.js @@ -0,0 +1,8 @@ +module.exports = { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.json b/@commitlint/load/fixtures/basic-config/.commitlintrc.json new file mode 100644 index 0000000000..df7c0e9b36 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.json @@ -0,0 +1,8 @@ +{ + "formatter": "@commitlint/format", + "rules": { + "zero": [0, "never"], + "one": [1, "always"], + "two": [2, "never"] + } +} \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.yaml b/@commitlint/load/fixtures/basic-config/.commitlintrc.yaml new file mode 100644 index 0000000000..c0c57253b1 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.yaml @@ -0,0 +1,5 @@ +formatter: '@commitlint/format' +rules: + zero: [0, 'never'] + one: [1, 'always'] + two: [2, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/.commitlintrc.yml b/@commitlint/load/fixtures/basic-config/.commitlintrc.yml new file mode 100644 index 0000000000..c0c57253b1 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/.commitlintrc.yml @@ -0,0 +1,5 @@ +formatter: '@commitlint/format' +rules: + zero: [0, 'never'] + one: [1, 'always'] + two: [2, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/commitlint.config.cjs b/@commitlint/load/fixtures/basic-config/commitlint.config.cjs new file mode 100644 index 0000000000..3c3d034f67 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/commitlint.config.cjs @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/commitlint.config.js b/@commitlint/load/fixtures/basic-config/commitlint.config.js new file mode 100644 index 0000000000..2f37065f43 --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/commitlint.config.js @@ -0,0 +1,8 @@ +module.exports = { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.js b/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.js new file mode 100644 index 0000000000..fea4afc3ae --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.js @@ -0,0 +1,8 @@ +export default { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.mjs b/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.mjs new file mode 100644 index 0000000000..fea4afc3ae --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/esm/.commitlintrc.mjs @@ -0,0 +1,8 @@ +export default { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/esm/commitlint.config.js b/@commitlint/load/fixtures/basic-config/esm/commitlint.config.js new file mode 100644 index 0000000000..fea4afc3ae --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/esm/commitlint.config.js @@ -0,0 +1,8 @@ +export default { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-config/esm/commitlint.config.mjs b/@commitlint/load/fixtures/basic-config/esm/commitlint.config.mjs new file mode 100644 index 0000000000..fea4afc3ae --- /dev/null +++ b/@commitlint/load/fixtures/basic-config/esm/commitlint.config.mjs @@ -0,0 +1,8 @@ +export default { + formatter: '@commitlint/format', + rules: { + zero: [0, 'never'], + one: [1, 'always'], + two: [2, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic-template/package.json b/@commitlint/load/fixtures/basic-template/package.json new file mode 100644 index 0000000000..0cef8e445f --- /dev/null +++ b/@commitlint/load/fixtures/basic-template/package.json @@ -0,0 +1,3 @@ +{ + "name": "load-test-js" +} \ No newline at end of file diff --git a/@commitlint/load/fixtures/basic/commitlint.config.js b/@commitlint/load/fixtures/basic/commitlint.config.js index 9644c8e61f..9c5695d7aa 100644 --- a/@commitlint/load/fixtures/basic/commitlint.config.js +++ b/@commitlint/load/fixtures/basic/commitlint.config.js @@ -1,5 +1,5 @@ module.exports = { rules: { - basic: true + 'body-case': [1, 'never', 'camel-case'] } }; diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc b/@commitlint/load/fixtures/extends-config/.commitlintrc new file mode 100644 index 0000000000..c612d4f34f --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc @@ -0,0 +1,4 @@ +extends: + - './first-extended' +rules: + zero: [0, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs b/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs new file mode 100644 index 0000000000..a864f31563 --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.cjs @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/recursive-extends-js/.commitlintrc.js b/@commitlint/load/fixtures/extends-config/.commitlintrc.js similarity index 68% rename from @commitlint/load/fixtures/recursive-extends-js/.commitlintrc.js rename to @commitlint/load/fixtures/extends-config/.commitlintrc.js index 7564fdc432..c58cb47afc 100644 --- a/@commitlint/load/fixtures/recursive-extends-js/.commitlintrc.js +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.js @@ -1,6 +1,6 @@ module.exports = { extends: ['./first-extended'], rules: { - zero: 0 - } -}; + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc.json b/@commitlint/load/fixtures/extends-config/.commitlintrc.json new file mode 100644 index 0000000000..a95915c9f6 --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["./first-extended"], + "rules": { + "zero": [0, "never"] + } +} \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc.yaml b/@commitlint/load/fixtures/extends-config/.commitlintrc.yaml new file mode 100644 index 0000000000..c612d4f34f --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.yaml @@ -0,0 +1,4 @@ +extends: + - './first-extended' +rules: + zero: [0, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/.commitlintrc.yml b/@commitlint/load/fixtures/extends-config/.commitlintrc.yml new file mode 100644 index 0000000000..c612d4f34f --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/.commitlintrc.yml @@ -0,0 +1,4 @@ +extends: + - './first-extended' +rules: + zero: [0, 'never'] \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/commitlint.config.cjs b/@commitlint/load/fixtures/extends-config/commitlint.config.cjs new file mode 100644 index 0000000000..a864f31563 --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/commitlint.config.cjs @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/commitlint.config.js b/@commitlint/load/fixtures/extends-config/commitlint.config.js new file mode 100644 index 0000000000..c58cb47afc --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.js b/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.js new file mode 100644 index 0000000000..bd3061cabb --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.js @@ -0,0 +1,6 @@ +export default { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.mjs b/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.mjs new file mode 100644 index 0000000000..bd3061cabb --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/esm/.commitlintrc.mjs @@ -0,0 +1,6 @@ +export default { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/esm/commitlint.config.js b/@commitlint/load/fixtures/extends-config/esm/commitlint.config.js new file mode 100644 index 0000000000..bd3061cabb --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/esm/commitlint.config.js @@ -0,0 +1,6 @@ +export default { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-config/esm/commitlint.config.mjs b/@commitlint/load/fixtures/extends-config/esm/commitlint.config.mjs new file mode 100644 index 0000000000..bd3061cabb --- /dev/null +++ b/@commitlint/load/fixtures/extends-config/esm/commitlint.config.mjs @@ -0,0 +1,6 @@ +export default { + extends: ['./first-extended'], + rules: { + zero: [0, 'never'], + }, +}; \ No newline at end of file diff --git a/@commitlint/load/fixtures/recursive-extends-js/first-extended/index.js b/@commitlint/load/fixtures/extends-js-template/first-extended/index.js similarity index 71% rename from @commitlint/load/fixtures/recursive-extends-js/first-extended/index.js rename to @commitlint/load/fixtures/extends-js-template/first-extended/index.js index 4317428ad1..8bc1854ccc 100644 --- a/@commitlint/load/fixtures/recursive-extends-js/first-extended/index.js +++ b/@commitlint/load/fixtures/extends-js-template/first-extended/index.js @@ -1,6 +1,6 @@ module.exports = { extends: ['./second-extended'], rules: { - one: 1 - } + one: [1, 'always'], + }, }; diff --git a/@commitlint/load/fixtures/recursive-extends-package/first-extended/second-extended/index.js b/@commitlint/load/fixtures/extends-js-template/first-extended/second-extended/index.js similarity index 56% rename from @commitlint/load/fixtures/recursive-extends-package/first-extended/second-extended/index.js rename to @commitlint/load/fixtures/extends-js-template/first-extended/second-extended/index.js index d199d354da..b0902ace44 100644 --- a/@commitlint/load/fixtures/recursive-extends-package/first-extended/second-extended/index.js +++ b/@commitlint/load/fixtures/extends-js-template/first-extended/second-extended/index.js @@ -1,5 +1,5 @@ module.exports = { rules: { - two: 2 - } + two: [2, 'never'], + }, }; diff --git a/@commitlint/load/fixtures/extends-js-template/package.json b/@commitlint/load/fixtures/extends-js-template/package.json new file mode 100644 index 0000000000..0cef8e445f --- /dev/null +++ b/@commitlint/load/fixtures/extends-js-template/package.json @@ -0,0 +1,3 @@ +{ + "name": "load-test-js" +} \ No newline at end of file diff --git a/@commitlint/load/fixtures/extends-with-local-plugins/commitlint.config.js b/@commitlint/load/fixtures/extends-with-local-plugins/commitlint.config.js new file mode 100644 index 0000000000..f0c973fd8c --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-local-plugins/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./config-with-local-plugin'], +}; diff --git a/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/commitlint.config.js b/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/commitlint.config.js new file mode 100644 index 0000000000..2412bcd48a --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/commitlint.config.js @@ -0,0 +1,21 @@ +module.exports = { + extends: [], + plugins: [{ + rules: { + 'hello-world-rule': ({ subject }) => { + const HELLO_WORLD = 'Hello World'; + return [ + subject.includes(HELLO_WORLD), + `Your subject should contain ${HELLO_WORLD} message` + ]; + }, + 'is-positive': ({ subject }) => { + const POSITIVE_EMOJI = ':)'; + return [ + subject.includes(POSITIVE_EMOJI), + `Your subject should contain ${POSITIVE_EMOJI} message` + ]; + } + } + }] +}; diff --git a/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/index.js b/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/index.js new file mode 100644 index 0000000000..fe16cc487b --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-local-plugins/config-with-local-plugin/index.js @@ -0,0 +1 @@ +module.exports = require('./commitlint.config.js'); diff --git a/@commitlint/load/fixtures/extends-with-plugins/commitlint.config.js b/@commitlint/load/fixtures/extends-with-plugins/commitlint.config.js new file mode 100644 index 0000000000..cf6e89466d --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-plugins/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./config-with-plugins'], +}; diff --git a/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/commitlint.config.js b/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/commitlint.config.js new file mode 100644 index 0000000000..1a285b7b1a --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + plugins: ['example', '@scope/example'] +}; diff --git a/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/index.js b/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/index.js new file mode 100644 index 0000000000..fe16cc487b --- /dev/null +++ b/@commitlint/load/fixtures/extends-with-plugins/config-with-plugins/index.js @@ -0,0 +1 @@ +module.exports = require('./commitlint.config.js'); diff --git a/@commitlint/load/fixtures/help-url/commitlint.config.js b/@commitlint/load/fixtures/help-url/commitlint.config.js new file mode 100644 index 0000000000..823bde5e9a --- /dev/null +++ b/@commitlint/load/fixtures/help-url/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + helpUrl: 'https://github.com/conventional-changelog/commitlint' +}; diff --git a/@commitlint/load/fixtures/outer-scope/commitlint.config.js b/@commitlint/load/fixtures/outer-scope/commitlint.config.js index 23554f588f..9b27c320a7 100644 --- a/@commitlint/load/fixtures/outer-scope/commitlint.config.js +++ b/@commitlint/load/fixtures/outer-scope/commitlint.config.js @@ -1,7 +1,7 @@ module.exports = { rules: { - outer: true, - inner: false, - child: false - } + outer: [1, 'never', true], + inner: [1, 'never', false], + child: [1, 'never', false], + }, }; diff --git a/@commitlint/load/fixtures/outer-scope/inner-scope/child-scope/commitlint.config.js b/@commitlint/load/fixtures/outer-scope/inner-scope/child-scope/commitlint.config.js index 925d251382..d2c04c8054 100644 --- a/@commitlint/load/fixtures/outer-scope/inner-scope/child-scope/commitlint.config.js +++ b/@commitlint/load/fixtures/outer-scope/inner-scope/child-scope/commitlint.config.js @@ -1,7 +1,7 @@ module.exports = { rules: { - outer: false, - inner: false, - child: true - } + outer: [2, 'always', false], + inner: [2, 'always', false], + child: [2, 'always', true], + }, }; diff --git a/@commitlint/load/fixtures/package.json b/@commitlint/load/fixtures/package.json new file mode 100644 index 0000000000..5bbefffbab --- /dev/null +++ b/@commitlint/load/fixtures/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/@commitlint/load/fixtures/parser-preset-angular/commitlint.config.js b/@commitlint/load/fixtures/parser-preset-angular/commitlint.config.js new file mode 100644 index 0000000000..87e6b2c00f --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-angular/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + parserPreset: 'conventional-changelog-angular' +}; diff --git a/@commitlint/load/fixtures/parser-preset-angular/package.json b/@commitlint/load/fixtures/parser-preset-angular/package.json new file mode 100644 index 0000000000..5bc9d3e3a7 --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-angular/package.json @@ -0,0 +1,7 @@ +{ + "name": "parser-preset-angular", + "version": "1.0.0", + "devDependencies": { + "conventional-changelog-angular": "^7.0.0" + } +} diff --git a/@commitlint/load/fixtures/parser-preset-conventional-without-factory/commitlint.config.js b/@commitlint/load/fixtures/parser-preset-conventional-without-factory/commitlint.config.js new file mode 100644 index 0000000000..46aa41e38f --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-conventional-without-factory/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + parserPreset: 'conventional-changelog-conventionalcommits' +}; diff --git a/@commitlint/load/fixtures/parser-preset-conventional-without-factory/package.json b/@commitlint/load/fixtures/parser-preset-conventional-without-factory/package.json new file mode 100644 index 0000000000..2c11da9498 --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-conventional-without-factory/package.json @@ -0,0 +1,7 @@ +{ + "name": "parser-preset-conventional-without-factory", + "version": "1.0.0", + "devDependencies": { + "conventional-changelog-conventionalcommits": "^7.0.2" + } +} diff --git a/@commitlint/load/fixtures/parser-preset-conventionalcommits/commitlint.config.js b/@commitlint/load/fixtures/parser-preset-conventionalcommits/commitlint.config.js new file mode 100644 index 0000000000..46aa41e38f --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-conventionalcommits/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + parserPreset: 'conventional-changelog-conventionalcommits' +}; diff --git a/@commitlint/load/fixtures/parser-preset-conventionalcommits/package.json b/@commitlint/load/fixtures/parser-preset-conventionalcommits/package.json new file mode 100644 index 0000000000..5812d97c34 --- /dev/null +++ b/@commitlint/load/fixtures/parser-preset-conventionalcommits/package.json @@ -0,0 +1,7 @@ +{ + "name": "parser-preset-conventionalcommits", + "version": "1.0.0", + "devDependencies": { + "conventional-changelog-conventionalcommits": "^7.0.2" + } +} diff --git a/@commitlint/load/fixtures/recursive-extends-js/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-extends-js/first-extended/second-extended/index.js deleted file mode 100644 index d199d354da..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-js/first-extended/second-extended/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - two: 2 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends-json/.commitlintrc.json b/@commitlint/load/fixtures/recursive-extends-json/.commitlintrc.json deleted file mode 100644 index b0feb26419..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-json/.commitlintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["./first-extended"], - "rules": { - "zero": 0 - } -} diff --git a/@commitlint/load/fixtures/recursive-extends-json/first-extended/index.js b/@commitlint/load/fixtures/recursive-extends-json/first-extended/index.js deleted file mode 100644 index 4317428ad1..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-json/first-extended/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['./second-extended'], - rules: { - one: 1 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends-json/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-extends-json/first-extended/second-extended/index.js deleted file mode 100644 index d199d354da..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-json/first-extended/second-extended/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - two: 2 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends-package/first-extended/index.js b/@commitlint/load/fixtures/recursive-extends-package/first-extended/index.js deleted file mode 100644 index 4317428ad1..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-package/first-extended/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['./second-extended'], - rules: { - one: 1 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends-package/package.json b/@commitlint/load/fixtures/recursive-extends-package/package.json deleted file mode 100644 index 031a432619..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-package/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "commitlint": { - "extends": ["./first-extended"], - "rules": { - "zero": 0 - } - } -} diff --git a/@commitlint/load/fixtures/recursive-extends-ts/commitlint.config.ts b/@commitlint/load/fixtures/recursive-extends-ts/commitlint.config.ts new file mode 100644 index 0000000000..fff038733a --- /dev/null +++ b/@commitlint/load/fixtures/recursive-extends-ts/commitlint.config.ts @@ -0,0 +1,9 @@ +import type {UserConfig} from './types'; + +const Configuration: UserConfig = { + extends: ['./first-extended/index.ts'], + rules: { + zero: [0, 'never', 'zero'] + } +}; +module.exports = Configuration; \ No newline at end of file diff --git a/@commitlint/load/fixtures/recursive-extends-ts/first-extended/index.ts b/@commitlint/load/fixtures/recursive-extends-ts/first-extended/index.ts new file mode 100644 index 0000000000..d6f3551f95 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-extends-ts/first-extended/index.ts @@ -0,0 +1,7 @@ +import type {UserConfig} from '../types'; +module.exports = { + extends: ['./second-extended/index.ts'], + rules: { + one: [1, 'never', 'one'] + } +} as UserConfig; diff --git a/@commitlint/load/fixtures/recursive-extends-ts/first-extended/second-extended/index.ts b/@commitlint/load/fixtures/recursive-extends-ts/first-extended/second-extended/index.ts new file mode 100644 index 0000000000..fb8d23b4cd --- /dev/null +++ b/@commitlint/load/fixtures/recursive-extends-ts/first-extended/second-extended/index.ts @@ -0,0 +1,6 @@ +import type {UserConfig} from '../../types'; +module.exports = { + rules: { + two: [2, 'never', 'two'] + } +} as UserConfig; diff --git a/@commitlint/load/fixtures/recursive-extends-ts/types.ts b/@commitlint/load/fixtures/recursive-extends-ts/types.ts new file mode 100644 index 0000000000..5a4f43fbee --- /dev/null +++ b/@commitlint/load/fixtures/recursive-extends-ts/types.ts @@ -0,0 +1,11 @@ +export interface UserConfig { + extends?: string[]; + formatter?: string; + rules?: any; + parserPreset?: any; + ignores?: ((commit: string) => boolean)[]; + defaultIgnores?: boolean; + plugins?: (string | Plugin)[]; + helpUrl?: string; + prompt?: any; +} \ No newline at end of file diff --git a/@commitlint/load/fixtures/recursive-extends-yaml/.commitlintrc.yml b/@commitlint/load/fixtures/recursive-extends-yaml/.commitlintrc.yml deleted file mode 100644 index b76a5986b3..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-yaml/.commitlintrc.yml +++ /dev/null @@ -1,4 +0,0 @@ -extends: -- "./first-extended" -rules: - zero: 0 diff --git a/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/index.js b/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/index.js deleted file mode 100644 index 4317428ad1..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['./second-extended'], - rules: { - one: 1 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/second-extended/index.js deleted file mode 100644 index d199d354da..0000000000 --- a/@commitlint/load/fixtures/recursive-extends-yaml/first-extended/second-extended/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - two: 2 - } -}; diff --git a/@commitlint/load/fixtures/recursive-extends/commitlint.config.js b/@commitlint/load/fixtures/recursive-extends/commitlint.config.js index 7564fdc432..f90e771292 100644 --- a/@commitlint/load/fixtures/recursive-extends/commitlint.config.js +++ b/@commitlint/load/fixtures/recursive-extends/commitlint.config.js @@ -1,6 +1,6 @@ module.exports = { extends: ['./first-extended'], rules: { - zero: 0 - } + zero: [0, 'never'], + }, }; diff --git a/@commitlint/load/fixtures/recursive-extends/first-extended/commitlint.config.js b/@commitlint/load/fixtures/recursive-extends/first-extended/commitlint.config.js index 4317428ad1..8bc1854ccc 100644 --- a/@commitlint/load/fixtures/recursive-extends/first-extended/commitlint.config.js +++ b/@commitlint/load/fixtures/recursive-extends/first-extended/commitlint.config.js @@ -1,6 +1,6 @@ module.exports = { extends: ['./second-extended'], rules: { - one: 1 - } + one: [1, 'always'], + }, }; diff --git a/@commitlint/load/fixtures/recursive-extends/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-extends/first-extended/second-extended/index.js index d199d354da..b0902ace44 100644 --- a/@commitlint/load/fixtures/recursive-extends/first-extended/second-extended/index.js +++ b/@commitlint/load/fixtures/recursive-extends/first-extended/second-extended/index.js @@ -1,5 +1,5 @@ module.exports = { rules: { - two: 2 - } + two: [2, 'never'], + }, }; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/commitlint.config.js b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/commitlint.config.js new file mode 100644 index 0000000000..62804e2b03 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./first-extended'] +}; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/index.js b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/index.js new file mode 100644 index 0000000000..6ec50f348e --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/index.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./second-extended'] +}; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/index.js new file mode 100644 index 0000000000..e858146679 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/index.js @@ -0,0 +1,3 @@ +module.exports = { + parserPreset: 'conventional-changelog-atom' +}; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/package.json b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/package.json new file mode 100644 index 0000000000..c764557468 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-conventional-atom/first-extended/second-extended/package.json @@ -0,0 +1,7 @@ +{ + "name": "@second-extend/recursive-parser-preset-conventional-atom", + "version": "1.0.0", + "devDependencies": { + "conventional-changelog-atom": "^2.0.3" + } +} diff --git a/@commitlint/load/fixtures/specify-config-file/commitlint.config.js b/@commitlint/load/fixtures/specify-config-file/commitlint.config.js index 1fd91e7bb1..31855af125 100644 --- a/@commitlint/load/fixtures/specify-config-file/commitlint.config.js +++ b/@commitlint/load/fixtures/specify-config-file/commitlint.config.js @@ -1,6 +1,6 @@ module.exports = { rules: { - foo: 'hello', - bar: 'world' - } + foo: [1, 'never', 'hello'], + bar: [1, 'never', 'world'], + }, }; diff --git a/@commitlint/load/fixtures/specify-config-file/config/commitlint.config.js b/@commitlint/load/fixtures/specify-config-file/config/commitlint.config.js index be422cfda5..fbf4c8adc9 100644 --- a/@commitlint/load/fixtures/specify-config-file/config/commitlint.config.js +++ b/@commitlint/load/fixtures/specify-config-file/config/commitlint.config.js @@ -1,5 +1,5 @@ module.exports = { rules: { - foo: 'bar' - } + foo: [1, 'always', 'bar'], + }, }; diff --git a/@commitlint/load/fixtures/trash-extend/commitlint.config.js b/@commitlint/load/fixtures/trash-extend/commitlint.config.js index 3b41dace2b..7986e40f48 100644 --- a/@commitlint/load/fixtures/trash-extend/commitlint.config.js +++ b/@commitlint/load/fixtures/trash-extend/commitlint.config.js @@ -2,6 +2,6 @@ module.exports = { extends: ['./one'], zero: '0', rules: { - zero: 0 - } + zero: [0, 'always', 'zero'], + }, }; diff --git a/@commitlint/load/fixtures/trash-extend/one.js b/@commitlint/load/fixtures/trash-extend/one.js index 60f3a3530d..ae7db74d52 100644 --- a/@commitlint/load/fixtures/trash-extend/one.js +++ b/@commitlint/load/fixtures/trash-extend/one.js @@ -1,6 +1,6 @@ module.exports = { one: 1, rules: { - one: 1 - } + one: [1, 'always', 'one'], + }, }; diff --git a/@commitlint/load/fixtures/trash-file/commitlint.config.js b/@commitlint/load/fixtures/trash-file/commitlint.config.js index a7a8e43bd8..477faba44e 100644 --- a/@commitlint/load/fixtures/trash-file/commitlint.config.js +++ b/@commitlint/load/fixtures/trash-file/commitlint.config.js @@ -2,7 +2,7 @@ module.exports = { foo: 'bar', baz: 'bar', rules: { - foo: 'bar', - baz: 'bar' - } + foo: [1, 'always', 'bar'], + baz: [1, 'always', 'bar'], + }, }; diff --git a/@commitlint/load/package.json b/@commitlint/load/package.json index e4288115ee..583a00ee61 100644 --- a/@commitlint/load/package.json +++ b/@commitlint/load/package.json @@ -1,49 +1,29 @@ { "name": "@commitlint/load", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "Load shared commitlint configuration", - "main": "lib/index.js", + "main": "lib/load.js", + "types": "lib/load.d.ts", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose && ava \"src/*.serial-test.js\" --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check --skip-import" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/load" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -56,24 +36,25 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.22.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.6.1", - "cross-env": "6.0.0", - "execa": "0.11.0", - "globby": "10.0.1" + "@commitlint/test": "^20.0.0", + "@types/lodash.isplainobject": "^4.0.8", + "@types/lodash.merge": "^4.6.8", + "@types/lodash.uniq": "^4.5.8", + "@types/node": "^18.19.17", + "conventional-changelog-atom": "^4.0.0", + "typescript": "^5.2.2" }, "dependencies": { - "@commitlint/execute-rule": "^8.2.0", - "@commitlint/resolve-extends": "^8.2.0", - "babel-runtime": "^6.23.0", - "chalk": "2.4.2", - "cosmiconfig": "^5.2.0", - "lodash": "4.17.15", - "resolve-from": "^5.0.0" - } + "@commitlint/config-validator": "^20.0.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.1.0", + "@commitlint/types": "^20.0.0", + "chalk": "^5.3.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": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/load/src/index.js b/@commitlint/load/src/index.js deleted file mode 100644 index 1fb4c789f5..0000000000 --- a/@commitlint/load/src/index.js +++ /dev/null @@ -1,119 +0,0 @@ -import path from 'path'; -import executeRule from '@commitlint/execute-rule'; -import resolveExtends from '@commitlint/resolve-extends'; -import cosmiconfig from 'cosmiconfig'; -import {toPairs, merge, mergeWith, pick} from 'lodash'; -import resolveFrom from 'resolve-from'; -import loadPlugin from './utils/loadPlugin'; - -const w = (a, b) => (Array.isArray(b) ? b : undefined); -const valid = input => - pick( - input, - 'extends', - 'rules', - 'plugins', - 'parserPreset', - 'formatter', - 'ignores', - 'defaultIgnores' - ); - -export default async (seed = {}, options = {cwd: process.cwd()}) => { - const loaded = await loadConfig(options.cwd, options.file); - const base = loaded.filepath ? path.dirname(loaded.filepath) : options.cwd; - - // Merge passed config with file based options - const config = valid(merge({}, loaded.config, seed)); - const opts = merge( - {extends: [], rules: {}, formatter: '@commitlint/format'}, - pick(config, 'extends', 'plugins', 'ignores', 'defaultIgnores') - ); - - // Resolve parserPreset key - if (typeof config.parserPreset === 'string') { - const resolvedParserPreset = resolveFrom(base, config.parserPreset); - - config.parserPreset = { - name: config.parserPreset, - path: resolvedParserPreset, - parserOpts: (await require(resolvedParserPreset)).parserOpts - }; - } - - // Resolve extends key - const extended = resolveExtends(opts, { - prefix: 'commitlint-config', - cwd: base, - parserPreset: config.parserPreset - }); - - const preset = valid(mergeWith(extended, config, w)); - // Await parser-preset if applicable - if ( - typeof preset.parserPreset === 'object' && - typeof preset.parserPreset.parserOpts === 'object' && - typeof preset.parserPreset.parserOpts.then === 'function' - ) { - preset.parserPreset.parserOpts = (await preset.parserPreset - .parserOpts).parserOpts; - } - - // Resolve config-relative formatter module - if (typeof config.formatter === 'string') { - preset.formatter = - resolveFrom.silent(base, config.formatter) || config.formatter; - } - - // resolve plugins - preset.plugins = {}; - if (config.plugins && config.plugins.length) { - config.plugins.forEach(pluginKey => { - loadPlugin(preset.plugins, pluginKey, process.env.DEBUG === 'true'); - }); - } - - // Execute rule config functions if needed - const executed = await Promise.all( - ['rules'] - .map(key => { - return [key, preset[key]]; - }) - .map(async item => { - const [key, value] = item; - const executedValue = await Promise.all( - toPairs(value || {}).map(entry => executeRule(entry)) - ); - return [ - key, - executedValue.reduce((registry, item) => { - const [key, value] = item; - registry[key] = value; - return registry; - }, {}) - ]; - }) - ); - - // Merge executed config keys into preset - return executed.reduce((registry, item) => { - const [key, value] = item; - registry[key] = value; - return registry; - }, preset); -}; - -async function loadConfig(cwd, configPath) { - const explorer = cosmiconfig('commitlint'); - - const explicitPath = configPath ? path.resolve(cwd, configPath) : undefined; - const explore = explicitPath ? explorer.load : explorer.search; - const searchPath = explicitPath ? explicitPath : cwd; - const local = await explore(searchPath); - - if (local) { - return local; - } - - return {}; -} diff --git a/@commitlint/load/src/index.serial-test.js b/@commitlint/load/src/index.serial-test.js deleted file mode 100644 index 43f499ca66..0000000000 --- a/@commitlint/load/src/index.serial-test.js +++ /dev/null @@ -1,19 +0,0 @@ -import {fix} from '@commitlint/test'; -import test from 'ava'; - -import load from '.'; - -test.serial('default cwd option to process.cwd()', async t => { - const cwd = await fix.bootstrap('fixtures/basic'); - const before = process.cwd(); - process.chdir(cwd); - - try { - const actual = await load(); - t.true(actual.rules.basic); - } catch (err) { - throw err; - } finally { - process.chdir(before); - } -}); diff --git a/@commitlint/load/src/index.test.js b/@commitlint/load/src/index.test.js deleted file mode 100644 index 4dbf31444b..0000000000 --- a/@commitlint/load/src/index.test.js +++ /dev/null @@ -1,329 +0,0 @@ -import path from 'path'; -import {fix, git} from '@commitlint/test'; -import test from 'ava'; -import resolveFrom from 'resolve-from'; - -import load from '.'; - -const proxyquire = require('proxyquire') - .noCallThru() - .noPreserveCache(); - -test('extends-empty should have no rules', async t => { - const cwd = await git.bootstrap('fixtures/extends-empty'); - const actual = await load({}, {cwd}); - t.deepEqual(actual.rules, {}); -}); - -test('uses seed as configured', async t => { - const cwd = await git.bootstrap('fixtures/extends-empty'); - const actual = await load({rules: {foo: 'bar'}}, {cwd}); - t.is(actual.rules.foo, 'bar'); -}); - -test('rules should be loaded from relative config file', async t => { - const file = 'config/commitlint.config.js'; - const cwd = await git.bootstrap('fixtures/specify-config-file'); - const actual = await load({}, {cwd, file}); - t.is(actual.rules.foo, 'bar'); -}); - -test('rules should be loaded from absolute config file', async t => { - const cwd = await git.bootstrap('fixtures/specify-config-file'); - const file = path.join(cwd, 'config/commitlint.config.js'); - const actual = await load({}, {cwd: process.cwd(), file}); - t.is(actual.rules.foo, 'bar'); -}); - -test('plugins should be loaded from seed', async t => { - const plugin = {'@global': true}; - const scopedPlugin = {'@global': true}; - const stubbedLoad = proxyquire('.', { - 'commitlint-plugin-example': plugin, - '@scope/commitlint-plugin-example': scopedPlugin - }); - - const cwd = await git.bootstrap('fixtures/extends-empty'); - const actual = await stubbedLoad( - {plugins: ['example', '@scope/example']}, - {cwd} - ); - t.deepEqual(actual.plugins, { - example: plugin, - '@scope/example': scopedPlugin - }); -}); - -test('plugins should be loaded from config', async t => { - const plugin = {'@global': true}; - const scopedPlugin = {'@global': true}; - const stubbedLoad = proxyquire('.', { - 'commitlint-plugin-example': plugin, - '@scope/commitlint-plugin-example': scopedPlugin - }); - - const cwd = await git.bootstrap('fixtures/extends-plugins'); - const actual = await stubbedLoad({}, {cwd}); - t.deepEqual(actual.plugins, { - example: plugin, - '@scope/example': scopedPlugin - }); -}); - -test('uses seed with parserPreset', async t => { - const cwd = await git.bootstrap('fixtures/parser-preset'); - const {parserPreset: actual} = await load( - { - parserPreset: './conventional-changelog-custom' - }, - {cwd} - ); - t.is(actual.name, './conventional-changelog-custom'); - t.deepEqual(actual.parserOpts, { - headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ - }); -}); - -test('invalid extend should throw', async t => { - const cwd = await git.bootstrap('fixtures/extends-invalid'); - await t.throws(load({}, {cwd})); -}); - -test('empty file should have no rules', async t => { - const cwd = await git.bootstrap('fixtures/empty-object-file'); - const actual = await load({}, {cwd}); - t.deepEqual(actual.rules, {}); -}); - -test('empty file should extend nothing', async t => { - const cwd = await git.bootstrap('fixtures/empty-file'); - const actual = await load({}, {cwd}); - t.deepEqual(actual.extends, []); -}); - -test('respects cwd option', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends/first-extended'); - const actual = await load({}, {cwd}); - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./second-extended'], - plugins: {}, - rules: { - one: 1, - two: 2 - } - }); -}); - -test('recursive extends', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends'); - const actual = await load({}, {cwd}); - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./first-extended'], - plugins: {}, - rules: { - zero: 0, - one: 1, - two: 2 - } - }); -}); - -test('recursive extends with json file', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends-json'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./first-extended'], - plugins: {}, - rules: { - zero: 0, - one: 1, - two: 2 - } - }); -}); - -test('recursive extends with yaml file', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends-yaml'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./first-extended'], - plugins: {}, - rules: { - zero: 0, - one: 1, - two: 2 - } - }); -}); - -test('recursive extends with js file', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends-js'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./first-extended'], - plugins: {}, - rules: { - zero: 0, - one: 1, - two: 2 - } - }); -}); - -test('recursive extends with package.json file', async t => { - const cwd = await git.bootstrap('fixtures/recursive-extends-package'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./first-extended'], - plugins: {}, - rules: { - zero: 0, - one: 1, - two: 2 - } - }); -}); - -test('parser preset overwrites completely instead of merging', async t => { - const cwd = await git.bootstrap('fixtures/parser-preset-override'); - const actual = await load({}, {cwd}); - t.is(actual.parserPreset.name, './custom'); - t.deepEqual(actual.parserPreset.parserOpts, { - headerPattern: /.*/ - }); -}); - -test('recursive extends with parserPreset', async t => { - const cwd = await git.bootstrap('fixtures/recursive-parser-preset'); - const actual = await load({}, {cwd}); - t.is(actual.parserPreset.name, './conventional-changelog-custom'); - t.is(typeof actual.parserPreset.parserOpts, 'object'); - t.deepEqual( - actual.parserPreset.parserOpts.headerPattern, - /^(\w*)(?:\((.*)\))?-(.*)$/ - ); -}); - -test('ignores unknow keys', async t => { - const cwd = await git.bootstrap('fixtures/trash-file'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: [], - plugins: {}, - rules: { - foo: 'bar', - baz: 'bar' - } - }); -}); - -test('ignores unknow keys recursively', async t => { - const cwd = await git.bootstrap('fixtures/trash-extend'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: ['./one'], - plugins: {}, - rules: { - zero: 0, - one: 1 - } - }); -}); - -test('find up from given cwd', async t => { - const outer = await fix.bootstrap('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}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: [], - plugins: {}, - rules: { - child: true, - inner: false, - outer: false - } - }); -}); - -test('find up config from outside current git repo', async t => { - const outer = await fix.bootstrap('fixtures/outer-scope'); - const cwd = await git.init(path.join(outer, 'inner-scope')); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: '@commitlint/format', - extends: [], - plugins: {}, - rules: { - child: false, - inner: false, - outer: true - } - }); -}); - -test('respects formatter option', async t => { - const cwd = await git.bootstrap('fixtures/formatter'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: 'commitlint-junit', - extends: [], - plugins: {}, - rules: {} - }); -}); - -test('resolves formatter relative from config directory', async t => { - const cwd = await git.bootstrap('fixtures/formatter-local-module'); - const actual = await load({}, {cwd}); - - t.deepEqual(actual, { - formatter: resolveFrom(cwd, './formatters/custom.js'), - extends: [], - plugins: {}, - rules: {} - }); -}); - -test('returns formatter name when unable to resolve from config directory', async t => { - const cwd = await git.bootstrap('fixtures/formatter-local-module'); - const actual = await load({formatter: './doesnt/exists.js'}, {cwd}); - - t.deepEqual(actual, { - formatter: './doesnt/exists.js', - extends: [], - plugins: {}, - rules: {} - }); -}); - -test('does not mutate config module reference', async t => { - const file = 'config/commitlint.config.js'; - const cwd = await git.bootstrap('fixtures/specify-config-file'); - - const configPath = path.join(cwd, file); - const before = JSON.stringify(require(configPath)); - await load({arbitraryField: true}, {cwd, file}); - const after = JSON.stringify(require(configPath)); - - t.is(before, after); -}); diff --git a/@commitlint/load/src/load.test.ts b/@commitlint/load/src/load.test.ts new file mode 100644 index 0000000000..43a02d4bf5 --- /dev/null +++ b/@commitlint/load/src/load.test.ts @@ -0,0 +1,583 @@ +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 load, { resolveFrom } from "./load.js"; +import { isDynamicAwaitSupported } from "./utils/load-config.js"; + +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); + +const plugin = vi.fn(); +const scopedPlugin = vi.fn(); + +vi.mock("commitlint-plugin-example", () => ({ + default: plugin, +})); +vi.mock("@scope/commitlint-plugin-example", () => ({ + default: scopedPlugin, +})); + +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 }); + + expect(actual.rules).toMatchObject({}); + expect(actual.parserPreset).not.toBeDefined(); +}); + +test("uses seed as configured", async () => { + const cwd = await gitBootstrap("fixtures/extends-empty"); + const rules = { + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, + }; + + const actual = await load({ rules }, { cwd }); + + expect(actual.rules["body-case"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "never", + "camel-case", + ]); +}); + +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"], + promise: () => + Promise.resolve([RuleConfigSeverity.Warning, "never", "foo"]), + }, + }); + + expect(actual.rules["direct"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "never", + "foo", + ]); + expect(actual.rules["func"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "never", + "foo", + ]); + expect(actual.rules["async"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "never", + "foo", + ]); + expect(actual.rules["promise"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "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"); + const rules = { + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, + }; + + const actual = await load({ rules }, { cwd, file }); + + expect(actual.rules["body-case"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "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"); + const rules = { + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, + }; + + const actual = await load({ rules }, { cwd: process.cwd(), file }); + + expect(actual.rules["body-case"]).toStrictEqual([ + RuleConfigSeverity.Warning, + "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 }, + ); + + expect(actual.plugins).toMatchObject({ + example: plugin, + "@scope/example": scopedPlugin, + }); +}); + +test("plugins should be loaded from local", async () => { + const actual = await load({ + plugins: [ + { + rules: { + test: () => [true, "asd"], + }, + }, + ], + }); + + expect(actual.plugins).toEqual( + expect.objectContaining({ + local: { + rules: { + test: expect.any(Function), + }, + }, + }), + ); +}); + +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, + }); +}); + +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, + }); +}); + +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), + }, + }, + }), + ); +}); + +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!.parserOpts).toMatchObject({ + headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, + }); +}); + +test("invalid extend should throw", async () => { + const cwd = await gitBootstrap("fixtures/extends-invalid"); + + 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 }); + + expect(actual.rules).toMatchObject({}); +}); + +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 }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: ["./second-extended"], + plugins: {}, + rules: { + one: [RuleConfigSeverity.Warning, "always"], + two: [RuleConfigSeverity.Error, "never"], + }, + }); +}); + +describe.each([["basic"], ["extends"]])("%s config", (template) => { + const isExtendsTemplate = template === "extends"; + + const configFiles = [ + "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 })), + ...configFiles + .filter((filename) => + [".mjs", ".js"].some((ext) => filename.endsWith(ext)), + ) + .map((filename) => ({ filename, isEsm: true })), + ]; + + const getConfigContents = ({ + filename, + isEsm, + }: { + filename: string; + isEsm: boolean; + }): string | NodeJS.ArrayBufferView => { + if (filename === "package.json") { + const configPath = path.join( + __dirname, + `../fixtures/${template}-config/.commitlintrc.json`, + ); + const commitlint = JSON.parse( + readFileSync(configPath, { encoding: "utf-8" }), + ); + 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]; + + if (isEsm) { + filePath.splice(3, 0, "esm"); + } + + const configPath = path.join(__dirname, filePath.join("/")); + return readFileSync(configPath); + } + }; + + const esmBootstrap = (cwd: string) => { + const packageJsonPath = path.join(cwd, "package.json"); + const packageJSON = JSON.parse( + readFileSync(packageJsonPath, { encoding: "utf-8" }), + ); + + writeFileSync( + packageJsonPath, + JSON.stringify({ + ...packageJSON, + type: "module", + }), + ); + }; + + const templateFolder = [template, isExtendsTemplate ? "js" : "", "template"] + .filter((elem) => elem) + .join("-"); + + test.each( + configTestCases + // Skip ESM tests for the extends suite until resolve-extends supports ESM + .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 }) => { + const cwd = await gitBootstrap(`fixtures/${templateFolder}`); + + if (isEsm) { + esmBootstrap(cwd); + } + + writeFileSync( + path.join(cwd, filename), + getConfigContents({ filename, isEsm }), + ); + + const actual = await load({}, { cwd }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: isExtendsTemplate ? ["./first-extended"] : [], + plugins: {}, + rules: { + 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 }); + + expect(actual).toMatchObject({ + 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"], + }, + }); +}); + +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!.parserOpts).toMatchObject({ + headerPattern: /.*/, + }); +}); + +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!.parserOpts).toMatchObject({ + headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, + }); +}); + +test("ignores unknown keys", async () => { + const cwd = await gitBootstrap("fixtures/trash-file"); + const actual = await load({}, { cwd }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: [], + plugins: {}, + rules: { + 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 }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: ["./one"], + plugins: {}, + rules: { + 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 }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: [], + plugins: {}, + rules: { + 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 }); + + expect(actual).toMatchObject({ + formatter: "@commitlint/format", + extends: [], + plugins: {}, + rules: { + 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 }); + + expect(actual).toMatchObject({ + 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 }); + + expect(actual).toMatchObject({ + 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 }); + + expect(actual).toMatchObject({ + 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"); + const rules = { + "body-case": [RuleConfigSeverity.Warning, "never", "camel-case"] as any, + }; + + const configPath = path.join(cwd, file); + + 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 }); + + expect(actual.parserPreset).toBeDefined(); + expect(actual.parserPreset!.name).toBe( + "conventional-changelog-conventionalcommits", + ); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); + expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( + /^(\w*)(?:\((.*)\))?!?: (.*)$/, + ); +}); + +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!.parserOpts as any).headerPattern).toEqual( + /^(\w*)(?:\((.*)\))?: (.*)$/, + ); +}); + +test("recursive resolves parser preset from conventional atom", async () => { + const cwd = await gitBootstrap( + "fixtures/recursive-parser-preset-conventional-atom", + ); + await npm.installModules( + path.resolve(cwd, "first-extended", "second-extended"), + ); + + 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!.parserOpts as any).headerPattern).toEqual( + /^(:.*?:) (.*)$/, + ); +}); + +test("resolves parser preset from conventional commits without factory support", async () => { + const cwd = await npmBootstrap( + "fixtures/parser-preset-conventional-without-factory", + ); + const actual = await load({}, { cwd }); + + expect(actual.parserPreset).toBeDefined(); + expect(actual.parserPreset!.name).toBe( + "conventional-changelog-conventionalcommits", + ); + expect(typeof actual.parserPreset!.parserOpts).toBe("object"); + expect((actual.parserPreset!.parserOpts as any).headerPattern).toEqual( + /^(\w*)(?:\((.*)\))?!?: (.*)$/, + ); +}); + +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", + ); +}); + +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", + ); +}); diff --git a/@commitlint/load/src/load.ts b/@commitlint/load/src/load.ts new file mode 100644 index 0000000000..c20f39f245 --- /dev/null +++ b/@commitlint/load/src/load.ts @@ -0,0 +1,141 @@ +import path from "node:path"; + +import { validateConfig } from "@commitlint/config-validator"; +import executeRule from "@commitlint/execute-rule"; +import resolveExtends, { + resolveFrom, + resolveFromSilent, + resolveGlobalSilent, + loadParserPreset, +} 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"; + +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 + */ +const resolveFormatter = (formatter: string, parent?: string): string => { + try { + return resolveFrom(formatter, parent); + } catch (error) { + return formatter; + } +}; + +export default async function load( + seed: UserConfig = {}, + options: LoadOptions = {}, +): Promise<QualifiedConfig> { + 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); + config = loaded.config; + } + + // Merge passed config with file based options + config = merge( + { + extends: [], + plugins: [], + rules: {}, + }, + config, + seed, + ); + + // Resolve parserPreset key + if (typeof config.parserPreset === "string") { + const resolvedParserPreset = resolveFrom( + config.parserPreset, + configFilePath, + ); + + config.parserPreset = { + name: config.parserPreset, + ...(await loadParserPreset(resolvedParserPreset)), + }; + } + + // Resolve extends key + const extended = await resolveExtends(config, { + prefix: "commitlint-config", + cwd: baseDirectory, + parserPreset: await config.parserPreset, + }); + + 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") { + plugins = await loadPlugin( + plugins, + plugin, + process.env.DEBUG === "true", + ); + } else { + plugins.local = plugin; + } + } + } + + const rules = ( + await Promise.all( + 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 + const [key, value] = item!; + registry[key] = value; + return registry; + }, {}); + + const helpUrl = + typeof extended.helpUrl === "string" + ? extended.helpUrl + : typeof config.helpUrl === "string" + ? config.helpUrl + : "https://github.com/conventional-changelog/commitlint/#what-is-commitlint"; + + const prompt = + extended.prompt && isPlainObject(extended.prompt) ? extended.prompt : {}; + + return { + extends: Array.isArray(extended.extends) + ? extended.extends + : typeof extended.extends === "string" + ? [extended.extends] + : [], + // Resolve config-relative formatter module + formatter: resolveFormatter(extended.formatter, configFilePath), + // Resolve parser-opts from preset + parserPreset: await loadParserOpts(extended.parserPreset), + ignores: extended.ignores, + defaultIgnores: extended.defaultIgnores, + plugins: plugins, + rules: rules, + helpUrl: helpUrl, + prompt, + }; +} + +export { resolveFrom, resolveFromSilent, resolveGlobalSilent }; diff --git a/@commitlint/load/src/utils/load-config.ts b/@commitlint/load/src/utils/load-config.ts new file mode 100644 index 0000000000..0db5148ae6 --- /dev/null +++ b/@commitlint/load/src/utils/load-config.ts @@ -0,0 +1,106 @@ +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"; + +export interface LoadConfigResult { + config: unknown; + filepath: string; + isEmpty?: boolean; +} + +const moduleName = "commitlint"; +const searchStrategy = "global"; + +export async function loadConfig( + cwd: string, + configPath?: string, +): Promise<LoadConfigResult | null> { + let tsLoaderInstance: Loader | undefined; + const tsLoader: Loader = (...args) => { + if (!tsLoaderInstance) { + tsLoaderInstance = TypeScriptLoader(); + } + return tsLoaderInstance(...args); + }; + + // If dynamic await is supported (Node >= v20.8.0) or directory uses ESM, support + // async js/cjs loaders (dynamic import). Otherwise, use synchronous js/cjs loaders. + const loaders = + isDynamicAwaitSupported() || isEsmModule(cwd) + ? defaultLoaders + : 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.yaml", + `.${moduleName}rc`, + `.${moduleName}rc.json`, + `.${moduleName}rc.yaml`, + `.${moduleName}rc.yml`, + `.${moduleName}rc.js`, + `.${moduleName}rc.cjs`, + `.${moduleName}rc.mjs`, + `${moduleName}.config.js`, + `${moduleName}.config.cjs`, + `${moduleName}.config.mjs`, + + // files supported by TypescriptLoader + `.${moduleName}rc.ts`, + `.${moduleName}rc.cts`, + `${moduleName}.config.ts`, + `${moduleName}.config.cts`, + ], + loaders: { + ".ts": tsLoader, + ".cts": tsLoader, + ".cjs": loaders[".cjs"], + ".js": loaders[".js"], + }, + }); + + const explicitPath = configPath ? path.resolve(cwd, configPath) : undefined; + const explore = explicitPath ? explorer.load : explorer.search; + const searchPath = explicitPath ? explicitPath : cwd; + const local = await explore(searchPath); + + if (local) { + return local; + } + + return null; +} + +// See the following issues for more context, contributing to failing Jest tests: +// - Issue: https://github.com/nodejs/node/issues/40058 +// - Resolution: https://github.com/nodejs/node/pull/48510 (Node v20.8.0) +export const isDynamicAwaitSupported = () => { + const [major, minor] = process.version + .replace("v", "") + .split(".") + .map((val) => parseInt(val)); + + return major >= 20 && minor >= 8; +}; + +// Is the given directory set up to use ESM (ECMAScript Modules)? +export const isEsmModule = (cwd: string) => { + 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"; +}; diff --git a/@commitlint/load/src/utils/load-parser-opts.test.ts b/@commitlint/load/src/utils/load-parser-opts.test.ts new file mode 100644 index 0000000000..2575aa7a14 --- /dev/null +++ b/@commitlint/load/src/utils/load-parser-opts.test.ts @@ -0,0 +1,56 @@ +import { test, expect } from "vitest"; +import { loadParserOpts } from "./load-parser-opts.js"; + +test("handles a plain preset", async () => { + const preset = { + parserOpts: {}, + }; + + expect(await loadParserOpts(preset)).toEqual(preset); +}); + +test("handles primitive values", async () => { + expect(await loadParserOpts("")).toEqual(undefined); + expect(await loadParserOpts(undefined)).toEqual(undefined); +}); + +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 }; + + // plain nested parserOpts + let loaded = await loadParserOpts({ + parserOpts: { + parserOpts: opts, + }, + }); + expect(loaded).toHaveProperty("parserOpts", opts); + + // async nested parserOpts + loaded = await loadParserOpts({ + parserOpts: Promise.resolve({ + parserOpts: opts, + }), + }); + expect(loaded).toHaveProperty("parserOpts", opts); +}); + +test("runs a sync function which returns the preset", async () => { + const preset = {}; + const fn = () => preset; + const opts = await loadParserOpts(fn); + + expect(opts).toEqual(preset); +}); + +test("runs an async function which returns the preset", async () => { + const preset = {}; + const fn = async () => preset; + const opts = await loadParserOpts(fn); + + expect(opts).toEqual(preset); +}); diff --git a/@commitlint/load/src/utils/load-parser-opts.ts b/@commitlint/load/src/utils/load-parser-opts.ts new file mode 100644 index 0000000000..34957e10d4 --- /dev/null +++ b/@commitlint/load/src/utils/load-parser-opts.ts @@ -0,0 +1,83 @@ +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' +} + +function isParserOptsFunction<T extends ParserPreset>( + obj: T, +): obj is T & { + parserOpts: ( + cb: (_: never, parserOpts: Record<string, unknown>) => unknown, + ) => Record<string, unknown> | undefined; +} { + return typeof obj.parserOpts === "function"; +} + +export async function loadParserOpts( + pendingParser: + | string + | Awaitable<ParserPreset> + | (() => Awaitable<ParserPreset>) + | undefined, +): Promise<ParserPreset | undefined> { + if (typeof pendingParser === "function") { + return loadParserOpts(pendingParser()); + } + + if (!pendingParser || typeof pendingParser !== "object") { + return undefined; + } + // Await for the module, loaded with require + const parser = await pendingParser; + + // exit early, no opts to resolve + if (!parser.parserOpts) { + return parser; + } + + // Pull nested parserOpts, might happen if overwritten with a module in main config + if (typeof parser.parserOpts === "object") { + // Await parser opts if applicable + parser.parserOpts = await parser.parserOpts; + if ( + isObjectLike(parser.parserOpts) && + isObjectLike(parser.parserOpts.parserOpts) + ) { + parser.parserOpts = parser.parserOpts.parserOpts; + } + return parser; + } + + // Create parser opts from factory + if ( + isParserOptsFunction(parser) && + typeof parser.name === "string" && + parser.name.startsWith("conventional-changelog-") + ) { + return new Promise((resolve) => { + const result = parser.parserOpts((_: never, opts) => { + resolve({ + ...parser, + parserOpts: opts?.parserOpts, + }); + }); + + // If result has data or a promise, the parser doesn't support factory-init + // due to https://github.com/nodejs/promises-debugging/issues/16 it just quits, so let's use this fallback + if (result) { + Promise.resolve(result).then((opts) => { + resolve({ + ...parser, + parserOpts: opts?.parserOpts, + }); + }); + } + return; + }); + } + + return parser; +} diff --git a/@commitlint/load/src/utils/load-plugin.test.ts b/@commitlint/load/src/utils/load-plugin.test.ts new file mode 100644 index 0000000000..cfb0193b85 --- /dev/null +++ b/@commitlint/load/src/utils/load-plugin.test.ts @@ -0,0 +1,116 @@ +import { test, expect, vi } from "vitest"; +import { AsyncRule, Plugin, Rule, SyncRule } from "@commitlint/types"; + +import loadPlugin from "./load-plugin.js"; + +vi.mock("commitlint-plugin-example", () => ({ example: true })); + +vi.mock("@scope/commitlint-plugin-example", () => ({ scope: true })); + +vi.mock("commitlint-plugin-rule", (): Plugin => { + const rule: Rule<number> = (_parsed, when, _value) => { + return [when === "never"]; + }; + return { rules: { rule } }; +}); + +vi.mock("commitlint-plugin-sync-rule", (): Plugin => { + const syncRule: SyncRule<number> = (_parsed, when, _value) => { + return [when === "never"]; + }; + return { rules: { syncRule } }; +}); + +vi.mock("commitlint-plugin-async-rule", (): Plugin => { + const asyncRule: AsyncRule<number> = (_parsed, when, _value) => { + return new Promise(() => [when === "never"]); + }; + return { rules: { asyncRule } }; +}); + +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"), + ); +}); + +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"), + ); +}); + +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"), + ); +}); + +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"), + ); +}); + +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"), + ); +}); + +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\n")).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", + )); + +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"), + ); +}); + +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"), + ); +}); + +/* 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(); +}); + +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(); +}); diff --git a/@commitlint/load/src/utils/load-plugin.ts b/@commitlint/load/src/utils/load-plugin.ts new file mode 100644 index 0000000000..03e2e68e96 --- /dev/null +++ b/@commitlint/load/src/utils/load-plugin.ts @@ -0,0 +1,88 @@ +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 { 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 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; +}; + +export default async function loadPlugin( + plugins: PluginRecords, + pluginName: string, + debug: boolean = false, +): Promise<PluginRecords> { + const longName = normalizePackageName(pluginName); + const shortName = getShorthandName(longName); + let plugin: Plugin; + + if (pluginName.match(/\s+/u)) { + throw new WhitespacePluginError(pluginName, { + pluginName: longName, + }); + } + + const pluginKey = longName === pluginName ? shortName : pluginName; + + if (!plugins[pluginKey]) { + try { + plugin = await dynamicImport<Plugin>(longName); + } catch (pluginLoadErr) { + try { + // Check whether the plugin exists + require.resolve(longName); + } catch (error: any) { + // 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"; + throw new MissingPluginError(pluginName, message, { + pluginName: longName, + commitlintPath: path.resolve(__dirname, "../.."), + }); + } + + // Otherwise, the plugin exists and is throwing on module load for some reason, so print the stack trace. + throw pluginLoadErr; + } + + // This step is costly, so skip if debug is disabled + if (debug) { + const resolvedPath = require.resolve(longName); + + let version = null; + + try { + version = require(`${longName}/package.json`).version; + } catch (e) { + // Do nothing + } + + const loadedPluginAndVersion = version + ? `${longName}@${version}` + : `${longName}, version unknown`; + + console.log( + chalk.blue( + `Loaded plugin ${pluginName} (${loadedPluginAndVersion}) (from ${resolvedPath})`, + ), + ); + } + + plugins[pluginKey] = plugin; + } + + return plugins; +} diff --git a/@commitlint/load/src/utils/loadPlugin.js b/@commitlint/load/src/utils/loadPlugin.js deleted file mode 100644 index 416e0a8784..0000000000 --- a/@commitlint/load/src/utils/loadPlugin.js +++ /dev/null @@ -1,74 +0,0 @@ -import path from 'path'; -import chalk from 'chalk'; -import {normalizePackageName, getShorthandName} from './pluginNaming'; - -export default function loadPlugin(plugins, pluginName, debug = false) { - const longName = normalizePackageName(pluginName); - const shortName = getShorthandName(longName); - let plugin = null; - - if (pluginName.match(/\s+/u)) { - const whitespaceError = new Error( - `Whitespace found in plugin name '${pluginName}'` - ); - - whitespaceError.messageTemplate = 'whitespace-found'; - whitespaceError.messageData = { - pluginName: longName - }; - throw whitespaceError; - } - - const pluginKey = longName === pluginName ? shortName : pluginName; - - if (!plugins[pluginKey]) { - try { - plugin = require(longName); - } catch (pluginLoadErr) { - try { - // Check whether the plugin exists - require.resolve(longName); - } catch (missingPluginErr) { - // 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}.`)); - missingPluginErr.message = `Failed to load plugin ${pluginName}: ${ - missingPluginErr.message - }`; - missingPluginErr.messageTemplate = 'plugin-missing'; - missingPluginErr.messageData = { - pluginName: longName, - commitlintPath: path.resolve(__dirname, '../..') - }; - throw missingPluginErr; - } - - // Otherwise, the plugin exists and is throwing on module load for some reason, so print the stack trace. - throw pluginLoadErr; - } - - // This step is costly, so skip if debug is disabled - if (debug) { - const resolvedPath = require.resolve(longName); - - let version = null; - - try { - version = require(`${longName}/package.json`).version; - } catch (e) { - // Do nothing - } - - const loadedPluginAndVersion = version - ? `${longName}@${version}` - : `${longName}, version unknown`; - - console.log( - chalk.blue( - `Loaded plugin ${pluginName} (${loadedPluginAndVersion}) (from ${resolvedPath})` - ) - ); - } - - plugins[pluginKey] = plugin; - } -} diff --git a/@commitlint/load/src/utils/loadPlugin.test.js b/@commitlint/load/src/utils/loadPlugin.test.js deleted file mode 100644 index 9af7382f72..0000000000 --- a/@commitlint/load/src/utils/loadPlugin.test.js +++ /dev/null @@ -1,80 +0,0 @@ -import test from 'ava'; -const proxyquire = require('proxyquire') - .noCallThru() - .noPreserveCache(); - -test.beforeEach(t => { - const plugins = {}; - const plugin = {}; - const scopedPlugin = {}; - const stubbedLoadPlugin = proxyquire('./loadPlugin', { - 'commitlint-plugin-example': plugin, - '@scope/commitlint-plugin-example': scopedPlugin - }); - t.context.data = { - plugins, - plugin, - scopedPlugin, - stubbedLoadPlugin - }; -}); - -test('should load a plugin when referenced by short name', t => { - const {stubbedLoadPlugin, plugins, plugin} = t.context.data; - stubbedLoadPlugin(plugins, 'example'); - t.is(plugins['example'], plugin); -}); - -test('should load a plugin when referenced by long name', t => { - const {stubbedLoadPlugin, plugins, plugin} = t.context.data; - stubbedLoadPlugin(plugins, 'commitlint-plugin-example'); - t.is(plugins['example'], plugin); -}); - -test('should throw an error when a plugin has whitespace', t => { - const {stubbedLoadPlugin, plugins} = t.context.data; - t.throws(() => { - stubbedLoadPlugin(plugins, 'whitespace '); - }, /Whitespace found in plugin name 'whitespace '/u); - t.throws(() => { - stubbedLoadPlugin(plugins, 'whitespace\t'); - }, /Whitespace found in plugin name/u); - t.throws(() => { - stubbedLoadPlugin(plugins, 'whitespace\n'); - }, /Whitespace found in plugin name/u); - t.throws(() => { - stubbedLoadPlugin(plugins, 'whitespace\r'); - }, /Whitespace found in plugin name/u); -}); - -test("should throw an error when a plugin doesn't exist", t => { - const {stubbedLoadPlugin, plugins} = t.context.data; - t.throws(() => { - stubbedLoadPlugin(plugins, 'nonexistentplugin'); - }, /Failed to load plugin/u); -}); - -test('should load a scoped plugin when referenced by short name', t => { - const {stubbedLoadPlugin, plugins, scopedPlugin} = t.context.data; - stubbedLoadPlugin(plugins, '@scope/example'); - t.is(plugins['@scope/example'], scopedPlugin); -}); - -test('should load a scoped plugin when referenced by long name', t => { - const {stubbedLoadPlugin, plugins, scopedPlugin} = t.context.data; - stubbedLoadPlugin(plugins, '@scope/commitlint-plugin-example'); - t.is(plugins['@scope/example'], scopedPlugin); -}); - -/* 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", t => { - const {stubbedLoadPlugin, plugins} = t.context.data; - stubbedLoadPlugin(plugins, '@scope/example'); - t.is(plugins['example'], undefined); -}); - -test("should load a scoped plugin when referenced by long name, but should not get the plugin if '@scope/' is omitted", t => { - const {stubbedLoadPlugin, plugins} = t.context.data; - stubbedLoadPlugin(plugins, '@scope/commitlint-plugin-example'); - t.is(plugins['example'], undefined); -}); diff --git a/@commitlint/load/src/utils/plugin-errors.ts b/@commitlint/load/src/utils/plugin-errors.ts new file mode 100644 index 0000000000..2f1036ec80 --- /dev/null +++ b/@commitlint/load/src/utils/plugin-errors.ts @@ -0,0 +1,29 @@ +export class WhitespacePluginError extends Error { + __proto__ = Error; + + public messageTemplate: string = "whitespace-found"; + public messageData: any = {}; + + constructor(pluginName?: string, data: any = {}) { + super(`Whitespace found in plugin name '${pluginName}'`); + + this.messageData = data; + + Object.setPrototypeOf(this, WhitespacePluginError.prototype); + } +} + +export class MissingPluginError extends Error { + __proto__ = Error; + + public messageTemplate: string = "plugin-missing"; + public messageData: any; + + constructor(pluginName?: string, errorMessage: string = "", data: any = {}) { + super(`Failed to load plugin ${pluginName}: ${errorMessage}`); + + this.messageData = data; + + Object.setPrototypeOf(this, MissingPluginError.prototype); + } +} diff --git a/@commitlint/load/src/utils/pluginNaming.js b/@commitlint/load/src/utils/plugin-naming.ts similarity index 69% rename from @commitlint/load/src/utils/pluginNaming.js rename to @commitlint/load/src/utils/plugin-naming.ts index 84dc2938f1..9ec5254eff 100644 --- a/@commitlint/load/src/utils/pluginNaming.js +++ b/@commitlint/load/src/utils/plugin-naming.ts @@ -1,12 +1,14 @@ +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) { +function convertPathToPosix(filepath: string) { const normalizedFilepath = path.normalize(filepath); - const posixFilepath = normalizedFilepath.replace(/\\/gu, '/'); + const posixFilepath = normalizedFilepath.replace(/\\/gu, "/"); return posixFilepath; } @@ -17,7 +19,7 @@ function convertPathToPosix(filepath) { * @returns {string} Normalized name of the package * @private */ -export function normalizePackageName(name) { +export function normalizePackageName(name: string) { let normalizedName = name; /** @@ -25,34 +27,34 @@ export function normalizePackageName(name) { * 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) { @@ -67,15 +69,15 @@ export function normalizePackageName(name) { * @param {string} fullname The term which may have the prefix. * @returns {string} The term without prefix. */ -export function getShorthandName(fullname) { - if (fullname[0] === '@') { - let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, 'u').exec(fullname); +export function getShorthandName(fullname: string) { + 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]}`; } @@ -91,8 +93,8 @@ export function getShorthandName(fullname) { * @param {string} term The term which may have the namespace. * @returns {string} The namepace of the term if it has one. */ -export function getNamespaceFromTerm(term) { - const match = term.match(NAMESPACE_REGEX); +export function getNamespaceFromTerm(term: string) { + 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 new file mode 100644 index 0000000000..7ce5e84e02 --- /dev/null +++ b/@commitlint/load/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [ + { "path": "../execute-rule" }, + { "path": "../resolve-extends" }, + { "path": "../config-validator" }, + { "path": "../types" } + ] +} diff --git a/@commitlint/message/CHANGELOG.md b/@commitlint/message/CHANGELOG.md index 39f802d4e8..4616d71675 100644 --- a/@commitlint/message/CHANGELOG.md +++ b/@commitlint/message/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/message @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/message @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,85 +27,349 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/message -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/message -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/message -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/message -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/message -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/message -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + **Note:** Version bump only for package @commitlint/message -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/message -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/message + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/message + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/message + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/message + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/message + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/message + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/message + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +**Note:** Version bump only for package @commitlint/message + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/message + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/message + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/message + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/message + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/message + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/message + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +**Note:** Version bump only for package @commitlint/message + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/message + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/message + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/message + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/message + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/message + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/message +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/message + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/message + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/message + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/message + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/message diff --git a/@commitlint/message/package.json b/@commitlint/message/package.json index 04ba216063..3b3309c979 100644 --- a/@commitlint/message/package.json +++ b/@commitlint/message/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/message", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/message" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,8 +36,8 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "typescript": "3.5.3" - } + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/message/src/index.test.ts b/@commitlint/message/src/index.test.ts index 04c74201fa..acfcb49273 100644 --- a/@commitlint/message/src/index.test.ts +++ b/@commitlint/message/src/index.test.ts @@ -1,15 +1,17 @@ -import message from '.'; +import { test, expect } from "vitest"; -test('should return an empty string for empty input', () => { - expect(message()).toBe(''); +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 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 6eabef8197..c329f09917 100644 --- a/@commitlint/message/src/index.ts +++ b/@commitlint/message/src/index.ts @@ -1,5 +1,3 @@ -export default message; - -function message(input: (string | null | undefined)[] = []) { - return input.filter(Boolean).join(' '); +export default function message(input: (string | null | undefined)[] = []) { + return input.filter(Boolean).join(" "); } diff --git a/@commitlint/message/tsconfig.json b/@commitlint/message/tsconfig.json index f4a57643f0..49479bf34f 100644 --- a/@commitlint/message/tsconfig.json +++ b/@commitlint/message/tsconfig.json @@ -1,15 +1,10 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] } diff --git a/@commitlint/parse/CHANGELOG.md b/@commitlint/parse/CHANGELOG.md index b7ec6ca4c2..f8c257b73a 100644 --- a/@commitlint/parse/CHANGELOG.md +++ b/@commitlint/parse/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/parse @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/parse @@ -19,103 +19,435 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 -* don't merge array properties with custom opts ([#616](https://github.com/conventional-changelog/commitlint/issues/616)) ([f321647](https://github.com/conventional-changelog/commitlint/commit/f321647)), closes [#594](https://github.com/conventional-changelog/commitlint/issues/594) +* 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) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/parse + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/parse + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/parse + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/parse + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/parse + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) ### Bug Fixes -* mark optional parameter with undefined ([#553](https://github.com/conventional-changelog/commitlint/issues/553)) ([6720284](https://github.com/conventional-changelog/commitlint/commit/6720284)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +* add named export to @commitlint/parse ([#3614](https://github.com/conventional-changelog/commitlint/issues/3614)) ([2cd236b](https://github.com/conventional-changelog/commitlint/commit/2cd236b3065c69303c56833d120eb04c6fefc2c3)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + + +### Bug Fixes + +* **parse:** allow setting fieldPattern in parserOpts ([#3538](https://github.com/conventional-changelog/commitlint/issues/3538)) ([ea23c65](https://github.com/conventional-changelog/commitlint/commit/ea23c65702d619b92e338e9f589a147d62e48ffc)) + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + **Note:** Version bump only for package @commitlint/parse -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + ### Bug Fixes -* fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) +- stop truncating the body in presence of dashes ([#3476](https://github.com/conventional-changelog/commitlint/issues/3476)) ([02a61be](https://github.com/conventional-changelog/commitlint/commit/02a61befad13a348866fce30b15caa67a8360d9c)) +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package @commitlint/parse +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/parse -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package @commitlint/parse + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) +**Note:** Version bump only for package @commitlint/parse +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) **Note:** Version bump only for package @commitlint/parse -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +### Bug Fixes + +- **parse:** enforce secure version of `conventional-commits-parser` ([#2776](https://github.com/conventional-changelog/commitlint/issues/2776)) ([a351801](https://github.com/conventional-changelog/commitlint/commit/a3518012ae11bc00a43a12b8ce935f3ffd2d04ef)) + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) +**Note:** Version bump only for package @commitlint/parse + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/parse + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/parse + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/parse + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/parse + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/parse + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/parse + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/parse + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/parse + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/parse + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/parse + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/parse + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) ### Bug Fixes -* **parse:** default to angular preset for empty parserOpts ([#265](https://github.com/conventional-changelog/commitlint/issues/265)) ([ccb03b4](https://github.com/conventional-changelog/commitlint/commit/ccb03b4)), closes [#262](https://github.com/conventional-changelog/commitlint/issues/262) +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +**Note:** Version bump only for package @commitlint/parse +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +**Note:** Version bump only for package @commitlint/parse +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/parse +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) **Note:** Version bump only for package @commitlint/parse -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes +- don't merge array properties with custom opts ([#616](https://github.com/conventional-changelog/commitlint/issues/616)) ([f321647](https://github.com/conventional-changelog/commitlint/commit/f321647)), closes [#594](https://github.com/conventional-changelog/commitlint/issues/594) +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes +- mark optional parameter with undefined ([#553](https://github.com/conventional-changelog/commitlint/issues/553)) ([6720284](https://github.com/conventional-changelog/commitlint/commit/6720284)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/parse -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/parse + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) **Note:** Version bump only for package @commitlint/parse -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +### Bug Fixes + +- **parse:** default to angular preset for empty parserOpts ([#265](https://github.com/conventional-changelog/commitlint/issues/265)) ([ccb03b4](https://github.com/conventional-changelog/commitlint/commit/ccb03b4)), closes [#262](https://github.com/conventional-changelog/commitlint/issues/262) + +<a name="6.0.4"></a> +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +**Note:** Version bump only for package @commitlint/parse +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/parse + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/parse + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/parse diff --git a/@commitlint/parse/README.md b/@commitlint/parse/README.md index 6914b3be8d..8021452469 100644 --- a/@commitlint/parse/README.md +++ b/@commitlint/parse/README.md @@ -11,17 +11,17 @@ npm install --save @commitlint/parse ## Use ```js -const parse = require('@commitlint/parse'); +const parse = require("@commitlint/parse"); ``` ## API ### parse(message: string, parser: Function, parserOpts: Object) -* **message**: Commit message to parser -* **parser**: Sync parser function to use. Defaults to `sync` of `conventional-commits-parser` -* **parserOpts**: Options to pass to `parser` - ```js +- **message**: Commit message to parser +- **parser**: Sync parser function to use. Defaults to `sync` of `conventional-commits-parser` +- **parserOpts**: Options to pass to `parser` + ``` { commentChar: null, // character indicating comment lines issuePrefixes: ['#'] // prefix characters for issue references diff --git a/@commitlint/parse/fixtures/parser-preset/commitlint.config.js b/@commitlint/parse/fixtures/parser-preset/commitlint.config.js deleted file mode 100644 index 3acdc98aa8..0000000000 --- a/@commitlint/parse/fixtures/parser-preset/commitlint.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - parserOpts: { - parserPreset: './conventional-changelog-custom' - } -}; diff --git a/@commitlint/parse/fixtures/parser-preset/conventional-changelog-custom.js b/@commitlint/parse/fixtures/parser-preset/conventional-changelog-custom.js deleted file mode 100644 index 389f7feab5..0000000000 --- a/@commitlint/parse/fixtures/parser-preset/conventional-changelog-custom.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = Promise.resolve().then(() => ({ - parserOpts: { - headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ - } -})); diff --git a/@commitlint/parse/package.json b/@commitlint/parse/package.json index cd2fd00f7b..ff1639e042 100644 --- a/@commitlint/parse/package.json +++ b/@commitlint/parse/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/parse", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/parse" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,15 +36,14 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "@types/lodash": "4.14.140", - "import-from": "3.0.0", - "typescript": "3.5.3" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "@types/conventional-commits-parser": "^5.0.0" }, "dependencies": { - "conventional-changelog-angular": "^1.3.3", - "conventional-commits-parser": "^3.0.0", - "lodash": "^4.17.11" - } + "@commitlint/types": "^20.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/parse/src/index.test.ts b/@commitlint/parse/src/index.test.ts index 5e0f980026..8fb892f37c 100644 --- a/@commitlint/parse/src/index.test.ts +++ b/@commitlint/parse/src/index.test.ts @@ -1,246 +1,273 @@ -import importFrom from 'import-from'; -import parse from '.'; +import { test, expect } from "vitest"; +import parse from "./index.js"; -test('throws when called without params', () => { - expect((parse as any)()).rejects.toThrowError('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', () => { - expect(parse('')).rejects.toThrowError('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 => { - expect(m).toBe(message); - return {}; - } - ); + await parse(message, (m: string): any => { + expect(m).toBe(message); + return {}; + }); }); -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, subject: null, - type: null + type: null, }; 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'; - const changelogOpts: any = await importFrom( - __dirname, - '../fixtures/parser-preset/conventional-changelog-custom.js' - ); +test("uses custom opts parser", async () => { + const message = "type(scope)-subject"; + const changelogOpts = { + parserOpts: { + headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/, + }, + }; const actual = await parse(message, undefined, changelogOpts.parserOpts); 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'; - const changelogOpts: any = await importFrom( - process.cwd(), - 'conventional-changelog-angular' - ); - const opts = Object.assign({}, changelogOpts.parserOpts, { - commentChar: '#' - }); +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 opts = { + ...changelogOpts.parserOpts, + 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'; - const changelogOpts: any = await importFrom( - process.cwd(), - 'conventional-changelog-angular' - ); - const opts = Object.assign({}, changelogOpts.parserOpts, { - commentChar: '#' - }); + "type(some/scope): subject #reference\n# some comment\nthings #reference"; + // @ts-expect-error -- no typings + const changelogOpts = await import("conventional-changelog-angular"); + const opts = { + ...changelogOpts.parserOpts, + 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"; + const body = + "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" + + "```"; + + 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 () => { + const message = + "type(scope): subject\n\nbody text\n-authorName-\nrenovate[bot]"; + const changelogOpts = { + parserOpts: { + fieldPattern: /^-(.*)-$/, + }, + }; + const actual = await parse(message, undefined, changelogOpts.parserOpts); + + expect(actual.body).toBe("body text"); + expect(actual).toHaveProperty("authorName", "renovate[bot]"); }); -test('parses references leading subject', async () => { - const message = '#1 some subject'; - const opts = await importFrom( - process.cwd(), - 'conventional-changelog-angular' - ); +test("parses references leading subject", async () => { + const message = "#1 some subject"; + // @ts-expect-error -- no typings + const opts = await import("conventional-changelog-angular"); const { - references: [actual] - } = await parse(message, undefined, opts as any); + 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', - repository: null + 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]*)\))?: (.*)$/ + headerPattern: /^(\w*)(?:\(([a-z]*)\))?: (.*)$/, }); expect(actual.subject).toBe(null); 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]*)\))?: (.*)$/ + headerPattern: /^(\w*)(?:\(([a-z]*)\))?: (.*)$/, }); expect(actual.subject).toBe(null); diff --git a/@commitlint/parse/src/index.ts b/@commitlint/parse/src/index.ts index 3f2a8fd72c..86173827a7 100644 --- a/@commitlint/parse/src/index.ts +++ b/@commitlint/parse/src/index.ts @@ -1,22 +1,24 @@ -import {isArray, mergeWith} from 'lodash'; -import {Commit, Parser, ParserOptions} from './types'; +import type { Parser } from "@commitlint/types"; -const {sync} = require('conventional-commits-parser'); -const defaultChangelogOpts = require('conventional-changelog-angular'); +import { type Commit, type Options, sync } from "conventional-commits-parser"; +// @ts-expect-error -- no typings +import defaultChangelogOpts from "conventional-changelog-angular"; -export default parse; -export * from './types'; - -async function parse( +export async function parse( message: string, parser: Parser = sync, - parserOpts?: ParserOptions + parserOpts?: Options, ): Promise<Commit> { - const defaultOpts = (await defaultChangelogOpts).parserOpts; - const opts = mergeWith({}, defaultOpts, parserOpts, (objValue, srcValue) => { - if (isArray(objValue)) return srcValue; - }); + const preset = await defaultChangelogOpts(); + const defaultOpts = preset.parserOpts; + const opts = { + ...defaultOpts, + fieldPattern: null, + ...(parserOpts || {}), + }; const parsed = parser(message, opts) as Commit; parsed.raw = message; return parsed; } + +export default parse; diff --git a/@commitlint/parse/src/types.ts b/@commitlint/parse/src/types.ts deleted file mode 100644 index 2654086d66..0000000000 --- a/@commitlint/parse/src/types.ts +++ /dev/null @@ -1,45 +0,0 @@ -export interface Commit { - raw: string; - header: string; - type: string | null; - scope: string | null; - subject: string | null; - body: string | null; - footer: string | null; - mentions: string[]; - notes: CommitNote[]; - references: CommitReference[]; - revert: any; - merge: any; -} - -export interface CommitNote { - title: string; - text: string; -} - -export interface CommitReference { - raw: string; - prefix: string; - action: string | null; - owner: string | null; - repository: string | null; - issue: string | null; -} - -export type Parser = ( - message: string, - options: ParserOptions -) => Omit<Commit, 'raw'>; - -export interface ParserOptions { - commentChar?: string; - headerCorrespondence?: string[]; - headerPattern?: RegExp; - issuePrefixes?: string[]; - mergeCorrespondence?: string[]; - mergePattern?: RegExp; - noteKeywords?: string[]; - revertCorrespondence?: string[]; - revertPattern?: RegExp; -} diff --git a/@commitlint/parse/tsconfig.json b/@commitlint/parse/tsconfig.json index f4a57643f0..d691164788 100644 --- a/@commitlint/parse/tsconfig.json +++ b/@commitlint/parse/tsconfig.json @@ -1,15 +1,11 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }] } diff --git a/@commitlint/prompt-cli/CHANGELOG.md b/@commitlint/prompt-cli/CHANGELOG.md index ba7b526663..dd443bf1b9 100644 --- a/@commitlint/prompt-cli/CHANGELOG.md +++ b/@commitlint/prompt-cli/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) **Note:** Version bump only for package @commitlint/prompt-cli @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/prompt-cli @@ -19,452 +19,982 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) -**Note:** Version bump only for package @commitlint/prompt-cli +### Bug Fixes +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) -**Note:** Version bump only for package @commitlint/prompt-cli +# [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)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +## [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Features -* check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) +## [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 -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +# [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 -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [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 -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [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 -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +# [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 -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +## [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 -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [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 -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [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 -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +## [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 -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +## [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 -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.1.2"></a> -## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) -### Features -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.2.2"></a> -## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.1.0"></a> -# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="4.0.0"></a> -# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) -### Features -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) +**Note:** Version bump only for package @commitlint/prompt-cli -### Features -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +**Note:** Version bump only for package @commitlint/prompt-cli -### Features -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) +**Note:** Version bump only for package @commitlint/prompt-cli -### Features +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +**Note:** Version bump only for package @commitlint/prompt-cli +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) +**Note:** Version bump only for package @commitlint/prompt-cli +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +**Note:** Version bump only for package @commitlint/prompt-cli +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) +**Note:** Version bump only for package @commitlint/prompt-cli -### Features +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +node version is not defned by the name anyways (i think) +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) -### Features +**Note:** Version bump only for package @commitlint/prompt-cli -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) +**Note:** Version bump only for package @commitlint/prompt-cli +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/prompt-cli +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [14.2.0](https://github.com/conventional-changelog/commitlint/compare/v14.1.0...v14.2.0) (2021-11-06) ### Features -* **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) +- **prompt:** rewrite codebase to use inquirer - UPDATED with current master ([#2697](https://github.com/conventional-changelog/commitlint/issues/2697)) ([5105f43](https://github.com/conventional-changelog/commitlint/commit/5105f43ea8093bce82fe4703c4c14a8210721924)) + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) +**Note:** Version bump only for package @commitlint/prompt-cli +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) +**Note:** Version bump only for package @commitlint/prompt-cli -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) +**Note:** Version bump only for package @commitlint/prompt-cli +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +**Note:** Version bump only for package @commitlint/prompt-cli +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) -### Features +**Note:** Version bump only for package @commitlint/prompt-cli -* **prompt-cli:** add standalone prompt interface ([b0239d2](https://github.com/conventional-changelog/commitlint/commit/b0239d2)) +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) +**Note:** Version bump only for package @commitlint/prompt-cli + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/prompt-cli + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +**Note:** Version bump only for package @commitlint/prompt-cli + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Features + +- check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.2.5"></a> + +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.1.2"></a> + +## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Features + +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.2.2"></a> + +## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.1.0"></a> + +# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="4.0.0"></a> + +# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) + +**Note:** Version bump only for package @commitlint/prompt-cli + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +### Features + +- **prompt-cli:** add standalone prompt interface ([7911040](https://github.com/conventional-changelog/commitlint/commit/7911040)) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) + +### Features + +- **prompt-cli:** add standalone prompt interface ([b0239d2](https://github.com/conventional-changelog/commitlint/commit/b0239d2)) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) ### Features -* **prompt-cli:** add standalone prompt interface ([b0239d2](https://github.com/conventional-changelog/commitlint/commit/b0239d2)) +- **prompt-cli:** add standalone prompt interface ([b0239d2](https://github.com/conventional-changelog/commitlint/commit/b0239d2)) diff --git a/@commitlint/prompt-cli/README.md b/@commitlint/prompt-cli/README.md index 82273bc612..49457f8196 100644 --- a/@commitlint/prompt-cli/README.md +++ b/@commitlint/prompt-cli/README.md @@ -1,17 +1,17 @@ -> commit prompt using commitlint.config.js - # @commitlint/prompt-cli +commit prompt using commitlint.config.js + ## Getting started -```bash -npm install --g @commitlint/prompt-cli @commitlint/config-angular -echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js +```sh +npm install -g @commitlint/prompt-cli @commitlint/config-angular +echo "export default {extends: ['@commitlint/config-angular']};" > commitlint.config.js ``` -```bash +```sh git add . commit ``` -A full usage guide is available at [docs/prompt](https://conventional-changelog.github.io/commitlint/#/guides-use-prompt). +A full usage guide is available at [docs/prompt](https://commitlint.js.org/guides/use-prompt). diff --git a/@commitlint/prompt-cli/cli.js b/@commitlint/prompt-cli/cli.js index 050e9ef081..7ab4aa8181 100755 --- a/@commitlint/prompt-cli/cli.js +++ b/@commitlint/prompt-cli/cli.js @@ -1,11 +1,9 @@ #!/usr/bin/env node -const execa = require('execa'); -const {prompter} = require('@commitlint/prompt'); +import { prompter } from "@commitlint/prompt"; +import inquirer from "inquirer"; +import { x } from "tinyexec"; -const _ = undefined; -const prompt = () => prompter(_, commit); - -main().catch(err => { +main().catch((err) => { setTimeout(() => { throw err; }); @@ -13,23 +11,23 @@ main().catch(err => { function main() { return isStageEmpty() - .then(empty => { + .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); } }) - .then(() => prompt()); + .then(() => prompter(inquirer, commit)); } 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 34c27b3e4e..d1bfc50283 100644 --- a/@commitlint/prompt-cli/cli.test.js +++ b/@commitlint/prompt-cli/cli.test.js @@ -1,25 +1,31 @@ -import path from 'path'; -import {git} from '@commitlint/test'; -import test from 'ava'; -import execa from 'execa'; -import stream from 'string-to-stream'; +import { test, expect } from "vitest"; +import { createRequire } from "node:module"; +import { git } from "@commitlint/test"; +import { x } from "tinyexec"; -const bin = path.join(__dirname, './cli.js'); +const require = createRequire(import.meta.url); + +const bin = require.resolve("./cli.js"); const cli = (args, options) => { - return (input = '') => { - const c = execa(bin, args, { - capture: ['stdout'], - cwd: options.cwd, - env: options.env + return (input = "") => { + const result = x(bin, args, { + nodeOptions: { + cwd: options.cwd, + env: options.env, + }, }); - stream(input).pipe(c.stdin); - return c.catch(err => err); + + result.process.stdin.write(input); + result.process.stdin.end(); + + return result; }; }; -test('should print warning if stage is empty', async t => { +test("should print warning if stage is empty", async () => { const cwd = await git.bootstrap(); - const actual = await cli([], {cwd})('foo: bar'); - t.true(actual.stdout.includes('Nothing to commit.')); -}); + 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 493d80f129..830198ec30 100644 --- a/@commitlint/prompt-cli/package.json +++ b/@commitlint/prompt-cli/package.json @@ -1,7 +1,9 @@ { "name": "@commitlint/prompt-cli", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "commit prompt using commitlint.config.js", + "main": "cli.js", "files": [ "cli.js" ], @@ -11,12 +13,12 @@ "scripts": { "commit": "$npm_package_bin_commit", "deps": "dep-check", - "pkg": "pkg-check --skip-main", - "test": "ava -c 4 --verbose" + "pkg": "pkg-check --skip-main" }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/prompt-cli" }, "keywords": [ "commitlint", @@ -27,15 +29,18 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.25.0" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "@commitlint/prompt": "^8.2.0", - "execa": "0.11.0", - "string-to-stream": "1.1.1" - } + "@commitlint/prompt": "^20.1.0", + "inquirer": "^9.2.15", + "tinyexec": "^1.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/prompt/CHANGELOG.md b/@commitlint/prompt/CHANGELOG.md index 0926c6d725..f3804b12ac 100644 --- a/@commitlint/prompt/CHANGELOG.md +++ b/@commitlint/prompt/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) **Note:** Version bump only for package @commitlint/prompt @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/prompt @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/prompt @@ -27,7 +27,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -35,400 +46,931 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +## [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 -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +# [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 -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [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 -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +# [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 -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [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 -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [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 -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [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 -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +# [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 -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +## [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 -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [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 -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [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 -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + **Note:** Version bump only for package @commitlint/prompt -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + **Note:** Version bump only for package @commitlint/prompt -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/prompt -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/prompt -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/prompt -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + **Note:** Version bump only for package @commitlint/prompt -<a name="5.1.2"></a> -## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) -### Bug Fixes -* **prompt:** apply forced cases properly ([3a569a7](https://github.com/conventional-changelog/commitlint/commit/3a569a7)), closes [#145](https://github.com/conventional-changelog/commitlint/issues/145) +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) +**Note:** Version bump only for package @commitlint/prompt -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) **Note:** Version bump only for package @commitlint/prompt -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) -### Bug Fixes -* update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) -### Features +**Note:** Version bump only for package @commitlint/prompt -* **prompt:** add description for build, ci and revert ([#148](https://github.com/conventional-changelog/commitlint/issues/148)) ([ee6ec6e](https://github.com/conventional-changelog/commitlint/commit/ee6ec6e)) -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/prompt + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.2.2"></a> -## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.1.0"></a> -# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + **Note:** Version bump only for package @commitlint/prompt -<a name="4.0.0"></a> -# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + **Note:** Version bump only for package @commitlint/prompt -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) -<a name="3.1.3"></a> -## 3.1.3 (2017-08-21) +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) -<a name="3.1.2"></a> -## 3.1.2 (2017-08-07) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.1.1"></a> -## 3.1.1 (2017-08-07) +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +**Note:** Version bump only for package @commitlint/prompt +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) +**Note:** Version bump only for package @commitlint/prompt +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) -<a name="3.0.4"></a> -## 3.0.4 (2017-08-04) +**Note:** Version bump only for package @commitlint/prompt +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) +**Note:** Version bump only for package @commitlint/prompt +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +**Note:** Version bump only for package @commitlint/prompt +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) +**Note:** Version bump only for package @commitlint/prompt +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES +- drop node v12 support -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) +**Note:** Version bump only for package @commitlint/prompt +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) +**Note:** Version bump only for package @commitlint/prompt +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) +**Note:** Version bump only for package @commitlint/prompt -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package @commitlint/prompt +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) -<a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +### Bug Fixes +- **prompt:** correct import kind in prompt package ([#2852](https://github.com/conventional-changelog/commitlint/issues/2852)) ([45bf394](https://github.com/conventional-changelog/commitlint/commit/45bf394b34cef78011c2e0a1a7d0cc0d2bab41ae)) +- **prompt:** correct version of internal dependencies in prompt package [#2697](https://github.com/conventional-changelog/commitlint/issues/2697) ([#2851](https://github.com/conventional-changelog/commitlint/issues/2851)) ([b1155ca](https://github.com/conventional-changelog/commitlint/commit/b1155cae766aba7e93bc42c69c9ea7f47c1c16d4)) +# [14.2.0](https://github.com/conventional-changelog/commitlint/compare/v14.1.0...v14.2.0) (2021-11-06) +### Features + +- **prompt:** rewrite codebase to use inquirer - UPDATED with current master ([#2697](https://github.com/conventional-changelog/commitlint/issues/2697)) ([5105f43](https://github.com/conventional-changelog/commitlint/commit/5105f43ea8093bce82fe4703c4c14a8210721924)) + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/prompt + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/prompt + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) + +**Note:** Version bump only for package @commitlint/prompt + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/prompt + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/prompt + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/prompt + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/prompt + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +### Bug Fixes + +- **prompt:** modify the entry point to pass commitizen's function check ([#2501](https://github.com/conventional-changelog/commitlint/issues/2501)) ([0173fb7](https://github.com/conventional-changelog/commitlint/commit/0173fb7cc01dc8442ed88a0ab8feec20c955deee)), closes [/github.com/conventional-changelog/commitlint/issues/2486#issuecomment-791682272](https://github.com//github.com/conventional-changelog/commitlint/issues/2486/issues/issuecomment-791682272) [/github.com/conventional-changelog/commitlint/issues/2486#issuecomment-791682272](https://github.com//github.com/conventional-changelog/commitlint/issues/2486/issues/issuecomment-791682272) + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/prompt + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +### Bug Fixes + +- update dependency throat to v6 ([#2417](https://github.com/conventional-changelog/commitlint/issues/2417)) ([6f7db1b](https://github.com/conventional-changelog/commitlint/commit/6f7db1b39c48561b84a4fce9623fb045c5467fe8)) + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/prompt + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/prompt + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/prompt + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/prompt + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency chalk to v4 ([#1275](https://github.com/conventional-changelog/commitlint/issues/1275)) ([a5d8fa1](https://github.com/conventional-changelog/commitlint/commit/a5d8fa118e8221361f14f5fd2b21d7aaad008a27)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +### Bug Fixes + +- add missing @babel/runtime dep [#1738](https://github.com/conventional-changelog/commitlint/issues/1738) ([#1754](https://github.com/conventional-changelog/commitlint/issues/1754)) ([09afcd6](https://github.com/conventional-changelog/commitlint/commit/09afcd647a2c1d00538cf1c970e3790d936111f8)) + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +- incorrect use of when in getForcedCaseFn ([#993](https://github.com/conventional-changelog/commitlint/issues/993)) ([34c11b8](https://github.com/conventional-changelog/commitlint/commit/34c11b8f3f233eca51866274a10d35231e8eb3d4)) + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +**Note:** Version bump only for package @commitlint/prompt + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/prompt + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +**Note:** Version bump only for package @commitlint/prompt + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/prompt + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/prompt + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/prompt + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +**Note:** Version bump only for package @commitlint/prompt + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.2.5"></a> + +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.1.2"></a> + +## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) + +### Bug Fixes + +- **prompt:** apply forced cases properly ([3a569a7](https://github.com/conventional-changelog/commitlint/commit/3a569a7)), closes [#145](https://github.com/conventional-changelog/commitlint/issues/145) + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Bug Fixes + +- update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) + +### Features + +- **prompt:** add description for build, ci and revert ([#148](https://github.com/conventional-changelog/commitlint/issues/148)) ([ee6ec6e](https://github.com/conventional-changelog/commitlint/commit/ee6ec6e)) +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.2.2"></a> + +## [4.2.2](https://github.com/conventional-changelog/commitlint/compare/v4.2.1...v4.2.2) (2017-10-26) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.1.0"></a> + +# [4.1.0](https://github.com/conventional-changelog/commitlint/compare/v4.0.0...v4.1.0) (2017-10-05) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="4.0.0"></a> + +# [4.0.0](https://github.com/conventional-changelog/commitlint/compare/v3.2.0...v4.0.0) (2017-10-04) + +**Note:** Version bump only for package @commitlint/prompt + +<a name="3.2.0"></a> + +# 3.2.0 (2017-09-05) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.1.3"></a> + +## 3.1.3 (2017-08-21) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.1.2"></a> + +## 3.1.2 (2017-08-07) + +<a name="3.1.1"></a> + +## 3.1.1 (2017-08-07) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.0.4"></a> + +## 3.0.4 (2017-08-04) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.0.3"></a> + +## 3.0.3 (2017-07-16) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +<a name="3.0.1"></a> + +## 3.0.1 (2017-07-11) + +<a name="3.0.0"></a> + +# 3.0.0 (2017-07-10) + +<a name="3.0.0"></a> -<a name="3.0.0"></a> # 3.0.0 (2017-07-10) diff --git a/@commitlint/prompt/README.md b/@commitlint/prompt/README.md index 55f18044e1..64090b4001 100644 --- a/@commitlint/prompt/README.md +++ b/@commitlint/prompt/README.md @@ -1,19 +1,20 @@ -> commitizen adapter using commitlint.config.js - # @commitlint/prompt +commitizen adapter using commitlint.config.js + This is the library and commitizen adapter version of commitlint prompt. A ready-to-use cli version is available at [@commitlint/prompt-cli](../prompt-cli). -Learn how to use it at [docs/prompt](https://conventional-changelog.github.io/commitlint/#/guides-use-prompt). +Learn how to use it in this [guide](https://commitlint.js.org/guides/use-prompt). ## Getting started ```bash -npm install --save-dev @commitlint/prompt @commitlint/config-angular commitizen +npm install --save-dev @commitlint/prompt @commitlint/config-conventional commitizen echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js ``` In package.json + ``` { "scripts": { diff --git a/@commitlint/prompt/package.json b/@commitlint/prompt/package.json index 45d35469b4..3d57dc6c3e 100644 --- a/@commitlint/prompt/package.json +++ b/@commitlint/prompt/package.json @@ -1,36 +1,15 @@ { "name": "@commitlint/prompt", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "commitizen prompt using commitlint.config.js", "main": "./lib/index.js", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", - "commit": "git-cz", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "concurrently \"ava --watch --verbose\" \"yarn run watch\"", - "test": "ava --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "babel": "inherit", - "require": [ - "babel-register" - ], - "files": [ - "src/**/*.test.js" - ], - "sources": [ - "src/**/*.js" - ] - }, - "babel": { - "presets": [ - "commitlint" - ] + "pkg": "pkg-check --skip-import" }, "config": { "commitizen": { @@ -39,7 +18,8 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/prompt" }, "keywords": [ "conventional-changelog", @@ -53,23 +33,23 @@ "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", + "engines": { + "node": ">=v18" + }, "devDependencies": { - "@commitlint/utils": "^8.2.0", - "ava": "0.20.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "commitizen": "3.1.2", - "concurrently": "3.6.1", - "cross-env": "6.0.0" + "@commitlint/config-angular": "^20.0.0", + "@commitlint/types": "^14.0.0", + "@commitlint/utils": "^20.0.0", + "@types/inquirer": "^9.0.7", + "commitizen": "^4.2.4" }, "dependencies": { - "@commitlint/load": "^8.2.0", - "babel-runtime": "^6.23.0", - "chalk": "^2.0.0", - "lodash": "4.17.15", - "throat": "^5.0.0", - "vorpal": "^1.12.0" - } + "@commitlint/ensure": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/types": "^20.0.0", + "chalk": "^5.3.0", + "inquirer": "^9.2.15" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/prompt/src/index.js b/@commitlint/prompt/src/index.js deleted file mode 100644 index 0aa619bfd5..0000000000 --- a/@commitlint/prompt/src/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable import/no-unassigned-import, import/prefer-default-export */ -import vorpal from 'vorpal'; -import input from './input'; - -/** - * Entry point for commitizen - * @param {object} _ inquirer instance passed by commitizen, unused - * @param {function} commit callback to execute with complete commit message - * @return {string} genersated commit message - */ -export const prompter = async (_, commit) => { - const message = await input(vorpal); - commit(message); -}; diff --git a/@commitlint/prompt/src/index.ts b/@commitlint/prompt/src/index.ts new file mode 100644 index 0000000000..2985ec0fc6 --- /dev/null +++ b/@commitlint/prompt/src/index.ts @@ -0,0 +1,17 @@ +import inquirer from "inquirer"; + +import { input } from "./input.js"; + +type Commit = (input: string) => void; + +/** + * Entry point for commitizen + * @param cz inquirer instance passed by commitizen, unused + * @param commit callback to execute with complete commit message + * @return {void} + */ +export function prompter(cz: typeof inquirer, commit: Commit): void { + input(cz.prompt).then((message) => { + commit(message); + }); +} diff --git a/@commitlint/prompt/src/input.js b/@commitlint/prompt/src/input.js deleted file mode 100644 index 6ea40c92b1..0000000000 --- a/@commitlint/prompt/src/input.js +++ /dev/null @@ -1,96 +0,0 @@ -import load from '@commitlint/load'; -import throat from 'throat'; - -import format from './library/format'; -import getHasName from './library/get-has-name'; -import getPrompt from './library/get-prompt'; -import settings from './settings'; - -export default input; - -/* eslint-disable valid-jsdoc */ -/** - * Get user input by interactive prompt based on - * conventional-changelog-lint rules. - * @param {function} prompter - * @return {Promise<string>} commit message - */ -async function input(prompter) { - const results = { - type: null, - scope: null, - subject: null, - body: null, - footer: null - }; - - const {rules} = await load(); - - await Promise.all( - ['type', 'scope', 'subject', 'body', 'footer'].map( - throat(1, async input => { - const inputRules = getRules(input, rules); - const inputSettings = settings[input]; - - const isHeader = ['type', 'scope', 'subject'].indexOf(input) > -1; - - const headerLengthRule = getRules('header', rules).filter( - getHasName('max-length') - )[0]; - - if (isHeader && headerLengthRule) { - const [, [severity, applicable, length]] = headerLengthRule; - if (severity > 0 && applicable === 'always') { - inputSettings.header = { - length - }; - } - } - - results[input] = await getPrompt(input, { - // eslint-disable-line no-await-in-loop - rules: inputRules, - settings: inputSettings, - results, - prompter - }); - }) - ) - ).catch(err => { - console.error(err); - return ''; - }); - - // Return the results - return format(results); -} - -/** - * Get prefix for a given rule id - * @param {string} id of the rule - * @return {string} prefix of the rule - */ -function getRulePrefix(id) { - const fragments = id.split('-'); - const [prefix] = fragments; - return fragments.length > 1 ? prefix : null; -} - -/** - * Get a predecate matching rule definitions with a given prefix - * @param {[type]} name [description] - * @return {[type]} [description] - */ -function getHasPrefix(name) { - return rule => getRulePrefix(rule[0]) === name; -} - -/** - * Get rules for a given prefix - * @param {string} prefix to search in rule names - * @param {object} rules rules to search in - * @return {object} rules matching the prefix search - */ -function getRules(prefix, rules) { - return Object.entries(rules).filter(getHasPrefix(prefix)); -} diff --git a/@commitlint/prompt/src/input.test.ts b/@commitlint/prompt/src/input.test.ts new file mode 100644 index 0000000000..20d3e9572a --- /dev/null +++ b/@commitlint/prompt/src/input.test.ts @@ -0,0 +1,133 @@ +/// <reference path="./inquirer/inquirer.d.ts" /> + +import { expect, test, vi } from "vitest"; +// @ts-expect-error -- no typings +import config from "@commitlint/config-angular"; +import chalk from "chalk"; +import { + Answers, + DistinctQuestion, + InputCustomOptions, + PromptModule, +} from "inquirer"; + +import { input } from "./input.js"; + +const testConfig = { + parserPreset: config.parserPreset, + rules: { + ...config.rules, + }, +}; + +vi.mock("@commitlint/load", () => ({ + default: () => testConfig, +})); + +test("should work with all fields filled", async () => { + const prompt = stub({ + "input-custom": { + type: "fix", + scope: "test", + subject: "subject", + body: "body", + footer: "footer", + }, + }); + const message = await input(prompt); + expect(message).toEqual("fix(test): subject\n" + "\nbody\n" + "\nfooter"); +}); + +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: "test", + subject: "subject", + body: "body", + footer: "footer", + }, + }); + const message = await input(prompt); + 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 work without scope", async () => { + const prompt = stub({ + "input-custom": { + type: "fix", + scope: "", + subject: "subject", + body: "body", + footer: "footer", + }, + }); + const message = await input(prompt); + 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.`), + ); + spy.mockRestore(); +}); + +function stub(config: Record<string, Record<string, unknown>>): PromptModule { + const prompt = async ( + 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 questions = config[configType]; + if (!questions) { + throw new Error(`Unexpected config type: ${configType}`); + } + let answer = questions[promptConfig.name!]; + if (answer == null) { + throw new Error(`Unexpected config name: ${promptConfig.name}`); + } + const validate = promptConfig.validate; + if (validate) { + const validationResult = await validate(answer, result); + if (validationResult !== true) { + throw new Error(validationResult || undefined); + } + } + const forceLeadingBlankFn = (promptConfig as InputCustomOptions) + .forceLeadingBlankFn; + if (forceLeadingBlankFn) { + answer = forceLeadingBlankFn(answer as string); + } + result[promptConfig.name!] = answer; + } + return result; + }; + prompt.registerPrompt = () => { + return prompt; + }; + prompt.restoreDefaultPrompts = () => true; + prompt.prompts = {}; + return prompt as any as PromptModule; +} diff --git a/@commitlint/prompt/src/input.ts b/@commitlint/prompt/src/input.ts new file mode 100644 index 0000000000..d2db897fe2 --- /dev/null +++ b/@commitlint/prompt/src/input.ts @@ -0,0 +1,51 @@ +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"; + +/** + * Get user input by interactive prompt based on + * conventional-changelog-lint rules. + * @param prompter + * @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 headerLengthRule = getRules("header", rules).find( + getHasName("max-length"), + ); + const maxLength = getMaxLength(headerLengthRule); + + try { + const questions: DistinctQuestion<Result>[] = []; + prompter.registerPrompt("input-custom", InputCustomPrompt); + + for (const input of parts) { + const inputSetting: InputSetting = settings[input]; + const inputRules = getRules(input, rules); + if (headerParts.includes(input) && maxLength < Infinity) { + inputSetting.header = { + length: maxLength, + }; + } + const question = getPrompt(input, inputRules, inputSetting); + if (question) { + questions.push(question); + } + } + + const results = await prompter<Result>(questions); + return format(results); + } catch (err) { + console.error(err); + return ""; + } +} diff --git a/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts b/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts new file mode 100644 index 0000000000..2cc7ce8400 --- /dev/null +++ b/@commitlint/prompt/src/inquirer/InputCustomPrompt.ts @@ -0,0 +1,118 @@ +/// <reference path="./inquirer.d.ts" /> +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 "node:readline"; +import type { Subscription } from "rxjs"; + +import SuccessfulPromptStateData = inquirer.prompts.SuccessfulPromptStateData; + +interface KeyDescriptor { + value: string; + key: Key; +} + +export default class InputCustomPrompt< + TQuestion extends InputCustomOptions = InputCustomOptions, +> extends InputPrompt<TQuestion> { + private lineSubscription: Subscription; + private readonly tabCompletion: string[]; + + constructor( + question: TQuestion, + readLine: ReadlineInterface, + answers: Answers, + ) { + super(question, readLine, answers); + + if (this.opt.log) { + this.rl.write(this.opt.log(answers)); + } + + if (!this.opt.maxLength) { + this.throwParamError("maxLength"); + } + + const events = observe(this.rl); + this.lineSubscription = events.keypress.subscribe( + this.onKeyPress2.bind(this), + ); + this.tabCompletion = (this.opt.tabCompletion || []) + .map((item) => item.value) + .sort((a, b) => a.localeCompare(b)); + } + + 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); + } + + /** + * @see https://nodejs.org/api/readline.html#readline_rl_write_data_key + * @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(line.substr(this.rl.line.length)); + } + + onKeyPress2(e: KeyDescriptor): void { + 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) { + if (item.startsWith(line) && item !== line) { + line = item; + break; + } + } + } + this.updateLine(line); + } + } + + measureInput(input: string): number { + if (this.opt.filter) { + return this.opt.filter(input, this.answers).length; + } + return input.length; + } + + render(error?: string): void { + const answered = this.status === "answered"; + + let message = this.getQuestion(); + const length = this.measureInput(this.rl.line); + + if (answered) { + message += chalk.cyan(this.answer); + } else if (this.opt.transformer) { + message += this.opt.transformer(this.rl.line, this.answers, {}); + } + + let bottomContent = ""; + + if (error) { + bottomContent = chalk.red(">> ") + error; + } else if (!answered) { + const maxLength = this.opt.maxLength(this.answers); + if (maxLength < Infinity) { + const lengthRemaining = maxLength - length; + const color = + lengthRemaining <= 5 + ? chalk.red + : lengthRemaining <= 10 + ? chalk.yellow + : chalk.grey; + bottomContent = color(`${lengthRemaining} characters left`); + } + } + + this.screen.render(message, bottomContent); + } +} diff --git a/@commitlint/prompt/src/inquirer/inquirer.d.ts b/@commitlint/prompt/src/inquirer/inquirer.d.ts new file mode 100644 index 0000000000..1d8df10d5f --- /dev/null +++ b/@commitlint/prompt/src/inquirer/inquirer.d.ts @@ -0,0 +1,24 @@ +import { Answers, InputQuestionOptions } from "inquirer"; + +declare module "inquirer" { + interface InputCustomCompletionOption { + value: string; + description?: string; + } + + export interface InputCustomOptions<T extends Answers = Answers> + extends InputQuestionOptions<T> { + /** + * @inheritdoc + */ + 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>; + } +} diff --git a/@commitlint/prompt/src/library/enum-rule-is-active.js b/@commitlint/prompt/src/library/enum-rule-is-active.js deleted file mode 100644 index 8d40029dde..0000000000 --- a/@commitlint/prompt/src/library/enum-rule-is-active.js +++ /dev/null @@ -1,12 +0,0 @@ -import ruleIsApplicable from './rule-is-applicable'; -import ruleIsActive from './rule-is-active'; - -/** - * [enumRuleIsActive description] - * @param {[type]} rule [description] - * @return {[type]} [description] - */ -export default function enumRuleIsActive(rule) { - const [, [, , value]] = rule; - return ruleIsActive(rule) && ruleIsApplicable(rule) && value.length > 0; -} diff --git a/@commitlint/prompt/src/library/format.js b/@commitlint/prompt/src/library/format.js deleted file mode 100644 index 64bd01d7c1..0000000000 --- a/@commitlint/prompt/src/library/format.js +++ /dev/null @@ -1,33 +0,0 @@ -import chalk from 'chalk'; -import {toPairs} from 'lodash'; - -export default format; - -/** - * Get formatted commit message - * @param {object} input object containing structured results - * @param {boolean} debug show debug information in commit message - * @return {string} formatted debug message - */ -function format(input, debug = false) { - const results = debug - ? toPairs(input).reduce((registry, item) => { - const [name, value] = item; - registry[name] = - value === null ? chalk.grey(`<${name}>`) : chalk.bold(value); - return registry; - }, {}) - : input; - - // Return formatted string - const {type, scope, subject, body, footer} = results; - return [ - `${type}${scope ? '(' : ''}${scope}${scope ? ')' : ''}${ - type || scope ? ':' : '' - } ${subject}`, - body, - footer - ] - .filter(Boolean) - .join('\n'); -} diff --git a/@commitlint/prompt/src/library/format.test.ts b/@commitlint/prompt/src/library/format.test.ts new file mode 100644 index 0000000000..e2a69d7516 --- /dev/null +++ b/@commitlint/prompt/src/library/format.test.ts @@ -0,0 +1,56 @@ +import { test, expect } from "vitest"; +import type { Result } from "./types.js"; +import format from "./format.js"; + +test("should return empty string", () => { + const result: Result = {}; + expect(format(result)).toBe(" "); +}); + +test("should omit scope", () => { + const result: Result = { + type: "fix", + subject: "test", + }; + expect(format(result)).toBe("fix: test"); +}); + +test("should include scope", () => { + const result: Result = { + type: "fix", + scope: "prompt", + subject: "test", + }; + expect(format(result)).toBe("fix(prompt): test"); +}); + +test("should include body", () => { + const result: Result = { + type: "fix", + scope: "prompt", + subject: "test", + body: "some body", + }; + expect(format(result)).toBe("fix(prompt): test\nsome body"); +}); + +test("should include footer", () => { + const result: Result = { + type: "fix", + scope: "prompt", + subject: "test", + footer: "some footer", + }; + expect(format(result)).toBe("fix(prompt): test\nsome footer"); +}); + +test("should include body and footer", () => { + const result: Result = { + type: "fix", + scope: "prompt", + subject: "test", + body: "some body", + footer: "some 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 new file mode 100644 index 0000000000..414af8920f --- /dev/null +++ b/@commitlint/prompt/src/library/format.ts @@ -0,0 +1,39 @@ +import chalk from "chalk"; + +import type { Result, ResultPart } from "./types.js"; + +/** + * Get formatted commit message + * @param input object containing structured results + * @param debug show debug information in commit message + * @return formatted debug message + */ +export default function format(input: Result, debug = false): string { + const defaultInput = { + type: undefined, + scope: undefined, + subject: undefined, + body: undefined, + footer: undefined, + ...input, + }; + const results = debug + ? Object.entries(defaultInput).reduce<Result>((registry, [name, value]) => { + 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; + return [ + `${type || ""}${scope ? `(${scope})` : ""}${type || scope ? ":" : ""} ${ + subject || "" + }`, + body, + footer, + ] + .filter(Boolean) + .join("\n"); +} diff --git a/@commitlint/prompt/src/library/get-forced-case-fn.js b/@commitlint/prompt/src/library/get-forced-case-fn.js deleted file mode 100644 index 29ebd553bf..0000000000 --- a/@commitlint/prompt/src/library/get-forced-case-fn.js +++ /dev/null @@ -1,64 +0,0 @@ -import * as _ from 'lodash'; - -/** - * Get forced case for rule - * @param {object} rule to parse - * @return {fn} transform function applying the enforced case - */ -export default function getForcedCaseFn(rule) { - const noop = input => input; - - if (!rule) { - return noop; - } - - const [config] = rule; - - if (!Array.isArray(config)) { - return noop; - } - - const [level] = config; - - if (level === 0) { - return; - } - - const [, when] = config; - - if (when === 'neve') { - return; - } - - const [, , target] = config; - - if (Array.isArray(target)) { - return noop; - } - - switch (target) { - case 'camel-case': - return input => _.camelCase(input); - case 'kebab-case': - return input => _.kebabCase(input); - case 'snake-case': - return input => _.snakeCase(input); - case 'pascal-case': - return input => _.upperFirst(_.camelCase(input)); - case 'start-case': - return input => _.startCase(input); - case 'upper-case': - case 'uppercase': - return input => input.toUpperCase(); - case 'sentence-case': - case 'sentencecase': - return input => - `${input.charAt(0).toUpperCase()}${input.substring(1).toLowerCase()}`; - case 'lower-case': - case 'lowercase': - case 'lowerCase': // Backwards compat config-angular v4 - return input => input.toLowerCase() === input; - default: - throw new TypeError(`Unknown target case "${rule[2]}"`); - } -} diff --git a/@commitlint/prompt/src/library/get-forced-case-fn.test.ts b/@commitlint/prompt/src/library/get-forced-case-fn.test.ts new file mode 100644 index 0000000000..c96caa562a --- /dev/null +++ b/@commitlint/prompt/src/library/get-forced-case-fn.test.ts @@ -0,0 +1,118 @@ +import { test, expect } from "vitest"; +import { RuleConfigSeverity } from "@commitlint/types"; + +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"); + + 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"); + + 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"]], + ]); + 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"'); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "foo"], + ]); + expect(() => rule("test")).toThrow('Unknown target case "foo"'); +}); + +test("should convert text correctly", () => { + let rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "camel-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("testFooBarBazBaz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "kebab-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test-foo-bar-baz-baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "snake-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foo_bar_baz_baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "pascal-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TestFooBarBazBaz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "start-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST FOO Bar Baz Baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "upper-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "uppercase"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBAR-BAZ BAZ"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "sentence-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "sentencecase"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("TEST_FOOBar-baz baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "lower-case"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "lowercase"], + ]); + expect(rule("TEST_FOOBar-baz baz")).toBe("test_foobar-baz baz"); + + rule = getForcedCaseFn([ + "name", + [RuleConfigSeverity.Warning, "always", "lowerCase"], + ]); + 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 new file mode 100644 index 0000000000..11b91fb178 --- /dev/null +++ b/@commitlint/prompt/src/library/get-forced-case-fn.ts @@ -0,0 +1,28 @@ +import { toCase } from "@commitlint/ensure"; +import type { TargetCaseType } from "@commitlint/types"; + +import type { RuleEntry } from "./types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./utils.js"; + +/** + * Get forced case for rule + * @param rule to parse + * @return transform function applying the enforced case + */ +export default function getForcedCaseFn( + rule?: RuleEntry, +): (input: string) => string { + const noop = (input: string) => input; + + if (!rule || !ruleIsActive(rule) || ruleIsNotApplicable(rule)) { + return noop; + } + + const target = rule[1][2]; + + if (Array.isArray(target)) { + return noop; + } + + return (input: string) => toCase(input, target as TargetCaseType); +} diff --git a/@commitlint/prompt/src/library/get-forced-leading-fn.js b/@commitlint/prompt/src/library/get-forced-leading-fn.js deleted file mode 100644 index 810d9ca2d6..0000000000 --- a/@commitlint/prompt/src/library/get-forced-leading-fn.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Get forced leading for rule - * @param {object} rule to parse - * @return {fn} transform function applying the leading - */ -export default function getForcedLeadingFn(rule) { - const noop = input => input; - const remove = input => { - const fragments = input.split('\n'); - return fragments[0] === '' ? fragments.slice(1).join('\n') : input; - }; - const lead = input => { - const fragments = input.split('\n'); - return fragments[0] === '' ? input : ['', ...fragments].join('\n'); - }; - - if (!rule) { - return noop; - } - - const leading = getForcedLeading(rule); - - if (leading === null) { - return noop; - } - - return leading ? lead : remove; -} - -/** - * Get forced leading for rule - * @param {object} rule to parse - * @return {boolean|null} transform function applying the leading - */ -function getForcedLeading(rule) { - if (!rule) { - return null; - } - - const [, [severity, applicable]] = rule; - const negated = applicable === 'never'; - - if (severity === 0) { - return null; - } - - return !negated; -} diff --git a/@commitlint/prompt/src/library/get-forced-leading-fn.ts b/@commitlint/prompt/src/library/get-forced-leading-fn.ts new file mode 100644 index 0000000000..7a750ee201 --- /dev/null +++ b/@commitlint/prompt/src/library/get-forced-leading-fn.ts @@ -0,0 +1,26 @@ +import type { RuleEntry } from "./types.js"; +import { ruleIsActive, ruleIsNotApplicable } from "./utils.js"; + +/** + * Get forced leading for rule + * @param rule to parse + * @return transform function applying the leading + */ +export default function getForcedLeadingFn( + 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 lead = (input: string): string => { + 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-has-name.js b/@commitlint/prompt/src/library/get-has-name.js deleted file mode 100644 index 1f7df8f102..0000000000 --- a/@commitlint/prompt/src/library/get-has-name.js +++ /dev/null @@ -1,10 +0,0 @@ -import getRuleName from './get-rule-name'; - -/** - * Get a predecate matching rule definitions with a given name - * @param {[type]} name [description] - * @return {[type]} [description] - */ -export default function getHasName(name) { - return rule => getRuleName(rule[0]) === name; -} diff --git a/@commitlint/prompt/src/library/get-prompt.js b/@commitlint/prompt/src/library/get-prompt.js deleted file mode 100644 index 8c3a21a0f9..0000000000 --- a/@commitlint/prompt/src/library/get-prompt.js +++ /dev/null @@ -1,234 +0,0 @@ -import chalk from 'chalk'; - -import enumRuleIsActive from './enum-rule-is-active'; -import format from './format'; -import getForcedCaseFn from './get-forced-case-fn'; -import getForcedLeadingFn from './get-forced-leading-fn'; -import getHasName from './get-has-name'; -import meta from './meta'; - -export default getPrompt; - -/** - * Get a cli prompt based on rule configuration - * @param {string} type type of the data to gather - * @param {object} context rules to parse - * @return {object} prompt instance - */ -function getPrompt(type, context = {}) { - const {rules = [], settings = {}, results = {}, prompter} = context; - - if (typeof prompter !== 'function') { - throw new TypeError('Missing prompter function in getPrompt context'); - } - - const prompt = prompter(); - - if (typeof prompt.removeAllListeners !== 'function') { - throw new TypeError( - 'getPrompt: prompt.removeAllListeners is not a function' - ); - } - - if (typeof prompt.command !== 'function') { - throw new TypeError('getPrompt: prompt.command is not a function'); - } - - if (typeof prompt.catch !== 'function') { - throw new TypeError('getPrompt: prompt.catch is not a function'); - } - - if (typeof prompt.addListener !== 'function') { - throw new TypeError('getPrompt: prompt.addListener is not a function'); - } - - if (typeof prompt.log !== 'function') { - throw new TypeError('getPrompt: prompt.log is not a function'); - } - - if (typeof prompt.delimiter !== 'function') { - throw new TypeError('getPrompt: prompt.delimiter is not a function'); - } - - if (typeof prompt.show !== 'function') { - throw new TypeError('getPrompt: prompt.show is not a function'); - } - - const enumRule = rules.filter(getHasName('enum')).filter(enumRuleIsActive)[0]; - - const emptyRule = rules.filter(getHasName('empty'))[0]; - - const mustBeEmpty = emptyRule - ? emptyRule[1][0] > 0 && emptyRule[1][1] === 'always' - : false; - - const mayNotBeEmpty = emptyRule - ? emptyRule[1][0] > 0 && emptyRule[1][1] === 'never' - : false; - - const mayBeEmpty = !mayNotBeEmpty; - - if (mustBeEmpty) { - prompt.removeAllListeners('keypress'); - prompt.removeAllListeners('client_prompt_submit'); - prompt.ui.redraw.done(); - return Promise.resolve(); - } - - const caseRule = rules.filter(getHasName('case'))[0]; - - const forceCaseFn = getForcedCaseFn(caseRule); - - const leadingBlankRule = rules.filter(getHasName('leading-blank'))[0]; - - const forceLeadingBlankFn = getForcedLeadingFn(leadingBlankRule); - - const maxLenghtRule = rules.filter(getHasName('max-length'))[0]; - - const hasMaxLength = maxLenghtRule && maxLenghtRule[1][0] > 0; - - const inputMaxLength = hasMaxLength ? maxLenghtRule[1][1] : Infinity; - - const headerLength = settings.header ? settings.header.length : Infinity; - - const remainingHeaderLength = headerLength - ? headerLength - - [ - results.type, - results.scope, - results.scope ? '()' : '', - results.type && results.scope ? ':' : '', - results.subject - ].join('').length - : Infinity; - - const maxLength = Math.min(inputMaxLength, remainingHeaderLength); - - return new Promise(resolve => { - // Add the defined enums as sub commands if applicable - if (enumRule) { - const [, [, , enums]] = enumRule; - - enums.forEach(enumerable => { - const enumSettings = (settings.enumerables || {})[enumerable] || {}; - prompt - .command(enumerable) - .description(enumSettings.description || '') - .action(() => { - prompt.removeAllListeners(); - prompt.ui.redraw.done(); - return resolve(forceLeadingBlankFn(forceCaseFn(enumerable))); - }); - }); - } else { - prompt.catch('[text...]').action(parameters => { - const {text = ''} = parameters; - prompt.removeAllListeners(); - prompt.ui.redraw.done(); - return resolve(forceLeadingBlankFn(forceCaseFn(text.join(' ')))); - }); - } - - if (mayBeEmpty) { - // Add an easy exit command - prompt - .command(':skip') - .description('Skip the input if possible.') - .action(() => { - prompt.removeAllListeners(); - prompt.ui.redraw.done(); - resolve(''); - }); - } - - // Handle empty input - const onSubmit = input => { - if (input.length > 0) { - return; - } - - // Show help if enum is defined and input may not be empty - if (mayNotBeEmpty) { - prompt.ui.log(chalk.yellow(`⚠ ${chalk.bold(type)} may not be empty.`)); - } - - if (mayBeEmpty) { - prompt.ui.log( - chalk.blue( - `ℹ Enter ${chalk.bold(':skip')} to omit ${chalk.bold(type)}.` - ) - ); - } - - if (enumRule) { - prompt.exec('help'); - } - }; - - const drawRemaining = length => { - if (length < Infinity) { - const colors = [ - { - threshold: 5, - color: 'red' - }, - { - threshold: 10, - color: 'yellow' - }, - { - threshold: Infinity, - color: 'grey' - } - ]; - - const color = colors - .filter(item => { - return item.threshold >= length; - }) - .map(item => item.color)[0]; - - prompt.ui.redraw(chalk[color](`${length} characters left`)); - } - }; - - const onKey = event => { - const sanitized = forceCaseFn(event.value); - const cropped = sanitized.slice(0, maxLength); - - // We **could** do live editing, but there are some quirks to solve - /* const live = merge({}, results, { - [type]: cropped - }); - prompt.ui.redraw(`\n\n${format(live, true)}\n\n`); */ - - if (maxLength) { - drawRemaining(maxLength - cropped.length); - } - prompt.ui.input(cropped); - }; - - prompt.addListener('keypress', onKey); - prompt.addListener('client_prompt_submit', onSubmit); - - prompt.log( - `\n\nPlease enter a ${chalk.bold(type)}: ${meta({ - optional: !mayNotBeEmpty, - required: mayNotBeEmpty, - 'tab-completion': typeof enumRule !== 'undefined', - header: typeof settings.header !== 'undefined', - 'multi-line': settings.multiline - })}` - ); - - if (settings.description) { - prompt.log(chalk.grey(`${settings.description}\n`)); - } - - prompt.log(`\n\n${format(results, true)}\n\n`); - - drawRemaining(maxLength); - - prompt.delimiter(`❯ ${type}:`).show(); - }); -} diff --git a/@commitlint/prompt/src/library/get-prompt.test.js b/@commitlint/prompt/src/library/get-prompt.test.js deleted file mode 100644 index b0aa9e39e4..0000000000 --- a/@commitlint/prompt/src/library/get-prompt.test.js +++ /dev/null @@ -1,88 +0,0 @@ -import test from 'ava'; -import getPrompt from './get-prompt'; - -test('throws without params', t => { - t.throws(() => getPrompt(), /Missing prompter function/); -}); - -test('throws with incompatible prompter', t => { - t.throws( - () => - getPrompt('type', { - prompter() { - return {}; - } - }), - /prompt.removeAllListeners/ - ); -}); - -test('returns input unaltered wihtout rules', async t => { - const message = await getPrompt('type', { - prompter: stub('foobar') - }); - - t.is(message, 'foobar'); -}); - -function stub(input = '') { - return stubPrompter; - - function stubPrompter() { - const called = []; - const actions = []; - - const instance = { - action(...args) { - actions.push(args[0]); - called.push([instance.action, args]); - }, - addListener(...args) { - called.push([instance.addListener, args]); - }, - catch(...args) { - called.push([instance.catch, args]); - return instance; - }, - command(...args) { - called.push([instance.command, args]); - return instance; - }, - description(...args) { - called.push([instance.description, args]); - return instance; - }, - delimiter(...args) { - called.push([instance.delimiter, args]); - return instance; - }, - log(...args) { - called.push([instance.log, args]); - return instance; - }, - removeAllListeners(...args) { - called.push([instance.removeAllListeners, args]); - }, - show(...args) { - called.push([instance.show, args]); - return instance; - }, - ui: { - redraw: { - done(...args) { - called.push([instance.ui.redraw.done, args]); - } - } - }, - called - }; - - setTimeout(() => { - actions[0]({ - text: Array.isArray(input) ? input : [input] - }); - }); - - return instance; - } -} diff --git a/@commitlint/prompt/src/library/get-prompt.ts b/@commitlint/prompt/src/library/get-prompt.ts new file mode 100644 index 0000000000..924549c007 --- /dev/null +++ b/@commitlint/prompt/src/library/get-prompt.ts @@ -0,0 +1,124 @@ +import chalk from "chalk"; +import type { InputCustomOptions } from "inquirer"; + +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 { + enumRuleIsActive, + getHasName, + getMaxLength, + ruleIsActive, + ruleIsApplicable, + ruleIsNotApplicable, +} from "./utils.js"; + +const EOL = "\n"; + +/** + * Get a cli prompt based on rule configuration + * @param type type of the data to gather + * @param rules + * @param settings + * @return prompt instance + */ +export default function getPrompt( + type: ResultPart, + rules: RuleEntry[] = [], + settings: InputSetting = {}, +): InputCustomOptions<Result> | null { + const emptyRule = rules.filter(getHasName("empty")).find(ruleIsActive); + + const mustBeEmpty = emptyRule ? ruleIsApplicable(emptyRule) : false; + + if (mustBeEmpty) { + return null; + } + + const required = emptyRule ? ruleIsNotApplicable(emptyRule) : false; + + const forceCaseFn = getForcedCaseFn(rules.find(getHasName("case"))); + const forceLeadingBlankFn = getForcedLeadingFn( + rules.find(getHasName("leading-blank")), + ); + + const maxLengthRule = rules.find(getHasName("max-length")); + const inputMaxLength = getMaxLength(maxLengthRule); + + 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 || "", + }; + }) + : []; + + const maxLength = (res: Result) => { + let remainingHeaderLength = Infinity; + if (settings.header && settings.header.length) { + const header = format({ + type: res.type, + scope: res.scope, + subject: res.subject, + }); + remainingHeaderLength = settings.header.length - header.length; + } + return Math.min(inputMaxLength, remainingHeaderLength); + }; + + return { + type: "input-custom", + name: type, + message: `${type}:`, + validate(input, answers) { + if (input.length > maxLength(answers || {})) { + return "Input contains too many characters!"; + } + if (required && input.trim().length === 0) { + // Show help if enum is defined and input may not be empty + return `⚠ ${chalk.bold(type)} may not be empty.`; + } + + const tabValues = tabCompletion.map((item) => item.value); + if ( + input.length > 0 && + tabValues.length > 0 && + !tabValues.includes(input) + ) { + 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({ + optional: !required, + required: required, + "tab-completion": typeof enumRule !== "undefined", + header: typeof settings.header !== "undefined", + "multi-line": settings.multiline, + })}` + EOL; + + if (settings.description) { + prefix += chalk.grey(`${settings.description}`) + EOL; + } + if (answers) { + prefix += EOL + `${format(answers, true)}` + EOL; + } + return prefix + EOL; + }, + maxLength, + transformer(value: string) { + return forceCaseFn(value); + }, + forceLeadingBlankFn, + }; +} diff --git a/@commitlint/prompt/src/library/get-rule-name.js b/@commitlint/prompt/src/library/get-rule-name.js deleted file mode 100644 index 6fccdd346f..0000000000 --- a/@commitlint/prompt/src/library/get-rule-name.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Get name for a given rule id - * @param {string} id of the rule - * @return {[type]} name of the rule - */ -export default function getRuleName(id) { - const fragments = id.split('-'); - return fragments.length > 1 ? fragments.slice(1).join('-') : fragments[0]; -} diff --git a/@commitlint/prompt/src/library/meta.js b/@commitlint/prompt/src/library/meta.js deleted file mode 100644 index 9cec53604e..0000000000 --- a/@commitlint/prompt/src/library/meta.js +++ /dev/null @@ -1,19 +0,0 @@ -import chalk from 'chalk'; -import {toPairs} from 'lodash'; - -/** - * Get formatted meta hints for configuration - * @param {object} settings dictionary to parse - * @return {string} formatted meta information - */ -export default function meta(settings) { - return chalk.grey( - toPairs(settings) - .filter(item => item[1]) - .map(item => { - const [name, value] = item; - return typeof value === 'boolean' ? `[${name}]` : `[${name}=${value}]`; - }) - .join(' ') - ); -} diff --git a/@commitlint/prompt/src/library/meta.ts b/@commitlint/prompt/src/library/meta.ts new file mode 100644 index 0000000000..b361364a07 --- /dev/null +++ b/@commitlint/prompt/src/library/meta.ts @@ -0,0 +1,18 @@ +import chalk from "chalk"; + +/** + * Get formatted meta hints for configuration + * @param settings dictionary to parse + * @return formatted meta information + */ +export default function meta(settings: Record<string, unknown>): string { + return chalk.grey( + Object.entries(settings || {}) + .filter((item) => item[1]) + .map((item) => { + const [name, value] = item; + return typeof value === "boolean" ? `[${name}]` : `[${name}=${value}]`; + }) + .join(" "), + ); +} diff --git a/@commitlint/prompt/src/library/rule-is-active.js b/@commitlint/prompt/src/library/rule-is-active.js deleted file mode 100644 index aae811891a..0000000000 --- a/@commitlint/prompt/src/library/rule-is-active.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Check if a rule definition is active - * @param {object} rule to check - * @return {boolean} if the rule definition is active - */ -export default function ruleIsActive(rule) { - const [, [severity]] = rule; - return severity > 0; -} diff --git a/@commitlint/prompt/src/library/rule-is-applicable.js b/@commitlint/prompt/src/library/rule-is-applicable.js deleted file mode 100644 index ec94d60bcc..0000000000 --- a/@commitlint/prompt/src/library/rule-is-applicable.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Check if a rule definition is applicable - * @param {object} rule to check - * @return {boolean} if the rule definition is appliable - */ -export default function ruleIsApplicable(rule) { - const [, [, applicable]] = rule; - return applicable === 'always'; -} diff --git a/@commitlint/prompt/src/library/types.ts b/@commitlint/prompt/src/library/types.ts new file mode 100644 index 0000000000..65b8bc3ad9 --- /dev/null +++ b/@commitlint/prompt/src/library/types.ts @@ -0,0 +1,27 @@ +import type { + RuleConfigCondition, + RuleConfigSeverity, +} from "@commitlint/types"; + +export type RuleEntry = + | [string, Readonly<[RuleConfigSeverity.Disabled]>] + | [string, Readonly<[RuleConfigSeverity, RuleConfigCondition]>] + | [string, Readonly<[RuleConfigSeverity, RuleConfigCondition, unknown]>]; + +export type InputSetting = { + description?: string; + enumerables?: Record< + string, + { + description: string; + } + >; + multiline?: boolean; + header?: { + length?: number; + }; +}; + +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 new file mode 100644 index 0000000000..96f1ae6d6f --- /dev/null +++ b/@commitlint/prompt/src/library/utils.test.ts @@ -0,0 +1,130 @@ +import { test, expect } from "vitest"; +import { + RuleConfigQuality, + RuleConfigSeverity, + RulesConfig, +} from "@commitlint/types"; + +import { + enumRuleIsActive, + getHasName, + getMaxLength, + getRuleName, + getRulePrefix, + getRules, + ruleIsActive, +} 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("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, + ); + expect(ruleIsActive(["", [RuleConfigSeverity.Warning, "never", 100]])).toBe( + true, + ); + expect(ruleIsActive(["", [RuleConfigSeverity.Disabled, "always", 100]])).toBe( + false, + ); + expect(ruleIsActive(["", [RuleConfigSeverity.Error]] as any)).toBe(true); +}); + +test("getMaxLength", () => { + expect(getMaxLength(["", [RuleConfigSeverity.Error, "always", 100]])).toBe( + 100, + ); + expect(getMaxLength(["", [RuleConfigSeverity.Warning, "never", 100]])).toBe( + Infinity, + ); + expect(getMaxLength(["", [RuleConfigSeverity.Disabled, "always", 100]])).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], + }; + let lengthRule = getRules("header", rules).find(getHasName("max-length")); + expect(getMaxLength(lengthRule)).toBe(100); + + lengthRule = getRules("body", rules).find(getHasName("max-length")); + expect(getMaxLength(lengthRule)).toBe(Infinity); + + lengthRule = getRules("test", rules).find(getHasName("max-length")); + expect(getMaxLength(lengthRule)).toBe(Infinity); +}); + +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"]], + }; + + let enumRule = getRules("type", rules) + .filter(getHasName("enum")) + .find(enumRuleIsActive); + expect(enumRule).toEqual([ + "type-enum", + [RuleConfigSeverity.Error, "always", ["build", "chore", "ci"]], + ]); + + enumRule = getRules("string", rules) + .filter(getHasName("enum")) + .find(enumRuleIsActive); + expect(enumRule).toEqual(undefined); + + enumRule = getRules("enum", rules) + .filter(getHasName("string")) + .find(enumRuleIsActive); + expect(enumRule).toEqual([ + "enum-string", + [RuleConfigSeverity.Warning, "always", ["1", "2", "3"]], + ]); + + enumRule = getRules("bar", rules) + .filter(getHasName("enum")) + .find(enumRuleIsActive); + expect(enumRule).toEqual(undefined); + + 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 new file mode 100644 index 0000000000..aaca4e2004 --- /dev/null +++ b/@commitlint/prompt/src/library/utils.ts @@ -0,0 +1,122 @@ +import { RuleConfigSeverity } from "@commitlint/types"; +import type { QualifiedRules } from "@commitlint/types"; + +import type { RuleEntry } from "./types.js"; + +/** + * Get name for a given rule id + * @param id of the rule + * @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]; +} + +/** + * Get prefix for a given rule id + * @param id of the rule + * @return prefix of the rule + */ +export function getRulePrefix(id: string): string | null { + const fragments = id.split("-"); + return fragments.length > 1 ? fragments[0] : null; +} + +/** + * Get a predicate matching rule definitions with a given name + */ +export function getHasName(name: string) { + return <T extends RuleEntry>( + rule: RuleEntry, + ): rule is Exclude<T, [string, undefined]> => getRuleName(rule[0]) === name; +} + +/** + * Check if a rule definition is active + * @param rule to check + * @return if the rule definition is active + */ +export function ruleIsActive<T extends RuleEntry>( + rule: T, +): rule is Exclude<T, [string, Readonly<[RuleConfigSeverity.Disabled]>]> { + const [, value] = rule; + if (value && Array.isArray(value)) { + return value[0] > RuleConfigSeverity.Disabled; + } + return false; +} + +/** + * Check if a rule definition is applicable + * @param rule to check + * @return if the rule definition is applicable + */ +export function ruleIsApplicable( + rule: RuleEntry, +): rule is + | [string, Readonly<[RuleConfigSeverity, "always"]>] + | [string, Readonly<[RuleConfigSeverity, "always", unknown]>] { + const [, value] = rule; + if (value && Array.isArray(value)) { + return value[1] === "always"; + } + return false; +} + +/** + * Check if a rule definition is applicable + * @param rule to check + * @return if the rule definition is applicable + */ +export function ruleIsNotApplicable( + rule: RuleEntry, +): rule is + | [string, Readonly<[RuleConfigSeverity, "never"]>] + | [string, Readonly<[RuleConfigSeverity, "never", unknown]>] { + const [, value] = rule; + if (value && Array.isArray(value)) { + return value[1] === "never"; + } + return false; +} + +export function enumRuleIsActive( + rule: RuleEntry, +): rule is [ + string, + Readonly< + [RuleConfigSeverity.Warning | RuleConfigSeverity.Error, "always", string[]] + >, +] { + return ( + ruleIsActive(rule) && + ruleIsApplicable(rule) && + Array.isArray(rule[1][2]) && + rule[1][2].length > 0 + ); +} + +/** + * Get rules for a given prefix + * @param prefix to search in rule names + * @param rules rules to search in + * @return rules matching the prefix search + */ +export function getRules(prefix: string, rules: QualifiedRules): RuleEntry[] { + return Object.entries(rules).filter( + (rule): rule is RuleEntry => getRulePrefix(rule[0]) === prefix, + ); +} + +export function getMaxLength(rule?: RuleEntry): number { + if ( + rule && + ruleIsActive(rule) && + ruleIsApplicable(rule) && + typeof rule[1][2] === "number" + ) { + return rule[1][2]; + } + return Infinity; +} diff --git a/@commitlint/prompt/src/settings.js b/@commitlint/prompt/src/settings.js deleted file mode 100644 index 63781fbe68..0000000000 --- a/@commitlint/prompt/src/settings.js +++ /dev/null @@ -1,56 +0,0 @@ -export default { - type: { - description: '<type> holds information about the goal of a change.', - enumerables: { - feat: { - description: 'Adds a new feature.' - }, - fix: { - description: 'Solves a bug.' - }, - chore: { - description: "Other changes that don't modify src or test files" - }, - docs: { - description: 'Adds or alters documentation.' - }, - style: { - description: 'Improves formatting, white-space.' - }, - refactor: { - description: - 'Rewrites code without feature, performance or bug changes.' - }, - perf: { - description: 'Improves performance.' - }, - test: { - description: 'Adds or modifies tests.' - }, - build: { - description: 'Affects the build system or external dependencies.' - }, - ci: { - description: 'Changes CI configuration files and scripts.' - }, - revert: { - description: 'Reverts a previous commit.' - } - } - }, - scope: { - description: '<scope> marks which sub-component of the project is affected' - }, - subject: { - description: '<subject> is a short, high-level description of the change' - }, - body: { - description: '<body> holds additional information about the change', - multline: true - }, - footer: { - description: - '<footer> holds further meta data, such as breaking changes and issue ids', - multiline: true - } -}; diff --git a/@commitlint/prompt/src/settings.ts b/@commitlint/prompt/src/settings.ts new file mode 100644 index 0000000000..a85a9a5394 --- /dev/null +++ b/@commitlint/prompt/src/settings.ts @@ -0,0 +1,56 @@ +export default { + type: { + description: "<type> holds information about the goal of a change.", + enumerables: { + feat: { + description: "Adds a new feature.", + }, + fix: { + description: "Solves a bug.", + }, + chore: { + description: "Other changes that don't modify src or test files", + }, + docs: { + description: "Adds or alters documentation.", + }, + style: { + description: "Improves formatting, white-space.", + }, + refactor: { + description: + "Rewrites code without feature, performance or bug changes.", + }, + perf: { + description: "Improves performance.", + }, + test: { + description: "Adds or modifies tests.", + }, + build: { + description: "Affects the build system or external dependencies.", + }, + ci: { + description: "Changes CI configuration files and scripts.", + }, + revert: { + description: "Reverts a previous commit.", + }, + }, + }, + scope: { + description: "<scope> marks which sub-component of the project is affected", + }, + subject: { + description: "<subject> is a short, high-level description of the change", + }, + body: { + description: "<body> holds additional information about the change", + multiline: true, + }, + footer: { + description: + "<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 new file mode 100644 index 0000000000..52e48f310a --- /dev/null +++ b/@commitlint/prompt/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }, { "path": "../load" }] +} diff --git a/@commitlint/read/CHANGELOG.md b/@commitlint/read/CHANGELOG.md index 8026e61eae..60f0f234b0 100644 --- a/@commitlint/read/CHANGELOG.md +++ b/@commitlint/read/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/read @@ -11,7 +11,29 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + + +### Bug Fixes + +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) + + + + + +# [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,64 +41,412 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/read + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) ### Bug Fixes -* use sander.readFile correctly ([#448](https://github.com/conventional-changelog/commitlint/issues/448)) ([#630](https://github.com/conventional-changelog/commitlint/issues/630)) ([8e47985](https://github.com/conventional-changelog/commitlint/commit/8e47985)) +* **read:** remove fs-extra usage and use fs/promises ([#3803](https://github.com/conventional-changelog/commitlint/issues/3803)) ([714be66](https://github.com/conventional-changelog/commitlint/commit/714be668c104c554c66e866e53addd04944544f6)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/read + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/read + + + + + +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) + +**Note:** Version bump only for package @commitlint/read + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/read + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + + +### Bug Fixes + +* update dependency @types/fs-extra to v11 ([#3494](https://github.com/conventional-changelog/commitlint/issues/3494)) ([8f553c7](https://github.com/conventional-changelog/commitlint/commit/8f553c7603e3ee0f435d878e396eec899a213de8)) + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + ### Bug Fixes -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) -* resolve path to commit message for git submodules ([83b1a47](https://github.com/conventional-changelog/commitlint/commit/83b1a47)) +- update dependency fs-extra to v11 ([#3460](https://github.com/conventional-changelog/commitlint/issues/3460)) ([a437923](https://github.com/conventional-changelog/commitlint/commit/a43792388e0d9707da770b26592c5e31553384a1)) + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package @commitlint/read + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) ### Features -* add support for git submodules ([cc575fa](https://github.com/conventional-changelog/commitlint/commit/cc575fa)) +- **commitlint:** add additional git log args ([#3334](https://github.com/conventional-changelog/commitlint/issues/3334)) ([229c65b](https://github.com/conventional-changelog/commitlint/commit/229c65b60f15c15da5f5b11deb555d1f557c673a)) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/read -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package @commitlint/read +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) +**Note:** Version bump only for package @commitlint/read + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) **Note:** Version bump only for package @commitlint/read -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/read + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/read +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +### Bug Fixes + +- update dependency fs-extra to v10 ([#2575](https://github.com/conventional-changelog/commitlint/issues/2575)) ([d47d2b5](https://github.com/conventional-changelog/commitlint/commit/d47d2b595b980adadd4fb8ff198c1914caeff18f)) + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) **Note:** Version bump only for package @commitlint/read -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/read + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/read + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/read + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/read + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +### Bug Fixes + +- update dependency @types/fs-extra to ^9.0.1 ([#2088](https://github.com/conventional-changelog/commitlint/issues/2088)) ([cb1028e](https://github.com/conventional-changelog/commitlint/commit/cb1028ef2700d86991c69a1e2ad391bc1bdc9d90)) + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes +- update dependency fs-extra to v9 ([#1018](https://github.com/conventional-changelog/commitlint/issues/1018)) ([2df49fa](https://github.com/conventional-changelog/commitlint/commit/2df49fac907993ae78199a1012e918b0e2ff5621)) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/read + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/read + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/read + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/read + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/read + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/read + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/read + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/read + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/read + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes + +- use sander.readFile correctly ([#448](https://github.com/conventional-changelog/commitlint/issues/448)) ([#630](https://github.com/conventional-changelog/commitlint/issues/630)) ([8e47985](https://github.com/conventional-changelog/commitlint/commit/8e47985)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +- resolve path to commit message for git submodules ([83b1a47](https://github.com/conventional-changelog/commitlint/commit/83b1a47)) + +### Features + +- add support for git submodules ([cc575fa](https://github.com/conventional-changelog/commitlint/commit/cc575fa)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/read + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/read + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/read + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) **Note:** Version bump only for package @commitlint/read diff --git a/@commitlint/read/README.md b/@commitlint/read/README.md index 4b0c993aa8..3d8c06e1a5 100644 --- a/@commitlint/read/README.md +++ b/@commitlint/read/README.md @@ -1,27 +1,15 @@ -> Read commit messages from a specified range or last edit - # @commitlint/read +Read commit messages from a specified range or last edit + ## Getting started ```shell npm install --save @commitlint/read ``` -## Example - -```js -const read = require('@commitlint/read'); +## Documentation -// Read last edited commit message -read({edit: true}) - .then(messages => console.log(messages)); - // => ['I did something\n\n'] - -// Read from the third to second commit message from HEAD -read({from: 'HEAD~2', to: 'HEAD~1'}) - .then(messages => console.log(messages)); - // => ['Initial commit\n\n'] -``` +Consult [API docs](https://commitlint.js.org/api/read) for comprehensive documentation. -Consult [docs/api](https://conventional-changelog.github.io/commitlint/#/reference-api) for comprehensive documentation. +Documentation generated from [`docs` folder](../../docs/api/read.md). diff --git a/@commitlint/read/fixtures/package.json b/@commitlint/read/fixtures/package.json new file mode 100644 index 0000000000..5bbefffbab --- /dev/null +++ b/@commitlint/read/fixtures/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/@commitlint/read/fixtures/recursive-extends-json/.commitlintrc.json b/@commitlint/read/fixtures/recursive-extends-json/.commitlintrc.json index b0feb26419..9a5e8e1d9f 100644 --- a/@commitlint/read/fixtures/recursive-extends-json/.commitlintrc.json +++ b/@commitlint/read/fixtures/recursive-extends-json/.commitlintrc.json @@ -1,6 +1,6 @@ { - "extends": ["./first-extended"], - "rules": { - "zero": 0 - } + "extends": ["./first-extended"], + "rules": { + "zero": 0 + } } diff --git a/@commitlint/read/fixtures/recursive-extends-package/package.json b/@commitlint/read/fixtures/recursive-extends-package/package.json index 031a432619..1818049244 100644 --- a/@commitlint/read/fixtures/recursive-extends-package/package.json +++ b/@commitlint/read/fixtures/recursive-extends-package/package.json @@ -1,8 +1,10 @@ { "commitlint": { - "extends": ["./first-extended"], - "rules": { - "zero": 0 - } + "extends": [ + "./first-extended" + ], + "rules": { + "zero": 0 + } } } diff --git a/@commitlint/read/fixtures/recursive-extends-yaml/.commitlintrc.yml b/@commitlint/read/fixtures/recursive-extends-yaml/.commitlintrc.yml index b76a5986b3..a5ef7fdffd 100644 --- a/@commitlint/read/fixtures/recursive-extends-yaml/.commitlintrc.yml +++ b/@commitlint/read/fixtures/recursive-extends-yaml/.commitlintrc.yml @@ -1,4 +1,4 @@ extends: -- "./first-extended" + - './first-extended' rules: zero: 0 diff --git a/@commitlint/read/package.json b/@commitlint/read/package.json index e459358b51..56294132a1 100644 --- a/@commitlint/read/package.json +++ b/@commitlint/read/package.json @@ -1,49 +1,29 @@ { "name": "@commitlint/read", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Read commit messages from a specified range or last edit", - "main": "lib/index.js", + "main": "lib/read.js", + "types": "lib/read.d.ts", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check --skip-import" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/read" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -56,20 +36,17 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.22.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.6.1", - "cross-env": "6.0.0", - "execa": "0.11.0" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "@types/git-raw-commits": "^2.0.3", + "@types/minimist": "^1.2.4" }, "dependencies": { - "@commitlint/top-level": "^8.2.0", - "@marionebl/sander": "^0.6.0", - "babel-runtime": "^6.23.0", - "git-raw-commits": "^2.0.0" - } + "@commitlint/top-level": "^20.0.0", + "@commitlint/types": "^20.0.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/read/src/get-edit-commit.ts b/@commitlint/read/src/get-edit-commit.ts new file mode 100644 index 0000000000..7754ecb802 --- /dev/null +++ b/@commitlint/read/src/get-edit-commit.ts @@ -0,0 +1,21 @@ +import toplevel from "@commitlint/top-level"; +import fs from "fs/promises"; + +import { getEditFilePath } from "./get-edit-file-path.js"; + +// Get recently edited commit message +export async function getEditCommit( + cwd?: string, + edit?: boolean | string, +): Promise<string[]> { + const top = await toplevel(cwd); + + 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`]; +} diff --git a/@commitlint/read/src/get-edit-file-path.ts b/@commitlint/read/src/get-edit-file-path.ts new file mode 100644 index 0000000000..b323dce1e2 --- /dev/null +++ b/@commitlint/read/src/get-edit-file-path.ts @@ -0,0 +1,26 @@ +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, +): Promise<string> { + if (typeof edit === "string") { + return path.resolve(top, edit); + } + + const dotgitPath = path.join(top, ".git"); + const dotgitStats: Stats = await fs.lstat(dotgitPath); + + if (dotgitStats.isDirectory()) { + return path.join(top, ".git/COMMIT_EDITMSG"); + } + + const gitFile: string = await fs.readFile(dotgitPath, { + encoding: "utf-8", + }); + 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 new file mode 100644 index 0000000000..ad9fc0a705 --- /dev/null +++ b/@commitlint/read/src/get-history-commits.ts @@ -0,0 +1,11 @@ +import gitRawCommits from "git-raw-commits"; + +import { streamToPromise } from "./stream-to-promise.js"; + +// Get commit messages from history +export async function getHistoryCommits( + options: gitRawCommits.GitOptions, + opts: { cwd?: string } = {}, +): Promise<string[]> { + return streamToPromise(gitRawCommits(options, { cwd: opts.cwd })); +} diff --git a/@commitlint/read/src/index.js b/@commitlint/read/src/index.js deleted file mode 100644 index b9ae72e0b4..0000000000 --- a/@commitlint/read/src/index.js +++ /dev/null @@ -1,69 +0,0 @@ -import path from 'path'; -import gitRawCommits from 'git-raw-commits'; -import * as sander from '@marionebl/sander'; - -import toplevel from '@commitlint/top-level'; - -export default getCommitMessages; - -// Get commit messages -// Object => Promise<Array<String>> -async function getCommitMessages(settings) { - const {cwd, from, to, edit} = settings; - - if (edit) { - return getEditCommit(cwd, edit); - } - - return getHistoryCommits({from, to}, {cwd}); -} - -// Get commit messages from history -// Object => Promise<string[]> -function getHistoryCommits(options, opts = {}) { - return new Promise((resolve, reject) => { - const data = []; - gitRawCommits(options, {cwd: opts.cwd}) - .on('data', chunk => data.push(chunk.toString('utf-8'))) - .on('error', reject) - .on('end', () => { - resolve(data); - }); - }); -} - -// Get recently edited commit message -// (cwd: string, edit: any) => Promise<Array<String>> -async function getEditCommit(cwd, edit) { - const top = await toplevel(cwd); - - if (typeof top !== 'string') { - throw new TypeError(`Could not find git root from ${cwd}`); - } - - const editFilePath = await getEditFilePath(top, edit); - - const editFile = await sander.readFile(editFilePath); - return [`${editFile.toString('utf-8')}\n`]; -} - -// Get path to recently edited commit message file -// (top: string, edit: any) => Promise<String> -async function getEditFilePath(top, edit) { - let editFilePath; - if (typeof edit === 'string') { - editFilePath = path.resolve(top, edit); - } else { - const dotgitPath = path.join(top, '.git'); - const dotgitStats = sander.lstatSync(dotgitPath); - if (dotgitStats.isDirectory()) { - editFilePath = path.join(top, '.git/COMMIT_EDITMSG'); - } else { - const gitFile = await sander.readFile(dotgitPath, {encoding: 'utf-8'}); - const relativeGitPath = gitFile.replace('gitdir: ', '').replace('\n', ''); - editFilePath = path.resolve(top, relativeGitPath, 'COMMIT_EDITMSG'); - } - } - - return editFilePath; -} diff --git a/@commitlint/read/src/index.test.js b/@commitlint/read/src/index.test.js deleted file mode 100644 index 4c4b93c4a7..0000000000 --- a/@commitlint/read/src/index.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import {git} from '@commitlint/test'; -import test from 'ava'; -import execa from 'execa'; -import * as sander from '@marionebl/sander'; - -import read from '.'; - -test('get edit commit message specified by the `edit` flag', async t => { - const cwd = await git.bootstrap(); - - await sander.writeFile(cwd, 'commit-msg-file', 'foo'); - - const expected = ['foo\n']; - const actual = await read({edit: 'commit-msg-file', cwd}); - t.deepEqual(actual, expected); -}); - -test('get edit commit message from git root', async t => { - const cwd = await git.bootstrap(); - - await sander.writeFile(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}); - t.deepEqual(actual, expected); -}); - -test('get history commit messages', async t => { - const cwd = await git.bootstrap(); - await sander.writeFile(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}); - t.deepEqual(actual, expected); -}); - -test('get edit commit message from git subdirectory', async t => { - const cwd = await git.bootstrap(); - await sander.mkdir(cwd, 'beta'); - await sander.writeFile(cwd, 'beta/beta.txt', 'beta'); - - await execa('git', ['add', '.'], {cwd}); - await execa('git', ['commit', '-m', 'beta'], {cwd}); - - const expected = ['beta\n\n']; - const actual = await read({edit: true, cwd}); - t.deepEqual(actual, expected); -}); diff --git a/@commitlint/read/src/read.test.ts b/@commitlint/read/src/read.test.ts new file mode 100644 index 0000000000..c1903b1609 --- /dev/null +++ b/@commitlint/read/src/read.test.ts @@ -0,0 +1,152 @@ +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"; + +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"); + + 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 () => { + const cwd: string = await git.bootstrap(); + + 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 () => { + const cwd: string = await git.bootstrap(); + 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 () => { + const cwd: string = await git.bootstrap(); + await fs.mkdir(path.join(cwd, "beta")); + await fs.writeFile(path.join(cwd, "beta/beta.txt"), "beta"); + + 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 }); + expect(actual).toEqual(expected); +}); + +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 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 new file mode 100644 index 0000000000..ae991a52d1 --- /dev/null +++ b/@commitlint/read/src/read.ts @@ -0,0 +1,82 @@ +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 { 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, +): Promise<string[]> { + const { cwd, fromLastTag, to, last, edit, gitLogArgs } = settings; + let from = settings.from; + + if (edit) { + return getEditCommit(cwd, edit); + } + + 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(" ")), + from, + to, + }; + } + + return getHistoryCommits(gitOptions, { cwd }); +} diff --git a/@commitlint/read/src/stream-to-promise.ts b/@commitlint/read/src/stream-to-promise.ts new file mode 100644 index 0000000000..149fb05049 --- /dev/null +++ b/@commitlint/read/src/stream-to-promise.ts @@ -0,0 +1,11 @@ +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)), + ); +} diff --git a/@commitlint/read/tsconfig.json b/@commitlint/read/tsconfig.json new file mode 100644 index 0000000000..6edb67bd92 --- /dev/null +++ b/@commitlint/read/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../top-level" }] +} diff --git a/@commitlint/resolve-extends/CHANGELOG.md b/@commitlint/resolve-extends/CHANGELOG.md index 18e55c9297..70308b3a70 100644 --- a/@commitlint/resolve-extends/CHANGELOG.md +++ b/@commitlint/resolve-extends/CHANGELOG.md @@ -3,7 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + + +### Bug Fixes + +* **resolve-extends:** add import attribute for JSON config files ([#4551](https://github.com/conventional-changelog/commitlint/issues/4551)) ([82936c9](https://github.com/conventional-changelog/commitlint/commit/82936c90a2845b4f5721eef3c71d6183416d5b78)) + + + + + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/resolve-extends @@ -11,7 +22,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/resolve-extends @@ -19,101 +30,471 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) -### Features +### Performance Improvements -* **resolve-extends:** accept short scoped package names in extends ([#597](https://github.com/conventional-changelog/commitlint/issues/597)) ([ba90e8e](https://github.com/conventional-changelog/commitlint/commit/ba90e8e)) +* 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)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -* **resolve-extends:** override array on extending rules ([#470](https://github.com/conventional-changelog/commitlint/issues/470)) ([#539](https://github.com/conventional-changelog/commitlint/issues/539)) ([b35000c](https://github.com/conventional-changelog/commitlint/commit/b35000c)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace old require-uncached with import-fresh ([#533](https://github.com/conventional-changelog/commitlint/issues/533)) ([b636e8c](https://github.com/conventional-changelog/commitlint/commit/b636e8c)) +* add missing `conditions` param for `moduleResolve` ([#3962](https://github.com/conventional-changelog/commitlint/issues/3962)) ([67baff9](https://github.com/conventional-changelog/commitlint/commit/67baff9182854bbe184b6cf71f977920a05c27a3)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +## [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs +* feat: migrate @commitlint/config-conventional to pure ESM + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + **Note:** Version bump only for package @commitlint/resolve-extends -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/resolve-extends + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/resolve-extends + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Features + +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +### Features + +- simplify config resolution ([#2398](https://github.com/conventional-changelog/commitlint/issues/2398)) ([8a8384f](https://github.com/conventional-changelog/commitlint/commit/8a8384f3c18954447cb633e76a573e1db71a1440)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +### Features + +- extend helpUrl from shareable config ([#2846](https://github.com/conventional-changelog/commitlint/issues/2846)) ([d7e2e2b](https://github.com/conventional-changelog/commitlint/commit/d7e2e2b943be383f99f4000b6b6bed0eab03bfcf)) + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/resolve-extends + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/resolve-extends + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + ### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- **resolve-extends:** `extends` field should be resolved from left to right ([#2070](https://github.com/conventional-changelog/commitlint/issues/2070)) ([c0a86f5](https://github.com/conventional-changelog/commitlint/commit/c0a86f5b5ed6ef071acef4baf38e7fc549fbec37)) +### BREAKING CHANGES +- **resolve-extends:** The order of the `extends` resolution is changed from right-to-left to left-to-right +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/resolve-extends + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES +- remove node 8 from circle-ci checks +also remove node 13 because we do not support experimental versions +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/resolve-extends -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package @commitlint/resolve-extends +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +**Note:** Version bump only for package @commitlint/resolve-extends + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package @commitlint/resolve-extends -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) + +### Features + +- add possibility to extend from string ([#865](https://github.com/conventional-changelog/commitlint/issues/865)) ([056c6fe](https://github.com/conventional-changelog/commitlint/commit/056c6fef346b4e84f8b1f93038a9461a7cbd9beb)) +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) +### Bug Fixes +- **resolve-extends:** move node types to dev dependencies ([#883](https://github.com/conventional-changelog/commitlint/issues/883)) ([b131a18](https://github.com/conventional-changelog/commitlint/commit/b131a18)), closes [#874](https://github.com/conventional-changelog/commitlint/issues/874) + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) **Note:** Version bump only for package @commitlint/resolve-extends -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) +### Features +- **resolve-extends:** accept absolute path in extends ([#825](https://github.com/conventional-changelog/commitlint/issues/825)) ([ecac29f](https://github.com/conventional-changelog/commitlint/commit/ecac29f)) +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) **Note:** Version bump only for package @commitlint/resolve-extends -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/resolve-extends + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +### Features +- **resolve-extends:** accept short scoped package names in extends ([#597](https://github.com/conventional-changelog/commitlint/issues/597)) ([ba90e8e](https://github.com/conventional-changelog/commitlint/commit/ba90e8e)) +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- **resolve-extends:** override array on extending rules ([#470](https://github.com/conventional-changelog/commitlint/issues/470)) ([#539](https://github.com/conventional-changelog/commitlint/issues/539)) ([b35000c](https://github.com/conventional-changelog/commitlint/commit/b35000c)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace old require-uncached with import-fresh ([#533](https://github.com/conventional-changelog/commitlint/issues/533)) ([b636e8c](https://github.com/conventional-changelog/commitlint/commit/b636e8c)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/resolve-extends -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/resolve-extends + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/resolve-extends + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +**Note:** Version bump only for package @commitlint/resolve-extends +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/resolve-extends + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/resolve-extends + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) **Note:** Version bump only for package @commitlint/resolve-extends <a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) ### Bug Fixes -* correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) +- correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) diff --git a/@commitlint/resolve-extends/fixtures/package.json b/@commitlint/resolve-extends/fixtures/package.json new file mode 100644 index 0000000000..5bbefffbab --- /dev/null +++ b/@commitlint/resolve-extends/fixtures/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/@commitlint/resolve-extends/jest.config.js b/@commitlint/resolve-extends/jest.config.js deleted file mode 100644 index 20d2ea60f5..0000000000 --- a/@commitlint/resolve-extends/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node' -}; diff --git a/@commitlint/resolve-extends/package.json b/@commitlint/resolve-extends/package.json index 31f796c8d2..87bd312318 100644 --- a/@commitlint/resolve-extends/package.json +++ b/@commitlint/resolve-extends/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/resolve-extends", - "version": "8.2.0", + "type": "module", + "version": "20.1.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/resolve-extends" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,16 +36,16 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.2.0", - "@commitlint/utils": "^8.2.0", - "@types/lodash": "4.14.140", - "@types/resolve-from": "5.0.1" + "@commitlint/utils": "^20.0.0", + "@types/lodash.mergewith": "^4.6.8" }, "dependencies": { - "@types/node": "^12.0.2", - "import-fresh": "^3.0.0", - "lodash": "4.17.15", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - } + "@commitlint/config-validator": "^20.0.0", + "@commitlint/types": "^20.0.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/resolve-extends/src/index.test.ts b/@commitlint/resolve-extends/src/index.test.ts index 8a9e82b12f..0e2306c48b 100644 --- a/@commitlint/resolve-extends/src/index.test.ts +++ b/@commitlint/resolve-extends/src/index.test.ts @@ -1,295 +1,583 @@ -import resolveExtends, {ResolveExtendsContext} from '.'; -import resolveGlobal from 'resolve-global'; +import { test, expect, vi } from "vitest"; +import { createRequire } from "node:module"; +import { RuleConfigSeverity, UserConfig } from "@commitlint/types"; + +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', () => { - const actual = resolveExtends(); +test("returns empty object when called without params", async () => { + const actual = await resolveExtends(); expect(actual).toEqual({}); }); -test('returns an equivalent object as passed in', () => { - const expected = {foo: 'bar'}; - const actual = resolveExtends(expected); +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 = jest.fn(() => '@commitlint/foo-bar'); - const require = jest.fn(() => ({})); +test("falls back to global install", async () => { + const resolveGlobal = vi.fn(() => "@commitlint/foo-bar"); + const dynamicImport = vi.fn(() => ({})); - const ctx = {resolveGlobal, require} as ResolveExtendsContext; + const ctx = { resolveGlobal, dynamicImport } as ResolveExtendsContext; - resolveExtends({extends: ['@commitlint/foo-bar']}, ctx); - expect(ctx.resolveGlobal).toBeCalledWith('@commitlint/foo-bar'); + resolveExtends({ extends: ["@commitlint/foo-bar"] }, ctx); + expect(ctx.resolveGlobal).toHaveBeenCalledWith("@commitlint/foo-bar"); }); -test('fails for missing extends', async () => { - expect(() => resolveExtends({extends: ['@commitlint/foo-bar']})).toThrow( - /Cannot find module "@commitlint\/foo-bar" from/ - ); +test("fails for missing extends", async () => { + await expect(() => + resolveExtends({ extends: ["@commitlint/foo-bar"] }), + ).rejects.toThrow(/Cannot find module "@commitlint\/foo-bar" from/); }); -test('uses empty prefix by default', () => { - const input = {extends: ['extender-name']}; +test("resolves extends for single config", async () => { + const input = { extends: "extender-name" }; const ctx = { resolve: id, - require: jest.fn(() => ({})) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; - resolveExtends(input, ctx); + await resolveExtends(input, ctx); - expect(ctx.require).toHaveBeenCalledWith('extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); }); -test('uses prefix as configured', () => { - const input = {extends: ['extender-name']}; +test("uses empty prefix by default", async () => { + const input = { extends: ["extender-name"] }; const ctx = { resolve: id, - require: jest.fn(() => ({})) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; + await resolveExtends(input, ctx); - resolveExtends(input, { + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); +}); + +test("uses prefix as configured", async () => { + const input = { extends: ["extender-name"] }; + const ctx = { + resolve: id, + dynamicImport: vi.fn(() => ({})), + } as ResolveExtendsContext; + + await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); - expect(ctx.require).toHaveBeenCalledWith('prefix-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("prefix-extender-name"); }); -test('ignores prefix for scoped extends', () => { - const input = {extends: ['@scope/extender-name']}; +test("ignores prefix for scoped extends", async () => { + const input = { extends: ["@scope/extender-name"] }; const ctx = { resolve: id, - require: jest.fn(() => ({})) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; - resolveExtends(input, { + await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); - expect(ctx.require).toHaveBeenCalledWith('@scope/extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("@scope/extender-name"); }); -test('adds prefix as suffix for scopes only', () => { - const input = {extends: ['@scope']}; +test("adds prefix as suffix for scopes only", async () => { + const input = { extends: ["@scope"] }; const ctx = { resolve: id, - require: jest.fn(() => ({})) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; - resolveExtends(input, { + await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); - expect(ctx.require).toHaveBeenCalledWith('@scope/prefix'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("@scope/prefix"); }); -test('ignores prefix for relative extends', () => { - const input = {extends: ['./extender']}; +test("ignores prefix for relative extends", async () => { + const input = { extends: ["./extender"] }; const ctx = { resolve: id, - require: jest.fn(() => ({})) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; - resolveExtends(input, { + await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); - expect(ctx.require).toHaveBeenCalledWith('./extender'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("./extender"); }); -test('propagates return value of require function', () => { - const input = {extends: ['extender-name']}; - const propagated = {foo: 'bar'}; +test("ignores prefix for absolute extends", async () => { + const absolutePath = require.resolve("@commitlint/config-angular"); + const input = { extends: [absolutePath] }; const ctx = { resolve: id, - require: jest.fn(() => propagated) + dynamicImport: vi.fn(() => ({})), } as ResolveExtendsContext; - const actual = resolveExtends(input, ctx); + await resolveExtends(input, { + ...ctx, + prefix: "prefix", + }); + + expect(ctx.dynamicImport).toHaveBeenCalledWith(absolutePath); +}); + +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), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); expect(actual).toEqual(expect.objectContaining(propagated)); }); -test('resolves extends recursively', () => { - const input = {extends: ['extender-name']}; +test("resolves extends recursively", async () => { + const input = { extends: ["extender-name"] }; - const require = (id: string) => { + 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 {}; } }; - const ctx = {resolve: id, require: jest.fn(require)} as ResolveExtendsContext; - resolveExtends(input, ctx); + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + await resolveExtends(input, ctx); - expect(ctx.require).toHaveBeenCalledWith('extender-name'); - expect(ctx.require).toHaveBeenCalledWith('recursive-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("extender-name"); + expect(ctx.dynamicImport).toHaveBeenCalledWith("recursive-extender-name"); }); -test('uses prefix key recursively', () => { - const input = {extends: ['extender-name']}; +test("uses prefix key recursively", async () => { + const input = { extends: ["extender-name"] }; - const require = (id: string) => { + 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 {}; } }; - const ctx = {resolve: id, require: jest.fn(require)} as ResolveExtendsContext; + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; - resolveExtends(input, { + await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); - expect(ctx.require).toHaveBeenCalledWith('prefix-extender-name'); - expect(ctx.require).toHaveBeenCalledWith('prefix-recursive-extender-name'); + expect(ctx.dynamicImport).toHaveBeenCalledWith("prefix-extender-name"); + expect(ctx.dynamicImport).toHaveBeenCalledWith( + "prefix-recursive-extender-name", + ); }); -test('propagates contents recursively', () => { - const input = {extends: ['extender-name']}; +test("propagates contents recursively", async () => { + const input = { extends: ["extender-name"] }; - const require = (id: string) => { + 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 {}; } }; - const ctx = {resolve: id, require: jest.fn(require)} as ResolveExtendsContext; + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; - const actual = resolveExtends(input, ctx); + 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', () => { - const input = {extends: ['extender-name']}; +test("propagates contents recursively with overlap", async () => { + const input: UserConfig = { extends: ["extender-name"] }; - const require = (id: string) => { + const dynamicImport = (id: string): UserConfig => { switch (id) { - case 'extender-name': + case "extender-name": return { - extends: ['recursive-extender-name'], - rules: {rule: ['zero', 'one']} + extends: ["recursive-extender-name"], + rules: { rule: [RuleConfigSeverity.Warning, "always"] }, }; - case 'recursive-extender-name': - return {rules: {rule: ['two', 'three', 'four']}}; + case "recursive-extender-name": + return { rules: { rule: [RuleConfigSeverity.Error, "never", "four"] } }; default: return {}; } }; - const ctx = {resolve: id, require: jest.fn(require)} as ResolveExtendsContext; + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; - const actual = resolveExtends(input, ctx); + const actual = await resolveExtends(input, ctx); - const expected = { - extends: ['extender-name'], + const expected: UserConfig = { + extends: ["extender-name"], rules: { - rule: ['zero', 'one'] + rule: [RuleConfigSeverity.Warning, "always"], + }, + }; + + expect(actual).toEqual(expected); +}); + +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": + return { + rules: { + a: [RuleConfigSeverity.Disabled, "never", false], + b: [RuleConfigSeverity.Disabled, "never", true], + }, + }; + default: + return {}; } }; + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected: UserConfig = { + extends: ["left", "right"], + rules: { + a: [RuleConfigSeverity.Disabled, "never", false], + b: [RuleConfigSeverity.Disabled, "never", true], + }, + }; + expect(actual).toEqual(expected); }); -test('extending contents should take precedence', () => { - const input = {extends: ['extender-name'], zero: 'root'}; +test("extending contents should take precedence", async () => { + const input = { extends: ["extender-name"], zero: "root" }; - const require = (id: string) => { + 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 + 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 {}; } }; - const ctx = {resolve: id, require: jest.fn(require)} as ResolveExtendsContext; + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; - const actual = resolveExtends(input, ctx); + 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', () => { - 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 require = (id: string) => { + 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 {}; } }; const ctx = { - resolve: jest.fn(resolve), - require: jest.fn(require) + resolve: vi.fn(resolve), + dynamicImport: vi.fn(dynamicImport), } as ResolveExtendsContext; - const actual = resolveExtends(input, { + const actual = await resolveExtends(input, { ...ctx, - prefix: 'prefix' + prefix: "prefix", }); expect(actual).toEqual({ - extends: ['extender-name'], + extends: ["extender-name"], rules: { - fallback: true - } + fallback: true, + }, }); }); + +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": + return { + extends: ["second-recursive-extender-name"], + plugins: ["test2"], + }; + case "second-recursive-extender-name": + return { plugins: ["test3"] }; + default: + return {}; + } + }; + + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected = { + extends: ["extender-name"], + plugins: ["test3", "test2", "test"], + zero: "root", + }; + + expect(actual).toEqual(expected); +}); + +test("rules should be merged correctly", async () => { + const input: UserConfig = { + extends: ["extender-name"], + rules: { test1: [RuleConfigSeverity.Warning, "never", "base"] }, + }; + + const dynamicImport = (id: string): UserConfig => { + switch (id) { + case "extender-name": + return { + extends: ["recursive-extender-name"], + rules: { test2: [RuleConfigSeverity.Error, "never", id] }, + }; + case "recursive-extender-name": + return { + extends: ["second-recursive-extender-name"], + rules: { test1: [RuleConfigSeverity.Disabled, "never", id] }, + }; + case "second-recursive-extender-name": + return { rules: { test2: [RuleConfigSeverity.Warning, "never", id] } }; + default: + return {}; + } + }; + + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected: UserConfig = { + extends: ["extender-name"], + rules: { + test1: [RuleConfigSeverity.Warning, "never", "base"], + test2: [RuleConfigSeverity.Error, "never", "extender-name"], + }, + }; + + expect(actual).toEqual(expected); +}); + +// https://github.com/conventional-changelog/commitlint/issues/327 +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": + return { + extends: ["recursive-extender-name"], + parserPreset: { + parserOpts: { + issuePrefixes: ["#", "!", "&", "no-references"], + referenceActions: null, + }, + }, + }; + case "recursive-extender-name": + return { parserPreset: { parserOpts: { issuePrefixes: ["#", "!"] } } }; + default: + return {}; + } + }; + + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected = { + extends: ["extender-name"], + parserPreset: { + parserOpts: { + issuePrefixes: ["#", "!", "&", "no-references"], + referenceActions: null, + }, + }, + zero: "root", + }; + + expect(actual).toEqual(expected); +}); + +test("parserPreset 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"], + parserPreset: { + parserOpts: { + referenceActions: null, + }, + }, + }; + case "recursive-extender-name": + return { parserPreset: { parserOpts: { issuePrefixes: ["#", "!"] } } }; + default: + return {}; + } + }; + + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected = { + extends: ["extender-name"], + parserPreset: { + parserOpts: { + issuePrefixes: ["#", "!"], + referenceActions: null, + }, + }, + zero: "root", + }; + + expect(actual).toEqual(expected); +}); + +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": + return { + 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] } }; + default: + return {}; + } + }; + + const ctx = { + resolve: id, + dynamicImport: vi.fn(dynamicImport), + } as ResolveExtendsContext; + + const actual = await resolveExtends(input, ctx); + + const expected = { + extends: ["extender-1"], + rules: { + test: [RuleConfigSeverity.Warning, "never", 4], + }, + }; + + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/resolve-extends/src/index.ts b/@commitlint/resolve-extends/src/index.ts index c63965a94d..b44bd3956a 100644 --- a/@commitlint/resolve-extends/src/index.ts +++ b/@commitlint/resolve-extends/src/index.ts @@ -1,146 +1,246 @@ -import path from 'path'; +import { createRequire } from "node:module"; +import fs from "node:fs"; +import path from "node:path"; +import { pathToFileURL, fileURLToPath } from "node:url"; + +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> => { + if (id.endsWith(".json")) { + const require = createRequire(import.meta.url); + return require(id); + } -import 'resolve-global'; -import resolveFrom from 'resolve-from'; -import {isArray, merge, mergeWith, omit} from 'lodash'; + const imported = await import( + path.isAbsolute(id) ? pathToFileURL(id).toString() : id + ); + 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 = (lookup: string, parent?: string): string => { + if (path.isAbsolute(lookup)) { + for (const suffix of pathSuffixes) { + const filename = lookup + suffix; + if (fs.existsSync(filename)) { + return filename; + } + } + } -const importFresh = require('import-fresh'); + let resolveError: Error | undefined; -export interface ResolvedConfig { - parserPreset?: unknown; - [key: string]: unknown; -} + const base = pathToFileURL( + parent + ? fs.statSync(parent).isDirectory() + ? path.join(parent, "noop.js") + : parent + : import.meta.url, + ); -export interface ResolveExtendsConfig { - parserPreset?: unknown; - extends?: string[]; - [key: string]: unknown; -} + for (const suffix of specifierSuffixes) { + try { + return fileURLToPath(moduleResolve(lookup + suffix, base, conditions)); + } catch (err) { + if (!resolveError) { + resolveError = err as Error; + } + } + } + + 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; + } +}; + +/** + * + * @param resolvedParserPreset path resolved by {@link resolveFrom} + * @returns path and parserOpts function retrieved from `resolvedParserPreset` + */ +export const loadParserPreset = async ( + 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("/"), + parserOpts: finalParserOpts, + }; +}; export interface ResolveExtendsContext { cwd?: string; - parserPreset?: unknown; + 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; - require?<T>(id: string): T; + dynamicImport?<T>(id: string): T | Promise<T>; } -export default function resolveExtends( - config: ResolveExtendsConfig = {}, - context: ResolveExtendsContext = {} -) { - const {extends: e} = config; - const extended = loadExtends(config, context).reduceRight( - (r, c) => - mergeWith(r, omit(c, 'extends'), (objValue, srcValue) => { - if (isArray(objValue)) { +export default async function resolveExtends( + config: UserConfig = {}, + context: ResolveExtendsContext = {}, +): Promise<UserConfig> { + const { extends: e } = config; + const extended = await loadExtends(config, context); + extended.push(config); + return extended.reduce( + (r, { extends: _, ...c }) => + mergeWith(r, c, (objValue, srcValue, key) => { + if (key === "plugins") { + if (Array.isArray(objValue)) { + return objValue.concat(srcValue); + } + } else if (Array.isArray(objValue)) { return srcValue; } }), - e ? {extends: e} : {} + e ? { extends: e } : {}, ); - - return merge({}, extended, config); } -function loadExtends( - config: ResolveExtendsConfig = {}, - context: ResolveExtendsContext = {} -): ResolvedConfig[] { - return (config.extends || []).reduce<ResolvedConfig[]>((configs, raw) => { - const load = context.require || require; +async function loadExtends( + config: UserConfig = {}, + context: ResolveExtendsContext = {}, +): Promise<UserConfig[]> { + const { extends: e } = config; + const ext = e ? (Array.isArray(e) ? e : [e]) : []; + + return await ext.reduce(async (configs, raw) => { const resolved = resolveConfig(raw, context); - const c = load(resolved); + + const c = await (context.dynamicImport || dynamicImport)<{ + parserPreset?: string; + }>(resolved); const cwd = path.dirname(resolved); - const ctx = merge({}, 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(cwd, c.parserPreset); - const parserPreset = { + const resolvedParserPreset = resolveFrom(c.parserPreset, cwd); + + const parserPreset: ParserPreset = { name: c.parserPreset, - path: `./${path.relative(process.cwd(), resolvedParserPreset)}` - .split(path.sep) - .join('/'), - parserOpts: require(resolvedParserPreset) + ...(await loadParserPreset(resolvedParserPreset)), }; ctx.parserPreset = parserPreset; config.parserPreset = parserPreset; } - return [...configs, c, ...loadExtends(c, ctx)]; - }, []); + validateConfig(resolved, config); + + return [...(await configs), ...(await loadExtends(c, ctx)), c]; + }, 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 ? raw : [prefix, raw].filter(String).join('-'); + return relative || absolute ? raw : [prefix, raw].filter(String).join("-"); } -function resolveConfig<T>( +function resolveConfig( raw: string, - context: ResolveExtendsContext = {} + context: ResolveExtendsContext = {}, ): string { const resolve = context.resolve || resolveId; const id = getId(raw, context.prefix); + let resolved: string; try { - return resolve(id, context); + resolved = resolve(id, context); } catch (err) { - const legacy = getId(raw, 'conventional-changelog-lint-config'); - const resolved = resolve(legacy, context); + 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; } + + return resolved; } function resolveId( - id: string, - context: {cwd?: string; resolveGlobal?: (id: string) => string | void} = {} + specifier: string, + context: ResolveExtendsContext = {}, ): string { const cwd = context.cwd || process.cwd(); - const localPath = resolveFromSilent(cwd, id); + const localPath = resolveFromSilent(specifier, cwd); - if (typeof localPath === 'string') { + if (typeof localPath === "string") { return localPath; } const resolveGlobal = context.resolveGlobal || resolveGlobalSilent; - const globalPath = resolveGlobal(id); + const globalPath = resolveGlobal(specifier); - if (typeof globalPath === 'string') { + if (typeof globalPath === "string") { return globalPath; } - const err = new Error(`Cannot find module "${id}" from "${cwd}"`); - (err as any).code = 'MODULE_NOT_FOUND'; - throw err; + const err = new Error(`Cannot find module "${specifier}" from "${cwd}"`); + throw Object.assign(err, { code: "MODULE_NOT_FOUND" }); } -function resolveFromSilent(cwd: string, id: string): string | void { +export function resolveFromSilent( + specifier: string, + parent: string, +): string | void { try { - return resolveFrom(cwd, id); - } catch (err) {} + return resolveFrom(specifier, parent); + } catch {} } -function resolveGlobalSilent(id: string): string | void { - try { - const resolveGlobal = importFresh('resolve-global'); - return resolveGlobal(id); - } 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 f4a57643f0..ebcddb79e9 100644 --- a/@commitlint/resolve-extends/tsconfig.json +++ b/@commitlint/resolve-extends/tsconfig.json @@ -1,15 +1,12 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "isolatedModules": false, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../types" }, { "path": "../config-validator" }] } diff --git a/@commitlint/rules/CHANGELOG.md b/@commitlint/rules/CHANGELOG.md index c95bef3a15..00e337a210 100644 --- a/@commitlint/rules/CHANGELOG.md +++ b/@commitlint/rules/CHANGELOG.md @@ -3,7 +3,55 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + + +* feat(rules)!: make body-max-line-length ignore lines with URLs (#4486) ([2f37a88](https://github.com/conventional-changelog/commitlint/commit/2f37a886be4b07bcd8e1126cc6a13256e7b6cc37)), closes [#4486](https://github.com/conventional-changelog/commitlint/issues/4486) + + +### BREAKING CHANGES + +* when lines contain URLs exceeding the maximum +line length `body-max-line-length` will be ignored + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + + +### Performance Improvements + +* **rules:** optimize header-trim ([#4363](https://github.com/conventional-changelog/commitlint/issues/4363)) ([b7e404b](https://github.com/conventional-changelog/commitlint/commit/b7e404bc036dbd3cbdffa38e85c833d10e52d68b)) + + + + + +# [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 @@ -11,7 +59,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [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,7 +78,70 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/rules @@ -27,161 +149,447 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) -### Bug Fixes +### Features -* failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) +* **rules:** add header-trim rule ([#3199](https://github.com/conventional-changelog/commitlint/issues/3199)) ([#3871](https://github.com/conventional-changelog/commitlint/issues/3871)) ([331579a](https://github.com/conventional-changelog/commitlint/commit/331579a8796af901b5e5103c44fedf1cb3a2f661)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) ### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +* subject-full-stop false positive when using ellipsis ([#3839](https://github.com/conventional-changelog/commitlint/issues/3839)) ([b4246d6](https://github.com/conventional-changelog/commitlint/commit/b4246d6428399177d43296dc8bec6714e664d037)) -### Features -* **rule-header-length:** show current header length ([6d61c4f](https://github.com/conventional-changelog/commitlint/commit/6d61c4f)) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/rules + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/rules -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) ### Features -* **rules:** create header-case and header-full-stop rules ([#547](https://github.com/conventional-changelog/commitlint/issues/547)) ([4c36cbd](https://github.com/conventional-changelog/commitlint/commit/4c36cbd)) +* [scope-enum] [scope-case] allow space after comma as scope delimiter ([#3577](https://github.com/conventional-changelog/commitlint/issues/3577)) ([13c4bfc](https://github.com/conventional-changelog/commitlint/commit/13c4bfc637dd6c66477fa1c8da821ed46af28c44)), closes [#3576](https://github.com/conventional-changelog/commitlint/issues/3576) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types +* docs: prepare node update and new release +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) **Note:** Version bump only for package @commitlint/rules -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/rules + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/rules + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/rules + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) ### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) -* use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) +* **rules:** avoid processing strings with case-less Letter category symbols in `subject-case` ([#3586](https://github.com/conventional-changelog/commitlint/issues/3586)) ([70a4450](https://github.com/conventional-changelog/commitlint/commit/70a44501ac8459f0c1d2b200608b024585964637)), closes [#3585](https://github.com/conventional-changelog/commitlint/issues/3585) -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + + +### Features + +* **rules:** expand Latin-only characters limitation for `subject-case` with Unicode support ([#3575](https://github.com/conventional-changelog/commitlint/issues/3575)) ([5f83423](https://github.com/conventional-changelog/commitlint/commit/5f8342355a856e5be7b8a7b851e1519d62678465)) + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + +**Note:** Version bump only for package @commitlint/rules + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) ### Bug Fixes -* **rules:** include possible body offset in footer leading blank ([ff0111a](https://github.com/conventional-changelog/commitlint/commit/ff0111a)) -* handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) +* subject-full-stop rule bugfix ([#3531](https://github.com/conventional-changelog/commitlint/issues/3531)) ([5d3d529](https://github.com/conventional-changelog/commitlint/commit/5d3d529a6a57baee1bfdaaf3f0c503dee009e152)) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/rules + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/rules -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) +**Note:** Version bump only for package @commitlint/rules + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +**Note:** Version bump only for package @commitlint/rules + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +### Bug Fixes + +- **rules:** footer-leading-blank should work with body comments ([#3139](https://github.com/conventional-changelog/commitlint/issues/3139)) ([7dd88c9](https://github.com/conventional-changelog/commitlint/commit/7dd88c913cba9f444acc587c77210cb718c928c9)) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/rules + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/rules + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/rules + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/rules + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/rules + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/rules + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +### Features + +- **rules:** allow body-case to accept an array of cases ([5383c9e](https://github.com/conventional-changelog/commitlint/commit/5383c9edcd9a351ea1c33ed49f47afed9b1cde6b)), closes [#2631](https://github.com/conventional-changelog/commitlint/issues/2631) + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) ### Features -* add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) +- add subject-exclamation-mark rule to improve error messages ([#2593](https://github.com/conventional-changelog/commitlint/issues/2593)) ([be701bd](https://github.com/conventional-changelog/commitlint/commit/be701bdb1de4e667b7a872767244285c4fa4fda4)) +- **rules:** add `trailer-exists` rule ([#2578](https://github.com/conventional-changelog/commitlint/issues/2578)) ([cd3816d](https://github.com/conventional-changelog/commitlint/commit/cd3816d553762eae99e088689395c55afce0c6cc)) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) +**Note:** Version bump only for package @commitlint/rules + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/rules + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/rules + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +**Note:** Version bump only for package @commitlint/rules + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/rules + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) ### Features -* **rules:** support array for scope-case and type-case ([#312](https://github.com/conventional-changelog/commitlint/issues/312)) ([1f46b9f](https://github.com/conventional-changelog/commitlint/commit/1f46b9f)), closes [#307](https://github.com/conventional-changelog/commitlint/issues/307) +- **rules:** add body-full-stop rule ([#2144](https://github.com/conventional-changelog/commitlint/issues/2144)) ([7767ca2](https://github.com/conventional-changelog/commitlint/commit/7767ca2591d10207c4abe7f3e5e6de503ac12a25)) +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) +### Bug Fixes +- **rules:** ignore comments in `signed-off-by` ([#2098](https://github.com/conventional-changelog/commitlint/issues/2098)) ([b610bcd](https://github.com/conventional-changelog/commitlint/commit/b610bcd15215cc5f14fb6de07914ed595cc3047b)) -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/rules -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/rules +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Features +- enable multiple scopes in scope-enum and scope-case rules ([#901](https://github.com/conventional-changelog/commitlint/issues/901)) ([73632ce](https://github.com/conventional-changelog/commitlint/commit/73632cec299d5c3a980d07037c08633c843a8555)) +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package @commitlint/rules -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +### Features +- add async promise based rules methods into lint ([#976](https://github.com/conventional-changelog/commitlint/issues/976)) ([4443062](https://github.com/conventional-changelog/commitlint/commit/444306249b8a3d04524538f61edca8f6cc10d75f)) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) **Note:** Version bump only for package @commitlint/rules -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) +**Note:** Version bump only for package @commitlint/rules +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/rules + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) **Note:** Version bump only for package @commitlint/rules -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/rules + +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +### Bug Fixes + +- failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) + +<a name="7.5.0"></a> +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) ### Bug Fixes -* remove typo in error message of type-case ([cb577cb](https://github.com/conventional-changelog/commitlint/commit/cb577cb)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +### Features +- **rule-header-length:** show current header length ([6d61c4f](https://github.com/conventional-changelog/commitlint/commit/6d61c4f)) +<a name="7.4.0"></a> -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +### Features +- **rules:** create header-case and header-full-stop rules ([#547](https://github.com/conventional-changelog/commitlint/issues/547)) ([4c36cbd](https://github.com/conventional-changelog/commitlint/commit/4c36cbd)) +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/rules -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +### Bug Fixes + +- **rules:** include possible body offset in footer leading blank ([ff0111a](https://github.com/conventional-changelog/commitlint/commit/ff0111a)) +- handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/rules + +<a name="7.1.0"></a> +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +### Features + +- add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) + +<a name="6.2.0"></a> + +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +### Features + +- **rules:** support array for scope-case and type-case ([#312](https://github.com/conventional-changelog/commitlint/issues/312)) ([1f46b9f](https://github.com/conventional-changelog/commitlint/commit/1f46b9f)), closes [#307](https://github.com/conventional-changelog/commitlint/issues/307) + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/rules + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/rules + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/rules + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/rules + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +### Bug Fixes + +- remove typo in error message of type-case ([cb577cb](https://github.com/conventional-changelog/commitlint/commit/cb577cb)) + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/rules + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/rules diff --git a/@commitlint/rules/package.json b/@commitlint/rules/package.json index 78ba04bd40..f2d15086ce 100644 --- a/@commitlint/rules/package.json +++ b/@commitlint/rules/package.json @@ -1,49 +1,29 @@ { "name": "@commitlint/rules", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", + "types": "lib/index.d.ts", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check --skip-import", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/rules" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -56,23 +36,17 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.2.0", - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.22.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.6.1", - "conventional-changelog-angular": "1.6.6", - "cross-env": "6.0.0", - "globby": "10.0.1", - "lodash": "4.17.15" + "@commitlint/parse": "^20.0.0", + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0", + "conventional-changelog-angular": "^7.0.0", + "glob": "^10.3.10" }, "dependencies": { - "@commitlint/ensure": "^8.2.0", - "@commitlint/message": "^8.2.0", - "@commitlint/to-lines": "^8.2.0", - "babel-runtime": "^6.23.0" - } + "@commitlint/ensure": "^20.0.0", + "@commitlint/message": "^20.0.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/rules/src/body-case.js b/@commitlint/rules/src/body-case.js deleted file mode 100644 index dab5e80e60..0000000000 --- a/@commitlint/rules/src/body-case.js +++ /dev/null @@ -1,18 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when, value) => { - const {body} = parsed; - - if (!body) { - return [true]; - } - - const negated = when === 'never'; - - const result = ensure.case(body, value); - return [ - negated ? !result : result, - message([`body must`, negated ? `not` : null, `be ${value}`]) - ]; -}; diff --git a/@commitlint/rules/src/body-case.test.js b/@commitlint/rules/src/body-case.test.js deleted file mode 100644 index 7837f03bfa..0000000000 --- a/@commitlint/rules/src/body-case.test.js +++ /dev/null @@ -1,89 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import bodyCase from './body-case'; - -const messages = { - empty: 'test: subject', - lowercase: 'test: subject\nbody', - mixedcase: 'test: subject\nBody', - uppercase: 'test: subject\nBODY' -}; - -const parsed = { - empty: parse(messages.empty), - lowercase: parse(messages.lowercase), - mixedcase: parse(messages.mixedcase), - uppercase: parse(messages.uppercase) -}; - -test('with empty body should succeed for "never lowercase"', async t => { - const [actual] = bodyCase(await parsed.empty, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty body should succeed for "always lowercase"', async t => { - const [actual] = bodyCase(await parsed.empty, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty body should succeed for "never uppercase"', async t => { - const [actual] = bodyCase(await parsed.empty, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty body should succeed for "always uppercase"', async t => { - const [actual] = bodyCase(await parsed.empty, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase body should fail for "never lowercase"', async t => { - const [actual] = bodyCase(await parsed.lowercase, 'never', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase body should succeed for "always lowercase"', async t => { - const [actual] = bodyCase(await parsed.lowercase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase body should succeed for "never lowercase"', async t => { - const [actual] = bodyCase(await parsed.mixedcase, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase body should fail for "always lowercase"', async t => { - const [actual] = bodyCase(await parsed.mixedcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase body should succeed for "never uppercase"', async t => { - const [actual] = bodyCase(await parsed.mixedcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase body should fail for "always uppercase"', async t => { - const [actual] = bodyCase(await parsed.mixedcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase body should fail for "never uppercase"', async t => { - const [actual] = bodyCase(await parsed.uppercase, 'never', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase body should succeed for "always uppercase"', async t => { - const [actual] = bodyCase(await parsed.uppercase, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-case.test.ts b/@commitlint/rules/src/body-case.test.ts new file mode 100644 index 0000000000..9ff7b5dc23 --- /dev/null +++ b/@commitlint/rules/src/body-case.test.ts @@ -0,0 +1,89 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + lowercase: parse(messages.lowercase), + mixedcase: parse(messages.mixedcase), + uppercase: parse(messages.uppercase), +}; + +test('with empty body should succeed for "never lowercase"', async () => { + 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 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 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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/body-case.ts b/@commitlint/rules/src/body-case.ts new file mode 100644 index 0000000000..3870fb6238 --- /dev/null +++ b/@commitlint/rules/src/body-case.ts @@ -0,0 +1,39 @@ +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; + +const negated = (when?: string) => when === "never"; + +export const bodyCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( + parsed, + when = "always", + value = [], +) => { + const { body } = parsed; + + if (!body) { + return [true]; + } + + const checks = (Array.isArray(value) ? value : [value]).map((check) => { + if (typeof check === "string") { + return { + when: "always", + case: check, + }; + } + return check; + }); + + const result = checks.some((check) => { + const r = ensureCase(body, check.case); + return negated(check.when) ? !r : r; + }); + + const list = checks.map((c) => c.case).join(", "); + + return [ + negated(when) ? !result : result, + message([`body must`, negated(when) ? `not` : null, `be ${list}`]), + ]; +}; diff --git a/@commitlint/rules/src/body-empty.js b/@commitlint/rules/src/body-empty.js deleted file mode 100644 index 58911a16b9..0000000000 --- a/@commitlint/rules/src/body-empty.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.body); - - return [ - negated ? notEmpty : !notEmpty, - message(['body', negated ? 'may not' : 'must', 'be empty']) - ]; -}; diff --git a/@commitlint/rules/src/body-empty.test.js b/@commitlint/rules/src/body-empty.test.js deleted file mode 100644 index 0f336adb94..0000000000 --- a/@commitlint/rules/src/body-empty.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import bodyEmpty from './body-empty'; - -const messages = { - empty: 'test: subject', - filled: 'test: subject\nbody' -}; - -const parsed = { - empty: parse(messages.empty), - filled: parse(messages.filled) -}; - -test('with empty body should succeed for empty keyword', async t => { - const [actual] = bodyEmpty(await parsed.empty); - const expected = true; - t.is(actual, expected); -}); - -test('with empty body should fail for "never"', async t => { - const [actual] = bodyEmpty(await parsed.empty, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with empty body should succeed for "always"', async t => { - const [actual] = bodyEmpty(await parsed.empty, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with body should fail for empty keyword', async t => { - const [actual] = bodyEmpty(await parsed.filled); - const expected = false; - t.is(actual, expected); -}); - -test('with body should succeed for "never"', async t => { - const [actual] = bodyEmpty(await parsed.filled, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with body should fail for "always"', async t => { - const [actual] = bodyEmpty(await parsed.filled, 'always'); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-empty.test.ts b/@commitlint/rules/src/body-empty.test.ts new file mode 100644 index 0000000000..fb1f82cbe9 --- /dev/null +++ b/@commitlint/rules/src/body-empty.test.ts @@ -0,0 +1,49 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + filled: parse(messages.filled), +}; + +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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with empty body should succeed for "always"', async () => { + const [actual] = bodyEmpty(await parsed.empty, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with body should fail for "always"', async () => { + 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 new file mode 100644 index 0000000000..520f251acb --- /dev/null +++ b/@commitlint/rules/src/body-empty.ts @@ -0,0 +1,13 @@ +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 || ""); + + return [ + negated ? notEmpty : !notEmpty, + 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 new file mode 100644 index 0000000000..0c08f7b8c1 --- /dev/null +++ b/@commitlint/rules/src/body-full-stop.test.ts @@ -0,0 +1,51 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyFullStop } from "./body-full-stop.js"; + +const messages = { + empty: "test:\n", + with: `test: subject\n\nbody.`, + without: `test: subject\n\nbody`, +}; + +const parsed = { + empty: parse(messages.empty), + with: parse(messages.with), + without: parse(messages.without), +}; + +test('empty against "always" should succeed', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with against "always ." should succeed', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always ." should fail', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/body-full-stop.ts b/@commitlint/rules/src/body-full-stop.ts new file mode 100644 index 0000000000..845b0f5790 --- /dev/null +++ b/@commitlint/rules/src/body-full-stop.ts @@ -0,0 +1,22 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const bodyFullStop: SyncRule<string> = ( + parsed, + when = "always", + value = ".", +) => { + const input = parsed.body; + + if (!input) { + return [true]; + } + + 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"]), + ]; +}; diff --git a/@commitlint/rules/src/body-leading-blank.js b/@commitlint/rules/src/body-leading-blank.js deleted file mode 100644 index 1065011810..0000000000 --- a/@commitlint/rules/src/body-leading-blank.js +++ /dev/null @@ -1,20 +0,0 @@ -import toLines from '@commitlint/to-lines'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - // Flunk if no body is found - if (!parsed.body) { - return [true]; - } - - const negated = when === 'never'; - const [leading] = toLines(parsed.raw).slice(1); - - // Check if the first line of body is empty - const succeeds = leading === ''; - - return [ - negated ? !succeeds : succeeds, - message(['body', negated ? 'may not' : 'must', 'have leading blank line']) - ]; -}; diff --git a/@commitlint/rules/src/body-leading-blank.test.js b/@commitlint/rules/src/body-leading-blank.test.js deleted file mode 100644 index 2a72491085..0000000000 --- a/@commitlint/rules/src/body-leading-blank.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import bodyLeadingBlank from './body-leading-blank'; - -const messages = { - simple: 'test: subject', - without: 'test: subject\nbody', - with: 'test: subject\n\nbody' -}; - -const parsed = { - simple: parse(messages.simple), - without: parse(messages.without), - with: parse(messages.with) -}; - -test('with simple message should succeed for empty keyword', async t => { - const [actual] = bodyLeadingBlank(await parsed.simple); - const expected = true; - t.is(actual, expected); -}); - -test('with simple message should succeed for "never"', async t => { - const [actual] = bodyLeadingBlank(await parsed.simple, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with simple message should succeed for "always"', async t => { - const [actual] = bodyLeadingBlank(await parsed.simple, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('without blank line before body should fail for empty keyword', async t => { - const [actual] = bodyLeadingBlank(await parsed.without); - const expected = false; - t.is(actual, expected); -}); - -test('without blank line before body should succeed for "never"', async t => { - const [actual] = bodyLeadingBlank(await parsed.without, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('without blank line before body should fail for "always"', async t => { - const [actual] = bodyLeadingBlank(await parsed.without, 'always'); - const expected = false; - t.is(actual, expected); -}); - -test('with blank line before body should succeed for empty keyword', async t => { - const [actual] = bodyLeadingBlank(await parsed.with); - const expected = true; - t.is(actual, expected); -}); - -test('with blank line before body should fail for "never"', async t => { - const [actual] = bodyLeadingBlank(await parsed.with, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with blank line before body should succeed for "always"', async t => { - const [actual] = bodyLeadingBlank(await parsed.with, 'always'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-leading-blank.test.ts b/@commitlint/rules/src/body-leading-blank.test.ts new file mode 100644 index 0000000000..a30e243afa --- /dev/null +++ b/@commitlint/rules/src/body-leading-blank.test.ts @@ -0,0 +1,69 @@ +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", +}; + +const parsed = { + simple: parse(messages.simple), + without: parse(messages.without), + with: parse(messages.with), +}; + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with simple message should succeed for "always"', async () => { + 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 () => { + 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/body-leading-blank.ts b/@commitlint/rules/src/body-leading-blank.ts new file mode 100644 index 0000000000..ae55973341 --- /dev/null +++ b/@commitlint/rules/src/body-leading-blank.ts @@ -0,0 +1,21 @@ +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 + if (!parsed.body) { + return [true]; + } + + const negated = when === "never"; + const [leading] = toLines(parsed.raw).slice(1); + + // Check if the first line of body is empty + const succeeds = leading === ""; + + return [ + negated ? !succeeds : succeeds, + message(["body", negated ? "may not" : "must", "have leading blank line"]), + ]; +}; diff --git a/@commitlint/rules/src/body-max-length.js b/@commitlint/rules/src/body-max-length.js deleted file mode 100644 index 335cd7bb3e..0000000000 --- a/@commitlint/rules/src/body-max-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.body; - - if (!input) { - return [true]; - } - - return [ - maxLength(input, value), - `body must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/body-max-length.test.js b/@commitlint/rules/src/body-max-length.test.js deleted file mode 100644 index 4f0bacc8a6..0000000000 --- a/@commitlint/rules/src/body-max-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './body-max-length'; - -const short = 'a'; -const long = 'ab'; - -const value = short.length; - -const messages = { - empty: 'test: subject', - short: `test: subject\n${short}`, - long: `test: subject\n${long}` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-max-length.test.ts b/@commitlint/rules/src/body-max-length.test.ts new file mode 100644 index 0000000000..0b85c58b0f --- /dev/null +++ b/@commitlint/rules/src/body-max-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyMaxLength } from "./body-max-length.js"; + +const short = "a"; +const long = "ab"; + +const value = short.length; + +const messages = { + empty: "test: subject", + short: `test: subject\n${short}`, + long: `test: subject\n${long}`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = bodyMaxLength(await parsed.short, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..2b0ca2f1b2 --- /dev/null +++ b/@commitlint/rules/src/body-max-length.ts @@ -0,0 +1,19 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const bodyMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.body; + + if (!input) { + return [true]; + } + + return [ + maxLength(input, value), + `body must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/body-max-line-length.js b/@commitlint/rules/src/body-max-line-length.js deleted file mode 100644 index 9f28f616bf..0000000000 --- a/@commitlint/rules/src/body-max-line-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLineLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.body; - - if (!input) { - return [true]; - } - - return [ - maxLineLength(input, value), - `body's lines must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/body-max-line-length.test.js b/@commitlint/rules/src/body-max-line-length.test.js deleted file mode 100644 index d648ad8a0b..0000000000 --- a/@commitlint/rules/src/body-max-line-length.test.js +++ /dev/null @@ -1,52 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './body-max-line-length'; - -const short = 'a'; -const long = 'ab'; - -const value = short.length; - -const messages = { - empty: 'test: subject', - short: `test: subject\n${short}`, - long: `test: subject\n${long}`, - shortMultipleLines: `test:subject\n${short}\n${short}\n${short}`, - longMultipleLines: `test:subject\n${short}\n${long}\n${short}` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with short with multiple lines should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long with multiple lines should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-max-line-length.test.ts b/@commitlint/rules/src/body-max-line-length.test.ts new file mode 100644 index 0000000000..7a599b30a3 --- /dev/null +++ b/@commitlint/rules/src/body-max-line-length.test.ts @@ -0,0 +1,98 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import type { Commit } from "conventional-commits-parser"; +import { bodyMaxLineLength } from "./body-max-line-length.js"; + +const short = "a"; +const long = "ab"; +const url = "https://example.com/URL/with/a/very/long/path"; + +const value = short.length; + +const messages = { + empty: "test: subject", + short: `test: subject\n${short}`, + long: `test: subject\n${long}`, + shortMultipleLines: `test:subject\n${short}\n${short}\n${short}`, + longMultipleLines: `test:subject\n${short}\n${long}\n${short}`, + urlStandalone: `test:subject\n${short}\n${url}\n${short}`, + urlMarkdownLinkInline: `test:subject + +This is a [link](${url}).`, + urlMarkdownLinkInList: `test:subject + +Link in a list: + +- ${url}`, + urlMarkdownLinkInFooter: `test:subject + +Finally, [link][] via footer. + +[link]: ${url}`, +}; + +const parsed = Object.entries(messages).reduce( + (_parsed, [key, message]) => + Object.assign(_parsed, { + [key]: parse(message), + }), + {} as Record<keyof typeof messages, Promise<Commit>>, +); + +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 () => { + const [actual] = bodyMaxLineLength(await parsed.short, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 () => { + const [actual] = bodyMaxLineLength( + await parsed.shortMultipleLines, + undefined, + value, + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test("with long with multiple lines should fail", async () => { + const [actual] = bodyMaxLineLength( + await parsed.longMultipleLines, + undefined, + value, + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test("with multiple lines and standalone URL should succeed", async () => { + const [actual] = bodyMaxLineLength( + await parsed.urlStandalone, + undefined, + value, + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test("with multiple lines and URL in inline Markdown link should succeed", async () => { + const [actual] = bodyMaxLineLength( + await parsed.urlMarkdownLinkInline, + undefined, + 30, + ); + const expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/body-max-line-length.ts b/@commitlint/rules/src/body-max-line-length.ts new file mode 100644 index 0000000000..5049b09eec --- /dev/null +++ b/@commitlint/rules/src/body-max-line-length.ts @@ -0,0 +1,19 @@ +import { maxLineLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const bodyMaxLineLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.body; + + if (!input) { + return [true]; + } + + return [ + maxLineLength(input, value), + `body's lines must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/body-min-length.js b/@commitlint/rules/src/body-min-length.js deleted file mode 100644 index 940876038c..0000000000 --- a/@commitlint/rules/src/body-min-length.js +++ /dev/null @@ -1,12 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - if (!parsed.body) { - return [true]; - } - - return [ - minLength(parsed.body, value), - `body must not be shorter than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/body-min-length.test.js b/@commitlint/rules/src/body-min-length.test.js deleted file mode 100644 index 9af5ef15fe..0000000000 --- a/@commitlint/rules/src/body-min-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './body-min-length'; - -const short = 'a'; -const long = 'ab'; - -const value = long.length; - -const messages = { - simple: 'test: subject', - short: `test: subject\n${short}`, - long: `test: subject\n${long}` -}; - -const parsed = { - simple: parse(messages.simple), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with simple should succeed', async t => { - const [actual] = check(await parsed.simple, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/body-min-length.test.ts b/@commitlint/rules/src/body-min-length.test.ts new file mode 100644 index 0000000000..bc9413c14e --- /dev/null +++ b/@commitlint/rules/src/body-min-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { bodyMinLength } from "./body-min-length.js"; + +const short = "a"; +const long = "ab"; + +const value = long.length; + +const messages = { + simple: "test: subject", + short: `test: subject\n${short}`, + long: `test: subject\n${long}`, +}; + +const parsed = { + simple: parse(messages.simple), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = bodyMinLength(await parsed.short, undefined, value); + const expected = false; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..958e39af0c --- /dev/null +++ b/@commitlint/rules/src/body-min-length.ts @@ -0,0 +1,17 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const bodyMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + if (!parsed.body) { + return [true]; + } + + return [ + minLength(parsed.body, value), + `body must not be shorter than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/breaking-change-exclamation-mark.test.ts b/@commitlint/rules/src/breaking-change-exclamation-mark.test.ts new file mode 100644 index 0000000000..7d7b9c5377 --- /dev/null +++ b/@commitlint/rules/src/breaking-change-exclamation-mark.test.ts @@ -0,0 +1,85 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { breakingChangeExclamationMark } from "./breaking-change-exclamation-mark.js"; + +const noHeader = "commit message"; +const plainHeader = "type: subject"; +const breakingHeader = "type!: subject"; +const noFooter = ""; +const plainFooter = "Some-Other-Trailer: content"; +const breakingFooter = "BREAKING CHANGE: reason"; + +// These are equivalence partitions. +const messages = { + noHeaderNoFooter: `${noHeader}\n\n${noFooter}`, + noHeaderPlainFooter: `${noHeader}\n\n${plainFooter}`, + noHeaderBreakingFooter: `${noHeader}\n\n${breakingFooter}`, + plainHeaderPlainFooter: `${plainHeader}\n\n${plainFooter}`, + plainHeaderBreakingFooter: `${plainHeader}\n\n${breakingFooter}`, + breakingHeaderPlainFooter: `${breakingHeader}\n\n${plainFooter}`, + breakingHeaderBreakingFooter: `${breakingHeader}\n\n${breakingFooter}`, +}; + +const parsed = { + noHeaderNoFooter: parse(messages.noHeaderNoFooter), + noHeaderPlainFooter: parse(messages.noHeaderPlainFooter), + noHeaderBreakingFooter: parse(messages.noHeaderBreakingFooter), + plainHeaderPlainFooter: parse(messages.plainHeaderPlainFooter), + plainHeaderBreakingFooter: parse(messages.plainHeaderBreakingFooter), + breakingHeaderPlainFooter: parse(messages.breakingHeaderPlainFooter), + breakingHeaderBreakingFooter: parse(messages.breakingHeaderBreakingFooter), +}; + +test("with noHeaderNoFooter should succeed", async () => { + const [actual] = breakingChangeExclamationMark(await parsed.noHeaderNoFooter); + const expected = true; + expect(actual).toEqual(expected); +}); + +test("with noHeaderPlainFooter should succeed", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.noHeaderPlainFooter, + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test("with noHeaderBreakingFooter should fail", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.noHeaderBreakingFooter, + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test("with plainHeaderPlainFooter should succeed", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.plainHeaderPlainFooter, + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test("with plainHeaderBreakingFooter should fail", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.plainHeaderBreakingFooter, + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test("with breakingHeaderPlainFooter should fail", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.breakingHeaderPlainFooter, + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test("with breakingHeaderBreakingFooter should succeed", async () => { + const [actual] = breakingChangeExclamationMark( + await parsed.breakingHeaderBreakingFooter, + ); + const expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/breaking-change-exclamation-mark.ts b/@commitlint/rules/src/breaking-change-exclamation-mark.ts new file mode 100644 index 0000000000..131d5fac3b --- /dev/null +++ b/@commitlint/rules/src/breaking-change-exclamation-mark.ts @@ -0,0 +1,36 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const breakingChangeExclamationMark: SyncRule = ( + parsed, + when = "always", +) => { + const header = parsed.header; + const footer = parsed.footer; + + // It is the correct behavior to return true only when both the header and footer are empty, + // but still run the usual checks if one or neither are empty. + // The reasoning is that if one is empty and the other contains a breaking change marker, + // then the check fails as it is not possible for the empty one to indicate a breaking change. + if (!header && !footer) { + return [true]; + } + + const hasExclamationMark = + !!header && /^(\w*)(?:\((.*)\))?!: (.*)$/.test(header); + const hasBreakingChange = !!footer && /^BREAKING[ -]CHANGE:/m.test(footer); + + const negated = when === "never"; + const check = hasExclamationMark === hasBreakingChange; + + return [ + negated ? !check : check, + message([ + "breaking changes", + negated ? "must not" : "must", + "have both an exclamation mark in the header", + "and BREAKING CHANGE in the footer", + "to identify a breaking change", + ]), + ]; +}; diff --git a/@commitlint/rules/src/footer-empty.js b/@commitlint/rules/src/footer-empty.js deleted file mode 100644 index 7aff4321e7..0000000000 --- a/@commitlint/rules/src/footer-empty.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.footer); - - return [ - negated ? notEmpty : !notEmpty, - message(['footer', negated ? 'may not' : 'must', 'be empty']) - ]; -}; diff --git a/@commitlint/rules/src/footer-empty.test.js b/@commitlint/rules/src/footer-empty.test.js deleted file mode 100644 index 6bb71def76..0000000000 --- a/@commitlint/rules/src/footer-empty.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import footerEmpty from './footer-empty'; - -const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', - filled: 'test: subject\nBREAKING CHANGE: something important' -}; - -const parsed = { - simple: parse(messages.simple), - empty: parse(messages.empty), - filled: parse(messages.filled) -}; - -test('with simple message should succeed for empty keyword', async t => { - const [actual] = footerEmpty(await parsed.simple); - const expected = true; - t.is(actual, expected); -}); - -test('with simple message should fail for "never"', async t => { - const [actual] = footerEmpty(await parsed.simple, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with simple message should succeed for "always"', async t => { - const [actual] = footerEmpty(await parsed.simple, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty footer should succeed for empty keyword', async t => { - const [actual] = footerEmpty(await parsed.empty); - const expected = true; - t.is(actual, expected); -}); - -test('with empty footer should fail for "never"', async t => { - const [actual] = footerEmpty(await parsed.empty, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with empty footer should succeed for "always"', async t => { - const [actual] = footerEmpty(await parsed.empty, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with footer should fail for empty keyword', async t => { - const [actual] = footerEmpty(await parsed.filled); - const expected = false; - t.is(actual, expected); -}); - -test('with footer should succeed for "never"', async t => { - const [actual] = footerEmpty(await parsed.filled, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with footer should fail for "always"', async t => { - const [actual] = footerEmpty(await parsed.filled, 'always'); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/footer-empty.test.ts b/@commitlint/rules/src/footer-empty.test.ts new file mode 100644 index 0000000000..da98f6541b --- /dev/null +++ b/@commitlint/rules/src/footer-empty.test.ts @@ -0,0 +1,69 @@ +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", +}; + +const parsed = { + simple: parse(messages.simple), + empty: parse(messages.empty), + filled: parse(messages.filled), +}; + +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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with simple message should succeed for "always"', async () => { + const [actual] = footerEmpty(await parsed.simple, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with empty footer should succeed for "always"', async () => { + const [actual] = footerEmpty(await parsed.empty, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with footer should fail for "always"', async () => { + 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 new file mode 100644 index 0000000000..c007f025c8 --- /dev/null +++ b/@commitlint/rules/src/footer-empty.ts @@ -0,0 +1,13 @@ +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 || ""); + + return [ + negated ? notEmpty : !notEmpty, + message(["footer", negated ? "may not" : "must", "be empty"]), + ]; +}; diff --git a/@commitlint/rules/src/footer-leading-blank.js b/@commitlint/rules/src/footer-leading-blank.js deleted file mode 100644 index fdbe09de7e..0000000000 --- a/@commitlint/rules/src/footer-leading-blank.js +++ /dev/null @@ -1,23 +0,0 @@ -import toLines from '@commitlint/to-lines'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - // Flunk if no footer is found - if (!parsed.footer) { - return [true]; - } - - const negated = when === 'never'; - const rawLines = toLines(parsed.raw); - const bodyLines = toLines(parsed.body); - const bodyOffset = bodyLines.length > 0 ? rawLines.indexOf(bodyLines[0]) : 1; - const [leading] = rawLines.slice(bodyLines.length + bodyOffset); - - // Check if the first line of footer is empty - const succeeds = leading === ''; - - return [ - negated ? !succeeds : succeeds, - message(['footer', negated ? 'may not' : 'must', 'have leading blank line']) - ]; -}; diff --git a/@commitlint/rules/src/footer-leading-blank.test.js b/@commitlint/rules/src/footer-leading-blank.test.js deleted file mode 100644 index b65e553da8..0000000000 --- a/@commitlint/rules/src/footer-leading-blank.test.js +++ /dev/null @@ -1,159 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import footerLeadingBlank from './footer-leading-blank'; - -const messages = { - 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', - 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' -}; - -const parsed = { - simple: parse(messages.simple), - body: parse(messages.body), - trailing: parse(messages.trailing), - without: parse(messages.without), - withoutBody: parse(messages.withoutBody), - with: parse(messages.with), - withMulitLine: parse(messages.withMulitLine), - withDoubleNewLine: parse(messages.withDoubleNewLine) -}; - -test('with simple message should succeed for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.simple); - const expected = true; - t.is(actual, expected); -}); - -test('with simple message should succeed for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.simple, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with simple message should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.simple, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with body message should succeed for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.body); - const expected = true; - t.is(actual, expected); -}); - -test('with body message should succeed for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.body, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with body message should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.body, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with trailing message should succeed for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.trailing); - const expected = true; - t.is(actual, expected); -}); - -test('with trailing message should succeed for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.trailing, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with trailing message should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.trailing, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('without body should fail for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.withoutBody, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('without body should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.withoutBody, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('without blank line before footer should fail for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.without); - const expected = false; - t.is(actual, expected); -}); - -test('without blank line before footer should succeed for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.without, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('without blank line before footer should fail for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.without, 'always'); - const expected = false; - t.is(actual, expected); -}); - -test('with blank line before footer should succeed for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.with); - const expected = true; - t.is(actual, expected); -}); - -test('with blank line before footer should fail for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.with, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with blank line before footer should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.with, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with blank line before footer and multiline body should succeed for empty keyword', async t => { - const [actual] = footerLeadingBlank(await parsed.withMulitLine); - const expected = true; - t.is(actual, expected); -}); - -test('with blank line before footer and multiline body should fail for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.withMulitLine, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with blank line before footer and multiline body should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.withMulitLine, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with double blank line before footer and double line in body should fail for "never"', async t => { - const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('with double blank line before footer and double line in body should succeed for "always"', async t => { - const [actual] = footerLeadingBlank(await parsed.withDoubleNewLine, 'always'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/footer-leading-blank.test.ts b/@commitlint/rules/src/footer-leading-blank.test.ts new file mode 100644 index 0000000000..8e17c4d343 --- /dev/null +++ b/@commitlint/rules/src/footer-leading-blank.test.ts @@ -0,0 +1,173 @@ +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", + withoutBody: + "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", + withMulitLine: + "test: subject\nmulti\nline\nbody\n\nBREAKING CHANGE: something important", + withDoubleNewLine: "fix: some issue\n\ndetailed explanation\n\ncloses #123", +}; + +const parsed = { + simple: parse(messages.simple), + body: parse(messages.body), + trailing: parse(messages.trailing), + without: parse(messages.without), + withoutBody: parse(messages.withoutBody), + withBodyWithComment: parse(messages.withBodyWithComment, undefined, { + commentChar: "#", + }), + with: parse(messages.with), + withMulitLine: parse(messages.withMulitLine), + withDoubleNewLine: parse(messages.withDoubleNewLine), +}; + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with simple message should succeed for "always"', async () => { + const [actual] = footerLeadingBlank(await parsed.simple, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with body message should succeed for "always"', async () => { + const [actual] = footerLeadingBlank(await parsed.body, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with trailing message should succeed for "always"', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without body should succeed for "always"', async () => { + 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 () => { + 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +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 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 expected = true; + expect(actual).toEqual(expected); +}); + +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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with body containing comments should succeed for "always"', async () => { + const [actual] = footerLeadingBlank( + await parsed.withBodyWithComment, + "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 new file mode 100644 index 0000000000..3f83b089a1 --- /dev/null +++ b/@commitlint/rules/src/footer-leading-blank.ts @@ -0,0 +1,28 @@ +import toLines from "@commitlint/to-lines"; +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const footerLeadingBlank: SyncRule = (parsed, when = "always") => { + // Flunk if no footer is found + if (!parsed.footer) { + return [true]; + } + + 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 === ""; + + return [ + negated ? !succeeds : succeeds, + message([ + "footer", + negated ? "may not" : "must", + "have leading blank line", + ]), + ]; +}; diff --git a/@commitlint/rules/src/footer-max-length.js b/@commitlint/rules/src/footer-max-length.js deleted file mode 100644 index 36b3a3993c..0000000000 --- a/@commitlint/rules/src/footer-max-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.footer; - - if (!input) { - return [true]; - } - - return [ - maxLength(input, value), - `footer must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/footer-max-length.test.js b/@commitlint/rules/src/footer-max-length.test.js deleted file mode 100644 index 5316dff8f0..0000000000 --- a/@commitlint/rules/src/footer-max-length.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './footer-max-length'; - -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; - -const value = short.length; - -const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', - short: `test: subject\n${short}`, - long: `test: subject\n${long}` -}; - -const parsed = { - simple: parse(messages.simple), - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with simple should succeed', async t => { - const [actual] = check(await parsed.simple, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/footer-max-length.test.ts b/@commitlint/rules/src/footer-max-length.test.ts new file mode 100644 index 0000000000..0dd0a3cb23 --- /dev/null +++ b/@commitlint/rules/src/footer-max-length.test.ts @@ -0,0 +1,46 @@ +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 value = short.length; + +const messages = { + simple: "test: subject", + empty: "test: subject\nbody", + short: `test: subject\n${short}`, + long: `test: subject\n${long}`, +}; + +const parsed = { + simple: parse(messages.simple), + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = footerMaxLength(await parsed.empty, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 () => { + 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 new file mode 100644 index 0000000000..d20a03ab45 --- /dev/null +++ b/@commitlint/rules/src/footer-max-length.ts @@ -0,0 +1,19 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const footerMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.footer; + + if (!input) { + return [true]; + } + + return [ + maxLength(input, value), + `footer must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/footer-max-line-length.js b/@commitlint/rules/src/footer-max-line-length.js deleted file mode 100644 index 019afeac3c..0000000000 --- a/@commitlint/rules/src/footer-max-line-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLineLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.footer; - - if (!input) { - return [true]; - } - - return [ - maxLineLength(input, value), - `footer's lines must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/footer-max-line-length.test.js b/@commitlint/rules/src/footer-max-line-length.test.js deleted file mode 100644 index c336c31b5a..0000000000 --- a/@commitlint/rules/src/footer-max-line-length.test.js +++ /dev/null @@ -1,60 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './footer-max-line-length'; - -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; - -const value = short.length; - -const messages = { - 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}`, - longMultipleLines: `test:subject\n${short}\n${long}\n${short}` -}; - -const parsed = { - simple: parse(messages.simple), - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with simple should succeed', async t => { - const [actual] = check(await parsed.simple, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with short with multiple lines should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long with multiple lines should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/footer-max-line-length.test.ts b/@commitlint/rules/src/footer-max-line-length.test.ts new file mode 100644 index 0000000000..7efa44c686 --- /dev/null +++ b/@commitlint/rules/src/footer-max-line-length.test.ts @@ -0,0 +1,60 @@ +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 value = short.length; + +const messages = { + 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}`, + longMultipleLines: `test:subject\n${short}\n${long}\n${short}`, +}; + +const parsed = { + simple: parse(messages.simple), + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = footerMaxLineLength(await parsed.empty, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 () => { + const [actual] = footerMaxLineLength(await parsed.long, undefined, value); + const expected = false; + expect(actual).toEqual(expected); +}); + +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 () => { + 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 new file mode 100644 index 0000000000..61366556fe --- /dev/null +++ b/@commitlint/rules/src/footer-max-line-length.ts @@ -0,0 +1,19 @@ +import { maxLineLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const footerMaxLineLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.footer; + + if (!input) { + return [true]; + } + + return [ + maxLineLength(input, value), + `footer's lines must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/footer-min-length.js b/@commitlint/rules/src/footer-min-length.js deleted file mode 100644 index f0c01b6f00..0000000000 --- a/@commitlint/rules/src/footer-min-length.js +++ /dev/null @@ -1,11 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - if (!parsed.footer) { - return [true]; - } - return [ - minLength(parsed.footer, value), - `footer must not be shorter than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/footer-min-length.test.js b/@commitlint/rules/src/footer-min-length.test.js deleted file mode 100644 index c86f11e542..0000000000 --- a/@commitlint/rules/src/footer-min-length.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './footer-min-length'; - -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; - -const value = long.length; - -const messages = { - simple: 'test: subject', - empty: 'test: subject\nbody', - short: `test: subject\n${short}`, - long: `test: subject\n${long}` -}; - -const parsed = { - simple: parse(messages.simple), - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with simple should succeed', async t => { - const [actual] = check(await parsed.simple, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/footer-min-length.test.ts b/@commitlint/rules/src/footer-min-length.test.ts new file mode 100644 index 0000000000..a70d86044a --- /dev/null +++ b/@commitlint/rules/src/footer-min-length.test.ts @@ -0,0 +1,46 @@ +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 value = long.length; + +const messages = { + simple: "test: subject", + empty: "test: subject\nbody", + short: `test: subject\n${short}`, + long: `test: subject\n${long}`, +}; + +const parsed = { + simple: parse(messages.simple), + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = footerMinLength(await parsed.empty, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 () => { + 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 new file mode 100644 index 0000000000..54f7c6143c --- /dev/null +++ b/@commitlint/rules/src/footer-min-length.ts @@ -0,0 +1,17 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const footerMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + if (!parsed.footer) { + return [true]; + } + + return [ + minLength(parsed.footer, value), + `footer must not be shorter than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/header-case.js b/@commitlint/rules/src/header-case.js deleted file mode 100644 index 779f4a5e97..0000000000 --- a/@commitlint/rules/src/header-case.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -const negated = when => when === 'never'; - -export default (parsed, when, value) => { - const {header} = parsed; - - if (typeof header !== 'string' || !header.match(/^[a-z]/i)) { - return [true]; - } - - const checks = (Array.isArray(value) ? value : [value]).map(check => { - if (typeof check === 'string') { - return { - when: 'always', - case: check - }; - } - return check; - }); - - const result = checks.some(check => { - const r = ensure.case(header, check.case); - return negated(check.when) ? !r : r; - }); - - const list = checks.map(c => c.case).join(', '); - - return [ - negated(when) ? !result : result, - message([`header must`, negated(when) ? `not` : null, `be ${list}`]) - ]; -}; diff --git a/@commitlint/rules/src/header-case.test.js b/@commitlint/rules/src/header-case.test.js deleted file mode 100644 index fe7f501487..0000000000 --- a/@commitlint/rules/src/header-case.test.js +++ /dev/null @@ -1,318 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import headerCase from './header-case'; - -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' -}; - -const parsed = { - numeric: parse(messages.numeric), - lowercase: parse(messages.lowercase), - mixedcase: parse(messages.mixedcase), - uppercase: parse(messages.uppercase), - camelcase: parse(messages.camelcase), - kebabcase: parse(messages.kebabcase), - pascalcase: parse(messages.pascalcase), - snakecase: parse(messages.snakecase), - startcase: parse(messages.startcase) -}; - -test('with lowercase header should fail for "never lowercase"', async t => { - const [actual] = headerCase(await parsed.lowercase, 'never', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase header should succeed for "always lowercase"', async t => { - const [actual] = headerCase(await parsed.lowercase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase header should succeed for "never lowercase"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase header should fail for "always lowercase"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase header should fail for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase header should fail for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.uppercase, 'never', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase header should succeed for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.uppercase, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase header should fail for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase header should fail for "always pascalcase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase header should fail for "always kebabcase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase header should fail for "always snakecase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase header should succeed for "always camelcase"', async t => { - const [actual] = headerCase(await parsed.camelcase, 'always', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase header should fail for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase header should succeed for "always pascalcase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase header should fail for "always kebabcase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase header should fail for "always snakecase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase header should fail for "always camelcase"', async t => { - const [actual] = headerCase(await parsed.pascalcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase header should fail for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase header should fail for "always pascalcase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase header should fail for "always kebabcase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase header should succeed for "always snakecase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase header should fail for "always camelcase"', async t => { - const [actual] = headerCase(await parsed.snakecase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should fail for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with startcase header should fail for "always pascalcase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should fail for "always kebabcase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should fail for "always snakecase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should fail for "always camelcase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase header should succeed for "always startcase"', async t => { - const [actual] = headerCase(await parsed.startcase, 'always', 'start-case'); - const expected = true; - t.is(actual, expected); -}); - -test('should use expected message with "always"', async t => { - const [, message] = headerCase( - await parsed.uppercase, - 'always', - 'lower-case' - ); - t.true(message.indexOf('must be lower-case') > -1); -}); - -test('should use expected message with "never"', async t => { - const [, message] = headerCase(await parsed.uppercase, 'never', 'upper-case'); - t.true(message.indexOf('must not be upper-case') > -1); -}); - -test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = headerCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase header should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = headerCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase header should fail for "always [uppercase, lowercase]"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase header should pass for "always [uppercase, lowercase, camel-case]"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async t => { - const [actual] = headerCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should fail for "never [uppercase, lowercase]"', async t => { - const [actual] = headerCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with numeric header should succeed for "never lowercase"', async t => { - const [actual] = headerCase(await parsed.numeric, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric header should succeed for "always lowercase"', async t => { - const [actual] = headerCase(await parsed.numeric, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric header should succeed for "never uppercase"', async t => { - const [actual] = headerCase(await parsed.numeric, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric header should succeed for "always uppercase"', async t => { - const [actual] = headerCase(await parsed.numeric, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/header-case.test.ts b/@commitlint/rules/src/header-case.test.ts new file mode 100644 index 0000000000..edda2b957c --- /dev/null +++ b/@commitlint/rules/src/header-case.test.ts @@ -0,0 +1,318 @@ +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", +}; + +const parsed = { + numeric: parse(messages.numeric), + lowercase: parse(messages.lowercase), + mixedcase: parse(messages.mixedcase), + uppercase: parse(messages.uppercase), + camelcase: parse(messages.camelcase), + kebabcase: parse(messages.kebabcase), + pascalcase: parse(messages.pascalcase), + snakecase: parse(messages.snakecase), + startcase: parse(messages.startcase), +}; + +test('with lowercase header should fail for "never lowercase"', async () => { + 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('should use expected message with "always"', async () => { + const [, message] = headerCase( + await parsed.uppercase, + "always", + "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"); +}); + +test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async () => { + 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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/header-case.ts b/@commitlint/rules/src/header-case.ts new file mode 100644 index 0000000000..310b8a753e --- /dev/null +++ b/@commitlint/rules/src/header-case.ts @@ -0,0 +1,39 @@ +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; + +const negated = (when?: string) => when === "never"; + +export const headerCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( + parsed, + when = "always", + value = [], +) => { + const { header } = parsed; + + if (typeof header !== "string" || !header.match(/^[a-z]/i)) { + return [true]; + } + + const checks = (Array.isArray(value) ? value : [value]).map((check) => { + if (typeof check === "string") { + return { + when: "always", + case: check, + }; + } + return check; + }); + + const result = checks.some((check) => { + const r = ensureCase(header, check.case); + return negated(check.when) ? !r : r; + }); + + const list = checks.map((c) => c.case).join(", "); + + return [ + negated(when) ? !result : result, + message([`header must`, negated(when) ? `not` : null, `be ${list}`]), + ]; +}; diff --git a/@commitlint/rules/src/header-full-stop.js b/@commitlint/rules/src/header-full-stop.js deleted file mode 100644 index f30ce6d12c..0000000000 --- a/@commitlint/rules/src/header-full-stop.js +++ /dev/null @@ -1,12 +0,0 @@ -import message from '@commitlint/message'; - -export default (parsed, when, value) => { - 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']) - ]; -}; diff --git a/@commitlint/rules/src/header-full-stop.test.js b/@commitlint/rules/src/header-full-stop.test.js deleted file mode 100644 index 5b41da82e3..0000000000 --- a/@commitlint/rules/src/header-full-stop.test.js +++ /dev/null @@ -1,37 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './header-full-stop'; - -const messages = { - with: `header.\n`, - without: `header\n` -}; - -const parsed = { - with: parse(messages.with), - without: parse(messages.without) -}; - -test('with against "always ." should succeed', async t => { - const [actual] = check(await parsed.with, 'always', '.'); - const expected = true; - t.is(actual, expected); -}); - -test('with against "never ." should fail', async t => { - const [actual] = check(await parsed.with, 'never', '.'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "always ." should fail', async t => { - const [actual] = check(await parsed.without, 'always', '.'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "never ." should succeed', async t => { - const [actual] = check(await parsed.without, 'never', '.'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/header-full-stop.test.ts b/@commitlint/rules/src/header-full-stop.test.ts new file mode 100644 index 0000000000..98fd156437 --- /dev/null +++ b/@commitlint/rules/src/header-full-stop.test.ts @@ -0,0 +1,37 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { headerFullStop } from "./header-full-stop.js"; + +const messages = { + with: `header.\n`, + without: `header\n`, +}; + +const parsed = { + with: parse(messages.with), + without: parse(messages.without), +}; + +test('with against "always ." should succeed', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always ." should fail', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/header-full-stop.ts b/@commitlint/rules/src/header-full-stop.ts new file mode 100644 index 0000000000..ae57cd26e5 --- /dev/null +++ b/@commitlint/rules/src/header-full-stop.ts @@ -0,0 +1,17 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const headerFullStop: SyncRule<string> = ( + parsed, + when = "always", + value = ".", +) => { + 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"]), + ]; +}; diff --git a/@commitlint/rules/src/header-max-length.js b/@commitlint/rules/src/header-max-length.js deleted file mode 100644 index 4b54e2e6ad..0000000000 --- a/@commitlint/rules/src/header-max-length.js +++ /dev/null @@ -1,10 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - return [ - maxLength(parsed.header, value), - `header must not be longer than ${value} characters, current length is ${ - parsed.header.length - }` - ]; -}; diff --git a/@commitlint/rules/src/header-max-length.test.js b/@commitlint/rules/src/header-max-length.test.js deleted file mode 100644 index 3ab269b340..0000000000 --- a/@commitlint/rules/src/header-max-length.test.js +++ /dev/null @@ -1,30 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './header-max-length'; - -const short = 'test: a'; -const long = 'test: ab'; - -const value = short.length; - -const messages = { - short, - long -}; - -const parsed = { - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/header-max-length.test.ts b/@commitlint/rules/src/header-max-length.test.ts new file mode 100644 index 0000000000..c7180e66b0 --- /dev/null +++ b/@commitlint/rules/src/header-max-length.test.ts @@ -0,0 +1,30 @@ +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 value = short.length; + +const messages = { + short, + long, +}; + +const parsed = { + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + 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 new file mode 100644 index 0000000000..0147c9d67f --- /dev/null +++ b/@commitlint/rules/src/header-max-length.ts @@ -0,0 +1,13 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const headerMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + return [ + maxLength(parsed.header, value), + `header must not be longer than ${value} characters, current length is ${parsed.header?.length}`, + ]; +}; diff --git a/@commitlint/rules/src/header-min-length.js b/@commitlint/rules/src/header-min-length.js deleted file mode 100644 index 35b2ed0fa2..0000000000 --- a/@commitlint/rules/src/header-min-length.js +++ /dev/null @@ -1,10 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - return [ - minLength(parsed.header, value), - `header must not be shorter than ${value} characters, current length is ${ - parsed.header.length - }` - ]; -}; diff --git a/@commitlint/rules/src/header-min-length.test.js b/@commitlint/rules/src/header-min-length.test.js deleted file mode 100644 index 699943392a..0000000000 --- a/@commitlint/rules/src/header-min-length.test.js +++ /dev/null @@ -1,30 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './header-min-length'; - -const short = 'BREAKING CHANGE: a'; -const long = 'BREAKING CHANGE: ab'; - -const value = long.length; - -const messages = { - short, - long -}; - -const parsed = { - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/header-min-length.test.ts b/@commitlint/rules/src/header-min-length.test.ts new file mode 100644 index 0000000000..e97dfe3d48 --- /dev/null +++ b/@commitlint/rules/src/header-min-length.test.ts @@ -0,0 +1,30 @@ +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 value = long.length; + +const messages = { + short, + long, +}; + +const parsed = { + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + 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 new file mode 100644 index 0000000000..d332b077b3 --- /dev/null +++ b/@commitlint/rules/src/header-min-length.ts @@ -0,0 +1,13 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const headerMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + return [ + minLength(parsed.header, value), + `header must not be shorter than ${value} characters, current length is ${parsed.header?.length}`, + ]; +}; diff --git a/@commitlint/rules/src/header-trim.test.ts b/@commitlint/rules/src/header-trim.test.ts new file mode 100644 index 0000000000..f9280b2bf7 --- /dev/null +++ b/@commitlint/rules/src/header-trim.test.ts @@ -0,0 +1,73 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import type { Commit } from "conventional-commits-parser"; + +import { headerTrim } from "./header-trim.js"; + +const messages = { + correct: "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", + + mixStart: "\t\ttest: subject", + mixEnd: "test: subject\t\t", + mixSurround: "\t \ttest: subject \t \t", +}; + +const parsed = Object.entries(messages).reduce( + (_parsed, [key, message]) => + Object.assign(_parsed, { + [key]: parse(message), + }), + {} as Record<keyof typeof messages, Promise<Commit>>, +); + +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 }) => { + const result = headerTrim(await commit); + expect(result).toEqual( + 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 }) => { + const result = headerTrim(await commit); + expect(result).toEqual( + 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 }, +] as const)( + "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", + ]), + ); + }, +); diff --git a/@commitlint/rules/src/header-trim.ts b/@commitlint/rules/src/header-trim.ts new file mode 100644 index 0000000000..05edeab268 --- /dev/null +++ b/@commitlint/rules/src/header-trim.ts @@ -0,0 +1,22 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const headerTrim: SyncRule = (parsed) => { + const { header } = parsed; + + if (!header) return [true]; + + const startsWithWhiteSpace = header.length > header.trimStart().length; + const endsWithWhiteSpace = header.length > header.trimEnd().length; + + if (startsWithWhiteSpace && endsWithWhiteSpace) + return [false, message(["header", "must not be surrounded by whitespace"])]; + + if (startsWithWhiteSpace) + return [false, message(["header", "must not start with whitespace"])]; + + if (endsWithWhiteSpace) + return [false, message(["header", "must not end with whitespace"])]; + + return [true]; +}; diff --git a/@commitlint/rules/src/index.js b/@commitlint/rules/src/index.js deleted file mode 100644 index 4d61033f57..0000000000 --- a/@commitlint/rules/src/index.js +++ /dev/null @@ -1,34 +0,0 @@ -export default { - 'body-case': require('./body-case'), - 'body-empty': require('./body-empty'), - 'body-leading-blank': require('./body-leading-blank'), - 'body-max-length': require('./body-max-length'), - 'body-max-line-length': require('./body-max-line-length'), - 'body-min-length': require('./body-min-length'), - 'footer-empty': require('./footer-empty'), - 'footer-leading-blank': require('./footer-leading-blank'), - 'footer-max-length': require('./footer-max-length'), - 'footer-max-line-length': require('./footer-max-line-length'), - 'footer-min-length': require('./footer-min-length'), - 'header-case': require('./header-case'), - 'header-full-stop': require('./header-full-stop'), - 'header-max-length': require('./header-max-length'), - 'header-min-length': require('./header-min-length'), - 'references-empty': require('./references-empty'), - 'scope-case': require('./scope-case'), - 'scope-empty': require('./scope-empty'), - 'scope-enum': require('./scope-enum'), - 'scope-max-length': require('./scope-max-length'), - 'scope-min-length': require('./scope-min-length'), - 'signed-off-by': require('./signed-off-by'), - 'subject-case': require('./subject-case'), - 'subject-empty': require('./subject-empty'), - 'subject-full-stop': require('./subject-full-stop'), - 'subject-max-length': require('./subject-max-length'), - 'subject-min-length': require('./subject-min-length'), - 'type-case': require('./type-case'), - 'type-empty': require('./type-empty'), - 'type-enum': require('./type-enum'), - 'type-max-length': require('./type-max-length'), - 'type-min-length': require('./type-min-length') -}; diff --git a/@commitlint/rules/src/index.test.js b/@commitlint/rules/src/index.test.js deleted file mode 100644 index 9176e6008f..0000000000 --- a/@commitlint/rules/src/index.test.js +++ /dev/null @@ -1,32 +0,0 @@ -import path from 'path'; -import test from 'ava'; -import globby from 'globby'; -import {values} from 'lodash'; -import rules from '.'; - -test('exports all rules', async t => { - const expected = (await glob('*.js')).sort(); - const actual = Object.keys(rules).sort(); - t.deepEqual(actual, expected); -}); - -test('rules export functions', t => { - const actual = values(rules); - t.true(actual.every(rule => typeof rule === 'function')); -}); - -async function glob(pattern) { - const files = await globby([path.join(__dirname, pattern)], { - ignore: ['**/index.js', '**/*.test.js'], - cwd: __dirname - }); - return files.map(relative).map(toExport); -} - -function relative(filePath) { - return path.relative(__dirname, filePath); -} - -function toExport(fileName) { - return path.basename(fileName, path.extname(fileName)); -} diff --git a/@commitlint/rules/src/index.test.ts b/@commitlint/rules/src/index.test.ts new file mode 100644 index 0000000000..22f3b91847 --- /dev/null +++ b/@commitlint/rules/src/index.test.ts @@ -0,0 +1,50 @@ +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 rules from "./index.js"; + +const __dirname = path.resolve(fileURLToPath(import.meta.url), ".."); + +test("exports all rules", () => { + const expected = _glob("*.ts").sort(); + const actual = Object.keys(rules).sort(); + expect(actual).toEqual(expected); +}); + +test("rules export functions", () => { + const actual = Object.values(rules); + expect(actual.every((rule) => typeof rule === "function")).toBe(true); +}); + +test("all rules are present in documentation", () => { + const file = fs.readFileSync( + 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("## ", "")); + + expect(Object.keys(rules)).toEqual(expect.arrayContaining(results)); +}); + +function _glob(pattern: string) { + const files = globSync(pattern, { + ignore: ["**/index.ts", "**/*.test.ts"], + cwd: __dirname, + }); + return files.map(relative).map(toExport); +} + +function relative(filePath: string) { + return path.relative(__dirname, filePath); +} + +function toExport(fileName: string) { + return path.basename(fileName, path.extname(fileName)); +} diff --git a/@commitlint/rules/src/index.ts b/@commitlint/rules/src/index.ts new file mode 100644 index 0000000000..95e7a9c86d --- /dev/null +++ b/@commitlint/rules/src/index.ts @@ -0,0 +1,77 @@ +import { breakingChangeExclamationMark } from "./breaking-change-exclamation-mark.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, + "breaking-change-exclamation-mark": breakingChangeExclamationMark, + "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-exclamation-mark": subjectExclamationMark, + "subject-full-stop": subjectFullStop, + "subject-max-length": subjectMaxLength, + "subject-min-length": subjectMinLength, + "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.js b/@commitlint/rules/src/references-empty.js deleted file mode 100644 index 87a7f15b74..0000000000 --- a/@commitlint/rules/src/references-empty.js +++ /dev/null @@ -1,10 +0,0 @@ -import message from '@commitlint/message'; - -export default (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']) - ]; -}; diff --git a/@commitlint/rules/src/references-empty.test.js b/@commitlint/rules/src/references-empty.test.js deleted file mode 100644 index a414362999..0000000000 --- a/@commitlint/rules/src/references-empty.test.js +++ /dev/null @@ -1,86 +0,0 @@ -import test from 'ava'; -import preset from 'conventional-changelog-angular'; -import parse from '@commitlint/parse'; -import referencesEmpty from './references-empty'; - -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' -}; - -const opts = (async () => { - const o = await preset; - o.parserOpts.commentChar = '#'; - return o; -})(); - -const parsed = { - plain: (async () => - parse(messages.plain, undefined, (await opts).parserOpts))(), - comment: (async () => - parse(messages.comment, undefined, (await opts).parserOpts))(), - reference: (async () => - parse(messages.reference, undefined, (await opts).parserOpts))(), - references: (async () => - parse(messages.references, undefined, (await opts).parserOpts))(), - prefix: parse(messages.prefix, undefined, { - issuePrefixes: ['REF-'] - }) -}; - -test('defaults to never and fails for plain', async t => { - const [actual] = referencesEmpty(await parsed.plain); - const expected = false; - t.is(actual, expected); -}); - -test('defaults to never and succeeds for reference', async t => { - const [actual] = referencesEmpty(await parsed.reference); - const expected = true; - t.is(actual, expected); -}); - -test('fails for comment with never', async t => { - const [actual] = referencesEmpty(await parsed.comment, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('succeeds for comment with always', async t => { - const [actual] = referencesEmpty(await parsed.comment, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('succeeds for reference with never', async t => { - const [actual] = referencesEmpty(await parsed.reference, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('fails for reference with always', async t => { - const [actual] = referencesEmpty(await parsed.reference, 'always'); - const expected = false; - t.is(actual, expected); -}); - -test('succeeds for references with never', async t => { - const [actual] = referencesEmpty(await parsed.references, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('fails for references with always', async t => { - const [actual] = referencesEmpty(await parsed.references, 'always'); - const expected = false; - t.is(actual, expected); -}); - -test('succeeds for custom references with always', async t => { - const [actual] = referencesEmpty(await parsed.prefix, 'never'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/references-empty.test.ts b/@commitlint/rules/src/references-empty.test.ts new file mode 100644 index 0000000000..03b12bd060 --- /dev/null +++ b/@commitlint/rules/src/references-empty.test.ts @@ -0,0 +1,88 @@ +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"; + +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", +}; + +const opts = (async () => { + const o = await preset(); + o.parserOpts.commentChar = "#"; + return o; +})(); + +const parsed = { + plain: (async () => + parse(messages.plain, undefined, (await opts).parserOpts))(), + comment: (async () => + parse(messages.comment, undefined, (await opts).parserOpts))(), + reference: (async () => + parse(messages.reference, undefined, (await opts).parserOpts))(), + references: (async () => + parse(messages.references, undefined, (await opts).parserOpts))(), + prefix: parse(messages.prefix, undefined, { + issuePrefixes: ["REF-"], + }), +}; + +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 () => { + 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"); + const expected = false; + expect(actual).toEqual(expected); +}); + +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"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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"); + const expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/references-empty.ts b/@commitlint/rules/src/references-empty.ts new file mode 100644 index 0000000000..650675e087 --- /dev/null +++ b/@commitlint/rules/src/references-empty.ts @@ -0,0 +1,11 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +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"]), + ]; +}; diff --git a/@commitlint/rules/src/scope-case.js b/@commitlint/rules/src/scope-case.js deleted file mode 100644 index b74e9a66d2..0000000000 --- a/@commitlint/rules/src/scope-case.js +++ /dev/null @@ -1,42 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -const negated = when => when === 'never'; - -export default (parsed, when, value) => { - const {scope} = parsed; - - if (!scope) { - return [true]; - } - - const checks = (Array.isArray(value) ? value : [value]).map(check => { - if (typeof check === 'string') { - return { - when: 'always', - case: check - }; - } - return check; - }); - - // Scopes may contain slash-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 scopeSegments = scope.split(delimiters); - - const result = checks.some(check => { - const r = scopeSegments.every( - segment => delimiters.test(segment) || ensure.case(segment, check.case) - ); - - return negated(check.when) ? !r : r; - }); - - const list = checks.map(c => c.case).join(', '); - - return [ - negated(when) ? !result : result, - message([`scope must`, negated(when) ? `not` : null, `be ${list}`]) - ]; -}; diff --git a/@commitlint/rules/src/scope-case.test.js b/@commitlint/rules/src/scope-case.test.js deleted file mode 100644 index e75b9310eb..0000000000 --- a/@commitlint/rules/src/scope-case.test.js +++ /dev/null @@ -1,324 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import scopeCase from './scope-case'; - -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' -}; - -const parsed = { - empty: parse(messages.empty), - lowercase: parse(messages.lowercase), - mixedcase: parse(messages.mixedcase), - uppercase: parse(messages.uppercase), - camelcase: parse(messages.camelcase), - kebabcase: parse(messages.kebabcase), - pascalcase: parse(messages.pascalcase), - snakecase: parse(messages.snakecase), - startcase: parse(messages.startcase) -}; - -test('with empty scope should succeed for "never lowercase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never uppercase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always uppercase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never camelcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always camelcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never kebabcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'kebab-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always kebabcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'kebab-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never pascalcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always pascalcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never snakecase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always snakecase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "never startcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'start-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty scope should succeed for "always startcase"', async t => { - const [actual] = scopeCase(await parsed.empty, 'never', 'start-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase scope should fail for "never lowercase"', async t => { - const [actual] = scopeCase(await parsed.lowercase, 'never', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase scope should succeed for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.lowercase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should succeed for "never lowercase"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should fail for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase scope should succeed for "never uppercase"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with kebabcase scope should succeed for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with kebabcase scope should fail for "always camelcase"', async t => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with kebabcase scope should fail for "always pascalcase"', async t => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with kebabcase scope should succeed for "always kebabcase"', async t => { - const [actual] = scopeCase(await parsed.kebabcase, 'always', 'kebab-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase scope should succeed for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase scope should fail for "always camelcase"', async t => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase scope should fail for "always pascalcase"', async t => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase scope should succeed for "always snakecase"', async t => { - const [actual] = scopeCase(await parsed.snakecase, 'always', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase scope should fail for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase scope should succeed for "always camelcase"', async t => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase scope should fail for "always kebabcase"', async t => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase scope should fail for "always pascalcase"', async t => { - const [actual] = scopeCase(await parsed.camelcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase scope should fail for "always lowercase"', async t => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase scope should fail for "always kebabcase"', async t => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase scope should fail for "always camelcase"', async t => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase scope should succeed for "always pascalcase"', async t => { - const [actual] = scopeCase(await parsed.pascalcase, 'always', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should fail for "always uppercase"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase scope should fail for "never uppercase"', async t => { - const [actual] = scopeCase(await parsed.uppercase, 'never', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase scope should succeed for "always uppercase"', async t => { - const [actual] = scopeCase(await parsed.uppercase, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = scopeCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase scope should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = scopeCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should fail for "always [uppercase, lowercase]"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase scope should pass for "always [uppercase, lowercase, camel-case]"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async t => { - const [actual] = scopeCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should fail for "never [uppercase, lowercase]"', async t => { - const [actual] = scopeCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with slash in scope should succeed for "always pascal-case"', async t => { - const commit = await parse('feat(Modules/Graph): add Pie Chart'); - const [actual] = scopeCase(commit, 'always', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with slash in subject should succeed for "always sentence case"', async t => { - const commit = await parse('chore: Update @angular/core'); - const [actual] = scopeCase(commit, 'always', 'sentencecase'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/scope-case.test.ts b/@commitlint/rules/src/scope-case.test.ts new file mode 100644 index 0000000000..4e352e7017 --- /dev/null +++ b/@commitlint/rules/src/scope-case.test.ts @@ -0,0 +1,324 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + lowercase: parse(messages.lowercase), + mixedcase: parse(messages.mixedcase), + uppercase: parse(messages.uppercase), + camelcase: parse(messages.camelcase), + kebabcase: parse(messages.kebabcase), + pascalcase: parse(messages.pascalcase), + snakecase: parse(messages.snakecase), + startcase: parse(messages.startcase), +}; + +test('with empty scope should succeed for "never lowercase"', async () => { + 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/scope-case.ts b/@commitlint/rules/src/scope-case.ts new file mode 100644 index 0000000000..c620086eff --- /dev/null +++ b/@commitlint/rules/src/scope-case.ts @@ -0,0 +1,47 @@ +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; + +const negated = (when?: string) => when === "never"; + +export const scopeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( + parsed, + when = "always", + value = [], +) => { + const { scope } = parsed; + + if (!scope) { + return [true]; + } + + const checks = (Array.isArray(value) ? value : [value]).map((check) => { + if (typeof check === "string") { + return { + when: "always", + case: check, + }; + } + return check; + }); + + // 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 scopeSegments = scope.split(delimiters); + + const result = checks.some((check) => { + const r = scopeSegments.every( + (segment) => delimiters.test(segment) || ensureCase(segment, check.case), + ); + + return negated(check.when) ? !r : r; + }); + + const list = checks.map((c) => c.case).join(", "); + + return [ + negated(when) ? !result : result, + message([`scope must`, negated(when) ? `not` : null, `be ${list}`]), + ]; +}; diff --git a/@commitlint/rules/src/scope-empty.js b/@commitlint/rules/src/scope-empty.js deleted file mode 100644 index 65a28ac98a..0000000000 --- a/@commitlint/rules/src/scope-empty.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (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']) - ]; -}; diff --git a/@commitlint/rules/src/scope-empty.test.js b/@commitlint/rules/src/scope-empty.test.js deleted file mode 100644 index 3c1fd2e8ee..0000000000 --- a/@commitlint/rules/src/scope-empty.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import scopeEmpty from './scope-empty'; - -const messages = { - plain: 'foo(bar): baz', - superfluous: 'foo(): baz', - empty: 'foo: baz' -}; - -const parsed = { - plain: parse(messages.plain), - superfluous: parse(messages.superfluous), - empty: parse(messages.empty) -}; - -test('with plain message it should succeed for empty keyword', async t => { - const [actual] = scopeEmpty(await parsed.plain); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('with plain message it should succeed for "never"', async t => { - const [actual] = scopeEmpty(await parsed.plain, 'never'); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('with plain message it should fail for "always"', async t => { - const [actual] = scopeEmpty(await parsed.plain, 'always'); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with superfluous message it should fail for empty keyword', async t => { - const [actual] = scopeEmpty(await parsed.superfluous); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with superfluous message it should fail for "never"', async t => { - const [actual] = scopeEmpty(await parsed.superfluous, 'never'); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with superfluous message it should fail for "always"', async t => { - const [actual] = scopeEmpty(await parsed.superfluous, 'always'); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('with empty message it should fail for empty keyword', async t => { - const [actual] = scopeEmpty(await parsed.empty); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with empty message it should fail for "never"', async t => { - const [actual] = scopeEmpty(await parsed.empty, 'never'); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with empty message it should fail for "always"', async t => { - const [actual] = scopeEmpty(await parsed.empty, 'always'); - const expected = true; - t.deepEqual(actual, expected); -}); diff --git a/@commitlint/rules/src/scope-empty.test.ts b/@commitlint/rules/src/scope-empty.test.ts new file mode 100644 index 0000000000..88977f8c17 --- /dev/null +++ b/@commitlint/rules/src/scope-empty.test.ts @@ -0,0 +1,69 @@ +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", +}; + +const parsed = { + plain: parse(messages.plain), + superfluous: parse(messages.superfluous), + empty: parse(messages.empty), +}; + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with plain message it should fail for "always"', async () => { + 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 () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with superfluous message it should fail for "always"', async () => { + 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 () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with empty message it should fail for "always"', async () => { + 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 new file mode 100644 index 0000000000..d7a9bb0e2e --- /dev/null +++ b/@commitlint/rules/src/scope-empty.ts @@ -0,0 +1,12 @@ +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 || ""); + return [ + negated ? !notEmpty : notEmpty, + message(["scope", negated ? "must" : "may not", "be empty"]), + ]; +}; diff --git a/@commitlint/rules/src/scope-enum.js b/@commitlint/rules/src/scope-enum.js deleted file mode 100644 index 608811c9e7..0000000000 --- a/@commitlint/rules/src/scope-enum.js +++ /dev/null @@ -1,20 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when, value) => { - if (!parsed.scope) { - return [true, '']; - } - - const negated = when === 'never'; - const result = value.length === 0 || ensure.enum(parsed.scope, value); - - return [ - negated ? !result : result, - message([ - `scope must`, - negated ? `not` : null, - `be one of [${value.join(', ')}]` - ]) - ]; -}; diff --git a/@commitlint/rules/src/scope-enum.test.js b/@commitlint/rules/src/scope-enum.test.js deleted file mode 100644 index 133a114220..0000000000 --- a/@commitlint/rules/src/scope-enum.test.js +++ /dev/null @@ -1,93 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import scopeEnum from './scope-enum'; - -const messages = { - plain: 'foo(bar): baz', - superfluous: 'foo(): baz', - empty: 'foo: baz' -}; - -const parsed = { - plain: parse(messages.plain), - superfluous: parse(messages.superfluous), - empty: parse(messages.empty) -}; - -test('scope-enum with plain message and always should succeed empty enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'always', []); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with plain message and never should error empty enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'never', []); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('with plain message should succeed correct enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'always', ['bar']); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with plain message should error false enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'always', ['foo']); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('scope-enum with plain message should error forbidden enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'never', ['bar']); - const expected = false; - t.deepEqual(actual, expected); -}); - -test('scope-enum with plain message should succeed forbidden enum', async t => { - const [actual] = scopeEnum(await parsed.plain, 'never', ['foo']); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with superfluous scope should succeed enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'always', ['bar']); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with superfluous scope and "never" should succeed', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'never', ['bar']); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with superfluous scope and always should succeed empty enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'always', []); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with superfluous scope and never should succeed empty enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'never', []); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with empty scope and always should succeed empty enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'always', []); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with empty scope and always should succeed filled enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'always', ['foo']); - const expected = true; - t.deepEqual(actual, expected); -}); - -test('scope-enum with empty scope and never should succeed empty enum', async t => { - const [actual] = scopeEnum(await parsed.superfluous, 'never', []); - const expected = true; - t.deepEqual(actual, expected); -}); diff --git a/@commitlint/rules/src/scope-enum.test.ts b/@commitlint/rules/src/scope-enum.test.ts new file mode 100644 index 0000000000..1e7fb7efa7 --- /dev/null +++ b/@commitlint/rules/src/scope-enum.test.ts @@ -0,0 +1,207 @@ +import { describe, test, it, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { RuleConfigCondition } from "@commitlint/types"; + +import { scopeEnum } from "./scope-enum.js"; + +const messagesByScope = { + single: { + plain: "foo(bar): baz", + }, + multiple: { + multiple: "foo(bar,baz): qux", + multipleCommaSpace: "foo(bar, baz): qux", + multipleSlash: "foo(bar/baz): qux", + }, + none: { + empty: "foo: baz", + superfluous: "foo(): baz", + }, +}; + +const { single, multiple, none } = messagesByScope; + +const messages = Object.values(messagesByScope).reduce<Record<string, string>>( + (acc, curr) => ({ ...acc, ...curr }), + {}, +); + +const conditions: RuleConfigCondition[] = ["always", "never"]; + +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(""); + }, + ); + }); + + describe("Messages without Scopes", () => { + Object.keys(none).forEach((messageType) => { + const fakeMessage = messages[messageType]; + + it(`Succeeds with a '${messageType}' message and '${condition}' with single-scope enum`, async () => { + const [actual, message] = scopeEnum( + await parse(fakeMessage), + condition, + ["bar"], + ); + expect(actual).toBeTruthy(); + expect(message).toBeFalsy(); + }); + + it(`Succeeds with a '${messageType}' message and '${condition}' with multi-scope enum`, async () => { + const [actual, message] = scopeEnum( + await parse(fakeMessage), + condition, + ["bar", "baz"], + ); + expect(actual).toBeTruthy(); + expect(message).toBeFalsy(); + }); + }); + }); + }); + + 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"], + ); + expect(actual).toBeTruthy(); + 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"], + ); + expect(actual).toBeTruthy(); + 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"], + ); + expect(actual).toBeFalsy(); + expect(message).toEqual("scope must be one of [foo]"); + }); + }); + }); + + 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"], + ); + expect(actual).toBeTruthy(); + 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"], + ); + expect(actual).toBeFalsy(); + 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"], + ); + expect(actual).toBeFalsy(); + 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) => { + 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"], + ); + expect(actual).toBeTruthy(); + 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"], + ); + expect(actual).toBeFalsy(); + 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"], + ); + expect(actual).toBeFalsy(); + 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 new file mode 100644 index 0000000000..59cef26df9 --- /dev/null +++ b/@commitlint/rules/src/scope-enum.ts @@ -0,0 +1,30 @@ +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 = [], +) => { + if (!scope || !value.length) { + 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 isScopeInEnum = (scope: string) => ensure.enum(scope, value); + let isValid; + + if (when === "never") { + isValid = !messageScopes.some(isScopeInEnum) && !isScopeInEnum(scope); + errorMessage.splice(1, 0, "not"); + } else { + isValid = messageScopes.every(isScopeInEnum) || isScopeInEnum(scope); + } + + return [isValid, message(errorMessage)]; +}; diff --git a/@commitlint/rules/src/scope-max-length.js b/@commitlint/rules/src/scope-max-length.js deleted file mode 100644 index 3056203049..0000000000 --- a/@commitlint/rules/src/scope-max-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.scope; - - if (!input) { - return [true]; - } - - return [ - maxLength(input, value), - `scope must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/scope-max-length.test.js b/@commitlint/rules/src/scope-max-length.test.js deleted file mode 100644 index cb31a34287..0000000000 --- a/@commitlint/rules/src/scope-max-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './scope-max-length'; - -const short = 'a'; -const long = 'ab'; - -const value = short.length; - -const messages = { - empty: 'test: \n', - short: `test(${short}): \n`, - long: `test(${long}): \n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/scope-max-length.test.ts b/@commitlint/rules/src/scope-max-length.test.ts new file mode 100644 index 0000000000..97e5e4f6fa --- /dev/null +++ b/@commitlint/rules/src/scope-max-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeMaxLength } from "./scope-max-length.js"; + +const short = "a"; +const long = "ab"; + +const value = short.length; + +const messages = { + empty: "test: \n", + short: `test(${short}): \n`, + long: `test(${long}): \n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = scopeMaxLength(await parsed.short, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..bcdf6f81ce --- /dev/null +++ b/@commitlint/rules/src/scope-max-length.ts @@ -0,0 +1,19 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const scopeMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.scope; + + if (!input) { + return [true]; + } + + return [ + maxLength(input, value), + `scope must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/scope-min-length.js b/@commitlint/rules/src/scope-min-length.js deleted file mode 100644 index 4cfae8564e..0000000000 --- a/@commitlint/rules/src/scope-min-length.js +++ /dev/null @@ -1,12 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.scope; - if (!input) { - return [true]; - } - return [ - minLength(input, value), - `scope must not be shorter than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/scope-min-length.test.js b/@commitlint/rules/src/scope-min-length.test.js deleted file mode 100644 index c54656a72b..0000000000 --- a/@commitlint/rules/src/scope-min-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './scope-min-length'; - -const short = 'a'; -const long = 'ab'; - -const value = long.length; - -const messages = { - empty: 'test:\n', - short: `test(${short}): \n`, - long: `test(${long}): \n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/scope-min-length.test.ts b/@commitlint/rules/src/scope-min-length.test.ts new file mode 100644 index 0000000000..3ff18920ec --- /dev/null +++ b/@commitlint/rules/src/scope-min-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { scopeMinLength } from "./scope-min-length.js"; + +const short = "a"; +const long = "ab"; + +const value = long.length; + +const messages = { + empty: "test:\n", + short: `test(${short}): \n`, + long: `test(${long}): \n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = scopeMinLength(await parsed.short, undefined, value); + const expected = false; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..40b4c909f9 --- /dev/null +++ b/@commitlint/rules/src/scope-min-length.ts @@ -0,0 +1,17 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const scopeMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.scope; + if (!input) { + return [true]; + } + return [ + minLength(input, value), + `scope must not be shorter than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/signed-off-by.js b/@commitlint/rules/src/signed-off-by.js deleted file mode 100644 index a148988f8d..0000000000 --- a/@commitlint/rules/src/signed-off-by.js +++ /dev/null @@ -1,15 +0,0 @@ -import message from '@commitlint/message'; -import toLines from '@commitlint/to-lines'; - -export default (parsed, when, value) => { - const lines = toLines(parsed.raw).filter(Boolean); - const last = lines[lines.length - 1]; - - const negated = when === 'never'; - const hasSignedOffBy = last.startsWith(value); - - return [ - negated ? !hasSignedOffBy : hasSignedOffBy, - message(['message', negated ? 'must not' : 'must', 'be signed off']) - ]; -}; diff --git a/@commitlint/rules/src/signed-off-by.test.js b/@commitlint/rules/src/signed-off-by.test.js deleted file mode 100644 index 7fad81f2e2..0000000000 --- a/@commitlint/rules/src/signed-off-by.test.js +++ /dev/null @@ -1,79 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './signed-off-by'; - -const messages = { - 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`, - inBody: `test: subject\nbody Signed-off-by:\nfooter\n\n` -}; - -const parsed = { - empty: parse(messages.empty), - with: parse(messages.with), - without: parse(messages.without), - inSubject: parse(messages.inSubject), - inBody: parse(messages.inBody) -}; - -test('empty against "always signed-off-by" should fail', async t => { - const [actual] = check(await parsed.empty, 'always', 'Signed-off-by:'); - const expected = false; - t.is(actual, expected); -}); - -test('empty against "never signed-off-by" should succeed', async t => { - const [actual] = check(await parsed.empty, 'never', 'Signed-off-by:'); - const expected = true; - t.is(actual, expected); -}); - -test('with against "always signed-off-by" should succeed', async t => { - const [actual] = check(await parsed.with, 'always', 'Signed-off-by:'); - const expected = true; - t.is(actual, expected); -}); - -test('with against "never signed-off-by" should fail', async t => { - const [actual] = check(await parsed.with, 'never', 'Signed-off-by:'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "always signed-off-by" should fail', async t => { - const [actual] = check(await parsed.without, 'always', 'Signed-off-by:'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "never signed-off-by" should succeed', async t => { - const [actual] = check(await parsed.without, 'never', 'Signed-off-by:'); - const expected = true; - t.is(actual, expected); -}); - -test('inSubject against "always signed-off-by" should fail', async t => { - const [actual] = check(await parsed.inSubject, 'always', 'Signed-off-by:'); - const expected = false; - t.is(actual, expected); -}); - -test('inSubject against "never signed-off-by" should succeed', async t => { - const [actual] = check(await parsed.inSubject, 'never', 'Signed-off-by:'); - const expected = true; - t.is(actual, expected); -}); - -test('inBody against "always signed-off-by" should fail', async t => { - const [actual] = check(await parsed.inBody, 'always', 'Signed-off-by:'); - const expected = false; - t.is(actual, expected); -}); - -test('inBody against "never signed-off-by" should succeed', async t => { - const [actual] = check(await parsed.inBody, 'never', 'Signed-off-by:'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/signed-off-by.test.ts b/@commitlint/rules/src/signed-off-by.test.ts new file mode 100644 index 0000000000..d47353927a --- /dev/null +++ b/@commitlint/rules/src/signed-off-by.test.ts @@ -0,0 +1,111 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { signedOffBy } from "./signed-off-by.js"; + +const messages = { + 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`, + inBody: `test: subject\nbody Signed-off-by:\nfooter\n\n`, + withSignoffAndComments: `test: subject + +message body + +Signed-off-by: + +# Please enter the commit message for your changes. Lines starting +# with '#' will be ignored, and an empty message aborts the commit. +`, +}; + +const parsed = { + empty: parse(messages.empty), + with: parse(messages.with), + without: parse(messages.without), + inSubject: parse(messages.inSubject), + inBody: parse(messages.inBody), + withSignoffAndComments: parse(messages.withSignoffAndComments), +}; + +test('empty against "always signed-off-by" should fail', async () => { + 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 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always signed-off-by" should fail', async () => { + const [actual] = signedOffBy( + await parsed.without, + "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 expected = true; + expect(actual).toEqual(expected); +}); + +test("trailing comments should be ignored", async () => { + const [actual] = signedOffBy( + await parsed.withSignoffAndComments, + "always", + "Signed-off-by:", + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test('inSubject against "always signed-off-by" should fail', async () => { + const [actual] = signedOffBy( + await parsed.inSubject, + "always", + "Signed-off-by:", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('inSubject against "never signed-off-by" should succeed', async () => { + const [actual] = signedOffBy( + await parsed.inSubject, + "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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/signed-off-by.ts b/@commitlint/rules/src/signed-off-by.ts new file mode 100644 index 0000000000..5a53c32395 --- /dev/null +++ b/@commitlint/rules/src/signed-off-by.ts @@ -0,0 +1,29 @@ +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 = "", +) => { + const lines = toLines(parsed.raw).filter( + (ln) => + // skip comments + !ln.startsWith("#") && + // ignore empty lines + Boolean(ln), + ); + + const last = lines[lines.length - 1]; + + 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"]), + ]; +}; diff --git a/@commitlint/rules/src/subject-case.js b/@commitlint/rules/src/subject-case.js deleted file mode 100644 index 5f2ad8fdd7..0000000000 --- a/@commitlint/rules/src/subject-case.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -const negated = when => when === 'never'; - -export default (parsed, when, value) => { - const {subject} = parsed; - - if (typeof subject !== 'string' || !subject.match(/^[a-z]/i)) { - return [true]; - } - - const checks = (Array.isArray(value) ? value : [value]).map(check => { - if (typeof check === 'string') { - return { - when: 'always', - case: check - }; - } - return check; - }); - - const result = checks.some(check => { - const r = ensure.case(subject, check.case); - return negated(check.when) ? !r : r; - }); - - const list = checks.map(c => c.case).join(', '); - - return [ - negated(when) ? !result : result, - message([`subject must`, negated(when) ? `not` : null, `be ${list}`]) - ]; -}; diff --git a/@commitlint/rules/src/subject-case.test.js b/@commitlint/rules/src/subject-case.test.js deleted file mode 100644 index a915234706..0000000000 --- a/@commitlint/rules/src/subject-case.test.js +++ /dev/null @@ -1,352 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import subjectCase from './subject-case'; - -const messages = { - empty: 'test:\n', - numeric: 'test: 1.0.0', - lowercase: 'test: subject', - mixedcase: 'test: sUbJeCt', - uppercase: 'test: SUBJECT', - camelcase: 'test: subJect', - kebabcase: 'test: sub-ject', - pascalcase: 'test: SubJect', - snakecase: 'test: sub_ject', - startcase: 'test: Sub Ject' -}; - -const parsed = { - empty: parse(messages.empty), - numeric: parse(messages.numeric), - lowercase: parse(messages.lowercase), - mixedcase: parse(messages.mixedcase), - uppercase: parse(messages.uppercase), - camelcase: parse(messages.camelcase), - kebabcase: parse(messages.kebabcase), - pascalcase: parse(messages.pascalcase), - snakecase: parse(messages.snakecase), - startcase: parse(messages.startcase) -}; - -test('with empty subject should succeed for "never lowercase"', async t => { - const [actual] = subjectCase(await parsed.empty, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty subject should succeed for "always lowercase"', async t => { - const [actual] = subjectCase(await parsed.empty, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.empty, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty subject should succeed for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.empty, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase subject should fail for "never lowercase"', async t => { - const [actual] = subjectCase(await parsed.lowercase, 'never', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase subject should succeed for "always lowercase"', async t => { - const [actual] = subjectCase(await parsed.lowercase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase subject should succeed for "never lowercase"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase subject should fail for "always lowercase"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase subject should fail for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase subject should fail for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.uppercase, 'never', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase subject should succeed for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.uppercase, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase subject should fail for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase subject should fail for "always pascalcase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase subject should fail for "always kebabcase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase subject should fail for "always snakecase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase subject should succeed for "always camelcase"', async t => { - const [actual] = subjectCase(await parsed.camelcase, 'always', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase subject should fail for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.pascalcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase subject should succeed for "always pascalcase"', async t => { - const [actual] = subjectCase( - await parsed.pascalcase, - 'always', - 'pascal-case' - ); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase subject should fail for "always kebabcase"', async t => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase subject should fail for "always snakecase"', async t => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase subject should fail for "always camelcase"', async t => { - const [actual] = subjectCase(await parsed.pascalcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase subject should fail for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase subject should fail for "always pascalcase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase subject should fail for "always kebabcase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase subject should succeed for "always snakecase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase subject should fail for "always camelcase"', async t => { - const [actual] = subjectCase(await parsed.snakecase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should fail for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with startcase subject should fail for "always pascalcase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should fail for "always kebabcase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should fail for "always snakecase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should fail for "always camelcase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase subject should succeed for "always startcase"', async t => { - const [actual] = subjectCase(await parsed.startcase, 'always', 'start-case'); - const expected = true; - t.is(actual, expected); -}); - -test('should use expected message with "always"', async t => { - const [, message] = subjectCase( - await parsed.uppercase, - 'always', - 'lower-case' - ); - t.true(message.indexOf('must be lower-case') > -1); -}); - -test('should use expected message with "never"', async t => { - const [, message] = subjectCase( - await parsed.uppercase, - 'never', - 'upper-case' - ); - t.true(message.indexOf('must not be upper-case') > -1); -}); - -test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = subjectCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase subject should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = subjectCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase subject should fail for "always [uppercase, lowercase]"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase subject should pass for "always [uppercase, lowercase, camel-case]"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async t => { - const [actual] = subjectCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should fail for "never [uppercase, lowercase]"', async t => { - const [actual] = subjectCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with numeric subject should succeed for "never lowercase"', async t => { - const [actual] = subjectCase(await parsed.numeric, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric subject should succeed for "always lowercase"', async t => { - const [actual] = subjectCase(await parsed.numeric, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric subject should succeed for "never uppercase"', async t => { - const [actual] = subjectCase(await parsed.numeric, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with numeric subject should succeed for "always uppercase"', async t => { - const [actual] = subjectCase(await parsed.numeric, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/subject-case.test.ts b/@commitlint/rules/src/subject-case.test.ts new file mode 100644 index 0000000000..911b8d5321 --- /dev/null +++ b/@commitlint/rules/src/subject-case.test.ts @@ -0,0 +1,510 @@ +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` +}; + +const parsed = { + empty: parse(messages.empty), + numeric: parse(messages.numeric), + lowercase: parse(messages.lowercase), + lowercase_unicode: parse(messages.lowercase_unicode), + mixedcase: parse(messages.mixedcase), + caseless: parse(messages.caseless), + uppercase: parse(messages.uppercase), + uppercase_unicode: parse(messages.uppercase_unicode), + camelcase: parse(messages.camelcase), + camelcase_unicode: parse(messages.camelcase_unicode), + kebabcase: parse(messages.kebabcase), + kebabcase_unicode: parse(messages.kebabcase_unicode), + pascalcase: parse(messages.pascalcase), + pascalcase_unicode: parse(messages.pascalcase_unicode), + snakecase: parse(messages.snakecase), + snakecase_unicode: parse(messages.snakecase_unicode), + startcase: parse(messages.startcase), + startcase_unicode: parse(messages.startcase_unicode), + sentencecase: parse(messages.sentencecase), + sentencecase_unicode: parse(messages.sentencecase_unicode), +}; + +test('with empty subject should succeed for "never lowercase"', async () => { + 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with lowercase unicode subject should fail for "always uppercase"', async () => { + const [actual] = subjectCase( + await parsed.lowercase_unicode, + "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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with uppercase unicode subject should fail for "always lowercase"', async () => { + const [actual] = subjectCase( + await parsed.uppercase_unicode, + "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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with camelcase unicode subject should fail for "always sentencecase"', async () => { + const [actual] = subjectCase( + await parsed.camelcase_unicode, + "always", + "sentence-case", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('with kebabcase unicode subject should fail for "always camelcase"', async () => { + const [actual] = subjectCase( + await parsed.kebabcase_unicode, + "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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with pascalcase subject should succeed for "always pascalcase"', async () => { + const [actual] = subjectCase( + await parsed.pascalcase, + "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 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with pascalcase unicode subject should fail for "always uppercase"', async () => { + const [actual] = subjectCase( + await parsed.pascalcase_unicode, + "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 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 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 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 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('with snakecase unicode subject should fail for "never lowercase"', async () => { + const [actual] = subjectCase( + await parsed.snakecase_unicode, + "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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with startcase unicode subject should fail for "always pascalcase"', async () => { + const [actual] = subjectCase( + await parsed.startcase_unicode, + "always", + "pascal-case", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('with sentencecase subject should succeed for "always sentence-case"', async () => { + const [actual] = subjectCase( + await parsed.sentencecase, + "always", + "sentence-case", + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test('with sentencecase subject should fail for "never sentencecase"', async () => { + const [actual] = subjectCase( + await parsed.sentencecase, + "never", + "sentence-case", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('with sentencecase subject should fail for "always pascalcase"', async () => { + const [actual] = subjectCase( + await parsed.sentencecase, + "always", + "pascal-case", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('with sentencecase subject should succeed for "never camelcase"', async () => { + const [actual] = subjectCase( + await parsed.sentencecase, + "never", + "camel-case", + ); + const expected = true; + expect(actual).toEqual(expected); +}); + +test('with sentencecase unicode subject should fail for "always camelcase"', async () => { + const [actual] = subjectCase( + await parsed.sentencecase_unicode, + "always", + "camel-case", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('should use expected message with "always"', async () => { + const [, message] = subjectCase( + await parsed.uppercase, + "always", + "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", + ); + 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 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 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 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 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 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 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 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 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 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/subject-case.ts b/@commitlint/rules/src/subject-case.ts new file mode 100644 index 0000000000..c5bfa610b7 --- /dev/null +++ b/@commitlint/rules/src/subject-case.ts @@ -0,0 +1,56 @@ +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 + * Unicode `Cased_Letter` category now to allow non-Latin alphabets as well. + * + * Do not use `Letter` category directly to avoid capturing `Modifier_Letter` + * (which just modifiers letters, so we probably shouldn't anyway) and + * `Other_Letter` (they actually are case-less, so they can't be validated) + * categories, and to stay close to previous implementation. + * + * Also, typescript does not seem to support almost any longhand category name + * (and even short for `Cased_Letter` too) so list all required letter + * categories manually just to prevent it from complaining about unknown stuff. + * + * @see [Unicode Categories]{@link https://www.regular-expressions.info/unicode.html} + */ +const startsWithLetterRegex = /^[\p{Ll}\p{Lu}\p{Lt}]/iu; + +const negated = (when?: string) => when === "never"; + +export const subjectCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( + parsed, + when = "always", + value = [], +) => { + const { subject } = parsed; + + if (typeof subject !== "string" || !subject.match(startsWithLetterRegex)) { + return [true]; + } + + const checks = (Array.isArray(value) ? value : [value]).map((check) => { + if (typeof check === "string") { + return { + when: "always", + case: check, + }; + } + return check; + }); + + const result = checks.some((check) => { + const r = ensureCase(subject, check.case); + return negated(check.when) ? !r : r; + }); + + const list = checks.map((c) => c.case).join(", "); + + return [ + negated(when) ? !result : result, + message([`subject must`, negated(when) ? `not` : null, `be ${list}`]), + ]; +}; diff --git a/@commitlint/rules/src/subject-empty.js b/@commitlint/rules/src/subject-empty.js deleted file mode 100644 index 707947f2a3..0000000000 --- a/@commitlint/rules/src/subject-empty.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.subject); - - return [ - negated ? notEmpty : !notEmpty, - message(['subject', negated ? 'may not' : 'must', 'be empty']) - ]; -}; diff --git a/@commitlint/rules/src/subject-empty.test.js b/@commitlint/rules/src/subject-empty.test.js deleted file mode 100644 index 8b7b458cf3..0000000000 --- a/@commitlint/rules/src/subject-empty.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import subjectEmpty from './subject-empty'; - -const messages = { - empty: 'test: \nbody', - filled: 'test: subject\nbody' -}; - -const parsed = { - empty: parse(messages.empty), - filled: parse(messages.filled) -}; - -test('without subject should succeed for empty keyword', async t => { - const [actual] = subjectEmpty(await parsed.empty); - const expected = true; - t.is(actual, expected); -}); - -test('without subject should fail for "never"', async t => { - const [actual] = subjectEmpty(await parsed.empty, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('without subject should succeed for "always"', async t => { - const [actual] = subjectEmpty(await parsed.empty, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with subject fail for empty keyword', async t => { - const [actual] = subjectEmpty(await parsed.filled); - const expected = false; - t.is(actual, expected); -}); - -test('with subject succeed for "never"', async t => { - const [actual] = subjectEmpty(await parsed.filled, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with subject fail for "always"', async t => { - const [actual] = subjectEmpty(await parsed.filled, 'always'); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/subject-empty.test.ts b/@commitlint/rules/src/subject-empty.test.ts new file mode 100644 index 0000000000..e8c6440c84 --- /dev/null +++ b/@commitlint/rules/src/subject-empty.test.ts @@ -0,0 +1,49 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + filled: parse(messages.filled), +}; + +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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without subject should succeed for "always"', async () => { + const [actual] = subjectEmpty(await parsed.empty, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with subject fail for "always"', async () => { + 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 new file mode 100644 index 0000000000..d489b2c3ab --- /dev/null +++ b/@commitlint/rules/src/subject-empty.ts @@ -0,0 +1,13 @@ +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 || ""); + + return [ + negated ? notEmpty : !notEmpty, + 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 new file mode 100644 index 0000000000..55e47d0e7a --- /dev/null +++ b/@commitlint/rules/src/subject-exclamation-mark.test.ts @@ -0,0 +1,59 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +// @ts-expect-error -- no typings +import preset from "conventional-changelog-angular"; + +import { subjectExclamationMark } from "./subject-exclamation-mark.js"; + +const parseMessage = async (str: string) => { + const { parserOpts } = await preset(); + return parse(str, undefined, parserOpts); +}; + +const messages = { + empty: "test:\n", + with: `test!: subject\n`, + without: `test: subject\n`, +}; + +const parsed = { + empty: parseMessage(messages.empty), + with: parseMessage(messages.with), + without: parseMessage(messages.without), +}; + +test('empty against "always" should fail', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with against "always" should succeed', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always" should fail', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/subject-exclamation-mark.ts b/@commitlint/rules/src/subject-exclamation-mark.ts new file mode 100644 index 0000000000..886d142f9c --- /dev/null +++ b/@commitlint/rules/src/subject-exclamation-mark.ts @@ -0,0 +1,21 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const subjectExclamationMark: SyncRule = (parsed, when = "always") => { + const input = parsed.header; + if (!input) { + return [true, ""]; + } + + const negated = when === "never"; + const hasExclamationMark = /^(\w*)(?:\((.*)\))?!: (.*)$/.test(input); + + return [ + negated ? !hasExclamationMark : hasExclamationMark, + message([ + "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.js b/@commitlint/rules/src/subject-full-stop.js deleted file mode 100644 index 010a8f4c54..0000000000 --- a/@commitlint/rules/src/subject-full-stop.js +++ /dev/null @@ -1,17 +0,0 @@ -import message from '@commitlint/message'; - -export default (parsed, when, value) => { - const input = parsed.subject; - - if (!input) { - return [true]; - } - - const negated = when === 'never'; - const hasStop = input[input.length - 1] === value; - - return [ - negated ? !hasStop : hasStop, - message(['subject', negated ? 'may not' : 'must', 'end with full stop']) - ]; -}; diff --git a/@commitlint/rules/src/subject-full-stop.test.js b/@commitlint/rules/src/subject-full-stop.test.js deleted file mode 100644 index c86085b2ab..0000000000 --- a/@commitlint/rules/src/subject-full-stop.test.js +++ /dev/null @@ -1,51 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './subject-full-stop'; - -const messages = { - empty: 'test:\n', - with: `test: subject.\n`, - without: `test: subject\n` -}; - -const parsed = { - empty: parse(messages.empty), - with: parse(messages.with), - without: parse(messages.without) -}; - -test('empty against "always" should succeed', async t => { - const [actual] = check(await parsed.empty, 'always', '.'); - const expected = true; - t.is(actual, expected); -}); - -test('empty against "never ." should succeed', async t => { - const [actual] = check(await parsed.empty, 'never', '.'); - const expected = true; - t.is(actual, expected); -}); - -test('with against "always ." should succeed', async t => { - const [actual] = check(await parsed.with, 'always', '.'); - const expected = true; - t.is(actual, expected); -}); - -test('with against "never ." should fail', async t => { - const [actual] = check(await parsed.with, 'never', '.'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "always ." should fail', async t => { - const [actual] = check(await parsed.without, 'always', '.'); - const expected = false; - t.is(actual, expected); -}); - -test('without against "never ." should succeed', async t => { - const [actual] = check(await parsed.without, 'never', '.'); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/subject-full-stop.test.ts b/@commitlint/rules/src/subject-full-stop.test.ts new file mode 100644 index 0000000000..344f65652b --- /dev/null +++ b/@commitlint/rules/src/subject-full-stop.test.ts @@ -0,0 +1,83 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectFullStop } from "./subject-full-stop.js"; + +const messages = { + 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...", +}; + +const parsed = { + empty: parse(messages.empty), + with: parse(messages.with), + without: parse(messages.without), + standardScopeWith: parse(messages.standardScopeWith), + nonStandardScopeWith: parse(messages.nonStandardScopeWith), + ellipsisMessage: parse(messages.ellipsisMessage), +}; + +test('empty against "always" should succeed', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with against "always ." should succeed', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always ." should fail', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('commit message title with standard scope and full-stop against "never ." should fail', async () => { + const [actual] = subjectFullStop( + await parsed.standardScopeWith, + "never", + ".", + ); + const expected = false; + expect(actual).toEqual(expected); +}); + +test('commit message title with non standard scope and full-stop against "never ." should fail', async () => { + const [actual] = subjectFullStop( + await parsed.nonStandardScopeWith, + "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 expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/subject-full-stop.ts b/@commitlint/rules/src/subject-full-stop.ts new file mode 100644 index 0000000000..6f1eed4aef --- /dev/null +++ b/@commitlint/rules/src/subject-full-stop.ts @@ -0,0 +1,26 @@ +import message from "@commitlint/message"; +import { SyncRule } from "@commitlint/types"; + +export const subjectFullStop: SyncRule<string> = ( + parsed, + when = "always", + value = ".", +) => { + const colonIndex = parsed.header?.indexOf(":") || 0; + if (colonIndex > 0 && colonIndex === parsed.header!.length - 1) { + return [true]; + } + + const input = parsed.header; + + const negated = when === "never"; + let hasStop = input?.[input.length - 1] === value; + if (input?.slice(-3) === "...") { + hasStop = false; + } + + return [ + negated ? !hasStop : hasStop, + message(["subject", negated ? "may not" : "must", "end with full stop"]), + ]; +}; diff --git a/@commitlint/rules/src/subject-max-length.js b/@commitlint/rules/src/subject-max-length.js deleted file mode 100644 index ba0f03e49c..0000000000 --- a/@commitlint/rules/src/subject-max-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.subject; - - if (!input) { - return [true]; - } - - return [ - maxLength(input, value), - `subject must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/subject-max-length.test.js b/@commitlint/rules/src/subject-max-length.test.js deleted file mode 100644 index 309c3d2cb7..0000000000 --- a/@commitlint/rules/src/subject-max-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './subject-max-length'; - -const short = 'a'; -const long = 'ab'; - -const value = short.length; - -const messages = { - empty: 'test:\n', - short: `test: ${short}\n`, - long: `test: ${long}\n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/subject-max-length.test.ts b/@commitlint/rules/src/subject-max-length.test.ts new file mode 100644 index 0000000000..c89b8c246d --- /dev/null +++ b/@commitlint/rules/src/subject-max-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectMaxLength } from "./subject-max-length.js"; + +const short = "a"; +const long = "ab"; + +const value = short.length; + +const messages = { + empty: "test:\n", + short: `test: ${short}\n`, + long: `test: ${long}\n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = subjectMaxLength(await parsed.short, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..ca2c148cfa --- /dev/null +++ b/@commitlint/rules/src/subject-max-length.ts @@ -0,0 +1,19 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const subjectMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.subject; + + if (!input) { + return [true]; + } + + return [ + maxLength(input, value), + `subject must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/subject-min-length.js b/@commitlint/rules/src/subject-min-length.js deleted file mode 100644 index 0161b2ac80..0000000000 --- a/@commitlint/rules/src/subject-min-length.js +++ /dev/null @@ -1,12 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.subject; - if (!input) { - return [true]; - } - return [ - minLength(input, value), - `subject must not be shorter than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/subject-min-length.test.js b/@commitlint/rules/src/subject-min-length.test.js deleted file mode 100644 index 62fb12c83d..0000000000 --- a/@commitlint/rules/src/subject-min-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './subject-min-length'; - -const short = 'a'; -const long = 'ab'; - -const value = long.length; - -const messages = { - empty: 'test:\n', - short: `test: ${short}\n`, - long: `test: ${long}\n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/subject-min-length.test.ts b/@commitlint/rules/src/subject-min-length.test.ts new file mode 100644 index 0000000000..d269f6e22a --- /dev/null +++ b/@commitlint/rules/src/subject-min-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { subjectMinLength } from "./subject-min-length.js"; + +const short = "a"; +const long = "ab"; + +const value = long.length; + +const messages = { + empty: "test:\n", + short: `test: ${short}\n`, + long: `test: ${long}\n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = subjectMinLength(await parsed.short, undefined, value); + const expected = false; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..b0835e8159 --- /dev/null +++ b/@commitlint/rules/src/subject-min-length.ts @@ -0,0 +1,17 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const subjectMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.subject; + if (!input) { + return [true]; + } + return [ + minLength(input, value), + `subject must not be shorter than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/trailer-exists.test.ts b/@commitlint/rules/src/trailer-exists.test.ts new file mode 100644 index 0000000000..c090ad7b11 --- /dev/null +++ b/@commitlint/rules/src/trailer-exists.test.ts @@ -0,0 +1,137 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { trailerExists } from "./trailer-exists.js"; + +const messages = { + 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`, + inBody: `test: subject\n\nbody Signed-off-by:\n\nfooter\n\n`, + withSignoffAndNoise: `test: subject + +message body + +Arbitrary-trailer: +Signed-off-by: +Another-arbitrary-trailer: + +# Please enter the commit message for your changes. Lines starting +# with '#' will be ignored, and an empty message aborts the commit. +`, +}; + +const parsed = { + empty: parse(messages.empty), + with: parse(messages.with), + without: parse(messages.without), + inSubject: parse(messages.inSubject), + inBody: parse(messages.inBody), + withSignoffAndNoise: parse(messages.withSignoffAndNoise), +}; + +test('empty against "always trailer-exists" should fail', async () => { + const [actual] = trailerExists( + await parsed.empty, + "always", + "Signed-off-by:", + ); + + const expected = false; + expect(actual).toEqual(expected); +}); + +test('empty against "never trailer-exists" should succeed', async () => { + 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 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "always trailer-exists" should fail', async () => { + const [actual] = trailerExists( + await parsed.without, + "always", + "Signed-off-by:", + ); + + const expected = false; + expect(actual).toEqual(expected); +}); + +test('without against "never trailer-exists" should succeed', async () => { + const [actual] = trailerExists( + await parsed.without, + "never", + "Signed-off-by:", + ); + + const expected = true; + expect(actual).toEqual(expected); +}); + +test("comments and other trailers should be ignored", async () => { + const [actual] = trailerExists( + await parsed.withSignoffAndNoise, + "always", + "Signed-off-by:", + ); + + const expected = true; + expect(actual).toEqual(expected); +}); + +test('inSubject against "always trailer-exists" should fail', async () => { + const [actual] = trailerExists( + await parsed.inSubject, + "always", + "Signed-off-by:", + ); + + const expected = false; + expect(actual).toEqual(expected); +}); + +test('inSubject against "never trailer-exists" should succeed', async () => { + const [actual] = trailerExists( + await parsed.inSubject, + "never", + "Signed-off-by:", + ); + + const expected = true; + expect(actual).toEqual(expected); +}); + +test('inBody against "always trailer-exists" should fail', async () => { + const [actual] = trailerExists( + await parsed.inBody, + "always", + "Signed-off-by:", + ); + + const expected = false; + expect(actual).toEqual(expected); +}); + +test('inBody against "never trailer-exists" should succeed', async () => { + const [actual] = trailerExists( + await parsed.inBody, + "never", + "Signed-off-by:", + ); + + const expected = true; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/trailer-exists.ts b/@commitlint/rules/src/trailer-exists.ts new file mode 100644 index 0000000000..3dc516767e --- /dev/null +++ b/@commitlint/rules/src/trailer-exists.ts @@ -0,0 +1,30 @@ +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 = "", +) => { + const trailers = spawnSync("git", ["interpret-trailers", "--parse"], { + input: parsed.raw || "", + }).stdout; + + const matches = toLines(trailers.toString()).filter((ln) => + ln.startsWith(value), + ).length; + + const negated = when === "never"; + const hasTrailer = matches > 0; + + return [ + negated ? !hasTrailer : hasTrailer, + message([ + "message", + negated ? "must not" : "must", + "have `" + value + "` trailer", + ]), + ]; +}; diff --git a/@commitlint/rules/src/type-case.js b/@commitlint/rules/src/type-case.js deleted file mode 100644 index c13144f006..0000000000 --- a/@commitlint/rules/src/type-case.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -const negated = when => when === 'never'; - -export default (parsed, when, value) => { - const {type} = parsed; - - if (!type) { - return [true]; - } - - const checks = (Array.isArray(value) ? value : [value]).map(check => { - if (typeof check === 'string') { - return { - when: 'always', - case: check - }; - } - return check; - }); - - const result = checks.some(check => { - const r = ensure.case(type, check.case); - return negated(check.when) ? !r : r; - }); - - const list = checks.map(c => c.case).join(', '); - - return [ - negated(when) ? !result : result, - message([`type must`, negated(when) ? `not` : null, `be ${list}`]) - ]; -}; diff --git a/@commitlint/rules/src/type-case.test.js b/@commitlint/rules/src/type-case.test.js deleted file mode 100644 index 43f0903a8e..0000000000 --- a/@commitlint/rules/src/type-case.test.js +++ /dev/null @@ -1,325 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import typeCase from './type-case'; - -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' -}; - -const parsed = { - empty: parse(messages.empty), - lowercase: parse(messages.lowercase), - mixedcase: parse(messages.mixedcase), - uppercase: parse(messages.uppercase), - camelcase: parse(messages.camelcase), - pascalcase: parse(messages.pascalcase), - snakecase: parse(messages.snakecase), - kebabcase: parse(messages.kebabcase), - startcase: parse(messages.startcase, undefined, { - headerPattern: /^(.*): (.*)$/, - headerCorrespondence: ['type', 'subject'] - }) -}; - -test('with empty type should succeed for "never lowercase"', async t => { - const [actual] = typeCase(await parsed.empty, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty type should succeed for "always lowercase"', async t => { - const [actual] = typeCase(await parsed.empty, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.empty, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with empty type should succeed for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.empty, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase type should fail for "never lowercase"', async t => { - const [actual] = typeCase(await parsed.lowercase, 'never', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase type should succeed for "always lowercase"', async t => { - const [actual] = typeCase(await parsed.lowercase, 'always', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase type should succeed for "never lowercase"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'never', 'lowercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase type should fail for "always lowercase"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'always', 'lowercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase type should fail for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with uppercase type should fail for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.uppercase, 'never', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with lowercase type should succeed for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.uppercase, 'always', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase type should fail for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with camelcase type should fail for "always pascalcase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase type should fail for "always kebabcase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase type should fail for "always snakecase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase type should fail for "always startcase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'start-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with camelcase type should succeed for "always camelcase"', async t => { - const [actual] = typeCase(await parsed.camelcase, 'always', 'camel-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase type should fail for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with pascalcase type should fail for "always camelcase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase type should fail for "always kebabcase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase type should fail for "always snakecase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase type should fail for "always startcase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'start-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with pascalcase type should succeed for "always pascalcase"', async t => { - const [actual] = typeCase(await parsed.pascalcase, 'always', 'pascal-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase type should fail for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase type should fail for "always camelcase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase type should fail for "always kebabcase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase type should succeed for "always snakecase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'snake-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with snakecase type should fail for "always pascalcase"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with snakecase type should fail for "always start case"', async t => { - const [actual] = typeCase(await parsed.snakecase, 'always', 'start-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should fail for "always uppercase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'uppercase'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should succeed for "never uppercase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'never', 'uppercase'); - const expected = true; - t.is(actual, expected); -}); - -test('with startcase type should fail for "always camelcase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'camel-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should fail for "always kebabcase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'kebab-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should fail for "always snakecase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'snake-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should fail for "always pascalcase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'pascal-case'); - const expected = false; - t.is(actual, expected); -}); - -test('with startcase type should succeed for "always startcase"', async t => { - const [actual] = typeCase(await parsed.startcase, 'always', 'start-case'); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = typeCase(await parsed.uppercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with lowercase subject should succeed for "always [uppercase, lowercase]"', async t => { - const [actual] = typeCase(await parsed.lowercase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase subject should fail for "always [uppercase, lowercase]"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); - -test('with mixedcase subject should pass for "always [uppercase, lowercase, camel-case]"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'always', [ - 'uppercase', - 'lowercase', - 'camel-case' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with mixedcase scope should pass for "never [uppercase, lowercase]"', async t => { - const [actual] = typeCase(await parsed.mixedcase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = true; - t.is(actual, expected); -}); - -test('with uppercase scope should fail for "never [uppercase, lowercase]"', async t => { - const [actual] = typeCase(await parsed.uppercase, 'never', [ - 'uppercase', - 'lowercase' - ]); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/type-case.test.ts b/@commitlint/rules/src/type-case.test.ts new file mode 100644 index 0000000000..b482e53cc0 --- /dev/null +++ b/@commitlint/rules/src/type-case.test.ts @@ -0,0 +1,325 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + lowercase: parse(messages.lowercase), + mixedcase: parse(messages.mixedcase), + uppercase: parse(messages.uppercase), + camelcase: parse(messages.camelcase), + pascalcase: parse(messages.pascalcase), + snakecase: parse(messages.snakecase), + kebabcase: parse(messages.kebabcase), + startcase: parse(messages.startcase, undefined, { + headerPattern: /^(.*): (.*)$/, + headerCorrespondence: ["type", "subject"], + }), +}; + +test('with empty type should succeed for "never lowercase"', async () => { + 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 expected = false; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/type-case.ts b/@commitlint/rules/src/type-case.ts new file mode 100644 index 0000000000..8c622e26ff --- /dev/null +++ b/@commitlint/rules/src/type-case.ts @@ -0,0 +1,39 @@ +import { case as ensureCase } from "@commitlint/ensure"; +import message from "@commitlint/message"; +import { TargetCaseType, SyncRule } from "@commitlint/types"; + +const negated = (when?: string) => when === "never"; + +export const typeCase: SyncRule<TargetCaseType | TargetCaseType[]> = ( + parsed, + when = "always", + value = [], +) => { + const { type } = parsed; + + if (!type) { + return [true]; + } + + const checks = (Array.isArray(value) ? value : [value]).map((check) => { + if (typeof check === "string") { + return { + when: "always", + case: check, + }; + } + return check; + }); + + const result = checks.some((check) => { + const r = ensureCase(type, check.case); + return negated(check.when) ? !r : r; + }); + + const list = checks.map((c) => c.case).join(", "); + + return [ + negated(when) ? !result : result, + message([`type must`, negated(when) ? `not` : null, `be ${list}`]), + ]; +}; diff --git a/@commitlint/rules/src/type-empty.js b/@commitlint/rules/src/type-empty.js deleted file mode 100644 index bb946a3c82..0000000000 --- a/@commitlint/rules/src/type-empty.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when) => { - const negated = when === 'never'; - const notEmpty = ensure.notEmpty(parsed.type); - return [ - negated ? notEmpty : !notEmpty, - message(['type', negated ? 'may not' : 'must', 'be empty']) - ]; -}; diff --git a/@commitlint/rules/src/type-empty.test.js b/@commitlint/rules/src/type-empty.test.js deleted file mode 100644 index 2279aef08f..0000000000 --- a/@commitlint/rules/src/type-empty.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import typeEmpty from './type-empty'; - -const messages = { - empty: '(scope):', - filled: 'type: subject' -}; - -const parsed = { - empty: parse(messages.empty), - filled: parse(messages.filled) -}; - -test('without type should succeed for empty keyword', async t => { - const [actual] = typeEmpty(await parsed.empty); - const expected = true; - t.is(actual, expected); -}); - -test('without type should fail for "never"', async t => { - const [actual] = typeEmpty(await parsed.empty, 'never'); - const expected = false; - t.is(actual, expected); -}); - -test('without type should succeed for "always"', async t => { - const [actual] = typeEmpty(await parsed.empty, 'always'); - const expected = true; - t.is(actual, expected); -}); - -test('with type fail for empty keyword', async t => { - const [actual] = typeEmpty(await parsed.filled); - const expected = false; - t.is(actual, expected); -}); - -test('with type succeed for "never"', async t => { - const [actual] = typeEmpty(await parsed.filled, 'never'); - const expected = true; - t.is(actual, expected); -}); - -test('with type fail for "always"', async t => { - const [actual] = typeEmpty(await parsed.filled, 'always'); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/type-empty.test.ts b/@commitlint/rules/src/type-empty.test.ts new file mode 100644 index 0000000000..48b5d3a893 --- /dev/null +++ b/@commitlint/rules/src/type-empty.test.ts @@ -0,0 +1,49 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeEmpty } from "./type-empty.js"; + +const messages = { + empty: "(scope):", + filled: "type: subject", +}; + +const parsed = { + empty: parse(messages.empty), + filled: parse(messages.filled), +}; + +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 expected = false; + expect(actual).toEqual(expected); +}); + +test('without type should succeed for "always"', async () => { + const [actual] = typeEmpty(await parsed.empty, "always"); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('with type fail for "always"', async () => { + 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 new file mode 100644 index 0000000000..867f6120e5 --- /dev/null +++ b/@commitlint/rules/src/type-empty.ts @@ -0,0 +1,12 @@ +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 || ""); + return [ + negated ? notEmpty : !notEmpty, + message(["type", negated ? "may not" : "must", "be empty"]), + ]; +}; diff --git a/@commitlint/rules/src/type-enum.js b/@commitlint/rules/src/type-enum.js deleted file mode 100644 index 7bd662059a..0000000000 --- a/@commitlint/rules/src/type-enum.js +++ /dev/null @@ -1,22 +0,0 @@ -import * as ensure from '@commitlint/ensure'; -import message from '@commitlint/message'; - -export default (parsed, when, value) => { - const {type: input} = parsed; - - if (!input) { - return [true]; - } - - const negated = when === 'never'; - const result = ensure.enum(input, value); - - return [ - negated ? !result : result, - message([ - `type must`, - negated ? `not` : null, - `be one of [${value.join(', ')}]` - ]) - ]; -}; diff --git a/@commitlint/rules/src/type-enum.test.js b/@commitlint/rules/src/type-enum.test.js deleted file mode 100644 index a6e0b98159..0000000000 --- a/@commitlint/rules/src/type-enum.test.js +++ /dev/null @@ -1,123 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './type-enum'; - -const messages = { - empty: '(): \n', - a: 'a(): \n', - b: 'b(): \n' -}; - -const parsed = { - empty: parse(messages.empty), - a: parse(messages.a), - b: parse(messages.b) -}; - -test('empty succeeds', async t => { - const [actual] = check(await parsed.empty); - const expected = true; - t.is(actual, expected); -}); - -test('empty on "a" succeeds', async t => { - const [actual] = check(await parsed.empty, '', ['a']); - const expected = true; - t.is(actual, expected); -}); - -test('empty on "always a" succeeds', async t => { - const [actual] = check(await parsed.empty, 'always', ['a']); - const expected = true; - t.is(actual, expected); -}); - -test('empty on "never a" succeeds', async t => { - const [actual] = check(await parsed.empty, 'never', ['a']); - const expected = true; - t.is(actual, expected); -}); - -test('empty on "always a, b" succeeds', async t => { - const [actual] = check(await parsed.empty, 'always', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('empty on "never a, b" succeeds', async t => { - const [actual] = check(await parsed.empty, 'neber', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('a on "a" succeeds', async t => { - const [actual] = check(await parsed.a, '', ['a']); - const expected = true; - t.is(actual, expected); -}); - -test('a on "always a" succeeds', async t => { - const [actual] = check(await parsed.a, 'always', ['a']); - const expected = true; - t.is(actual, expected); -}); - -test('a on "never a" fails', async t => { - const [actual] = check(await parsed.a, 'never', ['a']); - const expected = false; - t.is(actual, expected); -}); - -test('b on "b" succeeds', async t => { - const [actual] = check(await parsed.b, '', ['b']); - const expected = true; - t.is(actual, expected); -}); - -test('b on "always b" succeeds', async t => { - const [actual] = check(await parsed.b, 'always', ['b']); - const expected = true; - t.is(actual, expected); -}); - -test('b on "never b" fails', async t => { - const [actual] = check(await parsed.b, 'never', ['b']); - const expected = false; - t.is(actual, expected); -}); - -test('a on "a, b" succeeds', async t => { - const [actual] = check(await parsed.a, '', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('a on "always a, b" succeeds', async t => { - const [actual] = check(await parsed.a, 'always', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('a on "never a, b" fails', async t => { - const [actual] = check(await parsed.a, 'never', ['a', 'b']); - const expected = false; - t.is(actual, expected); -}); - -test('b on "a, b" succeeds', async t => { - const [actual] = check(await parsed.b, '', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('b on "always a, b" succeeds', async t => { - const [actual] = check(await parsed.b, 'always', ['a', 'b']); - const expected = true; - t.is(actual, expected); -}); - -test('b on "never a, b" fails', async t => { - const [actual] = check(await parsed.b, 'never', ['a', 'b']); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/type-enum.test.ts b/@commitlint/rules/src/type-enum.test.ts new file mode 100644 index 0000000000..dda24c27ea --- /dev/null +++ b/@commitlint/rules/src/type-enum.test.ts @@ -0,0 +1,123 @@ +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", +}; + +const parsed = { + empty: parse(messages.empty), + a: parse(messages.a), + b: parse(messages.b), +}; + +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 expected = true; + expect(actual).toEqual(expected); +}); + +test('empty on "always a" succeeds', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('empty on "always a, b" succeeds', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('a on "a" succeeds', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('a on "never a" fails', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('b on "always b" succeeds', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); + +test('a on "a, b" succeeds', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('a on "never a, b" fails', async () => { + 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 expected = true; + expect(actual).toEqual(expected); +}); + +test('b on "always a, b" succeeds', async () => { + 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 expected = false; + expect(actual).toEqual(expected); +}); diff --git a/@commitlint/rules/src/type-enum.ts b/@commitlint/rules/src/type-enum.ts new file mode 100644 index 0000000000..4ae17d9574 --- /dev/null +++ b/@commitlint/rules/src/type-enum.ts @@ -0,0 +1,27 @@ +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 = [], +) => { + const { type: input } = parsed; + + if (!input) { + return [true]; + } + + const negated = when === "never"; + const result = ensure.enum(input, value); + + return [ + negated ? !result : result, + message([ + `type must`, + negated ? `not` : null, + `be one of [${value.join(", ")}]`, + ]), + ]; +}; diff --git a/@commitlint/rules/src/type-max-length.js b/@commitlint/rules/src/type-max-length.js deleted file mode 100644 index eb60ca12f4..0000000000 --- a/@commitlint/rules/src/type-max-length.js +++ /dev/null @@ -1,14 +0,0 @@ -import {maxLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.type; - - if (!input) { - return [true]; - } - - return [ - maxLength(input, value), - `type must not be longer than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/type-max-length.test.js b/@commitlint/rules/src/type-max-length.test.js deleted file mode 100644 index 697db38832..0000000000 --- a/@commitlint/rules/src/type-max-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './type-max-length'; - -const short = 'a'; -const long = 'ab'; - -const value = short.length; - -const messages = { - empty: '():\n', - short: `${short}: \n`, - long: `${long}: \n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should succeed', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with long should fail', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = false; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/type-max-length.test.ts b/@commitlint/rules/src/type-max-length.test.ts new file mode 100644 index 0000000000..2ce7601fcd --- /dev/null +++ b/@commitlint/rules/src/type-max-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeMaxLength } from "./type-max-length.js"; + +const short = "a"; +const long = "ab"; + +const value = short.length; + +const messages = { + empty: "():\n", + short: `${short}: \n`, + long: `${long}: \n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = typeMaxLength(await parsed.short, undefined, value); + const expected = true; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..7398ef3138 --- /dev/null +++ b/@commitlint/rules/src/type-max-length.ts @@ -0,0 +1,19 @@ +import { maxLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const typeMaxLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.type; + + if (!input) { + return [true]; + } + + return [ + maxLength(input, value), + `type must not be longer than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/src/type-min-length.js b/@commitlint/rules/src/type-min-length.js deleted file mode 100644 index 6c3f118f84..0000000000 --- a/@commitlint/rules/src/type-min-length.js +++ /dev/null @@ -1,12 +0,0 @@ -import {minLength} from '@commitlint/ensure'; - -export default (parsed, when, value) => { - const input = parsed.type; - if (!input) { - return [true]; - } - return [ - minLength(input, value), - `type must not be shorter than ${value} characters` - ]; -}; diff --git a/@commitlint/rules/src/type-min-length.test.js b/@commitlint/rules/src/type-min-length.test.js deleted file mode 100644 index 2caf3ee072..0000000000 --- a/@commitlint/rules/src/type-min-length.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import test from 'ava'; -import parse from '@commitlint/parse'; -import check from './type-min-length'; - -const short = 'a'; -const long = 'ab'; - -const value = long.length; - -const messages = { - empty: '():\n', - short: `${short}: \n`, - long: `${long}: \n` -}; - -const parsed = { - empty: parse(messages.empty), - short: parse(messages.short), - long: parse(messages.long) -}; - -test('with empty should succeed', async t => { - const [actual] = check(await parsed.empty, '', value); - const expected = true; - t.is(actual, expected); -}); - -test('with short should fail', async t => { - const [actual] = check(await parsed.short, '', value); - const expected = false; - t.is(actual, expected); -}); - -test('with long should succeed', async t => { - const [actual] = check(await parsed.long, '', value); - const expected = true; - t.is(actual, expected); -}); diff --git a/@commitlint/rules/src/type-min-length.test.ts b/@commitlint/rules/src/type-min-length.test.ts new file mode 100644 index 0000000000..7caf3a91c5 --- /dev/null +++ b/@commitlint/rules/src/type-min-length.test.ts @@ -0,0 +1,38 @@ +import { test, expect } from "vitest"; +import parse from "@commitlint/parse"; +import { typeMinLength } from "./type-min-length.js"; + +const short = "a"; +const long = "ab"; + +const value = long.length; + +const messages = { + empty: "():\n", + short: `${short}: \n`, + long: `${long}: \n`, +}; + +const parsed = { + empty: parse(messages.empty), + short: parse(messages.short), + long: parse(messages.long), +}; + +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 () => { + const [actual] = typeMinLength(await parsed.short, undefined, value); + const expected = false; + expect(actual).toEqual(expected); +}); + +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 new file mode 100644 index 0000000000..619f7593ad --- /dev/null +++ b/@commitlint/rules/src/type-min-length.ts @@ -0,0 +1,17 @@ +import { minLength } from "@commitlint/ensure"; +import { SyncRule } from "@commitlint/types"; + +export const typeMinLength: SyncRule<number> = ( + parsed, + _when = undefined, + value = 0, +) => { + const input = parsed.type; + if (!input) { + return [true]; + } + return [ + minLength(input, value), + `type must not be shorter than ${value} characters`, + ]; +}; diff --git a/@commitlint/rules/tsconfig.json b/@commitlint/rules/tsconfig.json new file mode 100644 index 0000000000..2bc7f16034 --- /dev/null +++ b/@commitlint/rules/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [ + { "path": "../ensure" }, + { "path": "../message" }, + { "path": "../to-lines" }, + { "path": "../types" } + ] +} diff --git a/@commitlint/to-lines/CHANGELOG.md b/@commitlint/to-lines/CHANGELOG.md index cf896a4496..975274248b 100644 --- a/@commitlint/to-lines/CHANGELOG.md +++ b/@commitlint/to-lines/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/to-lines @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/to-lines @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,85 +27,333 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [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 -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/to-lines -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/to-lines -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/to-lines -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/to-lines -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/to-lines -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/to-lines -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/to-lines -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/to-lines -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/to-lines + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/to-lines + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/to-lines + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/to-lines + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/to-lines + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/to-lines + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/to-lines +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +**Note:** Version bump only for package @commitlint/to-lines + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/to-lines + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/to-lines + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/to-lines + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/to-lines + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/to-lines + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/to-lines + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/to-lines + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +**Note:** Version bump only for package @commitlint/to-lines + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/to-lines + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/to-lines + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/to-lines + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/to-lines diff --git a/@commitlint/to-lines/jest.config.js b/@commitlint/to-lines/jest.config.js deleted file mode 100644 index 20d2ea60f5..0000000000 --- a/@commitlint/to-lines/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node' -}; diff --git a/@commitlint/to-lines/package.json b/@commitlint/to-lines/package.json index 37fa0a34d4..cf4b62751d 100644 --- a/@commitlint/to-lines/package.json +++ b/@commitlint/to-lines/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/to-lines", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,16 +13,17 @@ "pkg": "pkg-check" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/to-lines" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -34,7 +36,7 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.2.0", - "@commitlint/utils": "^8.2.0" - } + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/to-lines/src/index.test.ts b/@commitlint/to-lines/src/index.test.ts index 8d03666e13..8df9e30d52 100644 --- a/@commitlint/to-lines/src/index.test.ts +++ b/@commitlint/to-lines/src/index.test.ts @@ -1,25 +1,27 @@ -import toLines from '.'; +import { test, expect } from "vitest"; -test('should return an array for empty input', () => { +import toLines from "./index.js"; + +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 1f29d0d5b3..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): string[] { - if (typeof input !== 'string') { +export default function toLines(input?: string | null): string[] { + if (typeof input !== "string") { return []; } diff --git a/@commitlint/to-lines/tsconfig.json b/@commitlint/to-lines/tsconfig.json index f4a57643f0..49479bf34f 100644 --- a/@commitlint/to-lines/tsconfig.json +++ b/@commitlint/to-lines/tsconfig.json @@ -1,15 +1,10 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] } diff --git a/@commitlint/top-level/CHANGELOG.md b/@commitlint/top-level/CHANGELOG.md index 7bcb689f8b..326a0ef33a 100644 --- a/@commitlint/top-level/CHANGELOG.md +++ b/@commitlint/top-level/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/top-level @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) **Note:** Version bump only for package @commitlint/top-level @@ -19,7 +19,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +# [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 @@ -27,96 +38,337 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) -### Bug Fixes +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +### Reverts +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends +* test: include only @commitlint/* packages src in coverage +* test: explicit import vitest utilities +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) **Note:** Version bump only for package @commitlint/top-level -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + **Note:** Version bump only for package @commitlint/top-level -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + **Note:** Version bump only for package @commitlint/top-level -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + **Note:** Version bump only for package @commitlint/top-level -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + **Note:** Version bump only for package @commitlint/top-level -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/top-level + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/top-level + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/top-level + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/top-level + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/top-level + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/top-level + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/top-level + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/top-level + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/top-level + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/top-level + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/top-level + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/top-level + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + ### Bug Fixes -* remove utils from prod dependencies ([4fb858a](https://github.com/conventional-changelog/commitlint/commit/4fb858a)) +- update dependency find-up to v5 ([#2060](https://github.com/conventional-changelog/commitlint/issues/2060)) ([25d42f4](https://github.com/conventional-changelog/commitlint/commit/25d42f4179396bdfbfc622a401d8ca8877102286)) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES +- remove node 8 from circle-ci checks -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version +Co-authored-by: Cedric van Putten <me@bycedric.com> +Co-authored-by: Cedric van Putten <me@bycedric.com> +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/top-level -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/top-level +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +**Note:** Version bump only for package @commitlint/top-level +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package @commitlint/top-level -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/top-level +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +**Note:** Version bump only for package @commitlint/top-level +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) **Note:** Version bump only for package @commitlint/top-level -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/top-level + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +**Note:** Version bump only for package @commitlint/top-level +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +### Bug Fixes + +- remove utils from prod dependencies ([4fb858a](https://github.com/conventional-changelog/commitlint/commit/4fb858a)) + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/top-level + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) **Note:** Version bump only for package @commitlint/top-level diff --git a/@commitlint/top-level/package.json b/@commitlint/top-level/package.json index 387c8bd3f5..4c48c1557a 100644 --- a/@commitlint/top-level/package.json +++ b/@commitlint/top-level/package.json @@ -1,6 +1,7 @@ { "name": "@commitlint/top-level", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Lint your commit messages", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -11,22 +12,18 @@ "deps": "dep-check", "pkg": "pkg-check" }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] - }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/top-level" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -39,11 +36,10 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/utils": "^8.2.0", - "@types/find-up": "2.1.1", - "@types/node": "12.7.8" + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "find-up": "^4.0.0" - } + "find-up": "^7.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/top-level/src/index.ts b/@commitlint/top-level/src/index.ts index 6984e899a7..4996d4f8ee 100644 --- a/@commitlint/top-level/src/index.ts +++ b/@commitlint/top-level/src/index.ts @@ -1,24 +1,27 @@ -import path from 'path'; -import up from 'find-up'; - -declare module 'find-up' { - interface Options { - cwd?: string; - type?: 'file' | 'directory'; - } -} +import path from "node:path"; +import { findUp } from "find-up"; export default toplevel; /** * Find the next git root */ -async function toplevel(cwd: string) { - const found = await up('.git', {cwd, type: 'directory'}); +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" }); + + return foundFile || foundDir; } diff --git a/@commitlint/top-level/tsconfig.json b/@commitlint/top-level/tsconfig.json index f4a57643f0..49479bf34f 100644 --- a/@commitlint/top-level/tsconfig.json +++ b/@commitlint/top-level/tsconfig.json @@ -1,15 +1,10 @@ { - "extends": "../../tsconfig.shared.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./lib" - }, - "include": [ - "./src" - ], - "exclude": [ - "./src/**/*.test.ts", - "./lib/**/*" - ] + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] } diff --git a/@commitlint/travis-cli/CHANGELOG.md b/@commitlint/travis-cli/CHANGELOG.md index 361bbcf064..579b28545c 100644 --- a/@commitlint/travis-cli/CHANGELOG.md +++ b/@commitlint/travis-cli/CHANGELOG.md @@ -3,7 +3,397 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + + +### Bug Fixes + +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + +**Note:** Version bump only for package @commitlint/travis-cli + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) **Note:** Version bump only for package @commitlint/travis-cli @@ -11,7 +401,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) **Note:** Version bump only for package @commitlint/travis-cli @@ -19,7 +409,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) **Note:** Version bump only for package @commitlint/travis-cli @@ -27,7 +417,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) **Note:** Version bump only for package @commitlint/travis-cli @@ -35,7 +425,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) **Note:** Version bump only for package @commitlint/travis-cli @@ -43,7 +433,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) **Note:** Version bump only for package @commitlint/travis-cli @@ -51,230 +441,428 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) +**Note:** Version bump only for package @commitlint/travis-cli -### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + +**Note:** Version bump only for package @commitlint/travis-cli + -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +**Note:** Version bump only for package @commitlint/travis-cli +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) +**Note:** Version bump only for package @commitlint/travis-cli +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) + +**Note:** Version bump only for package @commitlint/travis-cli +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) +**Note:** Version bump only for package @commitlint/travis-cli +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) + +**Note:** Version bump only for package @commitlint/travis-cli + +## [17.0.1](https://github.com/conventional-changelog/commitlint/compare/v17.0.0...v17.0.1) (2022-05-25) + +**Note:** Version bump only for package @commitlint/travis-cli +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +**Note:** Version bump only for package @commitlint/travis-cli +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) +**Note:** Version bump only for package @commitlint/travis-cli +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +**Note:** Version bump only for package @commitlint/travis-cli +## [16.0.3](https://github.com/conventional-changelog/commitlint/compare/v16.0.2...v16.0.3) (2022-01-19) +**Note:** Version bump only for package @commitlint/travis-cli +## [16.0.2](https://github.com/conventional-changelog/commitlint/compare/v16.0.1...v16.0.2) (2022-01-09) **Note:** Version bump only for package @commitlint/travis-cli -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +## [16.0.1](https://github.com/conventional-changelog/commitlint/compare/v16.0.0...v16.0.1) (2021-12-28) +**Note:** Version bump only for package @commitlint/travis-cli + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) +**Note:** Version bump only for package @commitlint/travis-cli +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +**Note:** Version bump only for package @commitlint/travis-cli + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) +**Note:** Version bump only for package @commitlint/travis-cli + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) +**Note:** Version bump only for package @commitlint/travis-cli +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/travis-cli + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +**Note:** Version bump only for package @commitlint/travis-cli +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) +**Note:** Version bump only for package @commitlint/travis-cli +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) +**Note:** Version bump only for package @commitlint/travis-cli + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) +**Note:** Version bump only for package @commitlint/travis-cli + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +**Note:** Version bump only for package @commitlint/travis-cli + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +### Bug Fixes + +- add missing @babel/runtime dep [#1738](https://github.com/conventional-changelog/commitlint/issues/1738) ([#1754](https://github.com/conventional-changelog/commitlint/issues/1754)) ([09afcd6](https://github.com/conventional-changelog/commitlint/commit/09afcd647a2c1d00538cf1c970e3790d936111f8)) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) +### Features + +- passdown argv to lint command ([#891](https://github.com/conventional-changelog/commitlint/issues/891)) ([c49a57c](https://github.com/conventional-changelog/commitlint/commit/c49a57c77767b8213d565df3a8bbcd7369f36641)) + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +**Note:** Version bump only for package @commitlint/travis-cli + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) +**Note:** Version bump only for package @commitlint/travis-cli + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) +**Note:** Version bump only for package @commitlint/travis-cli +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +**Note:** Version bump only for package @commitlint/travis-cli +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) +**Note:** Version bump only for package @commitlint/travis-cli +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) **Note:** Version bump only for package @commitlint/travis-cli -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +**Note:** Version bump only for package @commitlint/travis-cli + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +<a name="7.4.0"></a> +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) **Note:** Version bump only for package @commitlint/travis-cli -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +<a name="7.3.2"></a> +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) + +**Note:** Version bump only for package @commitlint/travis-cli +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/travis-cli -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/travis-cli +<a name="7.2.1"></a> +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) **Note:** Version bump only for package @commitlint/travis-cli -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) +<a name="7.2.0"></a> +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +**Note:** Version bump only for package @commitlint/travis-cli +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) **Note:** Version bump only for package @commitlint/travis-cli -<a name="5.2.3"></a> -## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) +<a name="7.1.0"></a> +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +**Note:** Version bump only for package @commitlint/travis-cli +<a name="6.2.0"></a> +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) **Note:** Version bump only for package @commitlint/travis-cli -<a name="5.2.2"></a> -## [5.2.2](https://github.com/conventional-changelog/commitlint/compare/v5.2.1...v5.2.2) (2017-11-30) +<a name="6.1.1"></a> +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) -### Bug Fixes +**Note:** Version bump only for package @commitlint/travis-cli -* **travis-cli:** read push commits directly ([9bc56c6](https://github.com/conventional-changelog/commitlint/commit/9bc56c6)) +<a name="6.1.0"></a> +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +**Note:** Version bump only for package @commitlint/travis-cli +<a name="6.0.5"></a> -<a name="5.2.1"></a> -## [5.2.1](https://github.com/conventional-changelog/commitlint/compare/v5.2.0...v5.2.1) (2017-11-30) +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) +**Note:** Version bump only for package @commitlint/travis-cli -### Bug Fixes +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +**Note:** Version bump only for package @commitlint/travis-cli -* **travis-cli:** lint ranges only for pr builds ([85b201f](https://github.com/conventional-changelog/commitlint/commit/85b201f)) +<a name="6.0.3"></a> +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +**Note:** Version bump only for package @commitlint/travis-cli +<a name="6.0.2"></a> -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="5.2.5"></a> + +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="5.2.3"></a> + +## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) + +**Note:** Version bump only for package @commitlint/travis-cli + +<a name="5.2.2"></a> + +## [5.2.2](https://github.com/conventional-changelog/commitlint/compare/v5.2.1...v5.2.2) (2017-11-30) ### Bug Fixes -* consider pull requests from forks ([4653c2c](https://github.com/conventional-changelog/commitlint/commit/4653c2c)) +- **travis-cli:** read push commits directly ([9bc56c6](https://github.com/conventional-changelog/commitlint/commit/9bc56c6)) + +<a name="5.2.1"></a> +## [5.2.1](https://github.com/conventional-changelog/commitlint/compare/v5.2.0...v5.2.1) (2017-11-30) +### Bug Fixes +- **travis-cli:** lint ranges only for pr builds ([85b201f](https://github.com/conventional-changelog/commitlint/commit/85b201f)) -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +<a name="5.2.0"></a> +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +### Bug Fixes + +- consider pull requests from forks ([4653c2c](https://github.com/conventional-changelog/commitlint/commit/4653c2c)) +<a name="5.1.1"></a> +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) **Note:** Version bump only for package @commitlint/travis-cli <a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) ### Features -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) diff --git a/@commitlint/travis-cli/README.md b/@commitlint/travis-cli/README.md index a85348bf77..74b29545f4 100644 --- a/@commitlint/travis-cli/README.md +++ b/@commitlint/travis-cli/README.md @@ -2,7 +2,7 @@ # @commitlint/travis-cli -This package is a convenience wrapper around `commitlint`, +This package is a convenience wrapper around `commitlint`, providing zero-configuration linting of all relevant commits for a given change/build combination. @@ -15,5 +15,5 @@ npm install --save-dev @commitlint/travis-cli ```yml # .travis.yml script - - commitlint-travis +- commitlint-travis ``` diff --git a/@commitlint/travis-cli/cli.js b/@commitlint/travis-cli/cli.js new file mode 100755 index 0000000000..940e27804b --- /dev/null +++ b/@commitlint/travis-cli/cli.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +import "./lib/cli.js"; diff --git a/@commitlint/travis-cli/fixtures/commitlint.js b/@commitlint/travis-cli/fixtures/commitlint.js index 333349df2e..4ab757da04 100755 --- a/@commitlint/travis-cli/fixtures/commitlint.js +++ b/@commitlint/travis-cli/fixtures/commitlint.js @@ -1,2 +1,9 @@ #!/usr/bin/env node -console.log(process.argv); + +const args = process.argv; +args.shift(); // remove node +console.log( + args.map((item, index) => { + return index === 0 ? 'commitlint' : item; + }) +); diff --git a/@commitlint/travis-cli/fixtures/git.js b/@commitlint/travis-cli/fixtures/git.js index 333349df2e..7a66985b45 100755 --- a/@commitlint/travis-cli/fixtures/git.js +++ b/@commitlint/travis-cli/fixtures/git.js @@ -1,2 +1,9 @@ #!/usr/bin/env node -console.log(process.argv); + +const args = process.argv; +args.shift(); // remove node +console.log( + args.map((item, index) => { + return index === 0 ? 'git' : item; + }) +); diff --git a/@commitlint/travis-cli/package.json b/@commitlint/travis-cli/package.json index 1f21f14931..ed08b7cf2b 100644 --- a/@commitlint/travis-cli/package.json +++ b/@commitlint/travis-cli/package.json @@ -1,49 +1,33 @@ { "name": "@commitlint/travis-cli", - "version": "8.2.0", + "type": "module", + "version": "20.1.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/" + "lib/", + "cli.js" ], "bin": { - "commitlint-travis": "./lib/cli.js" + "commitlint-travis": "./cli.js" }, "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", "deps": "dep-check", - "pkg": "pkg-check --skip-main", - "start": "ava -c 4 --verbose --watch", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js" - ], - "source": [ - "lib/**/*.js" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "pkg": "pkg-check --skip-main" }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/travis-cli" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -55,18 +39,12 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/test": "8.2.0", - "@commitlint/utils": "^8.2.0", - "ava": "0.18.2", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "cross-env": "6.0.0", - "which": "1.3.1" + "@commitlint/test": "^20.0.0", + "@commitlint/utils": "^20.0.0" }, "dependencies": { - "@commitlint/cli": "^8.2.0", - "babel-runtime": "6.26.0", - "execa": "0.11.0" - } + "@commitlint/cli": "^20.1.0", + "tinyexec": "^1.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" } diff --git a/@commitlint/travis-cli/src/cli.js b/@commitlint/travis-cli/src/cli.js deleted file mode 100755 index b209185434..0000000000 --- a/@commitlint/travis-cli/src/cli.js +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env node -const execa = require('execa'); -const commitlint = require('@commitlint/cli'); - -// Allow to override used bins for testing purposes -const GIT = process.env.TRAVIS_COMMITLINT_GIT_BIN || 'git'; -const COMMITLINT = process.env.TRAVIS_COMMITLINT_BIN; - -const REQUIRED = [ - 'TRAVIS_COMMIT', - 'TRAVIS_COMMIT_RANGE', - 'TRAVIS_EVENT_TYPE', - 'TRAVIS_REPO_SLUG', - 'TRAVIS_PULL_REQUEST_SLUG' -]; - -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'; - -main().catch(err => { - console.log(err); - process.exit(1); -}); - -async function main() { - validate(); - - // Stash changes in working copy if needed - const pop = await stash(); - - // Make base and source available as dedicated remotes - await Promise.all([ - () => fetch({name: 'base', url: `https://github.com/${REPO_SLUG}.git`}), - IS_PR - ? () => fetch({name: 'source', url: `https://github.com/${PR_SLUG}.git`}) - : async () => {} - ]); - - // Restore stashed changes if any - await pop(); - - // 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]); - } else { - const input = await log(COMMIT); - await lint([], {input}); - } -} - -async function git(args, options) { - return execa(GIT, args, Object.assign({}, {stdio: 'inherit'}, options)); -} - -async function fetch({name, url}) { - await git(['remote', 'add', name, url]); - await git(['fetch', name, '--quiet']); -} - -async function isClean() { - const result = await git(['status', '--porcelain'], { - stdio: ['pipe', 'pipe', 'pipe'] - }); - return !(result.stdout && result.stdout.trim()); -} - -async function lint(args, options) { - return execa( - COMMITLINT || commitlint, - args, - Object.assign({}, {stdio: ['pipe', 'inherit', 'inherit']}, options) - ); -} - -async function log(hash) { - const result = await execa('git', [ - 'log', - '-n', - '1', - '--pretty=format:%B', - hash - ]); - return result.stdout; -} - -async function stash() { - if (await isClean()) { - return async () => {}; - } - await git(['stash', '-k', '-u', '--quiet']); - return () => git(['stash', 'pop', '--quiet']); -} - -function validate() { - if (process.env.CI !== 'true' || process.env.TRAVIS !== 'true') { - throw new Error( - `@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'; - throw new Error( - `Expected ${missing.join(', ')} to be defined globally, ${stanza}.` - ); - } -} diff --git a/@commitlint/travis-cli/src/cli.test.js b/@commitlint/travis-cli/src/cli.test.js deleted file mode 100644 index 78800ac0f5..0000000000 --- a/@commitlint/travis-cli/src/cli.test.js +++ /dev/null @@ -1,218 +0,0 @@ -// Disable ftb -// const os = require('os'); -// const {git} = require('@commitlint/test'); -const test = require('ava'); -const execa = require('execa'); -// Disable ftb -// const which = require('which'); - -// Disable ftb -// const NODE_BIN = which.sync('node'); -const BIN = require.resolve('../lib/cli.js'); - -// Disable ftb -// const TRAVIS_COMMITLINT_BIN = require.resolve('../fixtures/commitlint'); -// const TRAVIS_COMMITLINT_GIT_BIN = require.resolve('../fixtures/git'); -// const TRAVIS_BRANCH = 'TRAVIS_BRANCH'; -// const TRAVIS_COMMIT = 'TRAVIS_COMMIT'; - -const bin = async (config = {}) => { - try { - return await execa(BIN, Object.assign({extendEnv: false}, config)); - } catch (err) { - throw new Error([err.stdout, err.stderr].join('\n')); - } -}; - -test('should throw when not on travis ci', async t => { - const env = { - CI: false, - TRAVIS: false - }; - - await t.throws( - bin({env}), - /@commitlint\/travis-cli is intended to be used on Travis CI/ - ); -}); - -/* Test.failing( - 'should throw when on travis ci, but env vars are missing', - async t => { - const env = { - TRAVIS: true, - CI: true - }; - - await t.throws(bin({env}), /TRAVIS_COMMIT, TRAVIS_BRANCH/); - } -); */ - -test('should throw when on travis ci, but TRAVIS_COMMIT is missing', async t => { - const env = { - TRAVIS: true, - CI: true - }; - - await t.throws(bin({env}), /TRAVIS_COMMIT/); -}); - -/* Test.failing( - 'should throw when on travis ci, but TRAVIS_BRANCH is missing', - async t => { - const env = { - TRAVIS: true, - CI: true - }; - - await t.throws(bin({env}), /TRAVIS_BRANCH/); - } -); - -test.failing('should call git with expected args on shallow repo', async t => { - if (os.platform() === 'win32') { - t.pass(); - return; - } - - const cwd = await git.clone('https://github.com/conventional-changelog/commitlint.git', [ - '--depth=10' - ]); - - const env = { - TRAVIS: true, - CI: true, - TRAVIS_BRANCH, - TRAVIS_COMMIT, - TRAVIS_COMMITLINT_BIN, - TRAVIS_COMMITLINT_GIT_BIN - }; - - const result = await bin({cwd, env}); - const invocations = await getInvocations(result.stdout); - t.is(invocations.length, 7); - - const [ - stash, - branches, - unshallow, - checkout, - back, - pop, - commilint - ] = invocations; - - t.deepEqual(stash, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash']); - t.deepEqual(branches, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'remote', - 'set-branches', - 'origin', - TRAVIS_BRANCH - ]); - t.deepEqual(unshallow, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'fetch', - '--unshallow', - '--quiet' - ]); - t.deepEqual(checkout, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'checkout', - TRAVIS_BRANCH, - '--quiet' - ]); - t.deepEqual(back, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'checkout', - '-', - '--quiet' - ]); - t.deepEqual(pop, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash', 'pop']); - t.deepEqual(commilint, [ - NODE_BIN, - TRAVIS_COMMITLINT_BIN, - '--from', - TRAVIS_BRANCH, - '--to', - TRAVIS_COMMIT - ]); -}); - -test.failing( - 'should call git with expected args on unshallow repo', - async t => { - if (os.platform() === 'win32') { - t.pass(); - return; - } - - const cwd = await git.clone('https://github.com/conventional-changelog/commitlint.git'); - - const env = { - TRAVIS: true, - CI: true, - TRAVIS_BRANCH, - TRAVIS_COMMIT, - TRAVIS_COMMITLINT_BIN, - TRAVIS_COMMITLINT_GIT_BIN - }; - - const result = await bin({cwd, env}); - const invocations = await getInvocations(result.stdout); - t.is(invocations.length, 6); - - const [stash, branches, checkout, back, pop, commilint] = invocations; - - t.deepEqual(stash, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash']); - t.deepEqual(branches, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'remote', - 'set-branches', - 'origin', - TRAVIS_BRANCH - ]); - t.deepEqual(checkout, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'checkout', - TRAVIS_BRANCH, - '--quiet' - ]); - t.deepEqual(back, [ - NODE_BIN, - TRAVIS_COMMITLINT_GIT_BIN, - 'checkout', - '-', - '--quiet' - ]); - t.deepEqual(pop, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash', 'pop']); - t.deepEqual(commilint, [ - NODE_BIN, - TRAVIS_COMMITLINT_BIN, - '--from', - TRAVIS_BRANCH, - '--to', - TRAVIS_COMMIT - ]); - } -); - -function getInvocations(stdout) { - const matches = stdout.match(/[^[\]]+/g); - const raw = Array.isArray(matches) ? matches : []; - - return raw.filter(invocation => invocation !== '\n').map(invocation => - invocation - .split(',') - .map(fragment => fragment.trim()) - .map(fragment => fragment.substring(1, fragment.length - 1)) - .filter(Boolean) - ); -} -*/ diff --git a/@commitlint/travis-cli/src/cli.test.ts b/@commitlint/travis-cli/src/cli.test.ts new file mode 100644 index 0000000000..b276a40792 --- /dev/null +++ b/@commitlint/travis-cli/src/cli.test.ts @@ -0,0 +1,157 @@ +import { SpawnOptions } from "node:child_process"; + +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 bin = require.resolve("../cli.js"); + +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_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", +}; + +const cli = async (nodeOptions: SpawnOptions = {}, args: string[] = []) => + x(bin, args, { nodeOptions }); + +test("should throw when not on travis ci", async () => { + const env = { + CI: "false", + TRAVIS: "false", + }; + + 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 () => { + const env = { + TRAVIS: "true", + CI: "true", + }; + + 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 () => { + const cwd = await git.clone( + "https://github.com/conventional-changelog/commitlint.git", + ["--depth=10"], + __dirname, + TRAVIS_COMMITLINT_GIT_BIN, + ); + + const result = await cli({ + cwd, + env: validBaseEnv, + }); + + 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(commitlint).toEqual(["commitlint"]); +}); + +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"], + __dirname, + TRAVIS_COMMITLINT_GIT_BIN, + ); + + const result = await cli({ + cwd, + 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(commitlint).toEqual([ + "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 () => { + const cwd = await git.clone( + "https://github.com/conventional-changelog/commitlint.git", + ["--depth=10"], + __dirname, + TRAVIS_COMMITLINT_GIT_BIN, + ); + + const result = await cli( + { + cwd, + env: { ...validBaseEnv, TRAVIS_EVENT_TYPE: "pull_request" }, + }, + ["--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(commitlint).toEqual([ + "commitlint", + "--from", + "TRAVIS_COMMIT_A", + "--to", + "TRAVIS_COMMIT_B", + "--config", + "./config/commitlint.config.js", + ]); +}); + +function getInvocations(stdout: string): string[][] { + const matches = stdout.match(/[^[\]]+/g); + const raw = Array.isArray(matches) ? matches : []; + + return raw + .filter((invocation) => invocation !== "\n") + .map((invocation) => + invocation + .split(",") + .map((fragment) => fragment.trim()) + .map((fragment) => fragment.substring(1, fragment.length - 1)) + .filter(Boolean), + ); +} diff --git a/@commitlint/travis-cli/src/cli.ts b/@commitlint/travis-cli/src/cli.ts new file mode 100644 index 0000000000..ad4c586277 --- /dev/null +++ b/@commitlint/travis-cli/src/cli.ts @@ -0,0 +1,132 @@ +import { SpawnOptions } from "node:child_process"; + +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 COMMITLINT = + 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", +]; + +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"; + +main().catch((err) => { + console.error(err); + process.exit(1); +}); + +async function main() { + validate(); + + // Stash changes in working copy if needed + const pop = await stash(); + + // Make base and source available as dedicated remotes + await Promise.all([ + () => fetch({ name: "base", url: `https://github.com/${REPO_SLUG}.git` }), + IS_PR + ? () => + fetch({ name: "source", url: `https://github.com/${PR_SLUG}.git` }) + : () => Promise.resolve(), + ]); + + // Restore stashed changes if any + await pop(); + + const args = process.argv.slice(2); + + // 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]); + } else { + const input = await log(COMMIT); + await lint(args, {}, input); + } +} + +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 isClean() { + const result = await git(["status", "--porcelain"], { + stdio: ["pipe", "pipe", "pipe"], + }); + return !(result.stdout && result.stdout.trim()); +} + +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", + }); + return result.stdout; +} + +async function stash() { + if (await isClean()) { + return () => Promise.resolve(); + } + await git(["stash", "-k", "-u", "--quiet"]); + return () => git(["stash", "pop", "--quiet"]); +} + +function validate() { + if (process.env.CI !== "true" || process.env.TRAVIS !== "true") { + throw new Error( + `@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"; + throw new Error( + `Expected ${missing.join(", ")} to be defined globally, ${stanza}.`, + ); + } +} diff --git a/@commitlint/travis-cli/tsconfig.json b/@commitlint/travis-cli/tsconfig.json new file mode 100644 index 0000000000..12cd1d4571 --- /dev/null +++ b/@commitlint/travis-cli/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"], + "references": [{ "path": "../cli" }] +} diff --git a/@commitlint/types/CHANGELOG.md b/@commitlint/types/CHANGELOG.md new file mode 100644 index 0000000000..4063f69695 --- /dev/null +++ b/@commitlint/types/CHANGELOG.md @@ -0,0 +1,358 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package @commitlint/types + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [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) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + + +### Features + +* **rules:** add header-trim rule ([#3199](https://github.com/conventional-changelog/commitlint/issues/3199)) ([#3871](https://github.com/conventional-changelog/commitlint/issues/3871)) ([331579a](https://github.com/conventional-changelog/commitlint/commit/331579a8796af901b5e5103c44fedf1cb3a2f661)) + + + + + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + +**Note:** Version bump only for package @commitlint/types + + + + + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + +**Note:** Version bump only for package @commitlint/types + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/types + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + + +### Bug Fixes + +* **parse:** allow setting fieldPattern in parserOpts ([#3538](https://github.com/conventional-changelog/commitlint/issues/3538)) ([ea23c65](https://github.com/conventional-changelog/commitlint/commit/ea23c65702d619b92e338e9f589a147d62e48ffc)) + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +**Note:** Version bump only for package @commitlint/types + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +**Note:** Version bump only for package @commitlint/types + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Features + +- **cz-commitlint:** support select scope with radio list by setting disableMultipleScopes ([#2911](https://github.com/conventional-changelog/commitlint/issues/2911)) ([9d8d73f](https://github.com/conventional-changelog/commitlint/commit/9d8d73f36e0c62c8cd9e3e913b66a5ca46ebf622)), closes [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +### BREAKING CHANGES + +- **cz-commitlint:** users who is using multiple scopes need to set enableMultipleScopes to true + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +### Bug Fixes + +- **types:** fix signature of QualifiedRuleConfig for async configurations ([#2868](https://github.com/conventional-changelog/commitlint/issues/2868)) ([#2869](https://github.com/conventional-changelog/commitlint/issues/2869)) ([c7f355b](https://github.com/conventional-changelog/commitlint/commit/c7f355b25e5baddab0b9559892f5ce4112e4f93a)) + +### Features + +- simplify config resolution ([#2398](https://github.com/conventional-changelog/commitlint/issues/2398)) ([8a8384f](https://github.com/conventional-changelog/commitlint/commit/8a8384f3c18954447cb633e76a573e1db71a1440)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +- support multiple scopes and multiple cases & fix sentence-case is not consistent with commitlint/cli (#2806) ([2c71a7e](https://github.com/conventional-changelog/commitlint/commit/2c71a7e2965a2beff805982d37243b79a48c9360)), closes [#2806](https://github.com/conventional-changelog/commitlint/issues/2806) [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) + +### BREAKING CHANGES + +- add prompt.settings configuration + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +### Bug Fixes + +- **types:** prompt messages key ([4825a52](https://github.com/conventional-changelog/commitlint/commit/4825a521e2c74d63a11920b48094fddc79001b3c)) +- **types:** prompt messages props optional ([0bd0592](https://github.com/conventional-changelog/commitlint/commit/0bd0592148ab4266fd76816b19d352e2cf947f8c)) +- **types:** user config prompt ([6d7a1c4](https://github.com/conventional-changelog/commitlint/commit/6d7a1c40e2f8a8ff22595e0e17f71f3702b0699c)) + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +### Bug Fixes + +- **types:** adds TargetCaseType[] for CaseRuleConfig ([c3bef38](https://github.com/conventional-changelog/commitlint/commit/c3bef384ff1a3ec428ba7c86bc778c50a9e6eead)) + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +### Features + +- **rules:** add `trailer-exists` rule ([#2578](https://github.com/conventional-changelog/commitlint/issues/2578)) ([cd3816d](https://github.com/conventional-changelog/commitlint/commit/cd3816d553762eae99e088689395c55afce0c6cc)) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +**Note:** Version bump only for package @commitlint/types + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +### Bug Fixes + +- **rules:** fix subject-full-stop rule config value type ([#2534](https://github.com/conventional-changelog/commitlint/issues/2534)) ([2ab3c57](https://github.com/conventional-changelog/commitlint/commit/2ab3c57b709ddad3fc98d768309ac4fdac8cb68a)) +- **types:** update chalk import ([#2535](https://github.com/conventional-changelog/commitlint/issues/2535)) ([89f9a6d](https://github.com/conventional-changelog/commitlint/commit/89f9a6d759f7296438e184a93c1f766aba1443ca)) + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +**Note:** Version bump only for package @commitlint/types + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +### Bug Fixes + +- **load:** use `Rule | AsyncRule | SyncRule` as rule value type in `Plugin` ([#2146](https://github.com/conventional-changelog/commitlint/issues/2146)) ([75b67b8](https://github.com/conventional-changelog/commitlint/commit/75b67b8fb7fc4df21267b98f0c9daeeb1130b824)) +- **types:** correct chalkColor type ([#2420](https://github.com/conventional-changelog/commitlint/issues/2420)) ([ef8bdad](https://github.com/conventional-changelog/commitlint/commit/ef8bdad96c9ee7c3ad67f8280818c7f49c1df1fe)) + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Features + +- **load:** allow specifying helpUrl via config ([#2180](https://github.com/conventional-changelog/commitlint/issues/2180)) ([d6795a3](https://github.com/conventional-changelog/commitlint/commit/d6795a3c4633ba6efd7a0fcff48339dc291cd832)) +- **rules:** add body-full-stop rule ([#2144](https://github.com/conventional-changelog/commitlint/issues/2144)) ([7767ca2](https://github.com/conventional-changelog/commitlint/commit/7767ca2591d10207c4abe7f3e5e6de503ac12a25)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/types + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/types + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +**Note:** Version bump only for package @commitlint/types + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Features + +- add local plugins support ([#1692](https://github.com/conventional-changelog/commitlint/issues/1692)) ([7b29c48](https://github.com/conventional-changelog/commitlint/commit/7b29c48321b513e091849fbb2cc2bf0e6ebb94a6)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/types + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Features + +- add async promise based rules methods into lint ([#976](https://github.com/conventional-changelog/commitlint/issues/976)) ([4443062](https://github.com/conventional-changelog/commitlint/commit/444306249b8a3d04524538f61edca8f6cc10d75f)) diff --git a/@commitlint/types/package.json b/@commitlint/types/package.json new file mode 100644 index 0000000000..7388a48dd6 --- /dev/null +++ b/@commitlint/types/package.json @@ -0,0 +1,39 @@ +{ + "name": "@commitlint/types", + "type": "module", + "version": "20.0.0", + "description": "Shared types for commitlint packages", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib/" + ], + "scripts": { + "pkg": "pkg-check" + }, + "engines": { + "node": ">=v18" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@commitlint/types" + }, + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "author": { + "name": "Mario Nebl", + "email": "hello@herebecode.com" + }, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "devDependencies": { + "@commitlint/utils": "^20.0.0" + }, + "gitHead": "e82f05a737626bb69979d14564f5ff601997f679" +} diff --git a/@commitlint/types/src/ensure.ts b/@commitlint/types/src/ensure.ts new file mode 100644 index 0000000000..309271e0a3 --- /dev/null +++ b/@commitlint/types/src/ensure.ts @@ -0,0 +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"; diff --git a/@commitlint/types/src/format.ts b/@commitlint/types/src/format.ts new file mode 100644 index 0000000000..2ae1030d1f --- /dev/null +++ b/@commitlint/types/src/format.ts @@ -0,0 +1,38 @@ +import type { ColorName, ModifierName } from "chalk"; + +import { QualifiedRules } from "./load.js"; +import { RuleConfigSeverity } from "./rules.js"; + +export type Formatter = ( + report: FormattableReport, + options: FormatOptions, +) => string; + +export interface FormattableProblem { + level: RuleConfigSeverity; + name: keyof QualifiedRules; + message: string; +} + +export interface FormattableResult { + errors?: FormattableProblem[]; + warnings?: FormattableProblem[]; +} + +export interface WithInput { + input?: string; +} + +export interface FormattableReport { + results?: (FormattableResult & WithInput)[]; +} + +export type ChalkColor = ColorName | ModifierName; + +export interface FormatOptions { + color?: boolean; + signs?: readonly [string, string, string]; + colors?: readonly [ChalkColor, ChalkColor, ChalkColor]; + verbose?: boolean; + helpUrl?: string; +} diff --git a/@commitlint/types/src/index.ts b/@commitlint/types/src/index.ts new file mode 100644 index 0000000000..aa363ca5ae --- /dev/null +++ b/@commitlint/types/src/index.ts @@ -0,0 +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"; diff --git a/@commitlint/types/src/is-ignored.ts b/@commitlint/types/src/is-ignored.ts new file mode 100644 index 0000000000..45227cdbfd --- /dev/null +++ b/@commitlint/types/src/is-ignored.ts @@ -0,0 +1,6 @@ +export type Matcher = (commit: string) => boolean; + +export interface IsIgnoredOptions { + ignores?: Matcher[]; + defaults?: boolean; +} diff --git a/@commitlint/types/src/lint.ts b/@commitlint/types/src/lint.ts new file mode 100644 index 0000000000..f2cc02b002 --- /dev/null +++ b/@commitlint/types/src/lint.ts @@ -0,0 +1,45 @@ +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, + | Readonly<[RuleConfigSeverity.Disabled]> + | RuleConfigTuple<void> + | RuleConfigTuple<unknown> +>; + +export interface LintOptions { + /** If it should ignore the default commit messages (defaults to `true`) */ + defaultIgnores?: IsIgnoredOptions["defaults"]; + /** Additional commits to ignore, defined by ignore matchers */ + ignores?: IsIgnoredOptions["ignores"]; + /** The parser configuration to use when linting the commit */ + parserOpts?: Options; + + plugins?: PluginRecords; + helpUrl?: string; +} + +export interface LintOutcome { + /** The linted commit, as string */ + input: string; + /** If the linted commit is considered valid */ + valid: boolean; + /** All errors, per rule, for the commit */ + errors: LintRuleOutcome[]; + /** All warnings, per rule, for the commit */ + warnings: LintRuleOutcome[]; +} + +export interface LintRuleOutcome { + /** If the commit is considered valid for the rule */ + valid: boolean; + /** The "severity" of the rule (1 = warning, 2 = error) */ + level: RuleConfigSeverity; + /** The name of the rule */ + name: string; + /** The message returned from the rule, if invalid */ + message: string; +} diff --git a/@commitlint/types/src/load.ts b/@commitlint/types/src/load.ts new file mode 100644 index 0000000000..e095387fe2 --- /dev/null +++ b/@commitlint/types/src/load.ts @@ -0,0 +1,54 @@ +import { UserPromptConfig } from "./prompt.js"; +import { + AsyncRule, + Rule, + RuleConfigQuality, + RulesConfig, + SyncRule, +} from "./rules.js"; + +export type PluginRecords = Record<string, Plugin>; + +export interface Plugin { + rules: { + [ruleName: string]: Rule | AsyncRule | SyncRule; + }; +} + +export interface LoadOptions { + cwd?: string; + file?: string; +} + +export interface UserConfig { + extends?: string | string[]; + formatter?: string; + rules?: Partial<RulesConfig>; + parserPreset?: string | ParserPreset | Promise<ParserPreset>; + ignores?: ((commit: string) => boolean)[]; + defaultIgnores?: boolean; + plugins?: (string | Plugin)[]; + helpUrl?: string; + prompt?: UserPromptConfig; + [key: string]: unknown; +} + +export type QualifiedRules = Partial<RulesConfig<RuleConfigQuality.Qualified>>; + +export interface QualifiedConfig { + extends: string[]; + formatter: string; + rules: QualifiedRules; + parserPreset?: ParserPreset; + ignores?: ((commit: string) => boolean)[]; + defaultIgnores?: boolean; + plugins: PluginRecords; + helpUrl: string; + prompt: UserPromptConfig; +} + +export interface ParserPreset { + name?: string; + path?: string; + parserOpts?: unknown; +} diff --git a/@commitlint/types/src/parse.ts b/@commitlint/types/src/parse.ts new file mode 100644 index 0000000000..c162098b5e --- /dev/null +++ b/@commitlint/types/src/parse.ts @@ -0,0 +1,3 @@ +import type { Commit, Options } from "conventional-commits-parser"; + +export type Parser = (message: string, options: Options) => Omit<Commit, "raw">; diff --git a/@commitlint/types/src/prompt.ts b/@commitlint/types/src/prompt.ts new file mode 100644 index 0000000000..c426434d13 --- /dev/null +++ b/@commitlint/types/src/prompt.ts @@ -0,0 +1,59 @@ +export type RuleField = + | "header" + | "type" + | "scope" + | "subject" + | "body" + | "footer"; + +export type PromptName = + | RuleField + | "isBreaking" + | "breakingBody" + | "breaking" + | "isIssueAffected" + | "issuesBody" + | "issues"; + +export type PromptConfig = { + settings: { + scopeEnumSeparator: string; + enableMultipleScopes: boolean; + }; + messages: PromptMessages; + questions: Partial< + Record< + PromptName, + { + description?: string; + messages?: { [K: string]: string }; + enum?: { + [enumName: string]: { + description?: string; + title?: string; + emoji?: string; + }; + }; + emojiInHeader?: boolean; + } + > + >; +}; + +export type PromptMessages = { + skip: string; + max: string; + min: string; + emptyWarning: string; + upperLimitWarning: string; + lowerLimitWarning: string; + [_key: string]: string; +}; + +export type UserPromptConfig = DeepPartial<PromptConfig>; + +type DeepPartial<T> = { + [P in keyof T]?: { + [K in keyof T[P]]?: T[P][K]; + }; +}; diff --git a/@commitlint/types/src/rules.ts b/@commitlint/types/src/rules.ts new file mode 100644 index 0000000000..533e5416df --- /dev/null +++ b/@commitlint/types/src/rules.ts @@ -0,0 +1,133 @@ +import type { Commit } from "conventional-commits-parser"; + +import { TargetCaseType } from "./ensure.js"; + +/** + * Rules match the input either as successful or failed. + * For example, when `header-full-stop` detects a full stop and is set as "always"; it's true. + * If the `header-full-stop` discovers a full stop but is set to "never"; it's false. + */ +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 BaseRule<Value = never, Type extends RuleType = "either"> = ( + parsed: Commit, + when?: RuleConfigCondition, + value?: Value, +) => Type extends "either" + ? RuleOutcome | Promise<RuleOutcome> + : 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">; + +/** + * Rules always have a severity. + * Severity indicates what to do if the rule is found to be broken + * 0 - Disable this rule + * 1 - Warn for violations + * 2 - Error for violations + */ +export enum RuleConfigSeverity { + Disabled = 0, + Warning = 1, + Error = 2, +} + +/** + * Rules always have a condition. + * 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 RuleConfigTuple<T> = T extends void + ? + | Readonly<[RuleConfigSeverity.Disabled]> + | Readonly<[RuleConfigSeverity, RuleConfigCondition]> + : + | Readonly<[RuleConfigSeverity.Disabled]> + | Readonly<[RuleConfigSeverity, RuleConfigCondition, T]>; + +export enum RuleConfigQuality { + User, + Qualified, +} + +export type QualifiedRuleConfig<T> = + | (() => RuleConfigTuple<T>) + | (() => Promise<RuleConfigTuple<T>>) + | RuleConfigTuple<T>; + +export type RuleConfig< + V = RuleConfigQuality.Qualified, + T = void, +> = V extends RuleConfigQuality.Qualified + ? RuleConfigTuple<T> + : QualifiedRuleConfig<T>; + +export type CaseRuleConfig<V = RuleConfigQuality.User> = RuleConfig< + V, + TargetCaseType | TargetCaseType[] +>; +export type LengthRuleConfig<V = RuleConfigQuality.User> = RuleConfig< + V, + number +>; +export type EnumRuleConfig<V = RuleConfigQuality.User> = RuleConfig< + V, + string[] +>; + +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>; + "breaking-change-exclamation-mark": CaseRuleConfig<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>; +}; + +export type AnyRuleConfig<V> = RuleConfig<V, unknown> | RuleConfig<V, void>; diff --git a/@commitlint/types/tsconfig.json b/@commitlint/types/tsconfig.json new file mode 100644 index 0000000000..d5ce29824f --- /dev/null +++ b/@commitlint/types/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "exclude": ["./lib/**/*"] +} diff --git a/@packages/babel-preset-commitlint/CHANGELOG.md b/@packages/babel-preset-commitlint/CHANGELOG.md deleted file mode 100644 index 78d4dacc6f..0000000000 --- a/@packages/babel-preset-commitlint/CHANGELOG.md +++ /dev/null @@ -1,155 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) - -**Note:** Version bump only for package babel-preset-commitlint - - - - - -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) - -**Note:** Version bump only for package babel-preset-commitlint - - - - - -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) - - -### Bug Fixes - -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) - - - - -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) - - -### Bug Fixes - -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) - - - - -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) - - -### Features - -* **babel-preset-commitlint:** add jsx tranform ([#163](https://github.com/conventional-changelog/commitlint/issues/163)) ([5190241](https://github.com/conventional-changelog/commitlint/commit/5190241)) - - - - -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) - - -### Features - -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) - - - - -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) - - - - -**Note:** Version bump only for package babel-preset-commitlint - -<a name="3.2.0"></a> -# 3.2.0 (2017-09-05) diff --git a/@packages/babel-preset-commitlint/index.js b/@packages/babel-preset-commitlint/index.js deleted file mode 100644 index 6271fc6542..0000000000 --- a/@packages/babel-preset-commitlint/index.js +++ /dev/null @@ -1,35 +0,0 @@ -const addModuleExports = require('babel-plugin-add-module-exports'); -const fastAsync = require('fast-async'); -const jsx = require('babel-plugin-transform-react-jsx'); -const transformRuntime = require('babel-plugin-transform-runtime').default; -const env = require('babel-preset-env').default; - -module.exports = preset; - -function preset() { - const plugins = [ - addModuleExports, - [jsx, {pragma: 'h'}], - [fastAsync, {spec: true}], - [transformRuntime, {polyfill: false, regenerator: false}] - ]; - - return { - env: { - development: { - plugins - } - }, - plugins, - presets: [ - [ - env, - { - debug: process.env.DEBUG === 'true', - exclude: ['transform-regenerator', 'transform-async-to-generator'], - targets: {node: '6'} - } - ] - ] - }; -} diff --git a/@packages/babel-preset-commitlint/package.json b/@packages/babel-preset-commitlint/package.json deleted file mode 100644 index 181a30e1a2..0000000000 --- a/@packages/babel-preset-commitlint/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "babel-preset-commitlint", - "version": "8.2.0", - "description": "Lint your commit messages", - "main": "index.js", - "files": [ - "index.js" - ], - "ava": { - "files": [ - "test.js", - "*.test.js" - ] - }, - "nyc": { - "all": true, - "sourceMap": false, - "instrument": false, - "include": [ - "source/**/*.js" - ] - }, - "engines": { - "node": ">=4" - }, - "repository": { - "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" - }, - "bugs": { - "url": "https://github.com/conventional-changelog/commitlint/issues" - }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", - "keywords": [ - "babel", - "conventional-changelog", - "commitlint", - "utility" - ], - "author": { - "name": "Mario Nebl", - "email": "hello@herebecode.com" - }, - "license": "MIT", - "devDependencies": { - "ava": "0.22.0", - "babel-core": "6.26.3" - }, - "dependencies": { - "babel-plugin-add-module-exports": "^0.3.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.6.0", - "fast-async": "^6.3.0" - } -} diff --git a/@packages/test-environment/CHANGELOG.md b/@packages/test-environment/CHANGELOG.md new file mode 100644 index 0000000000..5a0b754738 --- /dev/null +++ b/@packages/test-environment/CHANGELOG.md @@ -0,0 +1,292 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) + +**Note:** Version bump only for package vitest-environment-commitlint + + + + + +# [19.9.0](https://github.com/conventional-changelog/commitlint/compare/v19.8.1...v19.9.0) (2025-08-26) + + +### Bug Fixes + +* update dependency jest-environment-node to v30 ([#4448](https://github.com/conventional-changelog/commitlint/issues/4448)) ([42ca849](https://github.com/conventional-changelog/commitlint/commit/42ca849db3581bb5b7f1bbbcd0dfeda912566e5d)) + + + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) + +**Note:** Version bump only for package vitest-environment-commitlint + + + + + +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + + +* chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + + +### BREAKING CHANGES + +* drop node v12 support + +* chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + + + + + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + + +* chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + + +### BREAKING CHANGES + +* minimum node version is 12 + + + + + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + + +* refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + + +### BREAKING CHANGES + +* remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +* docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + + + + + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + + +### Bug Fixes + +* mark internal packages as private [#972](https://github.com/conventional-changelog/commitlint/issues/972) ([#1970](https://github.com/conventional-changelog/commitlint/issues/1970)) ([2351124](https://github.com/conventional-changelog/commitlint/commit/23511248b2b4020ee87d04a838c7ce31e094c128)) + + + + + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + + +### Bug Fixes + +* update dependency tmp to v0.2.1 ([#1817](https://github.com/conventional-changelog/commitlint/issues/1817)) ([0ff72f4](https://github.com/conventional-changelog/commitlint/commit/0ff72f41bd48b3dd37f881f6fb11477d8f643735)) + + + + + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/test-environment + + + + + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +**Note:** Version bump only for package @commitlint/test-environment diff --git a/@packages/test-environment/package.json b/@packages/test-environment/package.json new file mode 100644 index 0000000000..75d6d66b4b --- /dev/null +++ b/@packages/test-environment/package.json @@ -0,0 +1,37 @@ +{ + "name": "vitest-environment-commitlint", + "type": "module", + "version": "20.0.0", + "description": "test environment for @commitlint", + "private": true, + "main": "lib/test-environment.js", + "types": "lib/test-environment.d.ts", + "files": [ + "lib/" + ], + "engines": { + "node": ">=v18" + }, + "repository": { + "type": "git", + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@packages/test-environment" + }, + "bugs": { + "url": "https://github.com/conventional-changelog/commitlint/issues" + }, + "homepage": "https://commitlint.js.org/", + "keywords": [ + "conventional-changelog", + "commitlint", + "test", + "cli" + ], + "license": "MIT", + "dependencies": { + "@types/tmp": "^0.2.5", + "tmp": "^0.2.1", + "vitest": "^3.0.0" + }, + "gitHead": "71f0194f33943954a8dac1c458be47e5049717cd" +} diff --git a/@packages/test-environment/src/test-environment.ts b/@packages/test-environment/src/test-environment.ts new file mode 100644 index 0000000000..448bf7f73e --- /dev/null +++ b/@packages/test-environment/src/test-environment.ts @@ -0,0 +1,24 @@ +// https://github.com/raszi/node-tmp/issues/229 + +import type { Environment } from "vitest"; +import { builtinEnvironments } from "vitest/environments"; +import tmp from "tmp"; + +const nodeEnv = builtinEnvironments.node; + +const env: Environment = { + ...nodeEnv, + name: "commitlint", + async setup(global: object, options: Record<string, unknown>) { + const setupEnv = await nodeEnv.setup(global, options); + return { + ...setupEnv, + teardown(global: unknown) { + tmp.setGracefulCleanup(); + return setupEnv.teardown(global); + }, + }; + }, +}; + +export default env; diff --git a/@packages/test-environment/tsconfig.json b/@packages/test-environment/tsconfig.json new file mode 100644 index 0000000000..8d5ce01f6d --- /dev/null +++ b/@packages/test-environment/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] +} diff --git a/@packages/test/CHANGELOG.md b/@packages/test/CHANGELOG.md index 3e5931169d..229303a1d4 100644 --- a/@packages/test/CHANGELOG.md +++ b/@packages/test/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/test @@ -11,179 +11,423 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) -**Note:** Version bump only for package @commitlint/test +### Bug Fixes +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) -### Bug Fixes +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +### 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)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [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 -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-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) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) **Note:** Version bump only for package @commitlint/test -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + + +### Bug Fixes + +* update dependency @types/fs-extra to v11 ([#3494](https://github.com/conventional-changelog/commitlint/issues/3494)) ([8f553c7](https://github.com/conventional-changelog/commitlint/commit/8f553c7603e3ee0f435d878e396eec899a213de8)) + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +### Bug Fixes + +- update dependency fs-extra to v11 ([#3460](https://github.com/conventional-changelog/commitlint/issues/3460)) ([a437923](https://github.com/conventional-changelog/commitlint/commit/a43792388e0d9707da770b26592c5e31553384a1)) + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + **Note:** Version bump only for package @commitlint/test -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) **Note:** Version bump only for package @commitlint/test -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) +### Tests +- **config-lerna-scopes:** reuse npm bootstrap to simplify tests ([#2479](https://github.com/conventional-changelog/commitlint/issues/2479)) ([9a7a43a](https://github.com/conventional-changelog/commitlint/commit/9a7a43aa8a7eca18f2fe05c78d27dcb1a128930c)), closes [#2447](https://github.com/conventional-changelog/commitlint/issues/2447) +### BREAKING CHANGES + +- **config-lerna-scopes:** upgrade to lerna v4 + +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> + +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests + +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests + +- test: fix issue after merge + +- test: one more fix after merge + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) **Note:** Version bump only for package @commitlint/test -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +**Note:** Version bump only for package @commitlint/test + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES +- minimum node version is 12 +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +### Bug Fixes + +- update dependency fs-extra to v10 ([#2575](https://github.com/conventional-changelog/commitlint/issues/2575)) ([d47d2b5](https://github.com/conventional-changelog/commitlint/commit/d47d2b595b980adadd4fb8ff198c1914caeff18f)) + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) **Note:** Version bump only for package @commitlint/test -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +**Note:** Version bump only for package @commitlint/test + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) +- update dependency pkg-dir to v5 ([#2168](https://github.com/conventional-changelog/commitlint/issues/2168)) ([b9d1c84](https://github.com/conventional-changelog/commitlint/commit/b9d1c8462950303a7695f248849dd9f6a58b5a9a)) + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +- refactor!: drop support for lerna v2 ([59667b3](https://github.com/conventional-changelog/commitlint/commit/59667b376118323b1312d3d1084b9178918f3d23)) +### Bug Fixes + +- update dependency @types/fs-extra to ^9.0.1 ([#2088](https://github.com/conventional-changelog/commitlint/issues/2088)) ([cb1028e](https://github.com/conventional-changelog/commitlint/commit/cb1028ef2700d86991c69a1e2ad391bc1bdc9d90)) + +### BREAKING CHANGES + +- remove lerna v2 support and tests + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) +- update dependency fs-extra to v9 ([#1018](https://github.com/conventional-changelog/commitlint/issues/1018)) ([2df49fa](https://github.com/conventional-changelog/commitlint/commit/2df49fac907993ae78199a1012e918b0e2ff5621)) +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) **Note:** Version bump only for package @commitlint/test -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +### Bug Fixes +- mark internal packages as private [#972](https://github.com/conventional-changelog/commitlint/issues/972) ([#1970](https://github.com/conventional-changelog/commitlint/issues/1970)) ([2351124](https://github.com/conventional-changelog/commitlint/commit/23511248b2b4020ee87d04a838c7ce31e094c128)) +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +### Bug Fixes + +- update dependency tmp to v0.2.1 ([#1817](https://github.com/conventional-changelog/commitlint/issues/1817)) ([0ff72f4](https://github.com/conventional-changelog/commitlint/commit/0ff72f41bd48b3dd37f881f6fb11477d8f643735)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) **Note:** Version bump only for package @commitlint/test -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) +**Note:** Version bump only for package @commitlint/test +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +**Note:** Version bump only for package @commitlint/test + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) **Note:** Version bump only for package @commitlint/test -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) +<a name="7.5.0"></a> +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) + +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/test -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +**Note:** Version bump only for package @commitlint/test +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) **Note:** Version bump only for package @commitlint/test -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +<a name="6.1.1"></a> +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) -### Bug Fixes +**Note:** Version bump only for package @commitlint/test -* update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) +<a name="6.1.0"></a> +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) -### Features +**Note:** Version bump only for package @commitlint/test -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +<a name="6.0.4"></a> +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +**Note:** Version bump only for package @commitlint/test +<a name="6.0.3"></a> -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +**Note:** Version bump only for package @commitlint/test -### Bug Fixes +<a name="6.0.2"></a> -* **core:** fall back to globally installed config if available ([#127](https://github.com/conventional-changelog/commitlint/issues/127)) ([8612eb3](https://github.com/conventional-changelog/commitlint/commit/8612eb3)) +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +**Note:** Version bump only for package @commitlint/test +<a name="6.0.0"></a> +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +**Note:** Version bump only for package @commitlint/test + +<a name="5.2.6"></a> +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +**Note:** Version bump only for package @commitlint/test + +<a name="5.2.0"></a> +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) **Note:** Version bump only for package @commitlint/test -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +**Note:** Version bump only for package @commitlint/test + +<a name="5.1.0"></a> +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) ### Bug Fixes -* **core:** consider config outside of current git repo ([f7234b6](https://github.com/conventional-changelog/commitlint/commit/f7234b6)) +- update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) +### Features +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +<a name="5.0.1"></a> -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +### Bug Fixes +- **core:** fall back to globally installed config if available ([#127](https://github.com/conventional-changelog/commitlint/issues/127)) ([8612eb3](https://github.com/conventional-changelog/commitlint/commit/8612eb3)) +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) **Note:** Version bump only for package @commitlint/test -<a name="4.1.1"></a> -## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) +<a name="4.2.1"></a> + +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) + +### Bug Fixes + +- **core:** consider config outside of current git repo ([f7234b6](https://github.com/conventional-changelog/commitlint/commit/f7234b6)) +<a name="4.2.0"></a> + +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +**Note:** Version bump only for package @commitlint/test +<a name="4.1.1"></a> + +## [4.1.1](https://github.com/conventional-changelog/commitlint/compare/v4.1.0...v4.1.1) (2017-10-09) **Note:** Version bump only for package @commitlint/test diff --git a/@packages/test/package.json b/@packages/test/package.json index 96856114a7..629771d7b5 100644 --- a/@packages/test/package.json +++ b/@packages/test/package.json @@ -1,47 +1,26 @@ { "name": "@commitlint/test", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "test utilities for @commitlint", - "main": "lib/", + "private": true, + "main": "lib/index.js", + "types": "lib/index.d.ts", "files": [ "lib/" ], - "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", - "start": "concurrently \"ava --watch --verbose\" \"yarn run watch\"", - "test": "ava --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] - }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@packages/test" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -53,15 +32,13 @@ }, "license": "MIT", "dependencies": { - "@marionebl/sander": "0.6.1", - "execa": "0.9.0", - "pkg-dir": "2.0.0" - }, - "devDependencies": { - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.2.0", - "babel-register": "6.26.0", - "concurrently": "3.5.1", - "cross-env": "5.1.1" - } + "@types/fs-extra": "^11.0.3", + "@types/tmp": "^0.2.5", + "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.js b/@packages/test/src/fix.js deleted file mode 100644 index 14b88b58c4..0000000000 --- a/@packages/test/src/fix.js +++ /dev/null @@ -1,25 +0,0 @@ -import crypto from 'crypto'; -import os from 'os'; -import path from 'path'; - -import * as sander from '@marionebl/sander'; -import pkgDir from 'pkg-dir'; - -export {bootstrap}; - -async function bootstrap(fixture) { - const cwd = path.join(os.tmpdir(), rand()); - - if (typeof fixture !== 'undefined') { - await sander.copydir(await pkgDir(), fixture).to(cwd); - } - - return cwd; -} - -function rand() { - return crypto - .randomBytes(Math.ceil(6)) - .toString('hex') - .slice(0, 12); -} diff --git a/@packages/test/src/fix.ts b/@packages/test/src/fix.ts new file mode 100644 index 0000000000..eca5fd03f8 --- /dev/null +++ b/@packages/test/src/fix.ts @@ -0,0 +1,23 @@ +import path from "node:path"; + +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({ + keep: false, + unsafeCleanup: true, + }); + + if (typeof fixture !== "undefined") { + const packageDir = await pkgDir({ cwd: directory }); + if (!packageDir) { + throw new Error(`ENOENT, no such file or directory '${packageDir}'`); + } + + await fs.copy(path.join(packageDir, fixture), tmpDir.name); + } + + return tmpDir.name; +} diff --git a/@packages/test/src/git.js b/@packages/test/src/git.js deleted file mode 100644 index cc331802de..0000000000 --- a/@packages/test/src/git.js +++ /dev/null @@ -1,50 +0,0 @@ -import crypto from 'crypto'; -import os from 'os'; -import path from 'path'; - -import * as sander from '@marionebl/sander'; -import execa from 'execa'; -import pkgDir from 'pkg-dir'; - -export {bootstrap, clone, init}; - -async function bootstrap(fixture) { - const cwd = path.join(os.tmpdir(), rand()); - - if (typeof fixture !== 'undefined') { - await sander.copydir(await pkgDir(), fixture).to(cwd); - } - - await init(cwd); - return cwd; -} - -async function clone(source, ...args) { - const cwd = path.join(os.tmpdir(), rand()); - await execa('git', ['clone', ...args, source, cwd]); - await setup(cwd); - return cwd; -} - -async function init(cwd) { - await execa('git', ['init', cwd]); - await setup(cwd); - return cwd; -} - -async function setup(cwd) { - try { - await execa('git', ['config', 'user.name', 'ava'], {cwd}); - await execa('git', ['config', 'user.email', 'test@example.com'], {cwd}); - await execa('git', ['config', 'commit.gpgsign', 'false'], {cwd}); - } catch (err) { - console.warn(`git config in ${cwd} failed`, err.message); - } -} - -function rand() { - return crypto - .randomBytes(Math.ceil(6)) - .toString('hex') - .slice(0, 12); -} diff --git a/@packages/test/src/git.ts b/@packages/test/src/git.ts new file mode 100644 index 0000000000..04ea365aae --- /dev/null +++ b/@packages/test/src/git.ts @@ -0,0 +1,49 @@ +import { x } from "tinyexec"; + +import * as fix from "./fix.js"; + +export async function bootstrap(fixture?: string, directory?: string) { + const cwd = await fix.bootstrap(fixture, directory); + + await init(cwd); + return cwd; +} + +export async function clone( + source: string, + args: string[], + directory?: string, + gitCommand = "git", +) { + const cwd = await fix.bootstrap(undefined, directory); + + await x(gitCommand, ["clone", ...args, source, cwd]); + await setup(cwd, gitCommand); + return cwd; +} + +export async function init(cwd: string) { + await x("git", ["init", cwd]); + await setup(cwd); + return cwd; +} + +async function setup(cwd: string, gitCommand = "git") { + try { + 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 }, + }); + } catch (err: any) { + 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"); + } + } +} diff --git a/@packages/test/src/index.js b/@packages/test/src/index.js deleted file mode 100644 index 2825fd2120..0000000000 --- a/@packages/test/src/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as fix from './fix'; -import * as git from './git'; -import * as npm from './npm'; - -export {fix, git, npm}; diff --git a/@packages/test/src/index.test.js b/@packages/test/src/index.test.js deleted file mode 100644 index a56b32c973..0000000000 --- a/@packages/test/src/index.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import test from 'ava'; -import * as u from '.'; - -test('exports a git namespace', t => { - t.is(typeof u.git, 'object'); -}); - -test('git namespace has bootstrap', t => { - t.is(typeof u.git.bootstrap, 'function'); -}); - -test('git namespace has clone', t => { - t.is(typeof u.git.clone, 'function'); -}); diff --git a/@packages/test/src/index.test.ts b/@packages/test/src/index.test.ts new file mode 100644 index 0000000000..0202eeeeb5 --- /dev/null +++ b/@packages/test/src/index.test.ts @@ -0,0 +1,34 @@ +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"; + +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 clone", () => { + expect(typeof u.git.clone).toBe("function"); +}); + +test("expect to create tmp directory", async () => { + const directory = await u.git.bootstrap(); + 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-"); + expect(directory).toContain(os.tmpdir()); + expect(fs.existsSync(directory)).toBeTruthy(); + + 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 new file mode 100644 index 0000000000..fb1c9a26a6 --- /dev/null +++ b/@packages/test/src/index.ts @@ -0,0 +1,5 @@ +import * as fix from "./fix.js"; +import * as git from "./git.js"; +import * as npm from "./npm.js"; + +export { fix, git, npm }; diff --git a/@packages/test/src/npm.js b/@packages/test/src/npm.js deleted file mode 100644 index ea9d90479f..0000000000 --- a/@packages/test/src/npm.js +++ /dev/null @@ -1,16 +0,0 @@ -import execa from 'execa'; -import * as sander from '@marionebl/sander'; - -import * as git from './git'; - -export {bootstrap}; - -async function bootstrap(fixture) { - const cwd = await git.bootstrap(fixture); - - if (await sander.exists(cwd, 'package.json')) { - await execa('npm', ['install'], {cwd}); - } - - return cwd; -} diff --git a/@packages/test/src/npm.ts b/@packages/test/src/npm.ts new file mode 100644 index 0000000000..2c31e5520b --- /dev/null +++ b/@packages/test/src/npm.ts @@ -0,0 +1,68 @@ +import path from "node:path"; + +import fs from "fs-extra"; +import resolvePkg from "resolve-pkg"; + +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"); + + if (await fs.pathExists(manifestPath)) { + 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); + + if (!sourcePath) { + throw new Error(`Could not resolve dependency ${dependency}`); + } + + const sourceModulesPath = findParentPath(sourcePath, "node_modules"); + + if (!sourceModulesPath) { + throw new Error(`Could not determine node_modules for ${sourcePath}`); + } + + const relativePath = path.relative(sourceModulesPath, sourcePath); + const targetPath = path.join(targetModulesPath, relativePath); + + await fs.mkdirp(path.join(targetPath, "..")); + await fs.symlink(sourcePath, targetPath); + }), + ); + } +} + +export async function bootstrap(fixture: string, directory?: string) { + const cwd = await git.bootstrap(fixture, directory); + await installModules(cwd); + return cwd; +} + +function findParentPath( + parentPath: string, + dirname: string, +): string | undefined { + const rawFragments = parentPath.split(path.sep); + + const { matched, fragments } = rawFragments.reduceRight( + ({ fragments, matched }, item) => { + if (item === dirname && !matched) { + return { fragments, matched: true }; + } + + if (!matched && fragments.length > 0) { + fragments.pop(); + } + + return { fragments, matched }; + }, + { fragments: rawFragments, matched: false }, + ); + + return matched ? fragments.join(path.sep) : undefined; +} diff --git a/@packages/test/tsconfig.json b/@packages/test/tsconfig.json new file mode 100644 index 0000000000..8d5ce01f6d --- /dev/null +++ b/@packages/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.shared.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src/**/*.ts"], + "exclude": ["./src/**/*.test.ts", "./lib/**/*"] +} diff --git a/@packages/utils/CHANGELOG.md b/@packages/utils/CHANGELOG.md index f0b404c287..3ccd55a0b5 100644 --- a/@packages/utils/CHANGELOG.md +++ b/@packages/utils/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) **Note:** Version bump only for package @commitlint/utils @@ -11,15 +11,29 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) -**Note:** Version bump only for package @commitlint/utils +### Bug Fixes + +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +# [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 @@ -27,173 +41,437 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) + + +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) + + +### Reverts + +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) + + +### BREAKING CHANGES + +* migrate to pure ESM + +* feat: migrate to pure ESM + +* chore: update snapshot + +* fix: load `parserPreset` with another `await` + +* test: migrate to vitest + +* test: remove no replacement `--runInBand` test-ci script + +* chore: fix code reviews + +* refactor(load): rewrite resolve logic + +* fix(config-nx-scopes): fix syntax error + +* feat(resolve-extends): add resolveFrom and loadParserPreset + +* feat(load): use resolveFrom and loadParserPreset from resolve-extends + +* test: include only @commitlint/* packages src in coverage + +* test: explicit import vitest utilities + +* test: remove @jest/globals from dependencies + +* fix(resolve-extends): `resolveFrom` output should be platform aware + +* test: restore NO_COLOR to test script + +* chore: fix linting issues + +* fix: should use fileURLToPath instead of pathname for Windows compatibility + +* Apply suggestions from code review + +* fix: should reuse `cli` instead call `yargs()` + +* feat(cli): set terminalWidth as wrap to avoid work break on help + +* Update .eslintrc.cjs + +* feat: migrate @commitlint/config-conventional to pure ESM + + + + + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) ### Bug Fixes -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* store concatenated array to problems variable ([#551](https://github.com/conventional-changelog/commitlint/issues/551)) ([434a70f](https://github.com/conventional-changelog/commitlint/commit/434a70f)) +* update dependency tar-fs to v3.0.5 ([#3903](https://github.com/conventional-changelog/commitlint/issues/3903)) ([79d77c9](https://github.com/conventional-changelog/commitlint/commit/79d77c9ef8de5046106027fc7d80dfd77faeb3e5)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) + + +### Bug Fixes + +* **utils:** remove fs-extra usage ([#3804](https://github.com/conventional-changelog/commitlint/issues/3804)) ([92f2237](https://github.com/conventional-changelog/commitlint/commit/92f2237d66950d9cb92430bc082a86a5dbc86d3f)) + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) + + +### Bug Fixes + +* update dependency read-pkg to v9.0.1 ([#3777](https://github.com/conventional-changelog/commitlint/issues/3777)) ([88c4b8a](https://github.com/conventional-changelog/commitlint/commit/88c4b8a33dc2ebb63715018b3a0945d94cdfceeb)) + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) + + +### Bug Fixes + +* update dependency read-pkg to v9 ([#3734](https://github.com/conventional-changelog/commitlint/issues/3734)) ([722f518](https://github.com/conventional-changelog/commitlint/commit/722f5183e91186aa7e3912e8f3d0d7069f05ce8f)) +* update dependency tar-fs to v3 ([#3718](https://github.com/conventional-changelog/commitlint/issues/3718)) ([afb04dd](https://github.com/conventional-changelog/commitlint/commit/afb04dd0dc4d42094ae01f0733600c2f9d3abdfd)) + + + + + +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) + + +### Bug Fixes + +* update dependency read-pkg to v8 ([#3717](https://github.com/conventional-changelog/commitlint/issues/3717)) ([326f497](https://github.com/conventional-changelog/commitlint/commit/326f4975dbc2f06dbe490ca04732441ad062e063)) + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + **Note:** Version bump only for package @commitlint/utils -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + ### Bug Fixes -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- update dependency fs-extra to v11 ([#3460](https://github.com/conventional-changelog/commitlint/issues/3460)) ([a437923](https://github.com/conventional-changelog/commitlint/commit/a43792388e0d9707da770b26592c5e31553384a1)) +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) +### BREAKING CHANGES -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +- drop node v12 support +- chore: rename circleci windows job +node version is not defned by the name anyways (i think) +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +### Bug Fixes + +- update dependency read-pkg to v7.1.0 ([#3015](https://github.com/conventional-changelog/commitlint/issues/3015)) ([3b7b680](https://github.com/conventional-changelog/commitlint/commit/3b7b680ce4f5341d8816f3db036170b0cb28d33f)) + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) **Note:** Version bump only for package @commitlint/utils -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +**Note:** Version bump only for package @commitlint/utils + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +**Note:** Version bump only for package @commitlint/utils + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +### Bug Fixes + +- update dependency read-pkg to v7 ([#2721](https://github.com/conventional-changelog/commitlint/issues/2721)) ([7d9a3b1](https://github.com/conventional-changelog/commitlint/commit/7d9a3b1f2ab41c598f4d23d96805f86a4d41ae09)) +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +### Bug Fixes + +- update dependency fs-extra to v10 ([#2575](https://github.com/conventional-changelog/commitlint/issues/2575)) ([d47d2b5](https://github.com/conventional-changelog/commitlint/commit/d47d2b595b980adadd4fb8ff198c1914caeff18f)) +- update dependency yargs to v17 ([#2574](https://github.com/conventional-changelog/commitlint/issues/2574)) ([81c38dd](https://github.com/conventional-changelog/commitlint/commit/81c38ddf15f239b525f673b26b2ee6606f2ee8f6)) + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +### Bug Fixes + +- update dependency read-pkg to v6 ([#2530](https://github.com/conventional-changelog/commitlint/issues/2530)) ([d38a2ad](https://github.com/conventional-changelog/commitlint/commit/d38a2adc07f4cd6dad48aadbb73f2f1d3740e689)) + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) **Note:** Version bump only for package @commitlint/utils -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) +### Bug Fixes +- **utils:** update code to allow it to be executed ([#982](https://github.com/conventional-changelog/commitlint/issues/982)) ([52696d0](https://github.com/conventional-changelog/commitlint/commit/52696d048317944aa0d638b8702df78f8756d44b)) +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) +- update dependency meow to v8 ([#2245](https://github.com/conventional-changelog/commitlint/issues/2245)) ([890961b](https://github.com/conventional-changelog/commitlint/commit/890961b52b1552c1bb2798db02915e28686983f0)) +- update dependency meow to v8.1.0 ([#2380](https://github.com/conventional-changelog/commitlint/issues/2380)) ([0fbadcf](https://github.com/conventional-changelog/commitlint/commit/0fbadcf1d45c2e97f1da9938b3b80c0b45eba18c)) +- update dependency tar-fs to v2.1.1 ([#2261](https://github.com/conventional-changelog/commitlint/issues/2261)) ([a04f24f](https://github.com/conventional-changelog/commitlint/commit/a04f24f00873209d6d96cd894450d17fdfe9ca58)) +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) **Note:** Version bump only for package @commitlint/utils -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/utils + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) ### Bug Fixes -* remove faulty bin entry [#259](https://github.com/conventional-changelog/commitlint/issues/259) ([beafbc6](https://github.com/conventional-changelog/commitlint/commit/beafbc6)) +- mark internal packages as private [#972](https://github.com/conventional-changelog/commitlint/issues/972) ([#1970](https://github.com/conventional-changelog/commitlint/issues/1970)) ([2351124](https://github.com/conventional-changelog/commitlint/commit/23511248b2b4020ee87d04a838c7ce31e094c128)) +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) +### Bug Fixes +- update dependency tar-fs to v2.1.0 ([#1103](https://github.com/conventional-changelog/commitlint/issues/1103)) ([7882036](https://github.com/conventional-changelog/commitlint/commit/788203689ebf51343ccf2e6eab530e19f4faf122)) -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +**Note:** Version bump only for package @commitlint/utils + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) +### Bug Fixes + +- **commitlint:** use new read pkg syntax ([#888](https://github.com/conventional-changelog/commitlint/issues/888)) ([6b3b9a9](https://github.com/conventional-changelog/commitlint/commit/6b3b9a9)) + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) **Note:** Version bump only for package @commitlint/utils -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +**Note:** Version bump only for package @commitlint/utils +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) +**Note:** Version bump only for package @commitlint/utils +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) **Note:** Version bump only for package @commitlint/utils -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### Bug Fixes + +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- store concatenated array to problems variable ([#551](https://github.com/conventional-changelog/commitlint/issues/551)) ([434a70f](https://github.com/conventional-changelog/commitlint/commit/434a70f)) +<a name="7.3.1"></a> +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) **Note:** Version bump only for package @commitlint/utils -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +<a name="7.3.0"></a> +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) -### Features +### Bug Fixes -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +<a name="7.1.2"></a> +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +**Note:** Version bump only for package @commitlint/utils -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) +<a name="6.1.1"></a> +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +**Note:** Version bump only for package @commitlint/utils +<a name="6.1.0"></a> +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) **Note:** Version bump only for package @commitlint/utils -<a name="4.2.1"></a> -## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +### Bug Fixes +- remove faulty bin entry [#259](https://github.com/conventional-changelog/commitlint/issues/259) ([beafbc6](https://github.com/conventional-changelog/commitlint/commit/beafbc6)) +<a name="6.0.3"></a> +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) **Note:** Version bump only for package @commitlint/utils -<a name="4.2.0"></a> -# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) +**Note:** Version bump only for package @commitlint/utils +<a name="5.1.1"></a> +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) **Note:** Version bump only for package @commitlint/utils -<a name="3.0.3"></a> -## 3.0.3 (2017-07-16) +<a name="5.1.0"></a> +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) +### Features -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +<a name="5.0.1"></a> -### Bug Fixes +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) -* **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) +**Note:** Version bump only for package @commitlint/utils +<a name="4.2.1"></a> +## [4.2.1](https://github.com/conventional-changelog/commitlint/compare/v4.2.0...v4.2.1) (2017-10-18) +**Note:** Version bump only for package @commitlint/utils -<a name="3.0.2"></a> -## 3.0.2 (2017-07-11) +<a name="4.2.0"></a> +# [4.2.0](https://github.com/conventional-changelog/commitlint/compare/v4.1.1...v4.2.0) (2017-10-14) -### Bug Fixes +**Note:** Version bump only for package @commitlint/utils -* **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) +<a name="3.0.3"></a> +## 3.0.3 (2017-07-16) +<a name="3.0.2"></a> +## 3.0.2 (2017-07-11) -<a name="3.0.1"></a> -## 3.0.1 (2017-07-11) +### Bug Fixes + +- **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) +<a name="3.0.2"></a> + +## 3.0.2 (2017-07-11) ### Bug Fixes -* **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) +- **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) +<a name="3.0.1"></a> +## 3.0.1 (2017-07-11) +### Bug Fixes + +- **utils:** better cross-version support ([856f3da](https://github.com/conventional-changelog/commitlint/commit/856f3da)) <a name="3.0.0"></a> -# 3.0.0 (2017-07-10) +# 3.0.0 (2017-07-10) ### Bug Fixes -* **utils:** better cross-version support ([bc460c8](https://github.com/conventional-changelog/commitlint/commit/bc460c8)) +- **utils:** better cross-version support ([bc460c8](https://github.com/conventional-changelog/commitlint/commit/bc460c8)) diff --git a/@packages/utils/dep-check.js b/@packages/utils/dep-check.js index 84eabaa5f6..8f96322333 100755 --- a/@packages/utils/dep-check.js +++ b/@packages/utils/dep-check.js @@ -1,29 +1,29 @@ #!/usr/bin/env node -const path = require('path'); -const execa = require('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')]) - .catch(err => [err]); + .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 => { +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.code); + process.exit(err.exitCode); } if (out) { console.log(out); diff --git a/@packages/utils/package.json b/@packages/utils/package.json index 099b340b7f..7c26083e6c 100644 --- a/@packages/utils/package.json +++ b/@packages/utils/package.json @@ -1,7 +1,9 @@ { "name": "@commitlint/utils", - "version": "8.2.0", + "type": "module", + "version": "20.0.0", "description": "Development utilities for @commitlint", + "private": true, "files": [ "dep-check.js", "pkg-check.js" @@ -11,29 +13,21 @@ "pkg-check": "./pkg-check.js" }, "scripts": { - "build": "exit 0", - "clean": "exit 0", - "start": "exit 0", - "test": "exit 0", "deps": "node dep-check.js", "pkg": "node pkg-check.js --skip-main" }, - "ava": { - "files": [ - "cli.test.js" - ] - }, "engines": { - "node": ">=4" + "node": ">=v18" }, "repository": { "type": "git", - "url": "https://github.com/conventional-changelog/commitlint.git" + "url": "https://github.com/conventional-changelog/commitlint.git", + "directory": "@packages/utils" }, "bugs": { "url": "https://github.com/conventional-changelog/commitlint/issues" }, - "homepage": "https://github.com/conventional-changelog/commitlint#readme", + "homepage": "https://commitlint.js.org/", "keywords": [ "conventional-changelog", "commitlint", @@ -44,15 +38,18 @@ "email": "hello@herebecode.com" }, "license": "MIT", + "devDependencies": { + "@types/require-from-string": "^1.2.3", + "@types/tar-fs": "^2.0.4", + "@types/yargs": "^17.0.29" + }, "dependencies": { - "@commitlint/test": "8.2.0", - "@marionebl/sander": "0.6.1", - "execa": "0.11.0", - "is-builtin-module": "3.0.0", - "lodash": "4.17.15", - "meow": "4.0.1", - "read-pkg": "5.2.0", - "require-from-string": "2.0.2", - "tar-fs": "2.0.0" - } + "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" + }, + "gitHead": "71f0194f33943954a8dac1c458be47e5049717cd" } diff --git a/@packages/utils/pkg-check.js b/@packages/utils/pkg-check.js index b7dde148fa..4f360df846 100755 --- a/@packages/utils/pkg-check.js +++ b/@packages/utils/pkg-check.js @@ -1,100 +1,88 @@ #!/usr/bin/env node -const path = require('path'); -const fs = require('fs'); -const zlib = require('zlib'); +import path from "node:path"; +import fs from "node:fs"; -const execa = require('execa'); -const meow = require('meow'); -const readPkg = require('read-pkg'); -const requireFromString = require('require-from-string'); -const tar = require('tar-fs'); -const {values} = require('lodash'); -const {fix} = require('@commitlint/test'); +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"; -const builtin = require.resolve('is-builtin-module'); +tmp.setGracefulCleanup(); const PRELUDE = ` -var _require = require; +var Module = require('node:module'); +var originalLoader = Module._load -require = function(id) { +Module._load = function(path, parent) { + if (path.startsWith('.') || Module.builtinModules.includes(path)) { + return originalLoader.apply(this, arguments); + } var dummy = new Proxy({}, { get() { return dummy; } }); - - var _isBuiltIn = _require('${builtin}'); - if (id[0] === '.' || _isBuiltIn(id)) { - return _require(id); - } else { - return dummy; - } + return dummy; }; `; -function main(cli) { +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 = cli.flags.cwd || process.cwd(); + const cwd = flags.cwd || process.cwd(); const skipImport = - typeof cli.flags.skipImport === 'boolean' ? cli.flags.skipImport : false; + typeof flags.skipImport === "boolean" ? flags.skipImport : false; - return readPkg(cwd).then(pkg => { - return getTarballFiles(cwd, {write: !skipImport}).then(tarball => { - return getPackageFiles(cwd).then(pkgFiles => { + return readPkg({ cwd }).then((pkg) => { + return getTarballFiles(cwd, { write: !skipImport }).then((tarball) => { + return getPackageFiles(cwd).then((pkgFiles) => { let problems = []; - if (!cli.flags.skipBin) { + if (!flags.skipBin) { problems = problems.concat( pkgFiles.bin - .filter(binFile => tarball.files.indexOf(binFile) === -1) - .map(binFile => ({ - type: 'bin', + .filter((binFile) => tarball.files.indexOf(binFile) === -1) + .map((binFile) => ({ + type: "bin", file: binFile, - message: `Required bin file ${binFile} not found for ${ - pkg.name - }` - })) + message: `Required bin file ${binFile} not found for ${pkg.name}`, + })), ); } - if ( - !cli.flags.skipMain && - tarball.files.indexOf(pkgFiles.main) === -1 - ) { + 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 - }` + message: `Required main file ${pkgFiles.main} not found for ${pkg.name}`, }); } - if (!cli.flags.skipImport && !cli.flags.skipMain) { + 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 - }` + message: `Error while importing ${pkgFiles.main}: ${importable[0].message}`, }); } } return { - pkg: pkg, // eslint-disable-line object-shorthand - pkgFiles: pkgFiles, // eslint-disable-line object-shorthand + pkg: pkg, + pkgFiles: pkgFiles, files: tarball.files, - problems: problems // eslint-disable-line object-shorthand + problems: problems, }; }); }); @@ -102,52 +90,71 @@ function main(cli) { } main( - meow(` - pkg-check - - Check if a package creates valid tarballs - - Options - --skip-main Skip main checks - --skip-bin Skip bin checks - --skip-import Skip import smoke test - - Examples - $ pkg-check -`) + yargs + .options({ + cwd: { + description: "directory to execute in", + type: "string", + }, + skipMain: { + default: false, + type: "boolean", + description: "Skip main checks", + }, + skipBin: { + default: false, + type: "boolean", + description: "Skip bin checks", + }, + skipImport: { + default: false, + type: "boolean", + description: "Skip import smoke test", + }, + }) + .scriptName("pkg-check") + .usage("pkg-check\n") + .usage("Check if a package creates valid tarballs") + .example("$0", "") + .help() + .version() + .strict().argv, ) - .then(report => { + .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 => { + report.problems.forEach((problem) => { console.log(problem.message); }); process.exit(1); } }) - .catch(err => { + .catch((err) => { setTimeout(() => { throw err; - }); + }, 0); }); -function getTarballFiles(source, options) { - return fix - .bootstrap(source) - .then(cwd => - execa('npm', ['pack'], {cwd}).then(cp => path.join(cwd, cp.stdout)) - ) - .then(tarball => getArchiveFiles(tarball, options)); +async function getTarballFiles(source, options) { + const tmpDir = tmp.dirSync({ + keep: false, + unsafeCleanup: true, + }); + const cwd = tmpDir.name; + 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 = []; @@ -156,33 +163,33 @@ 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'), - files: files // eslint-disable-line object-shorthand - }) + dirname: path.join(path.dirname(filePath), "package"), + files: files, + }), ); }); } function getPackageFiles(source) { - return readPkg(source).then(pkg => { + return readPkg(source).then((pkg) => { return { - main: normalizeMainPath(pkg.main || './index.js'), - bin: getPkgBinFiles(pkg.bin) + main: normalizeMainPath(pkg.main || "./index.js"), + bin: getPkgBinFiles(pkg.bin), }; }); } function normalizeMainPath(mainPath) { const norm = path.normalize(mainPath); - if (norm[norm.length - 1] === '/') { + if (norm[norm.length - 1] === path.sep) { return `${norm}index.js`; } return norm; @@ -193,12 +200,12 @@ function getPkgBinFiles(bin) { return []; } - if (typeof bin === 'string') { + if (typeof bin === "string") { return [path.normalize(bin)]; } - if (typeof bin === 'object') { - return values(bin).map(b => path.normalize(b)); + if (typeof bin === "object") { + return Object.values(bin).map((b) => path.normalize(b)); } } @@ -209,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 22bfc9af54..27d8b8092c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,547 +3,1789 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) +# [20.1.0](https://github.com/conventional-changelog/commitlint/compare/v20.0.0...v20.1.0) (2025-09-30) -This release is versioned as minor change because some of the core components are rewritten to TypeScript. It's part of the full port to TypeScript, currently in progress at [#659](https://github.com/conventional-changelog/commitlint/issues/659). ### Bug Fixes -* pass defaultIgnores from configuration in @commitlint/cli ([#771](https://github.com/conventional-changelog/commitlint/issues/771)) ([a259014](https://github.com/conventional-changelog/commitlint/commit/a259014)) +* **resolve-extends:** add import attribute for JSON config files ([#4551](https://github.com/conventional-changelog/commitlint/issues/4551)) ([82936c9](https://github.com/conventional-changelog/commitlint/commit/82936c90a2845b4f5721eef3c71d6183416d5b78)) +### Features +* **config-pnpm-scopes:** allow global scope ([#4553](https://github.com/conventional-changelog/commitlint/issues/4553)) ([e571970](https://github.com/conventional-changelog/commitlint/commit/e57197061447eb9ea74b8d81ab003ad3b4652be6)) -# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) -This release is versioned as minor change because some of the core components are rewritten to TypeScript. It's part of the full port to TypeScript, currently in progress at [#659](https://github.com/conventional-changelog/commitlint/issues/659). -### Bug Fixes -* add explicit dependency on chalk ([#687](https://github.com/conventional-changelog/commitlint/issues/687)) ([9075844](https://github.com/conventional-changelog/commitlint/commit/9075844)) -* pass ignores from configuration in @commitlint/cli ([#668](https://github.com/conventional-changelog/commitlint/issues/668)) ([da99aaa](https://github.com/conventional-changelog/commitlint/commit/da99aaa)) +# [20.0.0](https://github.com/conventional-changelog/commitlint/compare/v19.9.1...v20.0.0) (2025-09-25) +### Bug Fixes +* update dependency tar-fs to v3.1.1 [security] ([#4550](https://github.com/conventional-changelog/commitlint/issues/4550)) ([273a43e](https://github.com/conventional-changelog/commitlint/commit/273a43e359fc04b7b8f4b4949ec7ecc07718b786)) -# [8.0.0](https://github.com/conventional-changelog/commitlint/compare/v7.6.2...v8.0.0) +* feat(rules)!: make body-max-line-length ignore lines with URLs (#4486) ([2f37a88](https://github.com/conventional-changelog/commitlint/commit/2f37a886be4b07bcd8e1126cc6a13256e7b6cc37)), closes [#4486](https://github.com/conventional-changelog/commitlint/issues/4486) -### Breaking Changes -* fix: avoid excessive help text #606 (#637) - The commitlint default formatter is now silent for reports without warnings or errors. - Scripts relying on the success output of commitlint can restore the former output by specifying the --verbose flag. +### BREAKING CHANGES +* when lines contain URLs exceeding the maximum +line length `body-max-line-length` will be ignored -## [7.6.2](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.2) -* Republish packages with out of sync artifacts -## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + + +## [19.9.1](https://github.com/conventional-changelog/commitlint/compare/v19.9.0...v19.9.1) (2025-08-29) ### Bug Fixes -* ensure format() is available as commonjs default export [#645](https://github.com/conventional-changelog/commitlint/issues/645) ([ec3da92](https://github.com/conventional-changelog/commitlint/commit/ec3da92)) -* handle absolute config paths correctly [#647](https://github.com/conventional-changelog/commitlint/issues/647) ([49b3a77](https://github.com/conventional-changelog/commitlint/commit/49b3a77)) +* add TypeScript support and configuration for pnpm scopes ([#4544](https://github.com/conventional-changelog/commitlint/issues/4544)) ([ea75778](https://github.com/conventional-changelog/commitlint/commit/ea75778e8d32c932d85062902456cd821e471fdd)) -# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + + + +# [19.9.0](https://github.com/conventional-changelog/commitlint/compare/v19.8.1...v19.9.0) (2025-08-26) ### Bug Fixes -* add @lerna/project to repository dependencies ([#598](https://github.com/conventional-changelog/commitlint/issues/598)) ([56f03ee](https://github.com/conventional-changelog/commitlint/commit/56f03ee)) -* address security warnings for dev dependencies ([3e0d824](https://github.com/conventional-changelog/commitlint/commit/3e0d824)) -* avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) -* don't merge array properties with custom opts ([#616](https://github.com/conventional-changelog/commitlint/issues/616)) ([f321647](https://github.com/conventional-changelog/commitlint/commit/f321647)), closes [#594](https://github.com/conventional-changelog/commitlint/issues/594) -* remove unneeded dev dependency ([6ccaf79](https://github.com/conventional-changelog/commitlint/commit/6ccaf79)) -* update cosmiconfig to safe >=5 [#599](https://github.com/conventional-changelog/commitlint/issues/599) ([f186fcb](https://github.com/conventional-changelog/commitlint/commit/f186fcb)) -* use sander.readFile correctly ([#448](https://github.com/conventional-changelog/commitlint/issues/448)) ([#630](https://github.com/conventional-changelog/commitlint/issues/630)) ([8e47985](https://github.com/conventional-changelog/commitlint/commit/8e47985)) +* update dependency jest-environment-node to v30 ([#4448](https://github.com/conventional-changelog/commitlint/issues/4448)) ([42ca849](https://github.com/conventional-changelog/commitlint/commit/42ca849db3581bb5b7f1bbbcd0dfeda912566e5d)) +* update dependency jest-environment-node to v30.0.2 ([#4469](https://github.com/conventional-changelog/commitlint/issues/4469)) ([4da7e43](https://github.com/conventional-changelog/commitlint/commit/4da7e43be4134cbc01f847f82ef438fdfcc6dda9)) +* update dependency tar-fs to v3.0.10 ([#4461](https://github.com/conventional-changelog/commitlint/issues/4461)) ([f02c47c](https://github.com/conventional-changelog/commitlint/commit/f02c47c669055f3ce6f0f4ba553d4a5ed4e1ee57)) +* update dependency tar-fs to v3.0.9 ([#4421](https://github.com/conventional-changelog/commitlint/issues/4421)) ([0650e03](https://github.com/conventional-changelog/commitlint/commit/0650e03d960eb904c40a3faf4c8d24415807bbdd)) +* update dependency tar-fs to v3.1.0 ([#4496](https://github.com/conventional-changelog/commitlint/issues/4496)) ([31b4f72](https://github.com/conventional-changelog/commitlint/commit/31b4f72d2fdca5094b1325bdac7bcd5c5693c423)) ### Features -* **resolve-extends:** accept short scoped package names in extends ([#597](https://github.com/conventional-changelog/commitlint/issues/597)) ([ba90e8e](https://github.com/conventional-changelog/commitlint/commit/ba90e8e)) -* adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) -* config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) +* **config-pnpm-scopes:** migrate package to TypeScript ([#4541](https://github.com/conventional-changelog/commitlint/issues/4541)) ([6ae36ea](https://github.com/conventional-changelog/commitlint/commit/6ae36ea5a55d7736024461ec6af94a14b821acc4)) +### Reverts +* Revert "chore: update dependency cross-env to v10 (#4528)" (#4529) ([b5bfd12](https://github.com/conventional-changelog/commitlint/commit/b5bfd125140c5a7a6bcdefb9c3d22b7c13e3ea17)), closes [#4528](https://github.com/conventional-changelog/commitlint/issues/4528) [#4529](https://github.com/conventional-changelog/commitlint/issues/4529) -## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + + + +## [19.8.1](https://github.com/conventional-changelog/commitlint/compare/v19.8.0...v19.8.1) (2025-05-08) ### Bug Fixes -* failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) -* **cli:** replace old links with new organisation links ([#578](https://github.com/conventional-changelog/commitlint/issues/578)) ([4075903](https://github.com/conventional-changelog/commitlint/commit/4075903)) +* update dependency tinyexec to v1 ([#4332](https://github.com/conventional-changelog/commitlint/issues/4332)) ([e49449f](https://github.com/conventional-changelog/commitlint/commit/e49449fa9452069cdbf194f94d536194d362a299)) +* update dependency tinyexec to v1.0.1 ([#4347](https://github.com/conventional-changelog/commitlint/issues/4347)) ([c1b26d1](https://github.com/conventional-changelog/commitlint/commit/c1b26d1579a5bc310a750f2c75143027129d2321)) +### Performance Improvements +* **rules:** optimize header-trim ([#4363](https://github.com/conventional-changelog/commitlint/issues/4363)) ([b7e404b](https://github.com/conventional-changelog/commitlint/commit/b7e404bc036dbd3cbdffa38e85c833d10e52d68b)) -## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + + + +# [19.8.0](https://github.com/conventional-changelog/commitlint/compare/v19.7.1...v19.8.0) (2025-03-07) ### Bug Fixes -* **is-ignored:** ignore bitbuckets automatic merge ([#573](https://github.com/conventional-changelog/commitlint/issues/573)) ([e5bdc5c](https://github.com/conventional-changelog/commitlint/commit/e5bdc5c)) +* **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)) -<a name="7.5.0"></a> -# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) +### 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)) -### Bug Fixes -* `sentence-case` allow upper-case characters in first word ([#531](https://github.com/conventional-changelog/commitlint/issues/531)) ([5a6a4a8](https://github.com/conventional-changelog/commitlint/commit/5a6a4a8)), closes [#211](https://github.com/conventional-changelog/commitlint/issues/211) -* **resolve-extends:** override array on extending rules ([#470](https://github.com/conventional-changelog/commitlint/issues/470)) ([#539](https://github.com/conventional-changelog/commitlint/issues/539)) ([b35000c](https://github.com/conventional-changelog/commitlint/commit/b35000c)) -* all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) -* cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) -* **cli:** avoid linebreak in empty input ([#523](https://github.com/conventional-changelog/commitlint/issues/523)) ([3141882](https://github.com/conventional-changelog/commitlint/commit/3141882)) -* mark optional parameter with undefined ([#553](https://github.com/conventional-changelog/commitlint/issues/553)) ([6720284](https://github.com/conventional-changelog/commitlint/commit/6720284)) -* replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) -* replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) -* replace old require-uncached with import-fresh ([#533](https://github.com/conventional-changelog/commitlint/issues/533)) ([b636e8c](https://github.com/conventional-changelog/commitlint/commit/b636e8c)) -* resolve path to commit message for git submodules ([83b1a47](https://github.com/conventional-changelog/commitlint/commit/83b1a47)) -* slash in scope [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([#529](https://github.com/conventional-changelog/commitlint/issues/529)) ([b2b63e5](https://github.com/conventional-changelog/commitlint/commit/b2b63e5)) -* store concatenated array to problems variable ([#551](https://github.com/conventional-changelog/commitlint/issues/551)) ([434a70f](https://github.com/conventional-changelog/commitlint/commit/434a70f)) +### 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) -### Features -* add support for git submodules ([cc575fa](https://github.com/conventional-changelog/commitlint/commit/cc575fa)) -* **rule-header-length:** show current header length ([6d61c4f](https://github.com/conventional-changelog/commitlint/commit/6d61c4f)) +## [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)) + -<a name="7.4.0"></a> -# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + + + +# [19.7.0](https://github.com/conventional-changelog/commitlint/compare/v19.6.1...v19.7.0) (2025-01-04) ### Bug Fixes -* correction to need help link ([#540](https://github.com/conventional-changelog/commitlint/issues/540)) ([fa6168a](https://github.com/conventional-changelog/commitlint/commit/fa6168a)) +* 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 -* **rules:** create header-case and header-full-stop rules ([#547](https://github.com/conventional-changelog/commitlint/issues/547)) ([4c36cbd](https://github.com/conventional-changelog/commitlint/commit/4c36cbd)) +* support lerna 7 and 8 ([#4221](https://github.com/conventional-changelog/commitlint/issues/4221)) ([3b8da63](https://github.com/conventional-changelog/commitlint/commit/3b8da63f50f868555a3f026a76e96cd8d20638de)) -<a name="7.3.2"></a> -## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) + +## [19.6.1](https://github.com/conventional-changelog/commitlint/compare/v19.6.0...v19.6.1) (2024-12-15) ### Bug Fixes -* move loadsh to dependencies ([1bb66a4](https://github.com/conventional-changelog/commitlint/commit/1bb66a4)) +* force bump for container usage ([#4200](https://github.com/conventional-changelog/commitlint/issues/4200)) ([21858df](https://github.com/conventional-changelog/commitlint/commit/21858dfa25acb5a1f244cdcba7ff20735fa5903f)) -<a name="7.3.1"></a> -## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) +# [19.6.0](https://github.com/conventional-changelog/commitlint/compare/v19.5.0...v19.6.0) (2024-11-19) +### Bug Fixes -**Note:** Version bump only for package @commitlint/root +* 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)) -<a name="7.3.0"></a> -# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### 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)) -### Bug Fixes -* **format:** add new line to result ([#518](https://github.com/conventional-changelog/commitlint/issues/518)) ([f1d443b](https://github.com/conventional-changelog/commitlint/commit/f1d443b)), closes [#504](https://github.com/conventional-changelog/commitlint/issues/504) -* add fallback with husky git params to deprecation handling ([#498](https://github.com/conventional-changelog/commitlint/issues/498)) ([5a34b8c](https://github.com/conventional-changelog/commitlint/commit/5a34b8c)) -* avoid truncated output on macOS ([#503](https://github.com/conventional-changelog/commitlint/issues/503)) ([3192368](https://github.com/conventional-changelog/commitlint/commit/3192368)) -* fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) -* respect String.protoype.repeat API contract ([f27e7ac](https://github.com/conventional-changelog/commitlint/commit/f27e7ac)) -* update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) -* use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) + + +# [19.5.0](https://github.com/conventional-changelog/commitlint/compare/v19.4.1...v19.5.0) (2024-09-11) ### Features -* check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) -* warn on empty config ([#491](https://github.com/conventional-changelog/commitlint/issues/491)) ([b6bd36e](https://github.com/conventional-changelog/commitlint/commit/b6bd36e)), closes [#107](https://github.com/conventional-changelog/commitlint/issues/107) [#107](https://github.com/conventional-changelog/commitlint/issues/107) +* **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)) -<a name="7.2.1"></a> -## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +## [19.4.1](https://github.com/conventional-changelog/commitlint/compare/v19.4.0...v19.4.1) (2024-08-28) ### Bug Fixes -* improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) +* **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)) -<a name="7.2.0"></a> -# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +# [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 -* **rules:** include possible body offset in footer leading blank ([ff0111a](https://github.com/conventional-changelog/commitlint/commit/ff0111a)) -* handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) -* ignore merge messages with text after newline ([b32bc93](https://github.com/conventional-changelog/commitlint/commit/b32bc93)) -* use grouped regex to ignore merge commits ([#439](https://github.com/conventional-changelog/commitlint/issues/439)) ([905e9d5](https://github.com/conventional-changelog/commitlint/commit/905e9d5)) +* **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 -* **cli:** add format option for report output ([1ecf097](https://github.com/conventional-changelog/commitlint/commit/1ecf097)) -* **load:** add formatter option with default value ([b0e63d9](https://github.com/conventional-changelog/commitlint/commit/b0e63d9)) - +* **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) -<a name="7.1.2"></a> -## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) +# [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/root +### Bug Fixes -<a name="7.1.0"></a> -# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) +* 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 -* **wildcards:** add new wildcard patterns [#315](https://github.com/conventional-changelog/commitlint/issues/315) ([e9ea17f](https://github.com/conventional-changelog/commitlint/commit/e9ea17f)) -* add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) +* **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)) -<a name="6.2.0"></a> -# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) +## [19.2.2](https://github.com/conventional-changelog/commitlint/compare/v19.2.1...v19.2.2) (2024-04-14) -### Features -* print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) -* **rules:** support array for scope-case and type-case ([#312](https://github.com/conventional-changelog/commitlint/issues/312)) ([1f46b9f](https://github.com/conventional-changelog/commitlint/commit/1f46b9f)), closes [#307](https://github.com/conventional-changelog/commitlint/issues/307) +### 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)) -<a name="6.1.1"></a> -## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +## [19.2.1](https://github.com/conventional-changelog/commitlint/compare/v19.2.0...v19.2.1) (2024-03-19) ### Bug Fixes -* **ensure:** ignore word delimiters for case matching [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([fa69299](https://github.com/conventional-changelog/commitlint/commit/fa69299)) +* **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)) -<a name="6.1.0"></a> -# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +# [19.2.0](https://github.com/conventional-changelog/commitlint/compare/v19.1.0...v19.2.0) (2024-03-15) ### Bug Fixes -* **parse:** default to angular preset for empty parserOpts ([#265](https://github.com/conventional-changelog/commitlint/issues/265)) ([ccb03b4](https://github.com/conventional-changelog/commitlint/commit/ccb03b4)), closes [#262](https://github.com/conventional-changelog/commitlint/issues/262) +* 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 -* add "--config" option ([#261](https://github.com/conventional-changelog/commitlint/issues/261)) ([2c03ec6](https://github.com/conventional-changelog/commitlint/commit/2c03ec6)) +* **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)) -<a name="6.0.5"></a> -## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +# [19.1.0](https://github.com/conventional-changelog/commitlint/compare/v19.0.3...v19.1.0) (2024-03-12) ### Bug Fixes -* remove utils from prod dependencies ([4fb858a](https://github.com/conventional-changelog/commitlint/commit/4fb858a)) +* 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) -<a name="6.0.4"></a> -## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +## [19.0.3](https://github.com/conventional-changelog/commitlint/compare/v19.0.2...v19.0.3) (2024-02-28) ### Bug Fixes -* remove faulty bin entry [#259](https://github.com/conventional-changelog/commitlint/issues/259) ([beafbc6](https://github.com/conventional-changelog/commitlint/commit/beafbc6)) +* 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) -<a name="6.0.3"></a> -## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +## [19.0.2](https://github.com/conventional-changelog/commitlint/compare/v19.0.1...v19.0.2) (2024-02-28) ### Bug Fixes -* update dependency cosmiconfig to ^4.0.0 ([#234](https://github.com/conventional-changelog/commitlint/issues/234)) ([7f94ac5](https://github.com/conventional-changelog/commitlint/commit/7f94ac5)) -* update dependency semver to v5.5.0 ([#236](https://github.com/conventional-changelog/commitlint/issues/236)) ([6c52bd9](https://github.com/conventional-changelog/commitlint/commit/6c52bd9)) +* 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) -<a name="6.0.2"></a> -## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +## [19.0.1](https://github.com/conventional-changelog/commitlint/compare/v19.0.0...v19.0.1) (2024-02-27) ### Bug Fixes -* ignore branch merges with multiple newlines ([#227](https://github.com/conventional-changelog/commitlint/issues/227)) ([1f0c5ca](https://github.com/conventional-changelog/commitlint/commit/1f0c5ca)) -* remove typo in error message of type-case ([cb577cb](https://github.com/conventional-changelog/commitlint/commit/cb577cb)) +* 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) -<a name="6.0.1"></a> -## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) +# [19.0.0](https://github.com/conventional-changelog/commitlint/compare/v18.6.2...v19.0.0) (2024-02-27) +* feat!: migrate to pure ESM (#3850) ([3423735](https://github.com/conventional-changelog/commitlint/commit/342373559bdf7c783c4ef37ff05dc38a5f681159)), closes [#3850](https://github.com/conventional-changelog/commitlint/issues/3850) -**Note:** Version bump only for package @commitlint/root -<a name="6.0.0"></a> -# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) +### Reverts +* Revert "chore: update tools version to v20" ([53fc619](https://github.com/conventional-changelog/commitlint/commit/53fc6196b8d23b347a342a23c6757d757f547878)) +* Revert "chore!: minimum node version v20" ([2816783](https://github.com/conventional-changelog/commitlint/commit/2816783d00e7eb967de3ac9347c2fc43dc8b94fa)) +* Revert "ci: add codeQuality job to run lint and format tasks (#3922)" ([8bb94ca](https://github.com/conventional-changelog/commitlint/commit/8bb94ca7552b70a3c6d185a1ee8e87d745799e75)), closes [#3922](https://github.com/conventional-changelog/commitlint/issues/3922) +* Revert "ci: update node version to v20" ([8a24546](https://github.com/conventional-changelog/commitlint/commit/8a2454661569890ee1dbe918fca3da758722fd38)) -### Bug Fixes -* allow [0] shorthand ([84cf938](https://github.com/conventional-changelog/commitlint/commit/84cf938)) -* correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) -* ignore branch merges with newlines ([#214](https://github.com/conventional-changelog/commitlint/issues/214)) ([c94c4dc](https://github.com/conventional-changelog/commitlint/commit/c94c4dc)) -* sanitize ensure.case [#211](https://github.com/conventional-changelog/commitlint/issues/211) ([#217](https://github.com/conventional-changelog/commitlint/issues/217)) ([03aeefc](https://github.com/conventional-changelog/commitlint/commit/03aeefc)) +### BREAKING CHANGES +* migrate to pure ESM -### Styles +* feat: migrate to pure ESM -* validate rule configuration ([edf7187](https://github.com/conventional-changelog/commitlint/commit/edf7187)) +* chore: update snapshot +* fix: load `parserPreset` with another `await` -### BREAKING CHANGES +* test: migrate to vitest -* Due to additional validation while reading -commitlint config, previously ignored rule -settings are now considered critical errors -when starting the CLI. The new behaviour is -designed to help developers find issues with -their configuration quicker. +* test: remove no replacement `--runInBand` test-ci script +* chore: fix code reviews +* refactor(load): rewrite resolve logic +* fix(config-nx-scopes): fix syntax error -<a name="5.2.6"></a> -## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) +* feat(resolve-extends): add resolveFrom and loadParserPreset +* feat(load): use resolveFrom and loadParserPreset from resolve-extends -### Bug Fixes +* test: include only @commitlint/* packages src in coverage -* ignore semver commits with chore type ([cdbb085](https://github.com/conventional-changelog/commitlint/commit/cdbb085)), closes [#198](https://github.com/conventional-changelog/commitlint/issues/198) +* test: explicit import vitest utilities +* test: remove @jest/globals from dependencies +* fix(resolve-extends): `resolveFrom` output should be platform aware +* test: restore NO_COLOR to test script -<a name="5.2.5"></a> -## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) +* chore: fix linting issues +* fix: should use fileURLToPath instead of pathname for Windows compatibility -### Bug Fixes +* Apply suggestions from code review -* **core:** use correct report message [#192](https://github.com/conventional-changelog/commitlint/issues/192) ([e3a78bc](https://github.com/conventional-changelog/commitlint/commit/e3a78bc)) +* fix: should reuse `cli` instead call `yargs()` +* feat(cli): set terminalWidth as wrap to avoid work break on help +* Update .eslintrc.cjs +* feat: migrate @commitlint/config-conventional to pure ESM -<a name="5.2.4"></a> -## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) -**Note:** Version bump only for package @commitlint/root +## [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) + -<a name="5.2.3"></a> -## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) + + + +## [18.6.2](https://github.com/conventional-changelog/commitlint/compare/v18.6.1...v18.6.2) (2024-02-14) ### Bug Fixes -* **cli:** add support for GIT_PARAMS on windows ([c62bd41](https://github.com/conventional-changelog/commitlint/commit/c62bd41)), closes [#103](https://github.com/conventional-changelog/commitlint/issues/103) [#175](https://github.com/conventional-changelog/commitlint/issues/175) +* **config-conventional:** use default export ([#3911](https://github.com/conventional-changelog/commitlint/issues/3911)) ([bc48408](https://github.com/conventional-changelog/commitlint/commit/bc4840832f9484186d3281d13ab5e0b4f9f63113)) -<a name="5.2.2"></a> -## [5.2.2](https://github.com/conventional-changelog/commitlint/compare/v5.2.1...v5.2.2) (2017-11-30) + +## [18.6.1](https://github.com/conventional-changelog/commitlint/compare/v18.6.0...v18.6.1) (2024-02-13) ### Bug Fixes -* **travis-cli:** read push commits directly ([9bc56c6](https://github.com/conventional-changelog/commitlint/commit/9bc56c6)) +* update dependency semver to v7.6.0 ([#3900](https://github.com/conventional-changelog/commitlint/issues/3900)) ([df33003](https://github.com/conventional-changelog/commitlint/commit/df33003dce77bc5ff48678cddf9401dffedaeb57)) +* update dependency tar-fs to v3.0.5 ([#3903](https://github.com/conventional-changelog/commitlint/issues/3903)) ([79d77c9](https://github.com/conventional-changelog/commitlint/commit/79d77c9ef8de5046106027fc7d80dfd77faeb3e5)) -<a name="5.2.1"></a> -## [5.2.1](https://github.com/conventional-changelog/commitlint/compare/v5.2.0...v5.2.1) (2017-11-30) + +# [18.6.0](https://github.com/conventional-changelog/commitlint/compare/v18.5.1...v18.6.0) (2024-01-25) + + +### Features + +* **rules:** add header-trim rule ([#3199](https://github.com/conventional-changelog/commitlint/issues/3199)) ([#3871](https://github.com/conventional-changelog/commitlint/issues/3871)) ([331579a](https://github.com/conventional-changelog/commitlint/commit/331579a8796af901b5e5103c44fedf1cb3a2f661)) + + + + + +## [18.5.1](https://github.com/conventional-changelog/commitlint/compare/v18.5.0...v18.5.1) (2024-01-22) ### Bug Fixes -* **travis-cli:** lint ranges only for pr builds ([85b201f](https://github.com/conventional-changelog/commitlint/commit/85b201f)) +* **config-nx-scopes:** replace import with require ([#3865](https://github.com/conventional-changelog/commitlint/issues/3865)) ([#3867](https://github.com/conventional-changelog/commitlint/issues/3867)) ([3ede3e0](https://github.com/conventional-changelog/commitlint/commit/3ede3e0e9d5af1302fff896aba049b487b90c0bf)) -<a name="5.2.0"></a> -# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +# [18.5.0](https://github.com/conventional-changelog/commitlint/compare/v18.4.4...v18.5.0) (2024-01-22) ### Bug Fixes -* consider pull requests from forks ([4653c2c](https://github.com/conventional-changelog/commitlint/commit/4653c2c)) +* **config-nx-scopes:** restore compatibility with nx 17.2.0 and higher ([#3855](https://github.com/conventional-changelog/commitlint/issues/3855)) ([1e08a17](https://github.com/conventional-changelog/commitlint/commit/1e08a17eb354b40776be814e8d787eee44d5df2c)), closes [#3820](https://github.com/conventional-changelog/commitlint/issues/3820) ### Features -* **babel-preset-commitlint:** add jsx tranform ([#163](https://github.com/conventional-changelog/commitlint/issues/163)) ([5190241](https://github.com/conventional-changelog/commitlint/commit/5190241)) +* **cli:** print-config now can be configured to print a json in stdout ([#3863](https://github.com/conventional-changelog/commitlint/issues/3863)) ([6381a2d](https://github.com/conventional-changelog/commitlint/commit/6381a2daa0d5d89ab2195998d63a9690a533d3f2)), closes [#3819](https://github.com/conventional-changelog/commitlint/issues/3819) -<a name="5.1.3"></a> -## [5.1.3](https://github.com/conventional-changelog/commitlint/compare/v5.1.2...v5.1.3) (2017-11-24) + +## [18.4.4](https://github.com/conventional-changelog/commitlint/compare/v18.4.3...v18.4.4) (2024-01-04) ### Bug Fixes -* **config-conventional:** add missing applicable attribute to type-enum ([a8db0b1](https://github.com/conventional-changelog/commitlint/commit/a8db0b1)) +* **@commitlint/load:** Remove unused `@types/node` dependency ([#3801](https://github.com/conventional-changelog/commitlint/issues/3801)) ([7b3f8b3](https://github.com/conventional-changelog/commitlint/commit/7b3f8b3fe106311682a2e8ad281dd9a4e42443c6)) +* **read:** remove fs-extra usage and use fs/promises ([#3803](https://github.com/conventional-changelog/commitlint/issues/3803)) ([714be66](https://github.com/conventional-changelog/commitlint/commit/714be668c104c554c66e866e53addd04944544f6)) +* subject-full-stop false positive when using ellipsis ([#3839](https://github.com/conventional-changelog/commitlint/issues/3839)) ([b4246d6](https://github.com/conventional-changelog/commitlint/commit/b4246d6428399177d43296dc8bec6714e664d037)) +* update dependency fs-extra to v11.2.0 ([#3799](https://github.com/conventional-changelog/commitlint/issues/3799)) ([abb4da2](https://github.com/conventional-changelog/commitlint/commit/abb4da2a389ad00800562194db1b6ba588623df4)) +* **utils:** remove fs-extra usage ([#3804](https://github.com/conventional-changelog/commitlint/issues/3804)) ([92f2237](https://github.com/conventional-changelog/commitlint/commit/92f2237d66950d9cb92430bc082a86a5dbc86d3f)) -<a name="5.1.2"></a> -## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) + +## [18.4.3](https://github.com/conventional-changelog/commitlint/compare/v18.4.2...v18.4.3) (2023-11-21) ### Bug Fixes -* **prompt:** apply forced cases properly ([3a569a7](https://github.com/conventional-changelog/commitlint/commit/3a569a7)), closes [#145](https://github.com/conventional-changelog/commitlint/issues/145) +* update dependency read-pkg to v9.0.1 ([#3777](https://github.com/conventional-changelog/commitlint/issues/3777)) ([88c4b8a](https://github.com/conventional-changelog/commitlint/commit/88c4b8a33dc2ebb63715018b3a0945d94cdfceeb)) -<a name="5.1.1"></a> -## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +## [18.4.2](https://github.com/conventional-changelog/commitlint/compare/v18.4.1...v18.4.2) (2023-11-16) ### Bug Fixes -* set access for npm ([8aeaec2](https://github.com/conventional-changelog/commitlint/commit/8aeaec2)) +* update dependency @types/fs-extra to v11.0.4 ([#3767](https://github.com/conventional-changelog/commitlint/issues/3767)) ([f6c4696](https://github.com/conventional-changelog/commitlint/commit/f6c46962a7c77f86953f3a2285427caeeedc2472)) +* update dependency @types/tmp to v0.2.6 ([#3769](https://github.com/conventional-changelog/commitlint/issues/3769)) ([bc849bc](https://github.com/conventional-changelog/commitlint/commit/bc849bc0b123ec4a70e08449b7d010fdc6bcfdd7)) -<a name="5.1.0"></a> -# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +## [18.4.1](https://github.com/conventional-changelog/commitlint/compare/v18.4.0...v18.4.1) (2023-11-12) + + +### Bug Fixes + +* update cosmiconfig to specific version ([#3755](https://github.com/conventional-changelog/commitlint/issues/3755)) ([636b8b1](https://github.com/conventional-changelog/commitlint/commit/636b8b1338835b239ab0585e062bfe305fca4424)) + + + + + +# [18.4.0](https://github.com/conventional-changelog/commitlint/compare/v18.3.0...v18.4.0) (2023-11-10) ### Bug Fixes -* update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) -* **config-conventional:** remove unneeded dependency ([d0e62fd](https://github.com/conventional-changelog/commitlint/commit/d0e62fd)) +* update dependency fast-glob to v3.3.2 ([#3740](https://github.com/conventional-changelog/commitlint/issues/3740)) ([b3bf1f2](https://github.com/conventional-changelog/commitlint/commit/b3bf1f294bd8d3ee16950595a15c4467b75959bb)) +* update dependency read-pkg to v9 ([#3734](https://github.com/conventional-changelog/commitlint/issues/3734)) ([722f518](https://github.com/conventional-changelog/commitlint/commit/722f5183e91186aa7e3912e8f3d0d7069f05ce8f)) +* update dependency tar-fs to v3 ([#3718](https://github.com/conventional-changelog/commitlint/issues/3718)) ([afb04dd](https://github.com/conventional-changelog/commitlint/commit/afb04dd0dc4d42094ae01f0733600c2f9d3abdfd)) ### Features -* **prompt:** add description for build, ci and revert ([#148](https://github.com/conventional-changelog/commitlint/issues/148)) ([ee6ec6e](https://github.com/conventional-changelog/commitlint/commit/ee6ec6e)) -* **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) -* add conventional-changelog package ([8bb0a85](https://github.com/conventional-changelog/commitlint/commit/8bb0a85)) +* bump cosmiconfig version and conditionally support mjs config ([#3747](https://github.com/conventional-changelog/commitlint/issues/3747)) ([a2b65fc](https://github.com/conventional-changelog/commitlint/commit/a2b65fc0cfee2259e197c291ea40ef2d076ab837)) -<a name="5.0.1"></a> -## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +# [18.3.0](https://github.com/conventional-changelog/commitlint/compare/v18.2.0...v18.3.0) (2023-10-26) ### Bug Fixes -* **core:** fall back to globally installed config if available ([#127](https://github.com/conventional-changelog/commitlint/issues/127)) ([8612eb3](https://github.com/conventional-changelog/commitlint/commit/8612eb3)) +* update dependency @types/node to v18.18.7 ([#3726](https://github.com/conventional-changelog/commitlint/issues/3726)) ([dcc0424](https://github.com/conventional-changelog/commitlint/commit/dcc0424259d32874e4f97de768ec1b50028a90a6)) +### Features +* **config-nx-scopes:** support latest nx version ([#3728](https://github.com/conventional-changelog/commitlint/issues/3728)) ([22e6f74](https://github.com/conventional-changelog/commitlint/commit/22e6f74e3cae74497162c8ae8f5d3888e3b19f6e)) -<a name="5.0.0"></a> -# [5.0.0](https://github.com/conventional-changelog/commitlint/compare/v4.3.0...v5.0.0) (2017-11-18) -### Bug fixes -* core: interprets array values for subject-case correctly + + +# [18.2.0](https://github.com/conventional-changelog/commitlint/compare/v18.1.0...v18.2.0) (2023-10-26) + ### Features -* config-angular: disallow subject with uppercase first character, #114 -* config-angular-type-enum: remove chore type +* **load:** use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load ([#3722](https://github.com/conventional-changelog/commitlint/issues/3722)) ([1ff49ea](https://github.com/conventional-changelog/commitlint/commit/1ff49ea14adb180eb54ec3d7479990b66ba26720)) -BREAKING CHANGE -TL;DR -* chore is no longer a valid commit type -* subject with leading capitalized letter are forbidden now -Angular has removed the chore type from their -conventions as of January 2017 -See [angular/angular@dff6ee](https://github.com/angular/angular/commit/dff6ee32725197bdb81f3f63c5bd9805f2ed22bb#diff-6a3371457528722a734f3c51d9238c13L204) -for reference +# [18.1.0](https://github.com/conventional-changelog/commitlint/compare/v18.0.0...v18.1.0) (2023-10-25) -This removes the previous chore type from the list -of allowed types. -Projects using the Angular commit convention will identify commits with chore type as faulty. +### Bug Fixes -Also, formerly working commit messages are now considered problems: +* update dependency read-pkg to v8 ([#3717](https://github.com/conventional-changelog/commitlint/issues/3717)) ([326f497](https://github.com/conventional-changelog/commitlint/commit/326f4975dbc2f06dbe490ca04732441ad062e063)) -* type: SOME MESSAGE -* type: SomeMessage -* type: Some Message -<a name="4.3.0"></a> -# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) +### Features + +* [scope-enum] [scope-case] allow space after comma as scope delimiter ([#3577](https://github.com/conventional-changelog/commitlint/issues/3577)) ([13c4bfc](https://github.com/conventional-changelog/commitlint/commit/13c4bfc637dd6c66477fa1c8da821ed46af28c44)), closes [#3576](https://github.com/conventional-changelog/commitlint/issues/3576) + + + + + +# [18.0.0](https://github.com/conventional-changelog/commitlint/compare/v17.8.1...v18.0.0) (2023-10-20) + + +* chore!: minimum node version v18 (#3644) ([5b4aeaf](https://github.com/conventional-changelog/commitlint/commit/5b4aeaf4f01c2726a7bc8631a23bb34c849baad2)), closes [#3644](https://github.com/conventional-changelog/commitlint/issues/3644) + + +### BREAKING CHANGES + +* drop node v14 and v16 support + +* chore: remove unused types + +* docs: prepare node update and new release + +* chore!: minimum TS version v5 +* drop TS v4 support + +* ci: remove node v14/16 checks + +* chore: adjust node types to minimal supported version + +* chore!: further major versions of other deps +* upgrade conventional-changelog-conventionalcommits, conventional-commits-parser, conventional-changelog-atom, + +* docs: simplify releases and remove roadmap + + + + + +## [17.8.1](https://github.com/conventional-changelog/commitlint/compare/v17.8.0...v17.8.1) (2023-10-20) + +**Note:** Version bump only for package @commitlint/root + + + + + +# [17.8.0](https://github.com/conventional-changelog/commitlint/compare/v17.7.2...v17.8.0) (2023-10-14) + + +### Bug Fixes + +* chore(container): add pullrequest event to container build workflow trigger ([8e30bec](https://github.com/conventional-changelog/commitlint/commit/8e30bec280d1c4ed8c1c5a69a36ea72aa4bc46ec)) +* update dependency @types/fs-extra to v11.0.2 ([#3681](https://github.com/conventional-changelog/commitlint/issues/3681)) ([5c6f087](https://github.com/conventional-changelog/commitlint/commit/5c6f0873554546fcfff070dcd83f3f7b5080be3f)) +* update dependency @types/tmp to v0.2.4 ([#3682](https://github.com/conventional-changelog/commitlint/issues/3682)) ([f9d7029](https://github.com/conventional-changelog/commitlint/commit/f9d702907c45e262c169bb85b6102604a96b95e9)) +* update dependency cosmiconfig-typescript-loader to v4.4.0 ([#3688](https://github.com/conventional-changelog/commitlint/issues/3688)) ([4bcb0c6](https://github.com/conventional-changelog/commitlint/commit/4bcb0c665243ffae65aa6616b4b0ee2d65d91aec)) + + +### Features + +* lazy load cosmiconfig-typescript-loader ([#3694](https://github.com/conventional-changelog/commitlint/issues/3694)) ([b058c7c](https://github.com/conventional-changelog/commitlint/commit/b058c7cc49333e7898402fa55467ec097801ce25)) + + + + + +## [17.7.2](https://github.com/conventional-changelog/commitlint/compare/v17.7.1...v17.7.2) (2023-09-28) ### Bug Fixes -* **core:** deprecate nlp rules ([bbab1d8](https://github.com/conventional-changelog/commitlint/commit/bbab1d8)), closes [#54](https://github.com/conventional-changelog/commitlint/issues/54) -* **core:** ignore comments ([f3beda1](https://github.com/conventional-changelog/commitlint/commit/f3beda1)), closes [#78](https://github.com/conventional-changelog/commitlint/issues/78) +* update dependency @types/node to v20.5.1 ([#3653](https://github.com/conventional-changelog/commitlint/issues/3653)) ([cd8b775](https://github.com/conventional-changelog/commitlint/commit/cd8b7750d3a15fbfd96e20196d53df064df6e138)) + + + + + +## [17.7.1](https://github.com/conventional-changelog/commitlint/compare/v17.7.0...v17.7.1) (2023-08-10) + + +### Reverts + +* Revert "feat(load): use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load (#3633)" ([8e41897](https://github.com/conventional-changelog/commitlint/commit/8e41897a42c45988ff8c25576c4f13bb11d84c4e)), closes [#3633](https://github.com/conventional-changelog/commitlint/issues/3633) + + + + + +# [17.7.0](https://github.com/conventional-changelog/commitlint/compare/v17.6.7...v17.7.0) (2023-08-09) + + +### Features + +* **load:** use cosmiconfig-typescript-loader v5 to remove ts-node dependency for @commitlint/load ([#3633](https://github.com/conventional-changelog/commitlint/issues/3633)) ([4aa46d7](https://github.com/conventional-changelog/commitlint/commit/4aa46d796ad74958f5569d3346b60a1f92c33892)) + + +### Reverts + +* eslint-config-prettier to v8 ([f279ff7](https://github.com/conventional-changelog/commitlint/commit/f279ff787bd908372813a04b756629467506f51e)) +* prettier to v2 to not break lerna v6 publish ([cd854cb](https://github.com/conventional-changelog/commitlint/commit/cd854cb73d93396c166bdfef442bc92b1833cc72)) + + + + + +## [17.6.7](https://github.com/conventional-changelog/commitlint/compare/v17.6.6...v17.6.7) (2023-07-19) + +**Note:** Version bump only for package @commitlint/root + + + + + +## [17.6.6](https://github.com/conventional-changelog/commitlint/compare/v17.6.5...v17.6.6) (2023-06-24) + +**Note:** Version bump only for package @commitlint/root + + + + + +## [17.6.5](https://github.com/conventional-changelog/commitlint/compare/v17.6.4...v17.6.5) (2023-05-30) + + +### Bug Fixes + +* add named export to @commitlint/parse ([#3614](https://github.com/conventional-changelog/commitlint/issues/3614)) ([2cd236b](https://github.com/conventional-changelog/commitlint/commit/2cd236b3065c69303c56833d120eb04c6fefc2c3)) + + + + + +## [17.6.4](https://github.com/conventional-changelog/commitlint/compare/v17.6.3...v17.6.4) (2023-05-07) + +**Note:** Version bump only for package @commitlint/root + + + + + +## [17.6.3](https://github.com/conventional-changelog/commitlint/compare/v17.6.2...v17.6.3) (2023-05-04) + + +### Bug Fixes + +* **config-lerna-scopes:** add missing dependency ([#3607](https://github.com/conventional-changelog/commitlint/issues/3607)) ([2fff094](https://github.com/conventional-changelog/commitlint/commit/2fff0943899161b2159a4acddc9237c6ab60c7a5)) +* update dependency semver to v7.5.0 ([#3604](https://github.com/conventional-changelog/commitlint/issues/3604)) ([01e35e0](https://github.com/conventional-changelog/commitlint/commit/01e35e06cf9123a0c367e0d0ac79988ec4334e6a)) +* update dependency yargs to v17.7.2 ([#3602](https://github.com/conventional-changelog/commitlint/issues/3602)) ([c1c7338](https://github.com/conventional-changelog/commitlint/commit/c1c73380710908f6e095f045c78c50928d56acdd)) + + + + + +## [17.6.2](https://github.com/conventional-changelog/commitlint/compare/v17.6.1...v17.6.2) (2023-05-03) + + +### Bug Fixes + +* lerna package.json resolution ([#3600](https://github.com/conventional-changelog/commitlint/issues/3600)) ([6c5cd53](https://github.com/conventional-changelog/commitlint/commit/6c5cd535679ac9448a127a57e309276e699cebb9)) +* update dependency cosmiconfig to v8.1.3 ([#3591](https://github.com/conventional-changelog/commitlint/issues/3591)) ([44b57a5](https://github.com/conventional-changelog/commitlint/commit/44b57a5022ede545a4d27146fd1a41110767c963)) +* update dependency fs-extra to v11.1.1 ([#3592](https://github.com/conventional-changelog/commitlint/issues/3592)) ([d6ec0d9](https://github.com/conventional-changelog/commitlint/commit/d6ec0d9295c66b51786e210e63dda2a5fa6b9d91)) + + + + + +## [17.6.1](https://github.com/conventional-changelog/commitlint/compare/v17.6.0...v17.6.1) (2023-04-14) + + +### Bug Fixes + +* **rules:** avoid processing strings with case-less Letter category symbols in `subject-case` ([#3586](https://github.com/conventional-changelog/commitlint/issues/3586)) ([70a4450](https://github.com/conventional-changelog/commitlint/commit/70a44501ac8459f0c1d2b200608b024585964637)), closes [#3585](https://github.com/conventional-changelog/commitlint/issues/3585) + + + + + +# [17.6.0](https://github.com/conventional-changelog/commitlint/compare/v17.5.1...v17.6.0) (2023-04-13) + + +### Features + +* **rules:** expand Latin-only characters limitation for `subject-case` with Unicode support ([#3575](https://github.com/conventional-changelog/commitlint/issues/3575)) ([5f83423](https://github.com/conventional-changelog/commitlint/commit/5f8342355a856e5be7b8a7b851e1519d62678465)) + + + + + +## [17.5.1](https://github.com/conventional-changelog/commitlint/compare/v17.5.0...v17.5.1) (2023-03-28) + +**Note:** Version bump only for package @commitlint/root + + + + + +# [17.5.0](https://github.com/conventional-changelog/commitlint/compare/v17.4.4...v17.5.0) (2023-03-22) + + +### Bug Fixes + +* **config-pnpm-scopes:** refactor to remove peer dependencies ([#3564](https://github.com/conventional-changelog/commitlint/issues/3564)) ([f1f3bd5](https://github.com/conventional-changelog/commitlint/commit/f1f3bd5b7f33f7198719ed4aead3417e894a10ec)), closes [#3556](https://github.com/conventional-changelog/commitlint/issues/3556) +* update dependency cosmiconfig to v8.1.0 ([#3548](https://github.com/conventional-changelog/commitlint/issues/3548)) ([7d01b2e](https://github.com/conventional-changelog/commitlint/commit/7d01b2e1801e1e409ce0c98c3388521804cc9b3d)) +* update dependency yargs to v17.7.0 ([#3542](https://github.com/conventional-changelog/commitlint/issues/3542)) ([f14990f](https://github.com/conventional-changelog/commitlint/commit/f14990f626f5a2713ac4aa508133cf1072993449)) +* update dependency yargs to v17.7.1 ([#3546](https://github.com/conventional-changelog/commitlint/issues/3546)) ([9f37c11](https://github.com/conventional-changelog/commitlint/commit/9f37c119ffb3d93d9cd3c473c4da8f23731be4d5)) + + +### Features + +* **GitHubCI:** add ([#3549](https://github.com/conventional-changelog/commitlint/issues/3549)) ([d973611](https://github.com/conventional-changelog/commitlint/commit/d9736110ac2558ca22719093cb0282899a2c1254)) +* support typescript 5.0 ([#3566](https://github.com/conventional-changelog/commitlint/issues/3566)) ([c0a27ff](https://github.com/conventional-changelog/commitlint/commit/c0a27ffa3dcaef296ef58ce37bd8ca0a9d315d6e)) + + + + + +## [17.4.4](https://github.com/conventional-changelog/commitlint/compare/v17.4.3...v17.4.4) (2023-02-17) + + +### Bug Fixes + +* **parse:** allow setting fieldPattern in parserOpts ([#3538](https://github.com/conventional-changelog/commitlint/issues/3538)) ([ea23c65](https://github.com/conventional-changelog/commitlint/commit/ea23c65702d619b92e338e9f589a147d62e48ffc)) + + + + + +## [17.4.3](https://github.com/conventional-changelog/commitlint/compare/v17.4.2...v17.4.3) (2023-02-13) + + +### Bug Fixes + +* subject-full-stop rule bugfix ([#3531](https://github.com/conventional-changelog/commitlint/issues/3531)) ([5d3d529](https://github.com/conventional-changelog/commitlint/commit/5d3d529a6a57baee1bfdaaf3f0c503dee009e152)) +* update dependency minimist to v1.2.8 ([#3532](https://github.com/conventional-changelog/commitlint/issues/3532)) ([1f57f98](https://github.com/conventional-changelog/commitlint/commit/1f57f98dfc5005c6e0f7c2bc3d44e387d26eba57)) + + + + + +## [17.4.2](https://github.com/conventional-changelog/commitlint/compare/v17.4.1...v17.4.2) (2023-01-12) + + +### Bug Fixes + +* **load:** fixes a bug when a ts commitlint config is compiled twice ([#3499](https://github.com/conventional-changelog/commitlint/issues/3499)) ([dc2c899](https://github.com/conventional-changelog/commitlint/commit/dc2c899b5d7e4e7a7be79901b28e46da9f519211)) +* update dependency @types/fs-extra to v11 ([#3494](https://github.com/conventional-changelog/commitlint/issues/3494)) ([8f553c7](https://github.com/conventional-changelog/commitlint/commit/8f553c7603e3ee0f435d878e396eec899a213de8)) +* update dependency @types/fs-extra to v11.0.1 ([#3496](https://github.com/conventional-changelog/commitlint/issues/3496)) ([f9a013c](https://github.com/conventional-changelog/commitlint/commit/f9a013c89f5644d4917fb3ce94755a2600073ca4)) + + + + + +## [17.4.1](https://github.com/conventional-changelog/commitlint/compare/v17.4.0...v17.4.1) (2023-01-09) + +**Note:** Version bump only for package @commitlint/root + + + + + +# [17.4.0](https://github.com/conventional-changelog/commitlint/compare/v17.3.0...v17.4.0) (2023-01-04) + +### Bug Fixes + +- stop truncating the body in presence of dashes ([#3476](https://github.com/conventional-changelog/commitlint/issues/3476)) ([02a61be](https://github.com/conventional-changelog/commitlint/commit/02a61befad13a348866fce30b15caa67a8360d9c)) +- update dependency ajv to v8.11.2 ([#3440](https://github.com/conventional-changelog/commitlint/issues/3440)) ([7829151](https://github.com/conventional-changelog/commitlint/commit/78291515d5083341946c600edfb9302f3409cdce)) +- update dependency ajv to v8.12.0 ([#3482](https://github.com/conventional-changelog/commitlint/issues/3482)) ([0a53d97](https://github.com/conventional-changelog/commitlint/commit/0a53d97005c1a6d49e8b1dc0993633569bbd191c)) +- update dependency cosmiconfig to v8 ([#3459](https://github.com/conventional-changelog/commitlint/issues/3459)) ([ee732fe](https://github.com/conventional-changelog/commitlint/commit/ee732fe0ef2057bdae93b7c368392934ac0de3af)) +- update dependency cosmiconfig-typescript-loader to v4.3.0 ([#3448](https://github.com/conventional-changelog/commitlint/issues/3448)) ([86b632e](https://github.com/conventional-changelog/commitlint/commit/86b632e74ceffacc980737840ce75e0ccd308e2a)) +- update dependency fs-extra to v11 ([#3460](https://github.com/conventional-changelog/commitlint/issues/3460)) ([a437923](https://github.com/conventional-changelog/commitlint/commit/a43792388e0d9707da770b26592c5e31553384a1)) +- update dependency semver to v7.3.8 ([#3441](https://github.com/conventional-changelog/commitlint/issues/3441)) ([7599ad6](https://github.com/conventional-changelog/commitlint/commit/7599ad6ab622ecbb6efa9ddba7acc3bbf66db5b5)) +- update dependency typescript to v4.9.4 ([#3449](https://github.com/conventional-changelog/commitlint/issues/3449)) ([bf86c7d](https://github.com/conventional-changelog/commitlint/commit/bf86c7dddc34c70d552decc040b30049a002d6a2)) +- update dependency yargs to v17.6.2 ([#3450](https://github.com/conventional-changelog/commitlint/issues/3450)) ([8a43a05](https://github.com/conventional-changelog/commitlint/commit/8a43a05080340227cbaf85b00c8dbe64038d476b)) + +### Features + +- support config .cts extension ([#3461](https://github.com/conventional-changelog/commitlint/issues/3461)) ([85ad18b](https://github.com/conventional-changelog/commitlint/commit/85ad18b8990567df516effcacbf04edbcbb6b6d7)) + +# [17.3.0](https://github.com/conventional-changelog/commitlint/compare/v17.2.1...v17.3.0) (2022-11-21) + +### Features + +- **config-pnpm-scopes:** implement config-pnpm-scopes ([#3427](https://github.com/conventional-changelog/commitlint/issues/3427)) ([ca3ae8b](https://github.com/conventional-changelog/commitlint/commit/ca3ae8b14271c62910d228a622bec20b1be8ed63)) + +## [17.2.1](https://github.com/conventional-changelog/commitlint/compare/v17.2.0...v17.2.1) (2022-11-01) + +**Note:** Version bump only for package @commitlint/root + +# [17.2.0](https://github.com/conventional-changelog/commitlint/compare/v17.1.2...v17.2.0) (2022-10-31) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v4.1.0 ([#3386](https://github.com/conventional-changelog/commitlint/issues/3386)) ([9abd75f](https://github.com/conventional-changelog/commitlint/commit/9abd75f83df6e5187b75a63200c5b68100a1cd6e)) + +### Features + +- **cli:** add strict mode ([#3384](https://github.com/conventional-changelog/commitlint/issues/3384)) ([#3385](https://github.com/conventional-changelog/commitlint/issues/3385)) ([fdff2be](https://github.com/conventional-changelog/commitlint/commit/fdff2bee2d688698555de1cab904d0f5038075b1)) +- **config-nx-scopes:** add nx version ^15.0.0 as peerDependency ([#3416](https://github.com/conventional-changelog/commitlint/issues/3416)) ([f529a3f](https://github.com/conventional-changelog/commitlint/commit/f529a3f58e03d633bbd3949d397a38d9c993579b)) + +## [17.1.2](https://github.com/conventional-changelog/commitlint/compare/v17.1.1...v17.1.2) (2022-08-29) + +### Bug Fixes + +- **load:** add ts-node as direct dependency ([#3351](https://github.com/conventional-changelog/commitlint/issues/3351)) ([3b66891](https://github.com/conventional-changelog/commitlint/commit/3b668911d8f9fd93e0f613842d5c0b7c3f24360a)) +- update dependency cosmiconfig-typescript-loader to v4 ([#3346](https://github.com/conventional-changelog/commitlint/issues/3346)) ([5a9d80f](https://github.com/conventional-changelog/commitlint/commit/5a9d80fba352deae1c2855792be4f8458a973431)) + +## [17.1.1](https://github.com/conventional-changelog/commitlint/compare/v17.1.0...v17.1.1) (2022-08-27) + +### Bug Fixes + +- **load:** peer-dep version [#3345](https://github.com/conventional-changelog/commitlint/issues/3345) ([2dd7b50](https://github.com/conventional-changelog/commitlint/commit/2dd7b50c983e2720ad25c368e5a0f13b80ab7927)) + +# [17.1.0](https://github.com/conventional-changelog/commitlint/compare/v17.0.3...v17.1.0) (2022-08-27) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v3 ([#3253](https://github.com/conventional-changelog/commitlint/issues/3253)) ([4e87d14](https://github.com/conventional-changelog/commitlint/commit/4e87d1431df6d39990e5f56a579604b1b3268ce6)) +- update dependency cosmiconfig-typescript-loader to v3.1.1 ([#3282](https://github.com/conventional-changelog/commitlint/issues/3282)) ([550ab3d](https://github.com/conventional-changelog/commitlint/commit/550ab3d9a311378c2d4860778e9ff5c6cf239cad)) +- update dependency cosmiconfig-typescript-loader to v3.1.2 ([#3343](https://github.com/conventional-changelog/commitlint/issues/3343)) ([4213e9c](https://github.com/conventional-changelog/commitlint/commit/4213e9c4ed87dfb1997d03bbf22f4f2cd6fc4e2f)) + +### Features + +- **commitlint:** add additional git log args ([#3334](https://github.com/conventional-changelog/commitlint/issues/3334)) ([229c65b](https://github.com/conventional-changelog/commitlint/commit/229c65b60f15c15da5f5b11deb555d1f557c673a)) + +## [17.0.3](https://github.com/conventional-changelog/commitlint/compare/v17.0.2...v17.0.3) (2022-06-25) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v2.0.2 ([#3250](https://github.com/conventional-changelog/commitlint/issues/3250)) ([dfe69b0](https://github.com/conventional-changelog/commitlint/commit/dfe69b0bfa0da2c6201630f043b97983b0111d14)) + +## [17.0.2](https://github.com/conventional-changelog/commitlint/compare/v17.0.1...v17.0.2) (2022-06-01) + +### Bug Fixes + +- update dependency conventional-changelog-conventionalcommits to v5 ([#3201](https://github.com/conventional-changelog/commitlint/issues/3201)) ([c20fd19](https://github.com/conventional-changelog/commitlint/commit/c20fd1952ed02df987165d96e4cef650c7fbaa4b)) +- update dependency cosmiconfig-typescript-loader to v2.0.1 ([#3202](https://github.com/conventional-changelog/commitlint/issues/3202)) ([9cf4b71](https://github.com/conventional-changelog/commitlint/commit/9cf4b71fc8785165c189de91d46eb5e2667bd1d4)) + +## [17.0.1](https://github.com/conventional-changelog/commitlint/compare/v17.0.0...v17.0.1) (2022-05-25) + +### Bug Fixes + +- **cli:** use `core.commentChar` from git config with `--edit` flag ([#3191](https://github.com/conventional-changelog/commitlint/issues/3191)) ([e5fee05](https://github.com/conventional-changelog/commitlint/commit/e5fee05301ab7441b6091e4ee6fc095d26bbd589)), closes [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) [#3190](https://github.com/conventional-changelog/commitlint/issues/3190) + +# [17.0.0](https://github.com/conventional-changelog/commitlint/compare/v16.3.0...v17.0.0) (2022-05-16) + +### Bug Fixes + +- update dependency yargs to v17.5.1 ([#3183](https://github.com/conventional-changelog/commitlint/issues/3183)) ([8db72f0](https://github.com/conventional-changelog/commitlint/commit/8db72f09e5e4e6a82e43246322cbd42d82d10bb6)) + +- chore!: minimum node version v14 (#3128) ([ac5f9b4](https://github.com/conventional-changelog/commitlint/commit/ac5f9b47a9e3cd5c9d58b14da0feb426f06b1ef9)), closes [#3128](https://github.com/conventional-changelog/commitlint/issues/3128) + +### BREAKING CHANGES + +- drop node v12 support + +- chore: rename circleci windows job + +node version is not defned by the name anyways (i think) + +# [16.3.0](https://github.com/conventional-changelog/commitlint/compare/v16.2.4...v16.3.0) (2022-05-14) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v2 ([#3154](https://github.com/conventional-changelog/commitlint/issues/3154)) ([20122e8](https://github.com/conventional-changelog/commitlint/commit/20122e8d6e999b74eab3bab08a6d52cda3f13e37)) +- update dependency yargs to v17.5.0 ([#3171](https://github.com/conventional-changelog/commitlint/issues/3171)) ([0e6542b](https://github.com/conventional-changelog/commitlint/commit/0e6542bd0a0d193d0080809fc23031ad83b8e2d9)) + +### Features + +- add ability to filter Nx projects in @commitlint/config-nx-scopes ([#3155](https://github.com/conventional-changelog/commitlint/issues/3155)) ([e595693](https://github.com/conventional-changelog/commitlint/commit/e595693eb9be51a874cff01580b883982083ba0e)), closes [#3152](https://github.com/conventional-changelog/commitlint/issues/3152) + +## [16.2.4](https://github.com/conventional-changelog/commitlint/compare/v16.2.3...v16.2.4) (2022-04-28) + +### Bug Fixes + +- **rules:** footer-leading-blank should work with body comments ([#3139](https://github.com/conventional-changelog/commitlint/issues/3139)) ([7dd88c9](https://github.com/conventional-changelog/commitlint/commit/7dd88c913cba9f444acc587c77210cb718c928c9)) +- update dependency cosmiconfig to v7.0.1 ([#3138](https://github.com/conventional-changelog/commitlint/issues/3138)) ([407837d](https://github.com/conventional-changelog/commitlint/commit/407837df9e5cfe3af06158a4684f95ff590000cb)) +- update dependency cosmiconfig-typescript-loader to v1.0.7 ([#3102](https://github.com/conventional-changelog/commitlint/issues/3102)) ([d0f2b3f](https://github.com/conventional-changelog/commitlint/commit/d0f2b3fe0f4b3bd2658efdde6d728bdacbc79557)) +- update dependency cosmiconfig-typescript-loader to v1.0.9 ([#3106](https://github.com/conventional-changelog/commitlint/issues/3106)) ([d91e70d](https://github.com/conventional-changelog/commitlint/commit/d91e70db61554e906851c66de1b4cb867eccb916)) +- update dependency fs-extra to v10.1.0 ([#3124](https://github.com/conventional-changelog/commitlint/issues/3124)) ([482613f](https://github.com/conventional-changelog/commitlint/commit/482613f4bf0de1d81a5ecda4ea9965165cd78120)) +- update dependency semver to v7.3.6 ([#3112](https://github.com/conventional-changelog/commitlint/issues/3112)) ([ad886fd](https://github.com/conventional-changelog/commitlint/commit/ad886fd7ea46bc2df346099f9d4f10defd51fe75)) +- update dependency semver to v7.3.7 ([#3119](https://github.com/conventional-changelog/commitlint/issues/3119)) ([c9c49b2](https://github.com/conventional-changelog/commitlint/commit/c9c49b2de935528d84a817de750cd65b8f765c48)) +- update dependency yargs to v17.4.0 ([#3080](https://github.com/conventional-changelog/commitlint/issues/3080)) ([1477d7c](https://github.com/conventional-changelog/commitlint/commit/1477d7c0de15000f0881329f177476082fee2067)) +- update dependency yargs to v17.4.1 ([#3116](https://github.com/conventional-changelog/commitlint/issues/3116)) ([69bf135](https://github.com/conventional-changelog/commitlint/commit/69bf135d69abb0e871ae7d1b6c76a5f343899edc)) + +## [16.2.3](https://github.com/conventional-changelog/commitlint/compare/v16.2.2...v16.2.3) (2022-03-16) + +### Bug Fixes + +- update dependency @types/fs-extra to v9.0.13 ([#3054](https://github.com/conventional-changelog/commitlint/issues/3054)) ([4c7dd7c](https://github.com/conventional-changelog/commitlint/commit/4c7dd7c32f89f3187f9f655c8170d35b6be8f90a)) +- update dependency cosmiconfig-typescript-loader to v1.0.6 ([#3059](https://github.com/conventional-changelog/commitlint/issues/3059)) ([256e194](https://github.com/conventional-changelog/commitlint/commit/256e194cbe8ed773ed9d966fa06f9531a6bc4d37)) +- update dependency fs-extra to v10.0.1 ([#3041](https://github.com/conventional-changelog/commitlint/issues/3041)) ([1236c83](https://github.com/conventional-changelog/commitlint/commit/1236c8388bb9b684cdfe41577b90cc5eaa852a47)) +- update dependency git-raw-commits to v2.0.11 ([#3055](https://github.com/conventional-changelog/commitlint/issues/3055)) ([d5089f1](https://github.com/conventional-changelog/commitlint/commit/d5089f1ce211592bc9315c03ad79183f142b7f1b)) + +## [16.2.2](https://github.com/conventional-changelog/commitlint/compare/v16.2.1...v16.2.2) (2022-02-14) + +**Note:** Version bump only for package @commitlint/root + +## [16.2.1](https://github.com/conventional-changelog/commitlint/compare/v16.2.0...v16.2.1) (2022-02-13) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v1.0.5 ([#3020](https://github.com/conventional-changelog/commitlint/issues/3020)) ([2d431a6](https://github.com/conventional-changelog/commitlint/commit/2d431a60942fd615b4cce8f18a237c3fb6712223)) +- update dependency jest-environment-node to v27.5.0 ([#3012](https://github.com/conventional-changelog/commitlint/issues/3012)) ([a546128](https://github.com/conventional-changelog/commitlint/commit/a5461289cff8a7927bab9153af681afa7a039977)) +- update dependency jest-environment-node to v27.5.1 ([#3018](https://github.com/conventional-changelog/commitlint/issues/3018)) ([0cbf652](https://github.com/conventional-changelog/commitlint/commit/0cbf65269c1ca70b7a27c8bdee7e397ac6dba9b7)) +- update dependency read-pkg to v7.1.0 ([#3015](https://github.com/conventional-changelog/commitlint/issues/3015)) ([3b7b680](https://github.com/conventional-changelog/commitlint/commit/3b7b680ce4f5341d8816f3db036170b0cb28d33f)) +- **load:** satisfy @types/node peer dependency for cosmiconfig-loader-typescript ([#3008](https://github.com/conventional-changelog/commitlint/issues/3008)) ([338180c](https://github.com/conventional-changelog/commitlint/commit/338180c7174625cddd7a0ea2b9d2786fee375756)), closes [#3007](https://github.com/conventional-changelog/commitlint/issues/3007) + +# [16.2.0](https://github.com/conventional-changelog/commitlint/compare/v16.1.0...v16.2.0) (2022-01-25) + +### Bug Fixes + +- update dependency cosmiconfig-typescript-loader to v1.0.4 ([#2991](https://github.com/conventional-changelog/commitlint/issues/2991)) ([043a059](https://github.com/conventional-changelog/commitlint/commit/043a05922fb8139b57c78eb5034b77823b2139ba)) + +### Features + +- add support for Nx monorepos via @commitlint/config-nx-scopes ([#2995](https://github.com/conventional-changelog/commitlint/issues/2995)) ([11879ad](https://github.com/conventional-changelog/commitlint/commit/11879adacbef3c939311b1ff597a7b894fcca0dc)) + +# [16.1.0](https://github.com/conventional-changelog/commitlint/compare/v16.0.3...v16.1.0) (2022-01-20) + +### Features + +- **load:** accept functions as parser presets ([#2982](https://github.com/conventional-changelog/commitlint/issues/2982)) ([420e8d6](https://github.com/conventional-changelog/commitlint/commit/420e8d6a4d5663ade953272275a9e0fa7c5ddff0)), closes [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) [#2964](https://github.com/conventional-changelog/commitlint/issues/2964) + +## [16.0.3](https://github.com/conventional-changelog/commitlint/compare/v16.0.2...v16.0.3) (2022-01-19) + +### Bug Fixes + +- commit body should be empty by default ([#2980](https://github.com/conventional-changelog/commitlint/issues/2980)) ([e6582e0](https://github.com/conventional-changelog/commitlint/commit/e6582e03608621e46f617a097b4880750ae85021)) + +## [16.0.2](https://github.com/conventional-changelog/commitlint/compare/v16.0.1...v16.0.2) (2022-01-09) + +### Bug Fixes + +- update dependency conventional-changelog-conventionalcommits to v4.6.3 ([#2938](https://github.com/conventional-changelog/commitlint/issues/2938)) ([0231f4b](https://github.com/conventional-changelog/commitlint/commit/0231f4bd74d9c5a691ba3e25e92947127359528c)) +- update dependency conventional-commits-parser to v3.2.4 ([#2939](https://github.com/conventional-changelog/commitlint/issues/2939)) ([a484a9a](https://github.com/conventional-changelog/commitlint/commit/a484a9a65259861114deb2b37ee0b30d0058be2a)) +- update dependency cosmiconfig-typescript-loader to v1.0.3 ([#2956](https://github.com/conventional-changelog/commitlint/issues/2956)) ([cc6e6cd](https://github.com/conventional-changelog/commitlint/commit/cc6e6cdd53a4b609c8e0514a2035ce4f4a46a317)) +- update dependency jest-environment-node to v27.4.6 ([#2957](https://github.com/conventional-changelog/commitlint/issues/2957)) ([62a0867](https://github.com/conventional-changelog/commitlint/commit/62a0867ddbc771bf92395ccfd0d1f75ff9ea24ec)) + +## [16.0.1](https://github.com/conventional-changelog/commitlint/compare/v16.0.0...v16.0.1) (2021-12-28) + +### Bug Fixes + +- update dependency @types/tmp to v0.2.3 ([#2928](https://github.com/conventional-changelog/commitlint/issues/2928)) ([8eeb1f4](https://github.com/conventional-changelog/commitlint/commit/8eeb1f436a91550295f5bc671e0d75fef7eedbd7)) +- update dependency conventional-changelog-conventionalcommits to v4.6.2 ([#2934](https://github.com/conventional-changelog/commitlint/issues/2934)) ([a239b9e](https://github.com/conventional-changelog/commitlint/commit/a239b9e7c4078d335182c9568e348680ca5fc569)) +- update dependency cosmiconfig-typescript-loader to v1.0.2 ([#2929](https://github.com/conventional-changelog/commitlint/issues/2929)) ([04cc88c](https://github.com/conventional-changelog/commitlint/commit/04cc88c0d985b5f03a2d1bdc7a1a94f4ef5c7019)) +- update dependency yargs to v17.3.1 ([#2935](https://github.com/conventional-changelog/commitlint/issues/2935)) ([8e099af](https://github.com/conventional-changelog/commitlint/commit/8e099afd794c8fc44c64b4cb817f197d2e80b12e)) + +# [16.0.0](https://github.com/conventional-changelog/commitlint/compare/v15.0.0...v16.0.0) (2021-12-26) + +### Bug Fixes + +- **is-ignored:** ignore merge tag commit messages ([#2920](https://github.com/conventional-changelog/commitlint/issues/2920)) ([914782a](https://github.com/conventional-changelog/commitlint/commit/914782aad70d353baf4d9fbbf9824c0211241484)) +- update dependency @types/tmp to v0.2.2 ([#2903](https://github.com/conventional-changelog/commitlint/issues/2903)) ([d2f146c](https://github.com/conventional-changelog/commitlint/commit/d2f146c6d8bcafa96d13341433aebaa2712a2feb)) +- update dependency conventional-commits-parser to v3.2.3 ([#2904](https://github.com/conventional-changelog/commitlint/issues/2904)) ([3a98d3c](https://github.com/conventional-changelog/commitlint/commit/3a98d3c49eae1001ed25bcadaa209f8a4cb32e91)) +- **cz-commitlint:** combine commit body with issuesBody/breakingBody when body has an empty string ([#2915](https://github.com/conventional-changelog/commitlint/issues/2915)) ([a038b41](https://github.com/conventional-changelog/commitlint/commit/a038b419f7f1d2073977ec1e6fe59ffcbba38931)) +- **docs:** minor changes to guides ([#2913](https://github.com/conventional-changelog/commitlint/issues/2913)) ([499efd1](https://github.com/conventional-changelog/commitlint/commit/499efd17927ca26e9dcdae58e4cc0772b45bbea8)) +- update dependency conventional-changelog-conventionalcommits to v4.6.1 ([#2906](https://github.com/conventional-changelog/commitlint/issues/2906)) ([1d1ccfa](https://github.com/conventional-changelog/commitlint/commit/1d1ccfab358b7dbd6448f8d74d0ae39eaddb3189)) +- update dependency cosmiconfig to v7.0.1 ([#2905](https://github.com/conventional-changelog/commitlint/issues/2905)) ([2c33c98](https://github.com/conventional-changelog/commitlint/commit/2c33c98693627888f2246b34e00941417c6ef932)) +- update dependency jest-environment-node to v27.4.2 ([#2907](https://github.com/conventional-changelog/commitlint/issues/2907)) ([c3b29ba](https://github.com/conventional-changelog/commitlint/commit/c3b29ba15a13fa3f2510a8bb153a1f90ee8ee583)) +- update dependency yargs to v17.3.0 ([#2908](https://github.com/conventional-changelog/commitlint/issues/2908)) ([a387494](https://github.com/conventional-changelog/commitlint/commit/a38749443130400b9d289d3d50042271bff44a28)) + +### Features + +- **config-rush-scopes:** add config for rush monorepo ([#2878](https://github.com/conventional-changelog/commitlint/issues/2878)) ([befa677](https://github.com/conventional-changelog/commitlint/commit/befa677c3c2bed38085a62da161366784d971906)) +- **cz-commitlint:** support select scope with radio list by setting disableMultipleScopes ([#2911](https://github.com/conventional-changelog/commitlint/issues/2911)) ([9d8d73f](https://github.com/conventional-changelog/commitlint/commit/9d8d73f36e0c62c8cd9e3e913b66a5ca46ebf622)), closes [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) +- config validation ([#2412](https://github.com/conventional-changelog/commitlint/issues/2412)) ([c717202](https://github.com/conventional-changelog/commitlint/commit/c7172022097b11f46b33617e4a94d751243c1049)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +### BREAKING CHANGES + +- **cz-commitlint:** users who is using multiple scopes need to set enableMultipleScopes to true + +# [15.0.0](https://github.com/conventional-changelog/commitlint/compare/v14.2.0...v15.0.0) (2021-11-17) + +### Bug Fixes + +- **prompt:** correct import kind in prompt package ([#2852](https://github.com/conventional-changelog/commitlint/issues/2852)) ([45bf394](https://github.com/conventional-changelog/commitlint/commit/45bf394b34cef78011c2e0a1a7d0cc0d2bab41ae)) +- **prompt:** correct version of internal dependencies in prompt package [#2697](https://github.com/conventional-changelog/commitlint/issues/2697) ([#2851](https://github.com/conventional-changelog/commitlint/issues/2851)) ([b1155ca](https://github.com/conventional-changelog/commitlint/commit/b1155cae766aba7e93bc42c69c9ea7f47c1c16d4)) +- **types:** fix signature of QualifiedRuleConfig for async configurations ([#2868](https://github.com/conventional-changelog/commitlint/issues/2868)) ([#2869](https://github.com/conventional-changelog/commitlint/issues/2869)) ([c7f355b](https://github.com/conventional-changelog/commitlint/commit/c7f355b25e5baddab0b9559892f5ce4112e4f93a)) + +### Features + +- simplify config resolution ([#2398](https://github.com/conventional-changelog/commitlint/issues/2398)) ([8a8384f](https://github.com/conventional-changelog/commitlint/commit/8a8384f3c18954447cb633e76a573e1db71a1440)), closes [#327](https://github.com/conventional-changelog/commitlint/issues/327) + +### Tests + +- **config-lerna-scopes:** reuse npm bootstrap to simplify tests ([#2479](https://github.com/conventional-changelog/commitlint/issues/2479)) ([9a7a43a](https://github.com/conventional-changelog/commitlint/commit/9a7a43aa8a7eca18f2fe05c78d27dcb1a128930c)), closes [#2447](https://github.com/conventional-changelog/commitlint/issues/2447) + +### BREAKING CHANGES + +- **config-lerna-scopes:** upgrade to lerna v4 + +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> + +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests + +- test(config-lerna-scopes): reuse npm bootstrap to simplify tests + +- test: fix issue after merge + +- test: one more fix after merge + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Co-authored-by: Renovate Bot <bot@renovateapp.com> +Co-authored-by: escapedcat <github@htmlcss.de> + +## [8.3.6](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v8.3.6) (2021-11-17) + +**Note:** Version bump only for package @commitlint/root + +chore: update lodash to 4.17.21 +SECURITY: CVE-2021-23337 in package lodash https://nvd.nist.gov/vuln/detail/CVE-2021-23337 + +# [14.2.0](https://github.com/conventional-changelog/commitlint/compare/v14.1.0...v14.2.0) (2021-11-06) + +### Features + +- **prompt:** rewrite codebase to use inquirer - UPDATED with current master ([#2697](https://github.com/conventional-changelog/commitlint/issues/2697)) ([5105f43](https://github.com/conventional-changelog/commitlint/commit/5105f43ea8093bce82fe4703c4c14a8210721924)) + +# [14.1.0](https://github.com/conventional-changelog/commitlint/compare/v14.0.0...v14.1.0) (2021-11-01) + +### Features + +- extend helpUrl from shareable config ([#2846](https://github.com/conventional-changelog/commitlint/issues/2846)) ([d7e2e2b](https://github.com/conventional-changelog/commitlint/commit/d7e2e2b943be383f99f4000b6b6bed0eab03bfcf)) +- **load:** add support for `.commitlintrc.cjs` and `commitlint.config.cjs` files ([#2797](https://github.com/conventional-changelog/commitlint/issues/2797)) ([fabb495](https://github.com/conventional-changelog/commitlint/commit/fabb49509730609276ff9ef6357536c95a1f6bb1)) + +# [14.0.0](https://github.com/conventional-changelog/commitlint/compare/v13.2.1...v14.0.0) (2021-10-26) + +- support multiple scopes and multiple cases & fix sentence-case is not consistent with commitlint/cli (#2806) ([2c71a7e](https://github.com/conventional-changelog/commitlint/commit/2c71a7e2965a2beff805982d37243b79a48c9360)), closes [#2806](https://github.com/conventional-changelog/commitlint/issues/2806) [#2782](https://github.com/conventional-changelog/commitlint/issues/2782) + +### BREAKING CHANGES + +- add prompt.settings configuration + +## [13.2.1](https://github.com/conventional-changelog/commitlint/compare/v13.2.0...v13.2.1) (2021-10-09) + +### Bug Fixes + +- **load:** added a direct dependency on typescript ([#2785](https://github.com/conventional-changelog/commitlint/issues/2785)) ([9c17f8d](https://github.com/conventional-changelog/commitlint/commit/9c17f8d423404b484f72df41358a18bd90014ecd)), closes [EndemolShineGroup/cosmiconfig-typescript-loader#147](https://github.com/EndemolShineGroup/cosmiconfig-typescript-loader/issues/147) [#2779](https://github.com/conventional-changelog/commitlint/issues/2779) + +# [13.2.0](https://github.com/conventional-changelog/commitlint/compare/v13.1.0...v13.2.0) (2021-09-28) + +### Bug Fixes + +- **parse:** enforce secure version of `conventional-commits-parser` ([#2776](https://github.com/conventional-changelog/commitlint/issues/2776)) ([a351801](https://github.com/conventional-changelog/commitlint/commit/a3518012ae11bc00a43a12b8ce935f3ffd2d04ef)) +- update dependency read-pkg to v7 ([#2721](https://github.com/conventional-changelog/commitlint/issues/2721)) ([7d9a3b1](https://github.com/conventional-changelog/commitlint/commit/7d9a3b1f2ab41c598f4d23d96805f86a4d41ae09)) +- **types:** prompt messages key ([4825a52](https://github.com/conventional-changelog/commitlint/commit/4825a521e2c74d63a11920b48094fddc79001b3c)) +- **types:** prompt messages props optional ([0bd0592](https://github.com/conventional-changelog/commitlint/commit/0bd0592148ab4266fd76816b19d352e2cf947f8c)) +- **types:** user config prompt ([6d7a1c4](https://github.com/conventional-changelog/commitlint/commit/6d7a1c40e2f8a8ff22595e0e17f71f3702b0699c)) + +### Features + +- **load:** add cosmiconfig typescript loader ([b65aced](https://github.com/conventional-changelog/commitlint/commit/b65acedc3334a859811762539ec8716de3e73f85)) + +# [13.1.0](https://github.com/conventional-changelog/commitlint/compare/v13.0.0...v13.1.0) (2021-07-24) + +### Bug Fixes + +- **cz-commitlint:** fix minor formatting issues ([99d8881](https://github.com/conventional-changelog/commitlint/commit/99d8881d0d951deded6d9e31bbb279d04101549b)) +- **types:** adds TargetCaseType[] for CaseRuleConfig ([c3bef38](https://github.com/conventional-changelog/commitlint/commit/c3bef384ff1a3ec428ba7c86bc778c50a9e6eead)) +- update dependency import-from to v4 ([#2629](https://github.com/conventional-changelog/commitlint/issues/2629)) ([5bcb604](https://github.com/conventional-changelog/commitlint/commit/5bcb60456cd9d4c8f0f0bae21ca7c3d1c73943ca)) +- **cli:** remove hard coded comment char with linting `COMMIT_EDIT_MSG` ([#2618](https://github.com/conventional-changelog/commitlint/issues/2618)) ([5badf6d](https://github.com/conventional-changelog/commitlint/commit/5badf6dc08116ed3557e6c780e55764b4f07ca67)), closes [#2351](https://github.com/conventional-changelog/commitlint/issues/2351) + +### Features + +- **rules:** allow body-case to accept an array of cases ([5383c9e](https://github.com/conventional-changelog/commitlint/commit/5383c9edcd9a351ea1c33ed49f47afed9b1cde6b)), closes [#2631](https://github.com/conventional-changelog/commitlint/issues/2631) + +# [13.0.0](https://github.com/conventional-changelog/commitlint/compare/v12.1.4...v13.0.0) (2021-05-24) + +### Bug Fixes + +- update dependency chalk to v4.1.1 ([#2608](https://github.com/conventional-changelog/commitlint/issues/2608)) ([f41b123](https://github.com/conventional-changelog/commitlint/commit/f41b1237c7f7b2ff23b87643939569276d77b304)) +- update dependency yargs to v17.0.1 ([#2609](https://github.com/conventional-changelog/commitlint/issues/2609)) ([afbfd10](https://github.com/conventional-changelog/commitlint/commit/afbfd10592579c544d8e2c313f2c2baef68990f8)) + +### Features + +- add subject-exclamation-mark rule to improve error messages ([#2593](https://github.com/conventional-changelog/commitlint/issues/2593)) ([be701bd](https://github.com/conventional-changelog/commitlint/commit/be701bdb1de4e667b7a872767244285c4fa4fda4)) +- **rules:** add `trailer-exists` rule ([#2578](https://github.com/conventional-changelog/commitlint/issues/2578)) ([cd3816d](https://github.com/conventional-changelog/commitlint/commit/cd3816d553762eae99e088689395c55afce0c6cc)) + +- chore!: remove node 10 support (#2596) ([4db4ba1](https://github.com/conventional-changelog/commitlint/commit/4db4ba1b0b312410a0f62100a93a80c246a6c410)), closes [#2596](https://github.com/conventional-changelog/commitlint/issues/2596) + +### BREAKING CHANGES + +- minimum node version is 12 + +## [12.1.3](https://github.com/conventional-changelog/commitlint/compare/v12.1.2...v12.1.3) (2021-05-12) + +### Bug Fixes + +- update dependency fs-extra to v10 ([#2575](https://github.com/conventional-changelog/commitlint/issues/2575)) ([d47d2b5](https://github.com/conventional-changelog/commitlint/commit/d47d2b595b980adadd4fb8ff198c1914caeff18f)) +- update dependency yargs to v17 ([#2574](https://github.com/conventional-changelog/commitlint/issues/2574)) ([81c38dd](https://github.com/conventional-changelog/commitlint/commit/81c38ddf15f239b525f673b26b2ee6606f2ee8f6)) + +## [12.1.2](https://github.com/conventional-changelog/commitlint/compare/v12.1.1...v12.1.2) (2021-04-29) + +### Bug Fixes + +- **rules:** fix subject-full-stop rule config value type ([#2534](https://github.com/conventional-changelog/commitlint/issues/2534)) ([2ab3c57](https://github.com/conventional-changelog/commitlint/commit/2ab3c57b709ddad3fc98d768309ac4fdac8cb68a)) +- **types:** update chalk import ([#2535](https://github.com/conventional-changelog/commitlint/issues/2535)) ([89f9a6d](https://github.com/conventional-changelog/commitlint/commit/89f9a6d759f7296438e184a93c1f766aba1443ca)) + +## [12.1.1](https://github.com/conventional-changelog/commitlint/compare/v12.1.0...v12.1.1) (2021-04-02) + +### Bug Fixes + +- update dependency read-pkg to v6 ([#2530](https://github.com/conventional-changelog/commitlint/issues/2530)) ([d38a2ad](https://github.com/conventional-changelog/commitlint/commit/d38a2adc07f4cd6dad48aadbb73f2f1d3740e689)) +- **config-lerna-scopes:** ignore packages without names ([#2514](https://github.com/conventional-changelog/commitlint/issues/2514)) ([df3bf71](https://github.com/conventional-changelog/commitlint/commit/df3bf71ab36a085ef35a1491025c0d2e2b92ff77)) +- update dependency semver to v7.3.5 ([#2519](https://github.com/conventional-changelog/commitlint/issues/2519)) ([5113f22](https://github.com/conventional-changelog/commitlint/commit/5113f22c620e7b187fd558e5befa541b448ea18b)) +- **prompt:** modify the entry point to pass commitizen's function check ([#2501](https://github.com/conventional-changelog/commitlint/issues/2501)) ([0173fb7](https://github.com/conventional-changelog/commitlint/commit/0173fb7cc01dc8442ed88a0ab8feec20c955deee)), closes [/github.com/conventional-changelog/commitlint/issues/2486#issuecomment-791682272](https://github.com//github.com/conventional-changelog/commitlint/issues/2486/issues/issuecomment-791682272) [/github.com/conventional-changelog/commitlint/issues/2486#issuecomment-791682272](https://github.com//github.com/conventional-changelog/commitlint/issues/2486/issues/issuecomment-791682272) + +# [12.1.0](https://github.com/conventional-changelog/commitlint/compare/v12.0.1...v12.1.0) (2021-03-06) + +### Features + +- **config-lerna-scopes:** keep supporting lerna v3 ([51b0f4a](https://github.com/conventional-changelog/commitlint/commit/51b0f4a56f111c61419247755b1404b4e20d3a09)) + +## [12.0.1](https://github.com/conventional-changelog/commitlint/compare/v12.0.0...v12.0.1) (2021-02-23) + +### Bug Fixes + +- update dependency conventional-commits-parser to v3.2.1 ([#2459](https://github.com/conventional-changelog/commitlint/issues/2459)) ([8bcc4f0](https://github.com/conventional-changelog/commitlint/commit/8bcc4f0b5ff8e0e2ae8ce960ccd1a4021c8e6cbb)) +- **load:** use `Rule | AsyncRule | SyncRule` as rule value type in `Plugin` ([#2146](https://github.com/conventional-changelog/commitlint/issues/2146)) ([75b67b8](https://github.com/conventional-changelog/commitlint/commit/75b67b8fb7fc4df21267b98f0c9daeeb1130b824)) +- **types:** correct chalkColor type ([#2420](https://github.com/conventional-changelog/commitlint/issues/2420)) ([ef8bdad](https://github.com/conventional-changelog/commitlint/commit/ef8bdad96c9ee7c3ad67f8280818c7f49c1df1fe)) +- update dependency throat to v6 ([#2417](https://github.com/conventional-changelog/commitlint/issues/2417)) ([6f7db1b](https://github.com/conventional-changelog/commitlint/commit/6f7db1b39c48561b84a4fce9623fb045c5467fe8)) + +# [12.0.0](https://github.com/conventional-changelog/commitlint/compare/v11.0.0...v12.0.0) (2021-01-18) + +### Bug Fixes + +- remove unnecessary react babel transforms ([#2399](https://github.com/conventional-changelog/commitlint/issues/2399)) ([78f02fd](https://github.com/conventional-changelog/commitlint/commit/78f02fdb69c811b5ac38a7d018502aeeb785be04)) +- **utils:** update code to allow it to be executed ([#982](https://github.com/conventional-changelog/commitlint/issues/982)) ([52696d0](https://github.com/conventional-changelog/commitlint/commit/52696d048317944aa0d638b8702df78f8756d44b)) +- update dependency @types/fs-extra to v9.0.2 ([#2250](https://github.com/conventional-changelog/commitlint/issues/2250)) ([a10fa0b](https://github.com/conventional-changelog/commitlint/commit/a10fa0b580bdb09fd713beac78721cc5d579c67c)) +- update dependency @types/fs-extra to v9.0.5 ([#2360](https://github.com/conventional-changelog/commitlint/issues/2360)) ([3266712](https://github.com/conventional-changelog/commitlint/commit/3266712039e7ad6a13ed2d3097c28902b73cb701)) +- update dependency conventional-changelog-angular to v5.0.12 ([#2361](https://github.com/conventional-changelog/commitlint/issues/2361)) ([5766b39](https://github.com/conventional-changelog/commitlint/commit/5766b39b4ffb22452259827f131a2e7871637205)) +- update dependency conventional-changelog-conventionalcommits to v4.4.0 ([#2115](https://github.com/conventional-changelog/commitlint/issues/2115)) ([bccc9f5](https://github.com/conventional-changelog/commitlint/commit/bccc9f53df26b98bf51e4183d54ca66c45a51857)) +- update dependency conventional-changelog-conventionalcommits to v4.5.0 ([#2362](https://github.com/conventional-changelog/commitlint/issues/2362)) ([01c78bf](https://github.com/conventional-changelog/commitlint/commit/01c78bff6451befbc52294047c665326bc4eb9b9)) +- update dependency execa to v4.1.0 ([#2251](https://github.com/conventional-changelog/commitlint/issues/2251)) ([b5743dd](https://github.com/conventional-changelog/commitlint/commit/b5743dd1e49bbe7eac03f34bc38c59df5fbaf2a0)) +- update dependency execa to v5 ([#2341](https://github.com/conventional-changelog/commitlint/issues/2341)) ([f349df9](https://github.com/conventional-changelog/commitlint/commit/f349df90f08096a9bcad46b5e55b411aac327a24)) +- update dependency git-raw-commits to v2.0.7 ([#2116](https://github.com/conventional-changelog/commitlint/issues/2116)) ([ef969f3](https://github.com/conventional-changelog/commitlint/commit/ef969f375df170d6bdaadad205333352e01bb24d)) +- update dependency git-raw-commits to v2.0.8 ([#2364](https://github.com/conventional-changelog/commitlint/issues/2364)) ([3371715](https://github.com/conventional-changelog/commitlint/commit/3371715871d0381190635bd392780b16dd55e0c7)) +- update dependency meow to v8 ([#2245](https://github.com/conventional-changelog/commitlint/issues/2245)) ([890961b](https://github.com/conventional-changelog/commitlint/commit/890961b52b1552c1bb2798db02915e28686983f0)) +- update dependency meow to v8.1.0 ([#2380](https://github.com/conventional-changelog/commitlint/issues/2380)) ([0fbadcf](https://github.com/conventional-changelog/commitlint/commit/0fbadcf1d45c2e97f1da9938b3b80c0b45eba18c)) +- update dependency pkg-dir to v5 ([#2168](https://github.com/conventional-changelog/commitlint/issues/2168)) ([b9d1c84](https://github.com/conventional-changelog/commitlint/commit/b9d1c8462950303a7695f248849dd9f6a58b5a9a)) +- update dependency semver to v7.3.4 ([#2336](https://github.com/conventional-changelog/commitlint/issues/2336)) ([790b61a](https://github.com/conventional-changelog/commitlint/commit/790b61afa668d0eab80bbe49db58d3d5d29bb16e)) +- update dependency tar-fs to v2.1.1 ([#2261](https://github.com/conventional-changelog/commitlint/issues/2261)) ([a04f24f](https://github.com/conventional-changelog/commitlint/commit/a04f24f00873209d6d96cd894450d17fdfe9ca58)) +- **is-ignored:** ignore azure devops messages ([#2230](https://github.com/conventional-changelog/commitlint/issues/2230)) ([fe29ce7](https://github.com/conventional-changelog/commitlint/commit/fe29ce76bd87d5b42048228fbf0f47cc8d5411ec)) +- update dependency yargs to v16 ([204f36d](https://github.com/conventional-changelog/commitlint/commit/204f36d0a522afaf3a88739b401aea15ffa0b891)) +- update dependency yargs to v16.1.0 ([#2252](https://github.com/conventional-changelog/commitlint/issues/2252)) ([6478d07](https://github.com/conventional-changelog/commitlint/commit/6478d07afe0fe1736cf1aef1618c7d90d60d9117)) +- **resolve-extends:** `extends` field should be resolved from left to right ([#2070](https://github.com/conventional-changelog/commitlint/issues/2070)) ([c0a86f5](https://github.com/conventional-changelog/commitlint/commit/c0a86f5b5ed6ef071acef4baf38e7fc549fbec37)) + +### Features + +- **cli:** implement print-config cli flag ([#2391](https://github.com/conventional-changelog/commitlint/issues/2391)) ([8626883](https://github.com/conventional-changelog/commitlint/commit/86268833946dea9dcf1c15459456cd4427d17835)) +- **config-lerna-scopes:** support yarn workspaces ([#2149](https://github.com/conventional-changelog/commitlint/issues/2149)) ([b244246](https://github.com/conventional-changelog/commitlint/commit/b2442469afe3b11c20b0101be7656ced43fab366)) +- **load:** allow specifying helpUrl via config ([#2180](https://github.com/conventional-changelog/commitlint/issues/2180)) ([d6795a3](https://github.com/conventional-changelog/commitlint/commit/d6795a3c4633ba6efd7a0fcff48339dc291cd832)) +- **rules:** add body-full-stop rule ([#2144](https://github.com/conventional-changelog/commitlint/issues/2144)) ([7767ca2](https://github.com/conventional-changelog/commitlint/commit/7767ca2591d10207c4abe7f3e5e6de503ac12a25)) + +### BREAKING CHANGES + +- **resolve-extends:** The order of the `extends` resolution is changed from right-to-left to left-to-right + +# [11.0.0](https://github.com/conventional-changelog/commitlint/compare/v10.0.0...v11.0.0) (2020-09-05) + +### Bug Fixes + +- **cli:** remove default value from edit option [#2065](https://github.com/conventional-changelog/commitlint/issues/2065) ([3d4116d](https://github.com/conventional-changelog/commitlint/commit/3d4116d044a2f5149a9c9c1d9fa35abf5e232479)) +- **rules:** ignore comments in `signed-off-by` ([#2098](https://github.com/conventional-changelog/commitlint/issues/2098)) ([b610bcd](https://github.com/conventional-changelog/commitlint/commit/b610bcd15215cc5f14fb6de07914ed595cc3047b)) +- update dependency @types/fs-extra to ^9.0.1 ([#2088](https://github.com/conventional-changelog/commitlint/issues/2088)) ([cb1028e](https://github.com/conventional-changelog/commitlint/commit/cb1028ef2700d86991c69a1e2ad391bc1bdc9d90)) + +- refactor!: drop support for lerna v2 ([59667b3](https://github.com/conventional-changelog/commitlint/commit/59667b376118323b1312d3d1084b9178918f3d23)) + +### BREAKING CHANGES + +- remove lerna v2 support and tests + +# [10.0.0](https://github.com/conventional-changelog/commitlint/compare/v9.1.2...v10.0.0) (2020-08-16) + +### Bug Fixes + +- update dependency ([#1993](https://github.com/conventional-changelog/commitlint/issues/1993)) ([32667e8](https://github.com/conventional-changelog/commitlint/commit/32667e8aa665cf94fe669ba048ad7abaf6abac6e)) +- update dependency cosmiconfig to v7 ([#2044](https://github.com/conventional-changelog/commitlint/issues/2044)) ([f4db933](https://github.com/conventional-changelog/commitlint/commit/f4db93324698ea39528be0d2692151546c2b5517)) +- update dependency execa to v4 ([#1936](https://github.com/conventional-changelog/commitlint/issues/1936)) ([8efb441](https://github.com/conventional-changelog/commitlint/commit/8efb44193058d286f7325327a6d33936b273ec91)) +- update dependency find-up to v5 ([#2060](https://github.com/conventional-changelog/commitlint/issues/2060)) ([25d42f4](https://github.com/conventional-changelog/commitlint/commit/25d42f4179396bdfbfc622a401d8ca8877102286)) +- update dependency fs-extra to v9 ([#1018](https://github.com/conventional-changelog/commitlint/issues/1018)) ([2df49fa](https://github.com/conventional-changelog/commitlint/commit/2df49fac907993ae78199a1012e918b0e2ff5621)) +- update dependency get-stdin to v8 ([#1938](https://github.com/conventional-changelog/commitlint/issues/1938)) ([f94a5c8](https://github.com/conventional-changelog/commitlint/commit/f94a5c82861523aa1cf407ffe062f99ecbbfb4e4)) + +- refactor!: drop support for node 8 (#1999) ([751f39f](https://github.com/conventional-changelog/commitlint/commit/751f39f284ef232574a176c3c11b1982ee544166)), closes [#1999](https://github.com/conventional-changelog/commitlint/issues/1999) + +### BREAKING CHANGES + +- remove node 8 from circle-ci checks + +also remove node 13 because we do not support experimental versions + +- docs: update node v10 to latest LTS 10 version + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +Co-authored-by: Cedric van Putten <me@bycedric.com> + +## [9.1.2](https://github.com/conventional-changelog/commitlint/compare/v9.1.1...v9.1.2) (2020-07-13) + +**Note:** Version bump only for package @commitlint/root + +## [9.1.1](https://github.com/conventional-changelog/commitlint/compare/v9.1.0...v9.1.1) (2020-06-30) + +### Bug Fixes + +- **load:** resolve plugins from extended configs ([#1976](https://github.com/conventional-changelog/commitlint/issues/1976)) ([d0f0eb9](https://github.com/conventional-changelog/commitlint/commit/d0f0eb9fde7efc2dff7a3aad190ded14303d3079)) +- mark internal packages as private [#972](https://github.com/conventional-changelog/commitlint/issues/972) ([#1970](https://github.com/conventional-changelog/commitlint/issues/1970)) ([2351124](https://github.com/conventional-changelog/commitlint/commit/23511248b2b4020ee87d04a838c7ce31e094c128)) + +# [9.1.0](https://github.com/conventional-changelog/commitlint/compare/v9.0.1...v9.1.0) (2020-06-21) + +### Bug Fixes + +- update dependency chalk to v4 ([#1275](https://github.com/conventional-changelog/commitlint/issues/1275)) ([a5d8fa1](https://github.com/conventional-changelog/commitlint/commit/a5d8fa118e8221361f14f5fd2b21d7aaad008a27)) +- update dependency conventional-changelog-conventionalcommits to v4.3.0 ([#1816](https://github.com/conventional-changelog/commitlint/issues/1816)) ([f99aeda](https://github.com/conventional-changelog/commitlint/commit/f99aeda068aabdb250e2c9819da7229a695154b9)) +- update dependency regenerator-runtime to v0.13.5 ([#1017](https://github.com/conventional-changelog/commitlint/issues/1017)) ([9c4fdf1](https://github.com/conventional-changelog/commitlint/commit/9c4fdf1b5f42677422532dad655af9aed9b43881)) +- update dependency semver to v7.3.2 ([#1369](https://github.com/conventional-changelog/commitlint/issues/1369)) ([3c09722](https://github.com/conventional-changelog/commitlint/commit/3c09722d2db85a94cd1f4bf25c6b4251b2c41bbb)) +- update dependency tar-fs to v2.1.0 ([#1103](https://github.com/conventional-changelog/commitlint/issues/1103)) ([7882036](https://github.com/conventional-changelog/commitlint/commit/788203689ebf51343ccf2e6eab530e19f4faf122)) +- update dependency tmp to v0.2.1 ([#1817](https://github.com/conventional-changelog/commitlint/issues/1817)) ([0ff72f4](https://github.com/conventional-changelog/commitlint/commit/0ff72f41bd48b3dd37f881f6fb11477d8f643735)) + +### Features + +- add local plugins support ([#1692](https://github.com/conventional-changelog/commitlint/issues/1692)) ([7b29c48](https://github.com/conventional-changelog/commitlint/commit/7b29c48321b513e091849fbb2cc2bf0e6ebb94a6)) +- enable multiple scopes in scope-enum and scope-case rules ([#901](https://github.com/conventional-changelog/commitlint/issues/901)) ([73632ce](https://github.com/conventional-changelog/commitlint/commit/73632cec299d5c3a980d07037c08633c843a8555)) + +## [9.0.1](https://github.com/conventional-changelog/commitlint/compare/v9.0.0...v9.0.1) (2020-05-26) + +### Bug Fixes + +- add missing @babel/runtime dep [#1738](https://github.com/conventional-changelog/commitlint/issues/1738) ([#1754](https://github.com/conventional-changelog/commitlint/issues/1754)) ([09afcd6](https://github.com/conventional-changelog/commitlint/commit/09afcd647a2c1d00538cf1c970e3790d936111f8)) + +# [9.0.0](https://github.com/conventional-changelog/commitlint/compare/v8.3.5...v9.0.0) (2020-05-21) + +### Bug Fixes + +- **cli:** add missing regenerator-runtime to dependencies ([#919](https://github.com/conventional-changelog/commitlint/issues/919)) ([ee5eac9](https://github.com/conventional-changelog/commitlint/commit/ee5eac98fa97ba5ba17030c8d2705aee5c7f3a3a)) +- [#840](https://github.com/conventional-changelog/commitlint/issues/840) add caret to lodash versions ([#843](https://github.com/conventional-changelog/commitlint/issues/843)) ([ffc0bac](https://github.com/conventional-changelog/commitlint/commit/ffc0bac26993acb2ab6a8fa51065f93c92b0d644)) +- drop support for 'improvement' type ([#899](https://github.com/conventional-changelog/commitlint/issues/899)) ([b27ab08](https://github.com/conventional-changelog/commitlint/commit/b27ab08544373cfb72a4808756e2e8126ea96a97)) +- **config-lerna-scopes:** correct lerna in peerDependencies ([#980](https://github.com/conventional-changelog/commitlint/issues/980)) ([f88f00d](https://github.com/conventional-changelog/commitlint/commit/f88f00d5d3d0a247b5635b50248bbb942b1ec962)) +- ignore empty commit messages [#615](https://github.com/conventional-changelog/commitlint/issues/615) ([#676](https://github.com/conventional-changelog/commitlint/issues/676)) ([c3eb1a7](https://github.com/conventional-changelog/commitlint/commit/c3eb1a76e08213d7ce1f200e35f8d5d6de18982a)) +- incorrect use of when in getForcedCaseFn ([#993](https://github.com/conventional-changelog/commitlint/issues/993)) ([34c11b8](https://github.com/conventional-changelog/commitlint/commit/34c11b8f3f233eca51866274a10d35231e8eb3d4)) +- update dependency semver to v7.1.3 ([#995](https://github.com/conventional-changelog/commitlint/issues/995)) ([4ee307a](https://github.com/conventional-changelog/commitlint/commit/4ee307a1f8c861ae5d8a038560d166c5d00ea8ba)) + +### Features + +- add async promise based rules methods into lint ([#976](https://github.com/conventional-changelog/commitlint/issues/976)) ([4443062](https://github.com/conventional-changelog/commitlint/commit/444306249b8a3d04524538f61edca8f6cc10d75f)) +- add possibility to extend from string ([#865](https://github.com/conventional-changelog/commitlint/issues/865)) ([056c6fe](https://github.com/conventional-changelog/commitlint/commit/056c6fef346b4e84f8b1f93038a9461a7cbd9beb)) +- passdown argv to lint command ([#891](https://github.com/conventional-changelog/commitlint/issues/891)) ([c49a57c](https://github.com/conventional-changelog/commitlint/commit/c49a57c77767b8213d565df3a8bbcd7369f36641)) +- **config-conventional:** footer/body-max-line ([#436](https://github.com/conventional-changelog/commitlint/issues/436)) ([8b394c9](https://github.com/conventional-changelog/commitlint/commit/8b394c94ffe37322d734bd4944add4a6cb2a4689)) +- **config-conventional:** increase header-max-length to 100 ([#860](https://github.com/conventional-changelog/commitlint/issues/860)) ([ff11998](https://github.com/conventional-changelog/commitlint/commit/ff11998e0cf6fcd4f03bc18ab27b1bdd6bf21906)), closes [#859](https://github.com/conventional-changelog/commitlint/issues/859) + +### BREAKING CHANGES + +- 'improvement' type will now be rejected by this config. + +## [8.3.5](https://github.com/conventional-changelog/commitlint/compare/v8.3.4...v8.3.5) (2020-01-15) + +### Bug Fixes + +- **is-ignored:** move types to dev dependencies ([#897](https://github.com/conventional-changelog/commitlint/issues/897)) ([aabc549](https://github.com/conventional-changelog/commitlint/commit/aabc549)) +- **resolve-extends:** move node types to dev dependencies ([#883](https://github.com/conventional-changelog/commitlint/issues/883)) ([b131a18](https://github.com/conventional-changelog/commitlint/commit/b131a18)), closes [#874](https://github.com/conventional-changelog/commitlint/issues/874) + +## [8.3.4](https://github.com/conventional-changelog/commitlint/compare/v8.3.3...v8.3.4) (2020-01-03) + +### Bug Fixes + +- **commitlint:** use new read pkg syntax ([#888](https://github.com/conventional-changelog/commitlint/issues/888)) ([6b3b9a9](https://github.com/conventional-changelog/commitlint/commit/6b3b9a9)) + +## [8.3.1](https://github.com/conventional-changelog/commitlint/compare/v8.3.0...v8.3.1) (2019-10-16) + +### Bug Fixes + +- **load:** resolve nested parser preset factories ([#831](https://github.com/conventional-changelog/commitlint/issues/831)) ([73a7df7](https://github.com/conventional-changelog/commitlint/commit/73a7df7)) + +# [8.3.0](https://github.com/conventional-changelog/commitlint/compare/v8.2.0...v8.3.0) (2019-10-16) + +### Features + +- **cli:** add helpurl flag ([#789](https://github.com/conventional-changelog/commitlint/issues/789)) ([75cef4e](https://github.com/conventional-changelog/commitlint/commit/75cef4e)) +- **config-conventional:** use parser with short breaking change support ([#821](https://github.com/conventional-changelog/commitlint/issues/821)) ([4b5300a](https://github.com/conventional-changelog/commitlint/commit/4b5300a)) +- **resolve-extends:** accept absolute path in extends ([#825](https://github.com/conventional-changelog/commitlint/issues/825)) ([ecac29f](https://github.com/conventional-changelog/commitlint/commit/ecac29f)) + +# [8.2.0](https://github.com/conventional-changelog/commitlint/compare/v8.1.0...v8.2.0) (2019-09-16) + +This release is versioned as minor change because some of the core components are rewritten to TypeScript. It's part of the full port to TypeScript, currently in progress at [#659](https://github.com/conventional-changelog/commitlint/issues/659). + +### Bug Fixes + +- pass defaultIgnores from configuration in @commitlint/cli ([#771](https://github.com/conventional-changelog/commitlint/issues/771)) ([a259014](https://github.com/conventional-changelog/commitlint/commit/a259014)) + +# [8.1.0](https://github.com/conventional-changelog/commitlint/compare/v8.0.0...v8.1.0) (2019-07-15) + +This release is versioned as minor change because some of the core components are rewritten to TypeScript. It's part of the full port to TypeScript, currently in progress at [#659](https://github.com/conventional-changelog/commitlint/issues/659). + +### Bug Fixes + +- add explicit dependency on chalk ([#687](https://github.com/conventional-changelog/commitlint/issues/687)) ([9075844](https://github.com/conventional-changelog/commitlint/commit/9075844)) +- pass ignores from configuration in @commitlint/cli ([#668](https://github.com/conventional-changelog/commitlint/issues/668)) ([da99aaa](https://github.com/conventional-changelog/commitlint/commit/da99aaa)) + +# [8.0.0](https://github.com/conventional-changelog/commitlint/compare/v7.6.2...v8.0.0) + +### Breaking Changes + +- fix: avoid excessive help text #606 (#637) + The commitlint default formatter is now silent for reports without warnings or errors. + Scripts relying on the success output of commitlint can restore the former output by specifying the --verbose flag. + +## [7.6.2](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.2) + +- Republish packages with out of sync artifacts + +## [7.6.1](https://github.com/conventional-changelog/commitlint/compare/v7.6.0...v7.6.1) (2019-05-09) + +### Bug Fixes + +- ensure format() is available as commonjs default export [#645](https://github.com/conventional-changelog/commitlint/issues/645) ([ec3da92](https://github.com/conventional-changelog/commitlint/commit/ec3da92)) +- handle absolute config paths correctly [#647](https://github.com/conventional-changelog/commitlint/issues/647) ([49b3a77](https://github.com/conventional-changelog/commitlint/commit/49b3a77)) + +# [7.6.0](https://github.com/conventional-changelog/commitlint/compare/v7.5.2...v7.6.0) (2019-05-06) + +### Bug Fixes + +- add @lerna/project to repository dependencies ([#598](https://github.com/conventional-changelog/commitlint/issues/598)) ([56f03ee](https://github.com/conventional-changelog/commitlint/commit/56f03ee)) +- address security warnings for dev dependencies ([3e0d824](https://github.com/conventional-changelog/commitlint/commit/3e0d824)) +- avoid excessive help text [#606](https://github.com/conventional-changelog/commitlint/issues/606) ([#637](https://github.com/conventional-changelog/commitlint/issues/637)) ([8f3c3b1](https://github.com/conventional-changelog/commitlint/commit/8f3c3b1)) +- don't merge array properties with custom opts ([#616](https://github.com/conventional-changelog/commitlint/issues/616)) ([f321647](https://github.com/conventional-changelog/commitlint/commit/f321647)), closes [#594](https://github.com/conventional-changelog/commitlint/issues/594) +- remove unneeded dev dependency ([6ccaf79](https://github.com/conventional-changelog/commitlint/commit/6ccaf79)) +- update cosmiconfig to safe >=5 [#599](https://github.com/conventional-changelog/commitlint/issues/599) ([f186fcb](https://github.com/conventional-changelog/commitlint/commit/f186fcb)) +- use sander.readFile correctly ([#448](https://github.com/conventional-changelog/commitlint/issues/448)) ([#630](https://github.com/conventional-changelog/commitlint/issues/630)) ([8e47985](https://github.com/conventional-changelog/commitlint/commit/8e47985)) + +### Features + +- **resolve-extends:** accept short scoped package names in extends ([#597](https://github.com/conventional-changelog/commitlint/issues/597)) ([ba90e8e](https://github.com/conventional-changelog/commitlint/commit/ba90e8e)) +- adds support for plugins ([#228](https://github.com/conventional-changelog/commitlint/issues/228)) ([#588](https://github.com/conventional-changelog/commitlint/issues/588)) ([cea4564](https://github.com/conventional-changelog/commitlint/commit/cea4564)) +- config based is-ignored overrides ([#595](https://github.com/conventional-changelog/commitlint/issues/595)) ([2434d71](https://github.com/conventional-changelog/commitlint/commit/2434d71)) + +## [7.5.2](https://github.com/conventional-changelog/commitlint/compare/v7.5.1...v7.5.2) (2019-02-11) + +### Bug Fixes + +- failing sentence-case for subjects with slashes ([#574](https://github.com/conventional-changelog/commitlint/issues/574)) ([48a8602](https://github.com/conventional-changelog/commitlint/commit/48a8602)) +- **cli:** replace old links with new organisation links ([#578](https://github.com/conventional-changelog/commitlint/issues/578)) ([4075903](https://github.com/conventional-changelog/commitlint/commit/4075903)) + +## [7.5.1](https://github.com/conventional-changelog/commitlint/compare/v7.5.0...v7.5.1) (2019-02-09) + +### Bug Fixes + +- **is-ignored:** ignore bitbuckets automatic merge ([#573](https://github.com/conventional-changelog/commitlint/issues/573)) ([e5bdc5c](https://github.com/conventional-changelog/commitlint/commit/e5bdc5c)) + +<a name="7.5.0"></a> + +# [7.5.0](https://github.com/conventional-changelog/commitlint/compare/v7.4.0...v7.5.0) (2019-01-31) + +### Bug Fixes + +- `sentence-case` allow upper-case characters in first word ([#531](https://github.com/conventional-changelog/commitlint/issues/531)) ([5a6a4a8](https://github.com/conventional-changelog/commitlint/commit/5a6a4a8)), closes [#211](https://github.com/conventional-changelog/commitlint/issues/211) +- **resolve-extends:** override array on extending rules ([#470](https://github.com/conventional-changelog/commitlint/issues/470)) ([#539](https://github.com/conventional-changelog/commitlint/issues/539)) ([b35000c](https://github.com/conventional-changelog/commitlint/commit/b35000c)) +- all broken website references ([#564](https://github.com/conventional-changelog/commitlint/issues/564)) ([82eeb5a](https://github.com/conventional-changelog/commitlint/commit/82eeb5a)) +- cleanup message for input with no config ([#519](https://github.com/conventional-changelog/commitlint/issues/519)) ([7d9e760](https://github.com/conventional-changelog/commitlint/commit/7d9e760)) +- **cli:** avoid linebreak in empty input ([#523](https://github.com/conventional-changelog/commitlint/issues/523)) ([3141882](https://github.com/conventional-changelog/commitlint/commit/3141882)) +- mark optional parameter with undefined ([#553](https://github.com/conventional-changelog/commitlint/issues/553)) ([6720284](https://github.com/conventional-changelog/commitlint/commit/6720284)) +- replace all repository references with conventional changelog ([#561](https://github.com/conventional-changelog/commitlint/issues/561)) ([6c3afcd](https://github.com/conventional-changelog/commitlint/commit/6c3afcd)) +- replace all website references with conventional changelog ([#563](https://github.com/conventional-changelog/commitlint/issues/563)) ([6b86fb1](https://github.com/conventional-changelog/commitlint/commit/6b86fb1)) +- replace old require-uncached with import-fresh ([#533](https://github.com/conventional-changelog/commitlint/issues/533)) ([b636e8c](https://github.com/conventional-changelog/commitlint/commit/b636e8c)) +- resolve path to commit message for git submodules ([83b1a47](https://github.com/conventional-changelog/commitlint/commit/83b1a47)) +- slash in scope [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([#529](https://github.com/conventional-changelog/commitlint/issues/529)) ([b2b63e5](https://github.com/conventional-changelog/commitlint/commit/b2b63e5)) +- store concatenated array to problems variable ([#551](https://github.com/conventional-changelog/commitlint/issues/551)) ([434a70f](https://github.com/conventional-changelog/commitlint/commit/434a70f)) + +### Features + +- add support for git submodules ([cc575fa](https://github.com/conventional-changelog/commitlint/commit/cc575fa)) +- **rule-header-length:** show current header length ([6d61c4f](https://github.com/conventional-changelog/commitlint/commit/6d61c4f)) + +<a name="7.4.0"></a> + +# [7.4.0](https://github.com/conventional-changelog/commitlint/compare/v7.3.2...v7.4.0) (2019-01-27) + +### Bug Fixes + +- correction to need help link ([#540](https://github.com/conventional-changelog/commitlint/issues/540)) ([fa6168a](https://github.com/conventional-changelog/commitlint/commit/fa6168a)) + +### Features + +- **rules:** create header-case and header-full-stop rules ([#547](https://github.com/conventional-changelog/commitlint/issues/547)) ([4c36cbd](https://github.com/conventional-changelog/commitlint/commit/4c36cbd)) + +<a name="7.3.2"></a> + +## [7.3.2](https://github.com/conventional-changelog/commitlint/compare/v7.3.1...v7.3.2) (2019-01-15) + +### Bug Fixes + +- move loadsh to dependencies ([1bb66a4](https://github.com/conventional-changelog/commitlint/commit/1bb66a4)) + +<a name="7.3.1"></a> + +## [7.3.1](https://github.com/conventional-changelog/commitlint/compare/v7.3.0...v7.3.1) (2019-01-11) + +**Note:** Version bump only for package @commitlint/root + +<a name="7.3.0"></a> + +# [7.3.0](https://github.com/conventional-changelog/commitlint/compare/v7.2.1...v7.3.0) (2019-01-11) + +### Bug Fixes + +- **format:** add new line to result ([#518](https://github.com/conventional-changelog/commitlint/issues/518)) ([f1d443b](https://github.com/conventional-changelog/commitlint/commit/f1d443b)), closes [#504](https://github.com/conventional-changelog/commitlint/issues/504) +- add fallback with husky git params to deprecation handling ([#498](https://github.com/conventional-changelog/commitlint/issues/498)) ([5a34b8c](https://github.com/conventional-changelog/commitlint/commit/5a34b8c)) +- avoid truncated output on macOS ([#503](https://github.com/conventional-changelog/commitlint/issues/503)) ([3192368](https://github.com/conventional-changelog/commitlint/commit/3192368)) +- fall back to conventional commit-parser settings for missing keys ([#496](https://github.com/conventional-changelog/commitlint/issues/496)) ([831a141](https://github.com/conventional-changelog/commitlint/commit/831a141)), closes [#399](https://github.com/conventional-changelog/commitlint/issues/399) +- respect String.protoype.repeat API contract ([f27e7ac](https://github.com/conventional-changelog/commitlint/commit/f27e7ac)) +- update to security-patched dependency versions ([97c033b](https://github.com/conventional-changelog/commitlint/commit/97c033b)) +- use correct label for failing empty subjects ([#481](https://github.com/conventional-changelog/commitlint/issues/481)) ([2e7e34d](https://github.com/conventional-changelog/commitlint/commit/2e7e34d)), closes [#476](https://github.com/conventional-changelog/commitlint/issues/476) + +### Features + +- check stage before entering prompt ([#495](https://github.com/conventional-changelog/commitlint/issues/495)) ([3b3667a](https://github.com/conventional-changelog/commitlint/commit/3b3667a)), closes [#51](https://github.com/conventional-changelog/commitlint/issues/51) [#51](https://github.com/conventional-changelog/commitlint/issues/51) +- warn on empty config ([#491](https://github.com/conventional-changelog/commitlint/issues/491)) ([b6bd36e](https://github.com/conventional-changelog/commitlint/commit/b6bd36e)), closes [#107](https://github.com/conventional-changelog/commitlint/issues/107) [#107](https://github.com/conventional-changelog/commitlint/issues/107) + +<a name="7.2.1"></a> + +## [7.2.1](https://github.com/conventional-changelog/commitlint/compare/v7.2.0...v7.2.1) (2018-10-11) + +### Bug Fixes + +- improve format module resolving ([#464](https://github.com/conventional-changelog/commitlint/issues/464)) ([baed8b1](https://github.com/conventional-changelog/commitlint/commit/baed8b1)) + +<a name="7.2.0"></a> + +# [7.2.0](https://github.com/conventional-changelog/commitlint/compare/v7.1.2...v7.2.0) (2018-10-05) + +### Bug Fixes + +- **rules:** include possible body offset in footer leading blank ([ff0111a](https://github.com/conventional-changelog/commitlint/commit/ff0111a)) +- handle case rules for numerics correctly ([cadcfed](https://github.com/conventional-changelog/commitlint/commit/cadcfed)) +- ignore merge messages with text after newline ([b32bc93](https://github.com/conventional-changelog/commitlint/commit/b32bc93)) +- use grouped regex to ignore merge commits ([#439](https://github.com/conventional-changelog/commitlint/issues/439)) ([905e9d5](https://github.com/conventional-changelog/commitlint/commit/905e9d5)) + +### Features + +- **cli:** add format option for report output ([1ecf097](https://github.com/conventional-changelog/commitlint/commit/1ecf097)) +- **load:** add formatter option with default value ([b0e63d9](https://github.com/conventional-changelog/commitlint/commit/b0e63d9)) + +<a name="7.1.2"></a> + +## [7.1.2](https://github.com/conventional-changelog/commitlint/compare/v7.1.1...v7.1.2) (2018-09-04) + +**Note:** Version bump only for package @commitlint/root + +<a name="7.1.0"></a> + +# [7.1.0](https://github.com/conventional-changelog/commitlint/compare/v7.0.1...v7.1.0) (2018-08-29) + +### Features + +- **wildcards:** add new wildcard patterns [#315](https://github.com/conventional-changelog/commitlint/issues/315) ([e9ea17f](https://github.com/conventional-changelog/commitlint/commit/e9ea17f)) +- add max line length to body/footer ([542f50e](https://github.com/conventional-changelog/commitlint/commit/542f50e)) + +<a name="6.2.0"></a> + +# [6.2.0](https://github.com/conventional-changelog/commitlint/compare/v6.1.3...v6.2.0) (2018-05-01) + +### Features + +- print commit message when the message is invalid ([86c34f1](https://github.com/conventional-changelog/commitlint/commit/86c34f1)), closes [#222](https://github.com/conventional-changelog/commitlint/issues/222) +- **rules:** support array for scope-case and type-case ([#312](https://github.com/conventional-changelog/commitlint/issues/312)) ([1f46b9f](https://github.com/conventional-changelog/commitlint/commit/1f46b9f)), closes [#307](https://github.com/conventional-changelog/commitlint/issues/307) + +<a name="6.1.1"></a> + +## [6.1.1](https://github.com/conventional-changelog/commitlint/compare/v6.1.0...v6.1.1) (2018-02-22) + +### Bug Fixes + +- **ensure:** ignore word delimiters for case matching [#291](https://github.com/conventional-changelog/commitlint/issues/291) ([fa69299](https://github.com/conventional-changelog/commitlint/commit/fa69299)) + +<a name="6.1.0"></a> + +# [6.1.0](https://github.com/conventional-changelog/commitlint/compare/v6.0.5...v6.1.0) (2018-02-03) + +### Bug Fixes + +- **parse:** default to angular preset for empty parserOpts ([#265](https://github.com/conventional-changelog/commitlint/issues/265)) ([ccb03b4](https://github.com/conventional-changelog/commitlint/commit/ccb03b4)), closes [#262](https://github.com/conventional-changelog/commitlint/issues/262) + +### Features + +- add "--config" option ([#261](https://github.com/conventional-changelog/commitlint/issues/261)) ([2c03ec6](https://github.com/conventional-changelog/commitlint/commit/2c03ec6)) + +<a name="6.0.5"></a> + +## [6.0.5](https://github.com/conventional-changelog/commitlint/compare/v6.0.4...v6.0.5) (2018-01-31) + +### Bug Fixes + +- remove utils from prod dependencies ([4fb858a](https://github.com/conventional-changelog/commitlint/commit/4fb858a)) + +<a name="6.0.4"></a> + +## [6.0.4](https://github.com/conventional-changelog/commitlint/compare/v6.0.3...v6.0.4) (2018-01-31) + +### Bug Fixes + +- remove faulty bin entry [#259](https://github.com/conventional-changelog/commitlint/issues/259) ([beafbc6](https://github.com/conventional-changelog/commitlint/commit/beafbc6)) + +<a name="6.0.3"></a> + +## [6.0.3](https://github.com/conventional-changelog/commitlint/compare/v6.0.2...v6.0.3) (2018-01-31) + +### Bug Fixes + +- update dependency cosmiconfig to ^4.0.0 ([#234](https://github.com/conventional-changelog/commitlint/issues/234)) ([7f94ac5](https://github.com/conventional-changelog/commitlint/commit/7f94ac5)) +- update dependency semver to v5.5.0 ([#236](https://github.com/conventional-changelog/commitlint/issues/236)) ([6c52bd9](https://github.com/conventional-changelog/commitlint/commit/6c52bd9)) + +<a name="6.0.2"></a> + +## [6.0.2](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.2) (2018-01-12) + +### Bug Fixes + +- ignore branch merges with multiple newlines ([#227](https://github.com/conventional-changelog/commitlint/issues/227)) ([1f0c5ca](https://github.com/conventional-changelog/commitlint/commit/1f0c5ca)) +- remove typo in error message of type-case ([cb577cb](https://github.com/conventional-changelog/commitlint/commit/cb577cb)) + +<a name="6.0.1"></a> + +## [6.0.1](https://github.com/conventional-changelog/commitlint/compare/v6.0.0...v6.0.1) (2018-01-09) + +**Note:** Version bump only for package @commitlint/root + +<a name="6.0.0"></a> + +# [6.0.0](https://github.com/conventional-changelog/commitlint/compare/v5.2.6...v6.0.0) (2018-01-09) + +### Bug Fixes + +- allow [0] shorthand ([84cf938](https://github.com/conventional-changelog/commitlint/commit/84cf938)) +- correctly resolve parserOpts [#115](https://github.com/conventional-changelog/commitlint/issues/115) [#95](https://github.com/conventional-changelog/commitlint/issues/95) ([1353dd5](https://github.com/conventional-changelog/commitlint/commit/1353dd5)) +- ignore branch merges with newlines ([#214](https://github.com/conventional-changelog/commitlint/issues/214)) ([c94c4dc](https://github.com/conventional-changelog/commitlint/commit/c94c4dc)) +- sanitize ensure.case [#211](https://github.com/conventional-changelog/commitlint/issues/211) ([#217](https://github.com/conventional-changelog/commitlint/issues/217)) ([03aeefc](https://github.com/conventional-changelog/commitlint/commit/03aeefc)) + +### Styles + +- validate rule configuration ([edf7187](https://github.com/conventional-changelog/commitlint/commit/edf7187)) + +### BREAKING CHANGES + +- Due to additional validation while reading + commitlint config, previously ignored rule + settings are now considered critical errors + when starting the CLI. The new behaviour is + designed to help developers find issues with + their configuration quicker. + +<a name="5.2.6"></a> + +## [5.2.6](https://github.com/conventional-changelog/commitlint/compare/v5.2.5...v5.2.6) (2017-12-21) + +### Bug Fixes + +- ignore semver commits with chore type ([cdbb085](https://github.com/conventional-changelog/commitlint/commit/cdbb085)), closes [#198](https://github.com/conventional-changelog/commitlint/issues/198) + +<a name="5.2.5"></a> + +## [5.2.5](https://github.com/conventional-changelog/commitlint/compare/v5.2.4...v5.2.5) (2017-12-08) + +### Bug Fixes + +- **core:** use correct report message [#192](https://github.com/conventional-changelog/commitlint/issues/192) ([e3a78bc](https://github.com/conventional-changelog/commitlint/commit/e3a78bc)) + +<a name="5.2.4"></a> + +## [5.2.4](https://github.com/conventional-changelog/commitlint/compare/v5.2.3...v5.2.4) (2017-12-08) + +**Note:** Version bump only for package @commitlint/root + +<a name="5.2.3"></a> + +## [5.2.3](https://github.com/conventional-changelog/commitlint/compare/v5.2.2...v5.2.3) (2017-12-05) + +### Bug Fixes + +- **cli:** add support for GIT_PARAMS on windows ([c62bd41](https://github.com/conventional-changelog/commitlint/commit/c62bd41)), closes [#103](https://github.com/conventional-changelog/commitlint/issues/103) [#175](https://github.com/conventional-changelog/commitlint/issues/175) + +<a name="5.2.2"></a> + +## [5.2.2](https://github.com/conventional-changelog/commitlint/compare/v5.2.1...v5.2.2) (2017-11-30) + +### Bug Fixes + +- **travis-cli:** read push commits directly ([9bc56c6](https://github.com/conventional-changelog/commitlint/commit/9bc56c6)) + +<a name="5.2.1"></a> + +## [5.2.1](https://github.com/conventional-changelog/commitlint/compare/v5.2.0...v5.2.1) (2017-11-30) + +### Bug Fixes + +- **travis-cli:** lint ranges only for pr builds ([85b201f](https://github.com/conventional-changelog/commitlint/commit/85b201f)) + +<a name="5.2.0"></a> + +# [5.2.0](https://github.com/conventional-changelog/commitlint/compare/v5.1.3...v5.2.0) (2017-11-30) + +### Bug Fixes + +- consider pull requests from forks ([4653c2c](https://github.com/conventional-changelog/commitlint/commit/4653c2c)) + +### Features + +- **babel-preset-commitlint:** add jsx tranform ([#163](https://github.com/conventional-changelog/commitlint/issues/163)) ([5190241](https://github.com/conventional-changelog/commitlint/commit/5190241)) + +<a name="5.1.3"></a> + +## [5.1.3](https://github.com/conventional-changelog/commitlint/compare/v5.1.2...v5.1.3) (2017-11-24) + +### Bug Fixes + +- **config-conventional:** add missing applicable attribute to type-enum ([a8db0b1](https://github.com/conventional-changelog/commitlint/commit/a8db0b1)) + +<a name="5.1.2"></a> + +## [5.1.2](https://github.com/conventional-changelog/commitlint/compare/v5.1.1...v5.1.2) (2017-11-24) + +### Bug Fixes + +- **prompt:** apply forced cases properly ([3a569a7](https://github.com/conventional-changelog/commitlint/commit/3a569a7)), closes [#145](https://github.com/conventional-changelog/commitlint/issues/145) + +<a name="5.1.1"></a> + +## [5.1.1](https://github.com/conventional-changelog/commitlint/compare/v5.1.0...v5.1.1) (2017-11-24) + +### Bug Fixes + +- set access for npm ([8aeaec2](https://github.com/conventional-changelog/commitlint/commit/8aeaec2)) + +<a name="5.1.0"></a> + +# [5.1.0](https://github.com/conventional-changelog/commitlint/compare/v5.0.2...v5.1.0) (2017-11-24) + +### Bug Fixes + +- update dependency concurrently to v3.5.1 ([#147](https://github.com/conventional-changelog/commitlint/issues/147)) ([a809d0f](https://github.com/conventional-changelog/commitlint/commit/a809d0f)) +- **config-conventional:** remove unneeded dependency ([d0e62fd](https://github.com/conventional-changelog/commitlint/commit/d0e62fd)) + +### Features + +- **prompt:** add description for build, ci and revert ([#148](https://github.com/conventional-changelog/commitlint/issues/148)) ([ee6ec6e](https://github.com/conventional-changelog/commitlint/commit/ee6ec6e)) +- **travis-cli:** add reusable travis command line interface ([3e6e6a8](https://github.com/conventional-changelog/commitlint/commit/3e6e6a8)) +- add conventional-changelog package ([8bb0a85](https://github.com/conventional-changelog/commitlint/commit/8bb0a85)) + +<a name="5.0.1"></a> + +## [5.0.1](https://github.com/conventional-changelog/commitlint/compare/v5.0.0...v5.0.1) (2017-11-19) + +### Bug Fixes + +- **core:** fall back to globally installed config if available ([#127](https://github.com/conventional-changelog/commitlint/issues/127)) ([8612eb3](https://github.com/conventional-changelog/commitlint/commit/8612eb3)) + +<a name="5.0.0"></a> + +# [5.0.0](https://github.com/conventional-changelog/commitlint/compare/v4.3.0...v5.0.0) (2017-11-18) + +### Bug fixes + +- core: interprets array values for subject-case correctly + +### Features + +- config-angular: disallow subject with uppercase first character, #114 +- config-angular-type-enum: remove chore type + +BREAKING CHANGE + +TL;DR + +- chore is no longer a valid commit type +- subject with leading capitalized letter are forbidden now + +Angular has removed the chore type from their +conventions as of January 2017 + +See [angular/angular@dff6ee](https://github.com/angular/angular/commit/dff6ee32725197bdb81f3f63c5bd9805f2ed22bb#diff-6a3371457528722a734f3c51d9238c13L204) +for reference + +This removes the previous chore type from the list +of allowed types. + +Projects using the Angular commit convention will identify commits with chore type as faulty. + +Also, formerly working commit messages are now considered problems: + +- type: SOME MESSAGE +- type: SomeMessage +- type: Some Message + +<a name="4.3.0"></a> + +# [4.3.0](https://github.com/conventional-changelog/commitlint/compare/v4.2.2...v4.3.0) (2017-11-08) + +### Bug Fixes +- **core:** deprecate nlp rules ([bbab1d8](https://github.com/conventional-changelog/commitlint/commit/bbab1d8)), closes [#54](https://github.com/conventional-changelog/commitlint/issues/54) +- **core:** ignore comments ([f3beda1](https://github.com/conventional-changelog/commitlint/commit/f3beda1)), closes [#78](https://github.com/conventional-changelog/commitlint/issues/78) ### Features -* add references-empty rule ([4fc8d5d](https://github.com/conventional-changelog/commitlint/commit/4fc8d5d)) +- add references-empty rule ([4fc8d5d](https://github.com/conventional-changelog/commitlint/commit/4fc8d5d)) diff --git a/Dockerfile.ci b/Dockerfile.ci new file mode 100644 index 0000000000..3b9351355c --- /dev/null +++ b/Dockerfile.ci @@ -0,0 +1,37 @@ +# syntax=docker/dockerfile:1 +FROM docker.io/library/node:18-alpine AS builder +WORKDIR /src +COPY . ./ +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-pnpm-scopes && \ + npm pack @commitlint/config-nx-scopes && \ + npm pack @commitlint/ensure && \ + npm pack @commitlint/execute-rule && \ + npm pack @commitlint/format && \ + npm pack @commitlint/is-ignored && \ + npm pack @commitlint/lint && \ + npm pack @commitlint/load && \ + npm pack @commitlint/message && \ + npm pack @commitlint/parse && \ + npm pack @commitlint/read && \ + npm pack @commitlint/resolve-extends && \ + npm pack @commitlint/rules && \ + npm pack @commitlint/to-lines && \ + npm pack @commitlint/top-level && \ + npm pack @commitlint/types && \ + # Default commitlint config + npm pack @commitlint/config-conventional + +FROM docker.io/library/node:18-alpine +RUN apk add --no-cache git +COPY --from=builder /src/*.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/Dockerfile b/Dockerfile.dev similarity index 74% rename from Dockerfile rename to Dockerfile.dev index a85d53ac6f..a00826f979 100644 --- a/Dockerfile +++ b/Dockerfile.dev @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM brainpower/node-cubicle WORKDIR /root/repo diff --git a/README.md b/README.md index ea8d529428..2219e7aa4a 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,73 @@ -# [Get Started](https://conventional-changelog.github.io/commitlint/#/?id=getting-started) | [Let's chat][12] ![slack][11] | [Website](https://conventional-changelog.github.io/commitlint) +# [Get Started](https://commitlint.js.org/guides/getting-started) | [Website](https://commitlint.js.org) > Lint commit messages <p align="center"> - <img width="600" src="docs/assets/commitlint.svg"> + <img width="600" src="docs/public/assets/commitlint.svg"> </p> -> Demo generated with [svg-term-cli](https://github.com/marionebl/svg-term-cli) +> Demo generated with [svg-term-cli](https://github.com/marionebl/svg-term-cli) > -> `cat docs/assets/commitlint.json | svg-term --out docs/assets/commitlint.svg --frame --profile=Seti --height=20 --width=80` +> `cat docs/assets/commitlint.json | svg-term --out docs/public/assets/commitlint.svg --frame --profile=Seti --height=20 --width=80` -[![npm latest][2]][3] [![CircleCI][4]][5] <!-- [![TravisCI][6]][7] --> +[![npm latest][2]][3] [![node compatibility][13]][14] [![Github Actions][4]][5] - -* 🚓 Be a good `commitizen` -* 📦 Share configuration via `npm` -* 🤖 Tap into `conventional-changelog` +- 🚓 Be a good `commitizen` +- 📦 Share configuration via `npm` +- 🤖 Tap into `conventional-changelog` ## Contents -* [What is commitlint](#what-is-commitlint) - * [Benefits using commitlint](#benefits-using-commitlint) -* [Getting started](#getting-started) -* [CLI](#cli) -* [Config](#config) -* [Shared configuration](#shared-configuration) -* [API](#api) -* [Tools](#tools) -* [Roadmap](#roadmap) -* [Version Support](#version-support) -* [Related projects](#related-projects) -* [License](#license) -* [Development](#development) - * [Install and run](#install-and-run) - * [Publishing a release](#publishing-a-release) - -* * * +- [Get Started | Website](#get-started--website) + - [Contents](#contents) + - [What is commitlint](#what-is-commitlint) + - [Benefits of using commitlint](#benefits-of-using-commitlint) + - [Getting started](#getting-started) + - [CLI](#cli) + - [Config](#config) + - [Shared configuration](#shared-configuration) + - [Documentation](#documentation) + - [API](#api) + - [Tools](#tools) + - [Roadmap](#roadmap) + - [Version Support and Releases](#version-support-and-releases) + - [Releases](#releases) + - [Related projects](#related-projects) + - [License](#license) + - [Development](#development) + - [Install and run](#install-and-run) + +--- ## What is commitlint + commitlint checks if your commit messages meet the [conventional commit format](https://conventionalcommits.org). In general the pattern mostly looks like this: + ```sh -type(scope?): subject #scope is optional +type(scope?): subject #scope is optional; multiple scopes are supported (current delimiter options: "/", "\" and ",") ``` + Real world examples can look like this: -``` + +```text chore: run tests on travis ci ``` -``` + +```text fix(server): send cors headers ``` -``` + +```text feat(blog): add comment section ``` -Common types according to [commitlint-config-conventional (based on the the Angular convention)](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional#type-enum) can be: + +Common types according to [commitlint-config-conventional (based on the Angular convention)](https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/config-conventional#type-enum) can be: + - build -- ci - chore +- ci - docs - feat - fix @@ -69,114 +79,123 @@ Common types according to [commitlint-config-conventional (based on the the Angu These can be modified by [your own configuration](#config). -### Benefits using commitlint +### Benefits of using commitlint + - [Why Use Conventional Commits?](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits) - ["The perks of committing with conventions" (Talk slides)](https://slides.com/marionebl/the-perks-of-committing-with-conventions#/) - ## Getting started -```sh -# Install commitlint cli and conventional config -npm install --save-dev @commitlint/{config-conventional,cli} -# For Windows: -npm install --save-dev @commitlint/config-conventional @commitlint/cli - -# Configure commitlint to use conventional config -echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js -``` - - -To lint commits before they are created you can use Husky's 'commit-msg' hook: -```json -{ - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - } -} -``` - - -**Detailed Setup instructions** - -* [Local setup](https://conventional-changelog.github.io/commitlint/#/guides-local-setup) - Lint messages on commit with husky -* [CI setup](https://conventional-changelog.github.io/commitlint/#/guides-ci-setup) - Lint messages during CI builds - +- [Local setup](https://commitlint.js.org/guides/local-setup) - Lint messages on commit with husky +- [CI setup](https://commitlint.js.org/guides/ci-setup) - Lint messages during CI builds ## CLI -* Primary way to interact with commitlint. -* `npm install --save-dev @commitlint/cli` -* Packages: [cli](./@commitlint/cli) +- Primary way to interact with commitlint. +- `npm install --save-dev @commitlint/cli` +- Packages: [cli](./@commitlint/cli) ## Config -* Configuration is picked up from `commitlint.config.js`, `.commitlintrc.js`, `.commitlintrc.json`, or `.commitlintrc.yml` file or a `commitlint` field in `package.json` -* 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/index.js) +- Configuration is picked up from: + - `.commitlintrc` + - `.commitlintrc.json` + - `.commitlintrc.yaml` + - `.commitlintrc.yml` + - `.commitlintrc.js` + - `.commitlintrc.cjs` + - `.commitlintrc.mjs` + - `.commitlintrc.ts` + - `.commitlintrc.cts` + - `commitlint.config.js` + - `commitlint.config.cjs` + - `commitlint.config.mjs` + - `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) + +### Important note about Node 24+ + +Node v24 changes the way that modules are loaded, and this includes the commitlint config file. If your project does not contain a `package.json`, commitlint may fail to load the config, resulting in a `Please add rules to your commitlint.config.js` error message. This can be fixed by doing either of the following: + +- Add a `package.json` file, declaring your project as an ES6 module. This can be done easily by running `npm init es6`. +- Rename the config file from `commitlint.config.js` to `commitlint.config.mjs`. ## Shared configuration A number of shared configurations are available to install and use with `commitlint`: -* [@commitlint/config-angular](./@commitlint/config-angular) -* [@commitlint/config-conventional](./@commitlint/config-conventional) -* [@commitlint/config-lerna-scopes](./@commitlint/config-lerna-scopes) -* [@commitlint/config-patternplate](./@commitlint/config-patternplate) -* [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) +- [@commitlint/config-angular](./@commitlint/config-angular) +- [@commitlint/config-conventional](./@commitlint/config-conventional) +- [@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) + +> ⚠️ 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`. + +## Documentation ->⚠️ 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`. +Check the [main website](https://commitlint.js.org/). ## API -* Alternative, programmatic way to interact with `commitlint` -* Packages: - * [format](./@commitlint/format) - Format commitlint reports - * [lint](./@commitlint/lint) - Lint a string against commitlint rules - * [load](./@commitlint/load) - Load shared commitlint configuration - * [read](./@commitlint/read) - Read commit messages from a specified range or last edit -* See [API](./docs/reference-api.md) for a complete list of methods and examples +- Alternative, programmatic way to interact with `commitlint` +- Packages: + - [format](./@commitlint/format) - Format commitlint reports + - [lint](./@commitlint/lint) - Lint a string against commitlint rules + - [load](./@commitlint/load) - Load shared commitlint configuration + - [read](./@commitlint/read) - Read commit messages from a specified range or last edit +- See [API](./docs/api) for a complete list of methods and examples ## Tools -* [commitizen adapter](./@commitlint/prompt) -* [prompt](./@commitlint/prompt-cli) +- [commitizen adapter](./@commitlint/prompt) +- [prompt](./@commitlint/prompt-cli) ## Roadmap +`commitlint` is considered stable and is used in various projects as a development tool. + > **Ideas**: [conventional-changelog/commitlint#94](https://github.com/conventional-changelog/commitlint/issues/94) -`commitlint` is considered stable and is used in various projects as development tool. +## Version Support and Releases + +- Node.js [LTS](https://github.com/nodejs/LTS#lts-schedule) `>= 18` +- git `>= 2.13.2` -We identify **ease of adoption** and **developer experience** as fields where there -is room and need for improvement. The items on the roadmap should enhance `commitlint` regarding those aspects. +### Releases -* [x] **Adoption**: Provide reusable Travis CI integration: `@commitlint/travis-cli` (https://github.com/conventional-changelog/commitlint/releases/tag/v5.1.0) -* [ ] **DX**: Support PR squash scenario via [ahmed-taj/commitlint-bot](https://github.com/ahmed-taj/commitlint-bot/) and `@commitlint/travis-cli` -* [ ] **Adoption**: Make [ahmed-taj/commitlint-bot](https://github.com/ahmed-taj/commitlint-bot/) configurable via `commitlint` configuration -* [ ] **Adoption**: Create `commitlint init` -* [ ] **DX**: Extend the configuration schema to allow for additional fields (descriptions, examples, fixes) on both the rule and value level -* [ ] **DX**: Incorporate an extended version of [lennym/commit-template](https://github.com/lennym/commit-template) deducing a template from commitlint configuration -* [ ] **DX**: Rewrite `@commitlint/prompt` for better usability (might involve a lot of yak-shaving) +Security patches will be applied to versions which are not yet EOL.\ +Features will only be applied to the current main version. -## Version Support +| 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 | -* Node.js [LTS](https://github.com/nodejs/LTS#lts-schedule) `>= 6` -* git `>= 2.13.2` +EOL is usually after around a year. + +We're not a sponsored OSS project. Therefore we can't promise that we will release patch versions for older releases in a timely manner.\ +If you are stuck on an older version and need a security patch we're happy if you can provide a PR. ## Related projects -* [conventional-changelog](https://git.io/v18sw) – Generate a changelog from conventional commit history -* [commitizen](https://git.io/vwTym) – Simple commit conventions for internet citizens -* [create-semantic-module](https://git.io/vFjFg) – CLI for quickly integrating commitizen and commitlint in new or existing projects -* [commitlint.io](https://github.com/tomasen/commitlintio) - helps your project to ensures nice and tidy commit messages without needing any download or installation +- [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog) + Generate a changelog from conventional commit history +- [commitizen](https://github.com/commitizen/cz-cli) + Simple commit conventions for internet citizens +- [create-semantic-module](https://github.com/jlegrone/create-semantic-module) + CLI for quickly integrating commitizen and commitlint in new or existing projects ## License + Copyright by @marionebl. All `commitlint` packages are released under the MIT license. ## Development @@ -191,34 +210,19 @@ cd commitlint yarn yarn run build # run build tasks yarn start # run tests, again on change +yarn run commitlint # run CLI ``` For more information on how to contribute please take a look at our [contribution guide](./.github/CONTRIBUTING.md). -### Publishing a release - -```sh -yarn clean -yarn install -yarn run build -yarn test -yarn run publish -``` - - [0]: https://img.shields.io/badge/stability-stable-green.svg?style=flat-square [1]: https://nodejs.org/api/documentation.html#documentation_stability_index [2]: https://img.shields.io/npm/v/@commitlint/cli.svg?style=flat-square [3]: https://npmjs.org/package/@commitlint/cli -[4]: https://img.shields.io/circleci/project/github/conventional-changelog/commitlint/master.svg?style=flat-square -[5]: https://circleci.com/gh/conventional-changelog/commitlint -<!-- [6]: https://img.shields.io/appveyor/ci/conventional-changelog/commitlint/master.svg?style=flat-square -[7]: https://ci.appveyor.com/project/conventional-changelog/commitlint --> - +[4]: https://github.com/conventional-changelog/commitlint/actions/workflows/CI.yml/badge.svg +[5]: https://github.com/conventional-changelog/commitlint/actions/workflows/CI.yml [8]: https://img.shields.io/badge/stability-experimental-orange.svg?style=flat-square [9]: https://nodejs.org/api/documentation.html#documentation_stability_index - [10]: https://img.shields.io/npm/v/@commitlint/cli/next.svg?style=flat-square - -[11]: https://devtoolscommunity.herokuapp.com/badge.svg?style=flat-square -[12]: https://devtoolscommunity.herokuapp.com +[13]: https://img.shields.io/node/v/@commitlint/cli.svg +[14]: https://nodejs.org/en/about/previous-releases diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000000..710f6a0bb9 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,15 @@ +services: + commitlint: + build: + context: . + dockerfile: Dockerfile.dev + image: marionebl/commitlint-cubicle + ports: + - "8443:8443" + environment: + SSH_AUTH_SOCK: /.ssh-agent/socket + SSH_AUTH_PROXY_SOCK: /.ssh-agent/proxy-socket + volumes: + - .:/root/repo + - $SSH_AUTH_SOCK:/.ssh-agent/socket + command: code-server --no-auth /root/repo diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7f82523ed3..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: "3" -services: - commitlint: - build: . - image: marionebl/commitlint-cubicle - ports: - - "8443:8443" - environment: - - SSH_AUTH_SOCK=/.ssh-agent/socket - - SSH_AUTH_PROXY_SOCK=/.ssh-agent/proxy-socket - volumes: - - .:/root/repo - - $SSH_AUTH_SOCK:/.ssh-agent/socket - command: code-server --no-auth /root/repo - diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000000..55de22edfd --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,106 @@ +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", + + head: [ + ["link", { rel: "icon", type: "image/png", href: "/assets/icon.png" }], + ], + + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + 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" }, + ], + + sidebar: [ + { + 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: "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: "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: "Concepts", + base: "/concepts", + collapsed: true, + items: [ + { text: "Commit-conventions", link: "/commit-conventions" }, + { text: "Shareable config", link: "/shareable-config" }, + ], + }, + { + text: "Support", + base: "/support", + collapsed: true, + items: [ + { text: "Troubleshooting", link: "/troubleshooting" }, + { text: "Releases", link: "/releases" }, + { text: "Upgrade commitlint", link: "/upgrade" }, + ], + }, + { + text: "Attributions", + link: "/attributions", + }, + ], + + socialLinks: [ + { + icon: "github", + link: "https://github.com/conventional-changelog/commitlint", + }, + ], + + search: { + provider: "local", + }, + }, + + markdown: { + config(md) { + md.use(tabsMarkdownPlugin); + }, + }, +}); diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000000..afe3923ee8 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,11 @@ +// .vitepress/theme/index.ts +import type { Theme } from "vitepress"; +import DefaultTheme from "vitepress/theme"; +import { enhanceAppWithTabs } from "vitepress-plugin-tabs/client"; + +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + enhanceAppWithTabs(app); + }, +} satisfies Theme; diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 679aa880ac..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,76 +0,0 @@ -> Lint commit messages - -<div class="sequence"> - <img src="./assets/commitlint.svg"/> -</div> - -> Demo generated with [svg-term-cli](https://github.com/marionebl/svg-term-cli) - -# commitlint   [![slack][11]][12] - -[![npm latest][2]][3] [![CircleCI][4]][5] <!-- [![AppVeyor][6]][7] --> - -`commitlint` helps your team adhering to a commit convention. By supporting npm-installed configurations it makes sharing of commit conventions easy. - -# Getting started - -## Install - -```bash -npm install -g @commitlint/cli @commitlint/config-conventional -``` - -## Configure - -```bash -echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js -``` - -## Test - -```bash -# Lint from stdin -echo 'foo: bar' | commitlint -⧗ input: foo: bar -✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum] - -✖ found 1 problems, 0 warnings -ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint -``` - -```bash -# Lint last commit from history -commitlint --from=HEAD~1 -``` - - -?> To get the most out of `commitlint` you'll want to automate it in your project lifecycle. See our [Local setup guide](./guides-local-setup.md?id=guides-local-setup) for next steps. - -## Documentation - -* **Guides** - Common use cases explained in a step-by-step pace -* **Concepts** - Overarching topics important to understand the use of `commitlint` -* **Reference** - Mostly technical documentation - -## Attributions - -* `commitlint` is possible because of the hard work of the folks of the `conventional-changelog` project -* Thanks [@markusoelhafen](https://github.com/markusoelhafen) for providing -the `commitlint` icon - -[0]: https://img.shields.io/badge/stability-stable-green.svg?style=flat-square -[1]: https://nodejs.org/api/documentation.html#documentation_stability_index -[2]: https://img.shields.io/npm/v/@commitlint/cli.svg?style=flat-square -[3]: https://npmjs.org/package/@commitlint/cli -[4]: https://img.shields.io/circleci/project/github/conventional-changelog/commitlint/master.svg?style=flat-square -[5]: https://circleci.com/gh/conventional-changelog/commitlint -<!-- [6]: https://img.shields.io/appveyor/ci/conventional-changelog/commitlint/master.svg?style=flat-square -[7]: https://ci.appveyor.com/project/conventional-changelog/commitlint --> - -[8]: https://img.shields.io/badge/stability-experimental-orange.svg?style=flat-square -[9]: https://nodejs.org/api/documentation.html#documentation_stability_index - -[10]: https://img.shields.io/npm/v/@commitlint/cli/next.svg?style=flat-square - -[11]: http://devtoolscommunity.herokuapp.com/badge.svg?style=flat-square -[12]: http://devtoolscommunity.herokuapp.com diff --git a/docs/_navbar.md b/docs/_navbar.md deleted file mode 100644 index e5de6f9755..0000000000 --- a/docs/_navbar.md +++ /dev/null @@ -1,7 +0,0 @@ -<a href="https://github.com/conventional-changelog/commitlint" title="Contribute on GitHub" target="_blank" rel="nofollow"> - <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 499.36"><path d="M256,6.32c-141.36,0-256,114.61-256,256,0,113.09,73.34,209,175.08,242.9,12.8,2.35,17.47-5.56,17.47-12.34,0-6.08-.22-22.18-.35-43.54C121,464.83,106,415,106,415c-11.64-29.57-28.42-37.45-28.42-37.45C54.31,361.71,79.31,362,79.31,362c25.69,1.81,39.21,26.38,39.21,26.38,22.84,39.12,59.92,27.82,74.5,21.27,2.33-16.54,8.94-27.82,16.25-34.22C152.43,369,92.67,347,92.67,248.94c0-27.95,10-50.8,26.35-68.69-2.63-6.48-11.42-32.5,2.51-67.75,0,0,21.49-6.88,70.4,26.24a242.65,242.65,0,0,1,128.18,0c48.87-33.13,70.33-26.24,70.33-26.24,14,35.25,5.18,61.27,2.55,67.75,16.41,17.9,26.31,40.75,26.31,68.69,0,98.35-59.85,120-116.88,126.32,9.19,7.9,17.38,23.53,17.38,47.41,0,34.22-.31,61.83-.31,70.23,0,6.85,4.61,14.81,17.6,12.31C438.72,471.29,512,375.4,512,262.34,512,120.94,397.37,6.32,256,6.32Z" transform="translate(0 -6.32)" fill-rule="evenodd"></path></svg> -</a> -<a href="http://devtoolscommunity.herokuapp.com/" title="Reach us on Slack" target="_blank" rel="nofollow"> - <svg style="transform: scale(1.4); transform-origin: center;" xmlns="http://www.w3.org/2000/svg" width="45" height="45" x="0px" y="0px" viewBox="0 0 270 270"><rect x="128.5" y="127.3" transform="matrix(0.9482 -0.3176 0.3176 0.9482 -36.0197 50.6366)" width="17.6" height="17"/><rect x="128.5" y="127.3" transform="matrix(0.9482 -0.3176 0.3176 0.9482 -36.0197 50.6366)" width="17.6" height="17"/><path d="M194.6,118.5c-12.9-43-31.5-53-74.5-40.1s-53,31.5-40.1,74.5s31.5,53,74.5,40.1S207.5,161.5,194.6,118.5zM172.9,146.4l-8.1,2.7l2.8,8.4c1.1,3.4-0.7,7.1-4.1,8.2c-0.7,0.2-1.5,0.4-2.2,0.3c-2.6-0.1-5.1-1.8-6-4.4l-2.8-8.4l-16.7,5.6l2.8,8.4c1.1,3.4-0.7,7.1-4.1,8.2c-0.7,0.2-1.5,0.4-2.2,0.3c-2.6-0.1-5.1-1.8-6-4.4l-2.8-8.4l-8.1,2.7c-0.7,0.2-1.5,0.4-2.2,0.3c-2.6-0.1-5.1-1.8-6-4.4c-1.1-3.4,0.7-7.1,4.1-8.2l8.1-2.7l-5.4-16.1l-8.1,2.7c-0.7,0.2-1.5,0.4-2.2,0.3c-2.6-0.1-5.1-1.8-6-4.4c-1.1-3.4,0.7-7.1,4.1-8.2l8.1-2.7l-2.8-8.4c-1.1-3.4,0.7-7.1,4.1-8.2s7.1,0.7,8.2,4.1l2.8,8.4l16.7-5.6l-2.8-8.4c-1.1-3.4,0.7-7.1,4.1-8.2c3.4-1.1,7.1,0.7,8.2,4.1l2.8,8.4l8.1-2.7c3.4-1.1,7.1,0.7,8.2,4.1c1.1,3.4-0.7,7.1-4.1,8.2l-8.1,2.7l5.4,16.1l8.1-2.7c3.4-1.1,7.1,0.7,8.2,4.1C178.1,141.6,176.3,145.3,172.9,146.4z"/> - </svg> -</a> diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 95328b19e7..0000000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,17 +0,0 @@ -* **Guides** - * [Local setup](guides-local-setup.md) - * [CI setup](guides-ci-setup.md) - * [Use prompt](guides-use-prompt.md) - * [Upgrade commitlint](guides-upgrade.md) - -* **Concepts** - * [Commit conventions](concepts-commit-conventions) - * [Shareable configuration](concepts-shareable-config.md) - -* **Reference** - * [CLI](reference-cli.md) - * [Configuration](reference-configuration.md) - * [Rules](reference-rules.md) - * [API](reference-api.md) - * [Plugins](reference-plugins.md) - * [Examples](reference-examples.md) diff --git a/docs/api/format.md b/docs/api/format.md new file mode 100644 index 0000000000..55a8ead843 --- /dev/null +++ b/docs/api/format.md @@ -0,0 +1,128 @@ +# @commitlint/format + +Format commitlint reports + +## Install + +```sh +npm install --save @commitlint/format +``` + +## Signature + +```ts +type Problem = { + /* + * Level of the problem hint | warning | error + */ + level: 0 | 1 | 2; + /* + * Name of the problem to annotate the message with + */ + name: string; + /* + * Message to print + */ + message: string; +} + +type Report = { + results: ReportResult[]; +} + +type ReportResult = { + errors: Problem[]; + warnings: Problem[]; +} + +type formatOptions = { + /** + * Color the output + **/ + color: boolean = true; + + /** + * Signs to use as decoration for messages with severity 0, 1, 2 + **/ + signs: readonly [string; string; string] = [' ', '⚠', '✖']; + + /** + * Colors to use for messages with severity 0, 1, 2 + **/ + colors: readonly [string; string; string] = ['white', 'yellow', 'red']; + + /** + * Print summary and inputs for reports without problems + **/ + verbose: boolean = false; + + /** + * URL to print as help for reports with problems + **/ + helpUrl: string; +} + +format(report?: Report = {}, options?: formatOptions = {}) => string[]; +``` + +## Import + +```js +import format from "@commitlint/format"; +``` + +## Examples + +### Empty usage (no error founds with colors) + +```js +format(); +/* => +[ + '\u001b[1m\u001b[32m✔\u001b[39m found 0 problems, 0 warnings\u001b[22m' +] +*/ +``` + +### Without colors + +```js +format( + { + results: [ + { + warnings: [ + { + 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", + }, + ], + errors: [ + { + level: 2, + name: "some-error", + message: "This will show up red as it has level 2", + }, + ], + }, + ], + }, + { + color: false, + }, +); +/* => +[ + '✖ This will show up red as it has level 2 [some-error]', + ' This will not show up as it has level 0 [some-hint]', + '⚠ This will show up yellow as it has level 1 [some-warning]', + '✖ found 1 problems, 2 warnings' +] +*/ +``` diff --git a/docs/api/lint.md b/docs/api/lint.md new file mode 100644 index 0000000000..dbd676563d --- /dev/null +++ b/docs/api/lint.md @@ -0,0 +1,172 @@ +# @commitlint/lint + +Lint a string against commitlint rules + +## Install + +```sh +npm install --save @commitlint/lint +``` + +## Signature + +```ts +type RuleLevel = 0 | 1 | 2; +type RuleCondition = 'always' | 'never'; +type RuleOption = any; +type PrimitiveRule = [RuleLevel, RuleCondition, RuleOption?]; +type AsyncRule = Promise<PrimitiveRule>; +type FunctionRule = () => PrimitiveRule; +type AsyncFunctionRule = () => Promise<PrimitiveRule>; +type Rule = PrimitiveRule | FunctionRule | AsyncFunctionRule; + +type Problem = { + level: number; + valid: boolean; + name: string; + message: string; +} + +type Report = { + valid: boolean; + errors: Problem[]; + warnings: Problem[]; +} + +type Options = { + parserOpts?: any; +}; + +lint(message: string, rules: {[ruleName: string]: Rule}, opts?: Options) => Promise<Report>; +``` + +## Basic Examples + +### Import + +```js +import lint from "@commitlint/lint"; +``` + +### Usage without config + +```js +const report = await lint("foo: bar"); +console.log(report); +// => { valid: true, errors: [], warnings: [] } +``` + +### Usage with type-enum rules and valid message + +```js +const report = await lint("foo: bar", { "type-enum": [1, "always", ["foo"]] }); +console.log(report); +// => { valid: true, errors: [], warnings: [] } +``` + +### Usage with type-enum rules and invalid message + +```js +const report = await lint("foo: bar", { "type-enum": [1, "always", ["bar"]] }); +console.log(report); +/* => +{ + valid: false, + errors: [], + warnings: [ + { + level: 1, + valid: false, + name: 'type-enum', + message: 'type must be one of [bar]' + } + ] +} +*/ +``` + +### Usage with custom parser options + +```js +const opts = { + parserOpts: { + headerPattern: /^(\w*)-(\w*)/, + headerCorrespondence: ["type", "scope"], + }, +}; + +const report = await lint( + "foo-bar", + { "type-enum": [2, "always", ["foo"]] }, + opts, +); +console.log(report); +// => { valid: true, errors: [], warnings: [] } +``` + +## Load configuration + +```js +import load from "@commitlint/load"; +import lint from "@commitlint/lint"; + +const CONFIG = { + extends: ["@commitlint/config-conventional"], +}; + +const opts = await load(CONFIG); +const report = await lint( + "foo: bar", + opts.rules, + opts.parserPreset ? { parserOpts: opts.parserPreset.parserOpts } : {}, +); +console.log(report); +/* => +{ + valid: false, + errors: [ + { + level: 2, + valid: false, + name: 'type-enum', + message: 'type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]' + } + ], + warnings: [] +} +*/ +``` + +## Read git history + +```js +import lint from "@commitlint/lint"; +import read from "@commitlint/read"; + +const RULES = { + "type-enum": [2, "always", ["foo"]], +}; + +const commits = await read({ to: "HEAD", from: "HEAD~2" }); + +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"; + +const { rules, parserPreset } = load(); +const [commit] = await read({ from: "HEAD~1" }); + +const report = await lint( + commit, + rules, + parserPreset ? { parserOpts: parserPreset.parserOpts } : {}, +); + +console.log(JSON.stringify(result.valid)); +``` diff --git a/docs/api/load.md b/docs/api/load.md new file mode 100644 index 0000000000..87fa67a439 --- /dev/null +++ b/docs/api/load.md @@ -0,0 +1,191 @@ +# @commitlint/load + +Load shared commitlint configuration + +## Install + +```sh +npm install --save @commitlint/load +``` + +## Signature + +```ts +/** + * How to handle violation of rule + * 0 - ignore + * 1 - warn + * 2 - throw + */ +type RuleLevel = 0 | 1 | 2; + +/* + * Application of rule + * always - positive + * never - negative + */ +type RuleCondition = 'always' | 'never'; + +/* + * Additional, optional options to pass to rule + */ +type RuleOption = any; + +/** + * Basic complete rule definition + */ +type PrimitiveRule = [RuleLevel, RuleCondition, RuleOption?]; + +/* + * Async rules are resolved during config lookup. + * They can be used to set up linting rules based on e.g. the project fs + */ +type AsyncRule = Promise<PrimitiveRule>; + +/* + * Function rules are executed during config lookup. + * They can be used to set up linting rules based on e.g. the project fs + */ +type FunctionRule = () => PrimitiveRule; + +/* + * Async function rules are executed and awaited during config lookup. + * They can be used to set up linting rules based on e.g. the project fs + */ +type AsyncFunctionRule () => Promise<PrimitiveRule>; + +/* + * Polymorphic rule struct + */ +type Rule = PrimitiveRule | FunctionRule | AsyncFunctionRule; + +/* + * Parser preset for conventional commits + */ +type ParserPreset = { + name: string; + path: string; + opts: any; +}; + +type Seed = { + /* + * ids resolvable from cwd or configuration file. + * Imported and merged into configuration + * with increasing precedence, with top level config taking the highest. + */ + extends?: string[]; + /* + * id resolvable from cwd or configuration file. + * Imported and expanded to {ParserPreset}. + * Top level parserPresets override presets in extended configuration. + */ + parserPreset?: string; + /** + * Initial map of rules to check against + */ + rules?: {[ruleName: string]: Rule}; + /** + * URL to print as help for reports with problems + */ + helpUrl?: string; +}; + +type Config = { + /* + * Relatives path to all extended configurations. + */ + extends: string[]; + /* + * Expanded parser preset, if any + */ + parserPreset?: ParserPreset; + /* + * Merged map of rules to check against + */ + rules: {[ruleName: string]: Rule}; + /** + * URL to print as help for reports with problems + */ + helpUrl?: string; +}; + +type LoadOptions = { + /* + * Path to the config file to load. + */ + file?: string; + /* + * The cwd to use when loading config from file parameter. + */ + cwd: string; +}; + +load(seed: Seed = {}, options?: LoadOptions = {cwd: process.cwd()}) => Promise<Config>; +``` + +## Import + +```js +import load from "@commitlint/load"; +``` + +## Examples + +### Inline rules + +```js +const config = await load({ + rules: { + "body-leading-blank": [2, "always"], + }, +}); +console.log(config); +// => { extends: [], rules: { 'body-leading-blank': [ 2, 'always' ] } } +``` + +### Reference a file + +```js +const config = await load({ extends: ["./package"] }); +console.log(config); +// => { extends: ['./package', './package-b'], rules: {} } +``` + +### Inline `parserPreset` + +```js +const config = await load({ parserPreset: "./parser-preset.js" }); +console.log(config); +/* => +{ + extends: [], + rules: {}, + parserPreset: { + name: './parser-preset.js', + path: './parser-preset.js', + opts: {} + } +} +*/ +``` + +### Config file with with current working directory + +```js +const config = await load( + {}, + { file: ".commitlintrc.yml", cwd: process.cwd() }, +); +console.log(config); +/* => +{ + extends: [], + rules: { + 'body-leading-blank': [ 1, 'always' ] + }, + formatter: '@commitlint/format', + plugins: {} +} +*/ +``` diff --git a/docs/api/read.md b/docs/api/read.md new file mode 100644 index 0000000000..1c66452194 --- /dev/null +++ b/docs/api/read.md @@ -0,0 +1,69 @@ +# @commitlint/read + +Read commit messages from a specified range or disk + +## Install + +```sh +npm install --save @commitlint/read +``` + +## Signature + +```ts +type Range = { + /* Lower end of the commit range to read */ + from: string; + /* Upper end of the commit range to read */ + to: string; + /* Whether (boolean) to read from ./.git/COMMIT_EDITMSG or where to read from (string) */ + edit?: boolean | string; +}; + +read(range: Range) => Promise<string[]> +``` + +## Import + +```js +import read from "@commitlint/read"; +``` + +## Examples + +Consider to have a repository with two commits: + +1. Initial commit +2. I did something + +### Using `edit: true` + +```js +const result = await read({ edit: true }); +console.info(result); +// => ['I did something\n\n'] +``` + +### Read last two commits + +```js +const result = await read({ from: "HEAD~2" }); +console.info(result); +// => ['I did something\n\n', 'Initial commit\n\n'] +``` + +### Read commits within a range + +```js +const result = await read({ from: "HEAD~2", to: "HEAD~1" }); +console.info(result); +// => ['Initial commit\n\n'] +``` + +### Read commit message from git gui file + +```js +const result = await read({ edit: "./git/GITGUI_EDITMESSAGE" }); +console.info(result); +// => ['I did something via git gui\n\n'] +``` diff --git a/docs/attributions.md b/docs/attributions.md new file mode 100644 index 0000000000..f46a3f9c51 --- /dev/null +++ b/docs/attributions.md @@ -0,0 +1,12 @@ +# Attributions + +`commitlint` is possible because of the hard work of the folks of the `conventional-changelog` project + +--- + +Thanks [@markusoelhafen](https://github.com/markusoelhafen) for providing +the `commitlint` icon + +--- + +Homepage SVG Demo generated with [svg-term-cli](https://github.com/marionebl/svg-term-cli) diff --git a/docs/concepts-commit-conventions.md b/docs/concepts-commit-conventions.md deleted file mode 100644 index 4ead5ee254..0000000000 --- a/docs/concepts-commit-conventions.md +++ /dev/null @@ -1,17 +0,0 @@ -# Concept: Commit conventions - -Commit conventions allow your team to add more semantic meaning to your git history. This e.g. includes `type`, `scope` or `breaking changes`. - -With this additional information tools can derive useful human-readable information for releases of your project. Some examples are - -* Automated, rich changelogs -* Automatic version bumps -* Filter for test harnesses to run - -The most common commit conventions follow this pattern: - -``` -type(scope?): subject -body? -footer? -``` diff --git a/docs/concepts/commit-conventions.md b/docs/concepts/commit-conventions.md new file mode 100644 index 0000000000..a35a4a277c --- /dev/null +++ b/docs/concepts/commit-conventions.md @@ -0,0 +1,26 @@ +# Concept: Commit conventions + +[Commit conventions](https://www.conventionalcommits.org/) allow your team to add more semantic meaning to your git history. This e.g. includes `type`, `scope` or `breaking changes`. + +With this additional information tools can derive useful human-readable information for releases of your project. Some examples are + +- Automated, rich changelogs +- Automatic version bumps +- Filter for test harnesses to run + +The most common commit conventions follow this pattern: + +```text +type(scope?): subject +body? +footer? +``` + +## Multiple scopes + +Commitlint supports multiple scopes. +Current delimiter options are: + +- "/" +- "\\" +- "," diff --git a/docs/concepts-shareable-config.md b/docs/concepts/shareable-config.md similarity index 60% rename from docs/concepts-shareable-config.md rename to docs/concepts/shareable-config.md index 87fccba4f8..c94748a456 100644 --- a/docs/concepts-shareable-config.md +++ b/docs/concepts/shareable-config.md @@ -3,16 +3,23 @@ Most commonly shareable configuration is delivered as npm package exporting an object containing `.rules` as default. To use shared configuration you specify it as item in the `.extends` array: -```js -// commitlint.config.js -module.exports = { - extends: ['example'] // => @commitlint-config-example +::: code-group + +```js [commitlint.config.js] +/** + * @type {import('@commitlint/types').UserConfig} + */ +export default { + extends: ["example"], // => commitlint-config-example }; ``` -This causes `commitlint` to pick up `commitlint-config-example`. Make it available by installing it. +::: -```bash +This causes `commitlint` to pick up `commitlint-config-example`. +Make it available by installing it. + +```sh npm install --save-dev commitlint-config-example ``` @@ -24,37 +31,49 @@ This works recursively, enabling shareable configuration to extend on an indefin You can also load local configuration by using a relative path to the file. -> This must always start with a `.` (dot). +::: warning +This must always start with a `.` (dot). +::: + +::: code-group -```js -// commitlint.config.js -module.exports = { - extends: ['./example'] // => ./example.js -} +```js [commitlint.config.js] +export default { + extends: ["./example"], // => ./example.js +}; ``` +::: + ## Scoped packages When using scoped packages you have two options. You can provide the full path of the package like: -```js -// commitlint.config.js -module.exports = { - extends: ['@commitlint/config-conventional'] // => commitlint/config-conventional +::: code-group + +```js [commitlint.config.js] +export default { + extends: ["@commitlint/config-conventional"], // => @commitlint/config-conventional }; ``` +::: + Or just the scope/owner of the package. +> [!TIP] > Just like "normal" extends listed above, this will add `<scope>/commitlint-config`. -```js -// commitlint.config.js -module.exports = { - extends: ['@coolcompany'] // => coolcompany/commitlint-config +::: code-group + +```js [commitlint.config.js] +export default { + extends: ["@coolcompany"], // => @coolcompany/commitlint-config }; ``` +::: + If you don't use the exact `<scope>/commitlint-config` pattern, you have to provide the full name of the package. diff --git a/docs/guides-ci-setup.md b/docs/guides-ci-setup.md deleted file mode 100644 index fa8861fe10..0000000000 --- a/docs/guides-ci-setup.md +++ /dev/null @@ -1,21 +0,0 @@ -# Guide: CI Setup - -Enforce commit conventions with confidence by linting on your CI servers with `commitlint`. - -This guide assumes you have a already configured `commitlint` for local usage. - -Follow the [Getting Started](./?id=getting-started) for basic installation and configuration instructions. - -```bash -# Install and configure if needed -npm install --save-dev @commitlint/travis-cli -``` - -```yml -# travis.yml -language: node_js -script: - - commitlint-travis -``` - -?> 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.md) diff --git a/docs/guides-local-setup.md b/docs/guides-local-setup.md deleted file mode 100644 index c3f6658215..0000000000 --- a/docs/guides-local-setup.md +++ /dev/null @@ -1,86 +0,0 @@ -# Guide: Local setup - -Get high commit message quality and short feedback cycles by linting commit messages right when they are authored. - -This guide demonstrates how to achieve this via git hooks. - -## Install commitlint - -Install `commitlint` and a `commitlint-config-*` of your choice as devDependency and -configure `commitlint` to use it. - -```bash -# Create a package.json if needed -npm init - -# Install and configure if needed -npm install --save-dev @commitlint/{cli,config-conventional} -echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js -``` - -Alternatively the configuration can be defined in `.commitlintrc.js`, `.commitlintrc.json`, or `.commitlintrc.yml` file or a `commitlint` field in `package.json`. - -## Install husky - -Install `husky` as devDependency, a handy git hook helper available on npm. - -```bash -npm install --save-dev husky -``` - -This allows us to add [git hooks](https://git-scm.com/docs/githooks) directly into our `package.json` via the `husky.hooks` field. - -```json -// package.json -{ - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - } -} -``` - -Using `commit-msg` gives us exactly what we want: It is executed whenever a new commit is created. Passing husky's `HUSKY_GIT_PARAMS` to `commitlint` via the `-E|--env` flag directs it to the relevant edit file. `-e` would default to `.git/COMMIT_EDITMSG`. - -## Test - -### Test simple usage - -For a first simple usage test of commlitlint you can do the following: - -```bash -npx commitlint --from HEAD~1 --to HEAD --verbose -``` - -This will check your last commit and return an error if invalid or a positive output if valid. - - -### Test the hook - -You can test the hook by simply committing. You should see something like this if everything works. - -```bash -git commit -m "foo: this will fail" -husky > commit-msg (node v10.1.0) -No staged files match any of provided globs. -⧗ input: foo: this will fail -✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum] - -✖ found 1 problems, 0 warnings -ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint - -husky > commit-msg hook failed (add --no-verify to bypass) -``` - -Since [v8.0.0](https://github.com/conventional-changelog/commitlint/releases/tag/v8.0.0) `commitlint` won't output anything if there is not problem with your commit. -(You can use the `--verbose` flag to get positive output) - -```bash -git commit -m "chore: lint on commitmsg" -husky > pre-commit (node v10.1.0) -No staged files match any of provided globs. -husky > commit-msg (node v10.1.0) -``` - -?> Local linting is fine for fast feedback but can easily be tinkered with. To ensure all commits are linted you'll want to check commits on an automated CI Server to. Learn how to in the [CI Setup guide](guides-ci-setup.md). diff --git a/docs/guides-publish-config.md b/docs/guides-publish-config.md deleted file mode 100644 index 158e01fd03..0000000000 --- a/docs/guides-publish-config.md +++ /dev/null @@ -1 +0,0 @@ -# Guide: Publish a config diff --git a/docs/guides-use-prompt.md b/docs/guides-use-prompt.md deleted file mode 100644 index 508bef7901..0000000000 --- a/docs/guides-use-prompt.md +++ /dev/null @@ -1,40 +0,0 @@ -# Guide: Use prompt - -`@commitlint/prompt-cli` helps with fast authoring of commit messages and ensures they adhere to the commit convention configured in `commitlint.config.js`. - -## Install - -```bash -# Create a git repository if needed -git init - -# Create a package.json if needed -npm init - -# Install and configure if needed -npm install --save-dev @commitlint/{cli,config-conventional,prompt-cli} -echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js -``` - -## Provide a shortcut - -To make prompt-cli easy to use, add a npm run-script to your `package.json` - -```json -{ - "scripts": { - "commit": "commit" - } -} -``` - -Test the prompt by executing - -```bash -git add . -npm run commit -``` - -## An alternative to `@commitlint/prompt`: commitizen -Another way to author commit messages that adhere to the commit convention configured in `commitlint.config.js` is to use `commitizen`. -For more information, checkout their [official website](http://commitizen.github.io/cz-cli/). diff --git a/docs/guides/ci-setup.md b/docs/guides/ci-setup.md new file mode 100644 index 0000000000..f05ac98022 --- /dev/null +++ b/docs/guides/ci-setup.md @@ -0,0 +1,255 @@ +# Guide: CI Setup + +Enforce commit conventions with confidence by linting on your CI servers with `commitlint`. + +This guide assumes you have already configured `commitlint` for local usage. + +Follow the [Getting Started](/guides/getting-started) for basic installation and configuration instructions. + +## GitHub Actions + +An example of how a GitHub Actions workflow could validate the last commit message or all commit messages inside a Pull Request: + +```yml +name: CI + +on: [push, pull_request] + +permissions: + contents: read + +jobs: + commitlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: npm + - name: Install commitlint + run: npm install -D @commitlint/cli @commitlint/config-conventional + - name: Print versions + run: | + git --version + node --version + npm --version + npx commitlint --version + + - name: Validate current commit (last commit) with commitlint + if: github.event_name == 'push' + 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.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose +``` + +## Travis + +```bash +# Install and configure if needed +npm install --save-dev @commitlint/travis-cli +``` + +```yml +# travis.yml +language: node_js +node_js: + - node +script: + - commitlint-travis +``` + +## CircleCI + +It's just a simple example of how CircleCI configuration file could look like to validate last commit message + +```yml +version: 2.1 + +executors: + my-executor: + docker: + - image: cimg/node:current + working_directory: ~/project + +jobs: + setup: + 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 + + lint_commit_message: + 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 + +workflows: + version: 2.1 + commit: + jobs: + - setup + - lint_commit_message: + requires: + - setup +``` + +## GitLab CI + +```yaml +lint:commit: + image: registry.hub.docker.com/library/node:alpine + variables: + GIT_DEPTH: 0 + before_script: + - apk add --no-cache git + - npm install --save-dev @commitlint/config-conventional @commitlint/cli + script: + - 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"] +lint:commit: + image: + name: registry.hub.docker.com/commitlint/commitlint:latest + entrypoint: [""] + stage: lint + script: + # 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 + +```yml +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: + name: pullrequest +spec: + pipelineSpec: + tasks: + - name: conventional-commits + taskSpec: + steps: + - name: lint-commit-messages + image: commitlint/commitlint + script: | + #!/usr/bin/env sh + . .jx/variables.sh + commitlint --extends '@commitlint/config-conventional' --from $PR_BASE_SHA --to $PR_HEAD_SHA + serviceAccountName: tekton-bot + 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/) + +```yaml +#codemagic.yaml +workflows: + commitlint: + name: Lint commit message + scripts: + - npx commitlint --from=HEAD~1 +``` + +> [!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). diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md new file mode 100644 index 0000000000..bf0404895a --- /dev/null +++ b/docs/guides/getting-started.md @@ -0,0 +1,45 @@ +# Getting started + +## Install + +Install `@commitlint/cli` and a `@commitlint/config-*` / `commitlint-config-*` of your choice as devDependency and configure `commitlint` to use it. + +::: code-group + +```sh [npm] +npm install -D @commitlint/cli @commitlint/config-conventional +``` + +```sh [yarn] +yarn add -D @commitlint/cli @commitlint/config-conventional +``` + +```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 +``` + +::: + +## Configuration + +Configure commitlint to use conventional config + +```sh +echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js +``` + +> [!WARNING] +> Node v24 changes the way that modules are loaded, and this includes the commitlint config file. If your project does not contain a `package.json`, commitlint may fail to load the config, resulting in a `Please add rules to your commitlint.config.js` error message. This can be fixed by doing either of the following: +> +> - Add a `package.json` file, declaring your project as an ES6 module. This can be done easily by running `npm init es6`. +> - Rename the config file from `commitlint.config.js` to `commitlint.config.mjs`. + +Refer to [configuration documentation](/reference/configuration) for more information. diff --git a/docs/guides/local-setup.md b/docs/guides/local-setup.md new file mode 100644 index 0000000000..af597d7367 --- /dev/null +++ b/docs/guides/local-setup.md @@ -0,0 +1,203 @@ +# Guide: Local setup + +Get high commit message quality and short feedback cycles by linting commit messages right when they are authored. + +This guide demonstrates how to achieve this via git hooks. + +Follow the [Getting Started](/guides/getting-started) for basic installation and configuration instructions. + +## Add hook + +To use commitlint you need to setup `commit-msg` hook (currently `pre-commit` hook is not supported) + +### Using a git hooks manager + +To lint commits before they are created you can use [Husky](https://typicode.github.io/husky/)'s `commit-msg` hook. + +You can find complete setup instructions on the [official documentation](https://typicode.github.io/husky/get-started.html). + +> [!NOTE] +> 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 +== npm + +```sh +npm install --save-dev husky + +# husky@v9 +npx husky init +# husky@v8 or lower +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` + +```sh +npm pkg set scripts.commitlint="commitlint --edit" +echo "npm run commitlint \${1}" > .husky/commit-msg +``` + +== yarn + +```sh +yarn add --dev husky + +# husky@v9 +yarn husky init +# husky@v8 or lower +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` + +```sh +npm pkg set scripts.commitlint="commitlint --edit" +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 + +# husky@v9 +pnpm husky init +# husky@v8 or lower +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 +``` + +== bun + +```sh +bun add --dev husky + +# husky@v9 +bunx husky init +# husky@v8 or lower +bunx husky install + +# Add commit message linting to commit-msg hook +echo "bunx commitlint --edit \$1" > .husky/commit-msg +# Windows users should use ` to escape dollar signs +echo "bunx commitlint --edit `$1" > .husky/commit-msg +``` + +== deno + +```sh +deno add --dev husky + +# husky@v9 +deno task --eval husky init +# husky@v8 or lower +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 +``` + +::: + +--- + +### Using git hooks + +Info about git hooks can be found on [Git documentation](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks). + +> [!WARNING] +> It's necessary that you use **commit-msg** as the name for hook file. + +## Test + +### Test simple usage + +For a first simple usage test of commitlint you can do the following: + +::: code-group + +```sh [npm] +npx commitlint --from HEAD~1 --to HEAD --verbose +``` + +```sh [yarn] +yarn commitlint --from HEAD~1 --to HEAD --verbose +``` + +```sh [pnpm] +pnpm commitlint --from HEAD~1 --to HEAD --verbose +``` + +```sh [bun] +bun commitlint --from HEAD~1 --to HEAD --verbose +``` + +```sh [deno] +deno task --eval commitlint --from HEAD~1 --to HEAD --verbose +``` + +::: + +This will check your last commit and return an error if invalid or a positive output if valid. + +### Test the hook + +You can test the hook by simply committing. You should see something like this if everything works. + +```bash +git commit -m "foo: this will fail" +# husky > commit-msg +No staged files match any of provided globs. +⧗ input: foo: this will fail +✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum] + +✖ found 1 problems, 0 warnings +ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint + +husky - commit-msg script failed (code 1) +``` + +Since [v8.0.0](https://github.com/conventional-changelog/commitlint/releases/tag/v8.0.0) `commitlint` won't output anything if there are no problems with your commit.\ +(You can use the `--verbose` flag to get positive output) + +```bash +git commit -m "chore: lint on commitmsg" +# husky > pre-commit +No staged files match any of provided globs. +# husky > commit-msg +``` + +Local linting is fine for fast feedback but can easily be tinkered with. To ensure all commits are linted you'll want to check commits on an automated CI Server too. Learn how to in the [CI Setup guide](/guides/ci-setup). diff --git a/docs/guides/use-prompt.md b/docs/guides/use-prompt.md new file mode 100644 index 0000000000..fcb86568db --- /dev/null +++ b/docs/guides/use-prompt.md @@ -0,0 +1,122 @@ +# Guide: Use prompt + +`@commitlint/prompt-cli` helps with fast authoring of commit messages and ensures they adhere to the commit convention configured in `commitlint.config.js`. + +## Install + +1. Create a git repository if needed + + ```sh + git init + ``` + +2. Create a package.json if needed + + ::: code-group + + ```sh [npm] + npm init + ``` + + ```sh [yarn] + yarn init + ``` + + ```sh [pnpm] + pnpm init + ``` + + ```sh [bun] + bun init + ``` + + ::: + +3. Install and configure if needed + + ::: code-group + + ```sh [npm] + npm install --save-dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli + + echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js + ``` + + ```sh [yarn] + yarn add --dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli + + echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js + ``` + + ```sh [pnpm] + pnpm add --save-dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli + + echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js + ``` + + ```sh [bun] + bun add --dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli + + echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js + ``` + + ```sh [deno] + deno add --dev npm:@commitlint/cli npm:@commitlint/config-conventional npm:@commitlint/prompt-cli + + echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js + ``` + + ::: + +## Provide a shortcut + +To make prompt-cli easy to use, add a npm run-script to your `package.json` + +```json:line-numbers {3} +{ + "scripts": { + "commit": "commit" + } +} +``` + +Test the prompt by executing + +::: code-group + +```sh [npm] +git add . +npm run commit +``` + +```sh [yarn] +git add . +yarn commit +``` + +```sh [pnpm] +git add . +pnpm commit +``` + +```sh [bun] +git add . +bun commit +``` + +```sh [deno] +git add . +deno task commit +``` + +::: + +## An alternative to `@commitlint/prompt-cli`: commitizen + +Another way to author commit messages that adhere to the commit convention configured in `commitlint.config.js` is to use `commitizen`. +For more information, checkout their [official website](http://commitizen.github.io/cz-cli/). + +commitlint provides two adapters for `commitizen`: + +1. `@commitlint/prompt` provides a way to interact same as `@commitlint/prompt-cli` +2. `@commitlint/cz-commitlint` is inspired by [cz-conventional-changelog](https://github.com/commitizen/cz-conventional-changelog), it provides a more modern way to interact. diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 7a8e8dab9d..0000000000 --- a/docs/index.html +++ /dev/null @@ -1,136 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - -<head> - <meta charset="UTF-8"> - <title>commitlint - Lint commit messages - - - - - - - - - -
- - - - - - - - - - diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000000..2540412ec6 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,43 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: commitlint + text: Lint commit messages + tagline: helps your team adhere to a commit convention + image: + src: ./assets/commitlint.svg + alt: commitlint on CLI + actions: + - theme: brand + text: Guides + link: /guides/getting-started + + - theme: alt + text: Reference + link: /reference/configuration + + - theme: alt + text: Concepts + link: /concepts/commit-conventions + +features: + - title: Shareable configs + details: By supporting npm-installed configurations it makes sharing of commit conventions easy. + icon: 🌏 + link: /concepts/shareable-config + linkText: Learn more + + - title: Easy setup + details: Get high commit message quality and short feedback cycles by linting commit messages right when they are authored. + icon: 🚀 + link: /guides/getting-started + linkText: Getting started + + - title: Easy to integrate with your CI + details: To get the most out of commitlint you'll want to automate it in your project lifecycle. + icon: ⚙️ + link: /guides/ci-setup + linkText: Learn more +--- diff --git a/docs/assets/commitlint.json b/docs/public/assets/commitlint.json similarity index 68% rename from docs/assets/commitlint.json rename to docs/public/assets/commitlint.json index cc477cf55f..e1110e8bf1 100644 --- a/docs/assets/commitlint.json +++ b/docs/public/assets/commitlint.json @@ -14,26 +14,11 @@ 0.043582, "\u001b[1m\u001b[30m⏎\u001b[0;10m \r⏎ \r\u001b[2K\u001b[34m~/Projects/labs/commitlint\u001b[30m\u001b[0;10m \u001b[90mmaster*\u001b[30m\u001b[0;10m\t\u001b[36m\u001b[30m\u001b[0;10m\r\n\u001b[32m❯\u001b[30m\u001b[0;10m \u001b[K" ], - [ - 1.424417, - "e" - ], - [ - 0.000242, - "\u001b[D\u001b[31m\u001b[1me\u001b[0;10m" - ], - [ - 0.007262, - "\u001b[33masy_install \u001b[12D\u001b[30m\u001b[0;10m" - ], - [ - 0.088508, - "\u001b[31m\u001b[1mc\u001b[0;10m\u001b[K" - ], - [ - 0.005534, - "\u001b[33mho \u001b[3D\u001b[30m\u001b[0;10m" - ], + [1.424417, "e"], + [0.000242, "\u001b[D\u001b[31m\u001b[1me\u001b[0;10m"], + [0.007262, "\u001b[33masy_install \u001b[12D\u001b[30m\u001b[0;10m"], + [0.088508, "\u001b[31m\u001b[1mc\u001b[0;10m\u001b[K"], + [0.005534, "\u001b[33mho \u001b[3D\u001b[30m\u001b[0;10m"], [ 0.074302, "\u001b[31m\u001b[1mh\u001b[0;10m\u001b[33mo \u001b[D\u001b[D\u001b[30m\u001b[0;10m" @@ -46,94 +31,28 @@ 0.000271, "\u001b[4D\u001b[35mecho\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" ], - [ - 0.175855, - "\u001b[35m \u001b[30m\u001b[0;10m" - ], - [ - 0.00018, - "\u001b[D " - ], - [ - 0.159886, - "\"" - ], - [ - 0.000155, - "\u001b[D\u001b[31m\u001b[1m\"\u001b[0;10m" - ], - [ - 0.519818, - "\u001b[31m\u001b[1mf\u001b[0;10m" - ], - [ - 0.080105, - "\u001b[31m\u001b[1mo\u001b[0;10m" - ], - [ - 0.159857, - "\u001b[31m\u001b[1mo\u001b[0;10m" - ], - [ - 0.176008, - "\u001b[31m\u001b[1m\"\u001b[0;10m" - ], - [ - 0.000288, - "\u001b[5D\u001b[33m\"foo\"\u001b[30m\u001b[0;10m" - ], - [ - 0.503731, - "\u001b[33m \u001b[30m\u001b[0;10m" - ], - [ - 0.000264, - "\u001b[D " - ], - [ - 0.287853, - "|" - ], - [ - 0.000198, - "\u001b[D\u001b[32m|\u001b[30m\u001b[0;10m" - ], - [ - 0.239819, - "\u001b[32m \u001b[30m\u001b[0;10m" - ], - [ - 0.000253, - "\u001b[D " - ], - [ - 1.35986, - "c" - ], - [ - 0.000264, - "\u001b[D\u001b[31m\u001b[1mc\u001b[0;10m" - ], - [ - 0.011992, - "\u001b[33m++ \u001b[3D\u001b[30m\u001b[0;10m" - ], - [ - 0.059653, - "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K" - ], - [ - 0.007052, - "\u001b[33mde \u001b[3D\u001b[30m\u001b[0;10m" - ], - [ - 0.072258, - "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[K" - ], - [ - 0.005423, - "\u001b[33mm \u001b[D\u001b[D\u001b[30m\u001b[0;10m" - ], + [0.175855, "\u001b[35m \u001b[30m\u001b[0;10m"], + [0.00018, "\u001b[D "], + [0.159886, "\""], + [0.000155, "\u001b[D\u001b[31m\u001b[1m\"\u001b[0;10m"], + [0.519818, "\u001b[31m\u001b[1mf\u001b[0;10m"], + [0.080105, "\u001b[31m\u001b[1mo\u001b[0;10m"], + [0.159857, "\u001b[31m\u001b[1mo\u001b[0;10m"], + [0.176008, "\u001b[31m\u001b[1m\"\u001b[0;10m"], + [0.000288, "\u001b[5D\u001b[33m\"foo\"\u001b[30m\u001b[0;10m"], + [0.503731, "\u001b[33m \u001b[30m\u001b[0;10m"], + [0.000264, "\u001b[D "], + [0.287853, "|"], + [0.000198, "\u001b[D\u001b[32m|\u001b[30m\u001b[0;10m"], + [0.239819, "\u001b[32m \u001b[30m\u001b[0;10m"], + [0.000253, "\u001b[D "], + [1.35986, "c"], + [0.000264, "\u001b[D\u001b[31m\u001b[1mc\u001b[0;10m"], + [0.011992, "\u001b[33m++ \u001b[3D\u001b[30m\u001b[0;10m"], + [0.059653, "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K"], + [0.007052, "\u001b[33mde \u001b[3D\u001b[30m\u001b[0;10m"], + [0.072258, "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[K"], + [0.005423, "\u001b[33mm \u001b[D\u001b[D\u001b[30m\u001b[0;10m"], [ 0.107004, "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" @@ -142,30 +61,15 @@ 0.000313, "\u001b[4D\u001b[35mcomm\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" ], - [ - 0.175907, - "\u001b[35mi\u001b[30m\u001b[0;10m" - ], - [ - 0.000305, - "\u001b[5D\u001b[31m\u001b[1mcommi\u001b[0;10m" - ], - [ - 0.005943, - "\u001b[33mtizen \u001b[6D\u001b[30m\u001b[0;10m" - ], + [0.175907, "\u001b[35mi\u001b[30m\u001b[0;10m"], + [0.000305, "\u001b[5D\u001b[31m\u001b[1mcommi\u001b[0;10m"], + [0.005943, "\u001b[33mtizen \u001b[6D\u001b[30m\u001b[0;10m"], [ 0.073589, "\u001b[31m\u001b[1mt\u001b[0;10m\u001b[33mizen \u001b[5D\u001b[30m\u001b[0;10m" ], - [ - 0.120186, - "\u001b[31m\u001b[1ml\u001b[0;10m\u001b[K" - ], - [ - 0.005786, - "\u001b[33mint \u001b[4D\u001b[30m\u001b[0;10m" - ], + [0.120186, "\u001b[31m\u001b[1ml\u001b[0;10m\u001b[K"], + [0.005786, "\u001b[33mint \u001b[4D\u001b[30m\u001b[0;10m"], [ 0.20203, "\u001b[31m\u001b[1mi\u001b[0;10m\u001b[33mnt \u001b[3D\u001b[30m\u001b[0;10m" @@ -182,18 +86,9 @@ 0.000346, "\u001b[10D\u001b[35mcommitlint\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" ], - [ - 0.182852, - "\u001b[K\r\n" - ], - [ - 5.5e-05, - "\u001b[30m\u001b[0;10m" - ], - [ - 1.177726, - "\u001b[90m⧗\u001b[39m input: \u001b[1mfoo\u001b[22m\r\n" - ], + [0.182852, "\u001b[K\r\n"], + [5.5e-5, "\u001b[30m\u001b[0;10m"], + [1.177726, "\u001b[90m⧗\u001b[39m input: \u001b[1mfoo\u001b[22m\r\n"], [ 0.000414, "\u001b[31m✖\u001b[39m message may not be empty \u001b[90m[subject-empty]\u001b[39m\r\n\u001b[31m✖\u001b[39m type may not be empty \u001b[90m[type-empty]\u001b[39m\r\n\u001b[1m\u001b[31m✖\u001b[39m found 2 problems, 0 warnings\u001b[22m\r\n" @@ -203,17 +98,11 @@ "\u001b[1m\u001b[30m⏎\u001b[0;10m \r⏎ \r\u001b[2K" ], [ - 8.1e-05, + 8.1e-5, "\r\n\u001b[34m~/Projects/labs/commitlint\u001b[30m\u001b[0;10m \u001b[33m\u001b[30m\u001b[0;10m\u001b[90mmaster*\u001b[30m\u001b[0;10m\t\u001b[36m\u001b[30m\u001b[0;10m\r\n\u001b[31m❯\u001b[30m\u001b[0;10m \u001b[K" ], - [ - 1.780014, - "e" - ], - [ - 0.000274, - "\u001b[D\u001b[31m\u001b[1me\u001b[0;10m" - ], + [1.780014, "e"], + [0.000274, "\u001b[D\u001b[31m\u001b[1me\u001b[0;10m"], [ 0.000377, "\u001b[33mcho \"foo\" | commitlint\u001b[22D\u001b[30m\u001b[0;10m" @@ -250,34 +139,16 @@ 0.000345, "\u001b[D\u001b[31m\u001b[1m\"\u001b[0;10m\u001b[33mfoo\" | commitlint\u001b[17D\u001b[30m\u001b[0;10m" ], - [ - 1.439497, - "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K" - ], - [ - 0.495237, - "\u001b[D\u001b[K" - ], - [ - 0.136897, - "\u001b[31m\u001b[1mc\u001b[0;10m" - ], + [1.439497, "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K"], + [0.495237, "\u001b[D\u001b[K"], + [0.136897, "\u001b[31m\u001b[1mc\u001b[0;10m"], [ 0.000689, "\u001b[33mommitlint.config.js\" \u001b[21D\u001b[30m\u001b[0;10m" ], - [ - 0.56659, - "\u001b[D\u001b[K" - ], - [ - 0.097083, - "\u001b[31m\u001b[1mf\u001b[0;10m" - ], - [ - 0.0004, - "\u001b[33moo\" | commitlint\u001b[16D\u001b[30m\u001b[0;10m" - ], + [0.56659, "\u001b[D\u001b[K"], + [0.097083, "\u001b[31m\u001b[1mf\u001b[0;10m"], + [0.0004, "\u001b[33moo\" | commitlint\u001b[16D\u001b[30m\u001b[0;10m"], [ 0.127229, "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[33mo\" | commitlint\u001b[15D\u001b[30m\u001b[0;10m" @@ -286,90 +157,27 @@ 0.13611, "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[33m\" | commitlint\u001b[14D\u001b[30m\u001b[0;10m" ], - [ - 0.312225, - "\u001b[31m\u001b[1m:\u001b[0;10m\u001b[K" - ], - [ - 0.000715, - "\u001b[33m@commitlint/\u001b[12D\u001b[30m\u001b[0;10m" - ], - [ - 0.26294, - "\u001b[31m\u001b[1m \u001b[0;10m\u001b[K" - ], - [ - 0.272129, - "\u001b[31m\u001b[1mb\u001b[0;10m" - ], - [ - 0.088036, - "\u001b[31m\u001b[1ma\u001b[0;10m" - ], - [ - 0.079995, - "\u001b[31m\u001b[1mr\u001b[0;10m" - ], - [ - 0.35253, - "\u001b[31m\u001b[1m\"\u001b[0;10m" - ], - [ - 0.000435, - "\u001b[10D\u001b[33m\"foo: bar\"\u001b[30m\u001b[0;10m" - ], - [ - 0.327106, - "\u001b[33m \u001b[30m\u001b[0;10m" - ], - [ - 0.000283, - "\u001b[D " - ], - [ - 0.31973, - "|" - ], - [ - 0.000223, - "\u001b[D\u001b[32m|\u001b[30m\u001b[0;10m" - ], - [ - 0.263799, - "\u001b[32m \u001b[30m\u001b[0;10m" - ], - [ - 0.000219, - "\u001b[D " - ], - [ - 0.415723, - "c" - ], - [ - 0.000306, - "\u001b[D\u001b[31m\u001b[1mc\u001b[0;10m" - ], - [ - 0.011346, - "\u001b[33m++ \u001b[3D\u001b[30m\u001b[0;10m" - ], - [ - 0.052215, - "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K" - ], - [ - 0.006604, - "\u001b[33mde \u001b[3D\u001b[30m\u001b[0;10m" - ], - [ - 0.065406, - "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[K" - ], - [ - 0.005895, - "\u001b[33mm \u001b[D\u001b[D\u001b[30m\u001b[0;10m" - ], + [0.312225, "\u001b[31m\u001b[1m:\u001b[0;10m\u001b[K"], + [0.000715, "\u001b[33m@commitlint/\u001b[12D\u001b[30m\u001b[0;10m"], + [0.26294, "\u001b[31m\u001b[1m \u001b[0;10m\u001b[K"], + [0.272129, "\u001b[31m\u001b[1mb\u001b[0;10m"], + [0.088036, "\u001b[31m\u001b[1ma\u001b[0;10m"], + [0.079995, "\u001b[31m\u001b[1mr\u001b[0;10m"], + [0.35253, "\u001b[31m\u001b[1m\"\u001b[0;10m"], + [0.000435, "\u001b[10D\u001b[33m\"foo: bar\"\u001b[30m\u001b[0;10m"], + [0.327106, "\u001b[33m \u001b[30m\u001b[0;10m"], + [0.000283, "\u001b[D "], + [0.31973, "|"], + [0.000223, "\u001b[D\u001b[32m|\u001b[30m\u001b[0;10m"], + [0.263799, "\u001b[32m \u001b[30m\u001b[0;10m"], + [0.000219, "\u001b[D "], + [0.415723, "c"], + [0.000306, "\u001b[D\u001b[31m\u001b[1mc\u001b[0;10m"], + [0.011346, "\u001b[33m++ \u001b[3D\u001b[30m\u001b[0;10m"], + [0.052215, "\u001b[31m\u001b[1mo\u001b[0;10m\u001b[K"], + [0.006604, "\u001b[33mde \u001b[3D\u001b[30m\u001b[0;10m"], + [0.065406, "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[K"], + [0.005895, "\u001b[33mm \u001b[D\u001b[D\u001b[30m\u001b[0;10m"], [ 0.17011, "\u001b[31m\u001b[1mm\u001b[0;10m\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" @@ -378,30 +186,15 @@ 0.000278, "\u001b[4D\u001b[35mcomm\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" ], - [ - 0.439713, - "\u001b[35mi\u001b[30m\u001b[0;10m" - ], - [ - 0.000324, - "\u001b[5D\u001b[31m\u001b[1mcommi\u001b[0;10m" - ], - [ - 0.005334, - "\u001b[33mtizen \u001b[6D\u001b[30m\u001b[0;10m" - ], + [0.439713, "\u001b[35mi\u001b[30m\u001b[0;10m"], + [0.000324, "\u001b[5D\u001b[31m\u001b[1mcommi\u001b[0;10m"], + [0.005334, "\u001b[33mtizen \u001b[6D\u001b[30m\u001b[0;10m"], [ 0.114637, "\u001b[31m\u001b[1mt\u001b[0;10m\u001b[33mizen \u001b[5D\u001b[30m\u001b[0;10m" ], - [ - 0.120005, - "\u001b[31m\u001b[1ml\u001b[0;10m\u001b[K" - ], - [ - 0.005761, - "\u001b[33mint \u001b[4D\u001b[30m\u001b[0;10m" - ], + [0.120005, "\u001b[31m\u001b[1ml\u001b[0;10m\u001b[K"], + [0.005761, "\u001b[33mint \u001b[4D\u001b[30m\u001b[0;10m"], [ 0.16208, "\u001b[31m\u001b[1mi\u001b[0;10m\u001b[33mnt \u001b[3D\u001b[30m\u001b[0;10m" @@ -418,10 +211,7 @@ 0.000335, "\u001b[10D\u001b[35mcommitlint\u001b[33m \u001b[D\u001b[30m\u001b[0;10m" ], - [ - 0.686938, - "\u001b[K\r\n\u001b[30m\u001b[0;10m" - ], + [0.686938, "\u001b[K\r\n\u001b[30m\u001b[0;10m"], [ 1.179442, "\u001b[90m⧗\u001b[39m input: \u001b[1mfoo: bar\u001b[22m\r\n" @@ -435,93 +225,33 @@ "\u001b[1m\u001b[30m⏎\u001b[0;10m \r⏎ \r\u001b[2K" ], [ - 3.9e-05, + 3.9e-5, "\r\n\u001b[34m~/Projects/labs/commitlint\u001b[30m\u001b[0;10m \u001b[33m\u001b[30m\u001b[0;10m\u001b[90mmaster*\u001b[30m\u001b[0;10m\t\u001b[36m\u001b[30m\u001b[0;10m\r\n\u001b[31m❯\u001b[30m\u001b[0;10m \u001b[K" ], - [ - 0.45916, - "echo \"foo: bar\" | commitlint" - ], + [0.45916, "echo \"foo: bar\" | commitlint"], [ 0.000339, "\u001b[28D\u001b[35mecho\u001b[30m\u001b[0;10m \u001b[33m\"foo: bar\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[30m\u001b[0;10m" ], - [ - 0.246219, - "\u001b[D" - ], - [ - 0.502613, - "\u001b[D" - ], - [ - 0.088524, - "\u001b[D" - ], - [ - 0.087414, - "\u001b[D" - ], - [ - 0.088208, - "\u001b[D" - ], - [ - 0.083942, - "\u001b[D" - ], - [ - 0.083394, - "\u001b[D" - ], - [ - 0.08431, - "\u001b[D" - ], - [ - 0.088025, - "\u001b[D" - ], - [ - 0.088327, - "\u001b[D" - ], - [ - 0.087976, - "\u001b[D" - ], - [ - 0.084932, - "\u001b[D" - ], - [ - 0.083834, - "\u001b[D" - ], - [ - 0.086017, - "\u001b[D" - ], - [ - 0.088395, - "\u001b[D" - ], - [ - 0.088266, - "\u001b[D" - ], - [ - 0.087041, - "\u001b[D" - ], - [ - 0.083235, - "\u001b[D" - ], - [ - 0.219576, - "\u001b[D" - ], + [0.246219, "\u001b[D"], + [0.502613, "\u001b[D"], + [0.088524, "\u001b[D"], + [0.087414, "\u001b[D"], + [0.088208, "\u001b[D"], + [0.083942, "\u001b[D"], + [0.083394, "\u001b[D"], + [0.08431, "\u001b[D"], + [0.088025, "\u001b[D"], + [0.088327, "\u001b[D"], + [0.087976, "\u001b[D"], + [0.084932, "\u001b[D"], + [0.083834, "\u001b[D"], + [0.086017, "\u001b[D"], + [0.088395, "\u001b[D"], + [0.088266, "\u001b[D"], + [0.087041, "\u001b[D"], + [0.083235, "\u001b[D"], + [0.219576, "\u001b[D"], [ 0.527938, "\u001b[D\u001b[33m: bar\" \u001b[30m\u001b[0;10m|\u001b[32m \u001b[30m\u001b[0;10mc\u001b[35mommitlint\u001b[30m\u001b[0;10m\u001b[K\u001b[19D" @@ -602,10 +332,7 @@ 0.000667, "\u001b[5C\u001b[33m\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[19D\u001b[30m\u001b[0;10m" ], - [ - 0.382519, - "\u001b[D" - ], + [0.382519, "\u001b[D"], [ 0.128976, "\u001b[33ms): bar\u001b[30m\u001b[0;10m\"\u001b[32m \u001b[30m\u001b[0;10m|\u001b[35m commitlint\u001b[20D\u001b[30m\u001b[0;10m" @@ -646,30 +373,12 @@ 0.00047, "\u001b[6C\u001b[33m\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[20D\u001b[30m\u001b[0;10m" ], - [ - 0.174646, - "\u001b[C" - ], - [ - 0.160014, - "\u001b[C" - ], - [ - 0.144159, - "\u001b[C" - ], - [ - 0.151878, - "\u001b[C" - ], - [ - 0.15203, - "\u001b[C" - ], - [ - 0.751957, - "\u001b[C" - ], + [0.174646, "\u001b[C"], + [0.160014, "\u001b[C"], + [0.144159, "\u001b[C"], + [0.151878, "\u001b[C"], + [0.15203, "\u001b[C"], + [0.751957, "\u001b[C"], [ 0.296238, "\u001b[D\u001b[33m\" \u001b[30m\u001b[0;10m|\u001b[32m \u001b[30m\u001b[0;10mc\u001b[35mommitlint\u001b[30m\u001b[0;10m\u001b[K\u001b[14D" @@ -742,10 +451,7 @@ 0.000641, "\u001b[33m\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[14D\u001b[30m\u001b[0;10m" ], - [ - 0.190361, - "\u001b[14C\r\n\u001b[30m\u001b[0;10m" - ], + [0.190361, "\u001b[14C\r\n\u001b[30m\u001b[0;10m"], [ 1.170189, "\u001b[90m⧗\u001b[39m input: \u001b[1mchore(scope): messag\u001b[22m\r\n" @@ -762,106 +468,34 @@ 0.000104, "\r\n\u001b[34m~/Projects/labs/commitlint\u001b[30m\u001b[0;10m \u001b[33m\u001b[30m\u001b[0;10m\u001b[90mmaster*\u001b[30m\u001b[0;10m\t\u001b[36m\u001b[30m\u001b[0;10m\r\n\u001b[31m❯\u001b[30m\u001b[0;10m \u001b[K" ], - [ - 1.595015, - "echo \"chore(scope): messag\" | commitlint" - ], + [1.595015, "echo \"chore(scope): messag\" | commitlint"], [ 0.00045, "\u001b[40D\u001b[35mecho\u001b[30m\u001b[0;10m \u001b[33m\"chore(scope): messag\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[30m\u001b[0;10m" ], - [ - 0.41445, - "\u001b[D" - ], - [ - 0.503174, - "\u001b[D" - ], - [ - 0.08644, - "\u001b[D" - ], - [ - 0.08346, - "\u001b[D" - ], - [ - 0.087163, - "\u001b[D" - ], - [ - 0.084405, - "\u001b[D" - ], - [ - 0.085425, - "\u001b[D" - ], - [ - 0.084549, - "\u001b[D" - ], - [ - 0.083284, - "\u001b[D" - ], - [ - 0.083372, - "\u001b[D" - ], - [ - 0.083362, - "\u001b[D" - ], - [ - 0.083392, - "\u001b[D" - ], - [ - 0.088245, - "\u001b[D" - ], - [ - 0.085091, - "\u001b[D" - ], - [ - 0.084852, - "\u001b[D" - ], - [ - 0.087872, - "\u001b[D" - ], - [ - 0.087465, - "\u001b[D" - ], - [ - 0.083365, - "\u001b[D" - ], - [ - 0.088288, - "\u001b[D" - ], - [ - 0.088374, - "\u001b[D" - ], - [ - 0.086046, - "\u001b[D" - ], - [ - 0.656623, - "\u001b[D" - ], - [ - 0.711983, - "\u001b[D" - ], + [0.41445, "\u001b[D"], + [0.503174, "\u001b[D"], + [0.08644, "\u001b[D"], + [0.08346, "\u001b[D"], + [0.087163, "\u001b[D"], + [0.084405, "\u001b[D"], + [0.085425, "\u001b[D"], + [0.084549, "\u001b[D"], + [0.083284, "\u001b[D"], + [0.083372, "\u001b[D"], + [0.083362, "\u001b[D"], + [0.083392, "\u001b[D"], + [0.088245, "\u001b[D"], + [0.085091, "\u001b[D"], + [0.084852, "\u001b[D"], + [0.087872, "\u001b[D"], + [0.087465, "\u001b[D"], + [0.083365, "\u001b[D"], + [0.088288, "\u001b[D"], + [0.088374, "\u001b[D"], + [0.086046, "\u001b[D"], + [0.656623, "\u001b[D"], + [0.711983, "\u001b[D"], [ 0.42408, "\u001b[D\u001b[33m): messag\" \u001b[30m\u001b[0;10m|\u001b[32m \u001b[30m\u001b[0;10mc\u001b[35mommitlint\u001b[30m\u001b[0;10m\u001b[K\u001b[23D" @@ -902,10 +536,7 @@ 0.000218, "\u001b[10C \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[23D\u001b[30m\u001b[0;10m" ], - [ - 1.495663, - "\u001b[C" - ], + [1.495663, "\u001b[C"], [ 0.320133, "\u001b[D\u001b[33m: messag\" \u001b[30m\u001b[0;10m|\u001b[32m \u001b[30m\u001b[0;10mc\u001b[35mommitlint\u001b[30m\u001b[0;10m\u001b[K\u001b[22D" @@ -922,38 +553,14 @@ 0.000219, "\u001b[9C \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[22D\u001b[30m\u001b[0;10m" ], - [ - 0.327953, - "\u001b[C" - ], - [ - 0.184011, - "\u001b[C" - ], - [ - 0.167976, - "\u001b[C" - ], - [ - 0.143875, - "\u001b[C" - ], - [ - 0.159963, - "\u001b[C" - ], - [ - 0.151488, - "\u001b[C" - ], - [ - 0.160789, - "\u001b[C" - ], - [ - 0.151846, - "\u001b[C" - ], + [0.327953, "\u001b[C"], + [0.184011, "\u001b[C"], + [0.167976, "\u001b[C"], + [0.143875, "\u001b[C"], + [0.159963, "\u001b[C"], + [0.151488, "\u001b[C"], + [0.160789, "\u001b[C"], + [0.151846, "\u001b[C"], [ 0.184798, "\u001b[33me\u001b[30m\u001b[0;10m\"\u001b[32m \u001b[30m\u001b[0;10m|\u001b[35m commitlint\u001b[14D\u001b[30m\u001b[0;10m" @@ -962,10 +569,7 @@ 0.000621, "\u001b[33m\"\u001b[30m\u001b[0;10m \u001b[32m|\u001b[30m\u001b[0;10m \u001b[35mcommitlint\u001b[14D\u001b[30m\u001b[0;10m" ], - [ - 0.566558, - "\u001b[14C\r\n\u001b[30m\u001b[0;10m" - ], + [0.566558, "\u001b[14C\r\n\u001b[30m\u001b[0;10m"], [ 1.174173, "\u001b[90m⧗\u001b[39m input: \u001b[1mchore: message\u001b[22m\r\n" @@ -974,25 +578,16 @@ 0.000452, "\u001b[1m\u001b[32m✔\u001b[39m found 0 problems, 0 warnings\u001b[22m\r\n" ], - [ - 8.4e-05, - "\r\n" - ], + [8.4e-5, "\r\n"], [ 0.048998, "\u001b[1m\u001b[30m⏎\u001b[0;10m \r⏎ \r\u001b[2K" ], [ - 3.4e-05, + 3.4e-5, "\r\n\u001b[34m~/Projects/labs/commitlint\u001b[30m\u001b[0;10m \u001b[90mmaster*\u001b[30m\u001b[0;10m\t\u001b[36m\u001b[30m\u001b[0;10m\r\n\u001b[32m❯\u001b[30m\u001b[0;10m \u001b[K" ], - [ - 2.345267, - "\r\n\u001b[30m\u001b[0;10m\u001b[30m\u001b[0;1" - ], - [ - 8.2e-05, - "0m" - ] + [2.345267, "\r\n\u001b[30m\u001b[0;10m\u001b[30m\u001b[0;1"], + [8.2e-5, "0m"] ] } diff --git a/docs/assets/commitlint.svg b/docs/public/assets/commitlint.svg similarity index 100% rename from docs/assets/commitlint.svg rename to docs/public/assets/commitlint.svg diff --git a/docs/public/assets/cz-commitlint.png b/docs/public/assets/cz-commitlint.png new file mode 100644 index 0000000000..3c808656d7 Binary files /dev/null and b/docs/public/assets/cz-commitlint.png differ diff --git a/docs/assets/icon.png b/docs/public/assets/icon.png similarity index 100% rename from docs/assets/icon.png rename to docs/public/assets/icon.png diff --git a/docs/assets/icon.svg b/docs/public/assets/icon.svg similarity index 100% rename from docs/assets/icon.svg rename to docs/public/assets/icon.svg diff --git a/docs/public/assets/vs-code-commit-msg.png b/docs/public/assets/vs-code-commit-msg.png new file mode 100644 index 0000000000..2c93243238 Binary files /dev/null and b/docs/public/assets/vs-code-commit-msg.png differ diff --git a/docs/public/assets/vs-code-emoji.png b/docs/public/assets/vs-code-emoji.png new file mode 100644 index 0000000000..fbea05cd9a Binary files /dev/null and b/docs/public/assets/vs-code-emoji.png differ diff --git a/docs/reference-api.md b/docs/reference-api.md deleted file mode 100644 index 22e0d86579..0000000000 --- a/docs/reference-api.md +++ /dev/null @@ -1,423 +0,0 @@ -# API - -## @commitlint/format - -> Format commitlint reports - -### Install - -``` -npm install --save @commitlint/format -``` - -### Usage - -* **Signature** - -```ts -type Problem = { - /* - * Level of the problem hint | warning | error - */ - level: 0 | 1 | 2; - /* - * Name of the problem to annotate the message with - */ - name: string; - /* - * Message to print - */ - message: string; -} - -type Report = { - results: ReportResult[]; -} - -type ReportResult = { - errors: Problem[]; - warnings: Problem[]; -} - -type formatOptions = { - /** - * Color the output - **/ - color: boolean = true; - - /** - * Signs to use as decoration for messages with severy 0, 1, 2 - **/ - signs: readonly [string; string; string] = [' ', '⚠', '✖']; - - /** - * Colors to use for messages with severy 0, 1, 2 - **/ - colors: readonly [string; string; string] = ['white', 'yellow', 'red']; - - /** - * Print summary and inputs for reports without problems - **/ - verbose: boolean = false; - - /** - * URL to print as help for reports with problems - **/ - helpUrl: string; -} - -format(report?: Report = {}, options?: formatOptions = {}) => string[]; -``` - -* **Example** - -```js -const format = require('@commitlint/format'); - -format(); // => [ '\u001b[1m\u001b[32m✔\u001b[39m found 0 problems, 0 warnings\u001b[22m' ] - -format({ - results: [ - { - warnings: [ - { - 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' - } - ], - errors: [ - { - level: 2, - name: 'some-error', - message: 'This will show up red as it has level 2' - } - ] - } - ] -}, { - color: false -}); -/* => [ - '✖ This will show up red as it has level 2 [some-error]', - ' This will not show up as it has level 0 [some-hint]', - '⚠ This will show up yellow as it has level 1 [some-warning]', - '✖ found 1 problems, 2 warnings' -] */ -``` - -## @commitlint/load - -> Load shared commitlint configuration - -### Install - -``` -npm install --save @commitlint/load -``` - -### Usage - -* **Signature** - -```ts -/** - * How to handle violation of rule - * 0 - ignore - * 1 - warn - * 2 - throw - */ -type RuleLevel = 0 | 1 | 2; - -/* - * Application of rule - * always - positive - * never - negative - */ -type RuleCondition = 'always' | 'never'; - -/* - * Additional, optional options to pass to rule - */ -type RuleOption = any; - -/** - * Basic complete rule definition - */ -type PrimitiveRule = [RuleLevel, RuleCondition, RuleOption?]; - -/* - * Async rules are resolved during config lookup. - * They can be used to set up linting rules based on e.g. the project fs - */ -type AsyncRule = Promise; - -/* - * Function rules are executed during config lookup. - * They can be used to set up linting rules based on e.g. the project fs - */ -type FunctionRule = () => PrimitiveRule; - -/* - * Async function rules are executed and awaited during config lookup. - * They can be used to set up linting rules based on e.g. the project fs - */ -type AsyncFunctionRule () => Promise; - -/* - * Polymorphic rule struct - */ -type Rule = PrimitiveRule | FunctionRule | AsyncFunctionRule; - -/* - * Parser preset for conventional commits - */ -type ParserPreset = { - name: string; - path: string; - opts: any; -}; - -type Seed = { - /* - * ids resolveable from cwd or configuration file. - * Imported and merged into configuration - * with increasing precedence, with top level config taking the highest. - */ - extends?: string[]; - /* - * id resolveable from cwd or configuration file. - * Imported and expanded to {ParserPreset}. - * Top level parserPresets override presets in extended configuration. - */ - parserPreset?: string; - /** - * Initial map of rules to check against - */ - rules?: {[ruleName: string]: Rule}; -}; - -type Config = { - /* - * Relatives path to all extendend configurations. - */ - extends: string[]; - /* - * Expanded parser preset, if any - */ - parserPreset?: ParserPreset; - /* - * Merged map of rules to check against - */ - rules: {[ruleName: string]: Rule}; -}; - -load(seed: Seed = {}) => Promise; -``` - -* **Example** - -```js -const load = require('@commitlint/load'); - -load({ - rules: { - 'body-leading-blank': [2, 'always'] - } -}) -.then(config => console.log(config)); -// => { extends: [], rules: { 'body-leading-blank': [ 2, 'always' ] } } - -load({extends: ['./package']}) -.then(config => console.log(config)); -// => { extends: ['./package', './package-b'], rules: {} } - -load({parserPreset: './parser-preset.js'}) -.then(config => console.log(config)); -// => { extends: [], rules: {}, parserPreset: {name: './parser-preset.js', path: './parser-preset.js', opts: {}}} -``` - -### @commitlint/read - -> Read commit messages from a specified range or disk - -### Install - -``` -npm install --save @commitlint/read -``` - -### Usage - -* **Signature** - -```ts -type Range = { - /* Lower end of the commit range to read */ - from: string; - /* Upper end of the commit range to read */ - to: string; - /* Wether (boolean) to read from ./.git/COMMIT_EDITMSG or where to read from (string) */ - edit?: boolean | string; -}; - -read(range: Range) => Promise -``` - -* **Example** - -```js -// git commit -m "I did something" -const read = require('@commitlint/read'); - -read({edit: true}) - .then(messages => console.log(messages)); -// => ['I did something\n\n'] - -read({edit: './git/GITGUI_EDITMESSAGE'}) - .then(messages => console.log(messages)); -// => ['I did something via git gui\n\n'] - -read({from: 'HEAD~2'}) - .then(messages => console.log(messages)); -// => ['I did something\n\n', 'Initial commit\n\n'] - -read({from: 'HEAD~2', to: 'HEAD~1'}) - .then(messages => console.log(messages)); -// => ['Initial commit\n\n'] -``` - -### lint - -> Lint a string against commitlint rules - -### Install - -``` -npm install --save @commitlint/lint -``` - -### Usage - -* **Signature** - -```ts -type RuleLevel = 0 | 1 | 2; -type RuleCondition = 'always' | 'never'; -type RuleOption = any; -type PrimitiveRule = [RuleLevel, RuleCondition, RuleOption?]; -type AsyncRule = Promise; -type FunctionRule = () => PrimitiveRule; -type AsyncFunctionRule () => Promise; -type Rule = PrimitiveRule | FunctionRule | AsyncFunctionRule; - -type Problem = { - level: number; - valid: boolean; - name: string; - message: string; -} - -type Report = { - valid: boolean; - errors: Problem[]; - warnings: Problem[]; -} - -type Options = { - parserOpts?: any; -}; - -lint(message: string, rules: {[ruleName: string]: Rule}, opts?: Options) => Promise; -``` - -* **Basic Example** - -```js -const lint = require('@commitlint/lint'); - -lint('foo: bar') - .then(report => console.log(report)); - // => { valid: true, errors: [], warnings: [] } - -lint('foo: bar', {'type-enum': [1, 'always', ['foo']]}) - .then(report => console.log(report)); - // => { valid: true, errors: [], warnings: [] } - -lint('foo: bar', {'type-enum': [1, 'always', ['bar']]}) - .then(report => console.log(report)); - /* => - { valid: true, - errors: [], - warnings: - [ { level: 1, - valid: false, - name: 'type-enum', - message: 'type must be one of [bar]' } ] } - */ - -const opts = {parserOpts: {headerPattern: /^(\w*)-(\w*)/, headerCorrespondence: ['type', 'scope']}}; - -lint('foo-bar', {'type-enum': [2, 'always', ['foo']]}, opts).then(report => console.log(report)); -// => { valid: true, errors: [], warnings: [] } -``` - -* **Load configuration** - -```js -const load = require('@commitlint/load'); -const lint = require('@commitlint/lint'); - -const CONFIG = { - extends: ['@commitlint/config-conventional'] -}; - -load(CONFIG) - .then(opts => lint('foo: bar', opts.rules, opts.parserPreset ? {parserOpts: opts.parserPreset.parserOpts} : {})) - .then(report => console.log(report)); - /* => - { valid: false, - errors: - [ { level: 2, - valid: false, - name: 'type-enum', - message: 'type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]' } ], - warnings: [] } - */ -``` - -* **Read git history** - -```js -const lint = require('@commitlint/lint'); -const read = require('@commitlint/read'); - -const RULES = { - 'type-enum': [2, 'always', ['foo']] -}; - -const check = commit => lint(commit, RULES); - -read({to: 'HEAD', from: 'HEAD~2'}) - .then(commits => Promise.all(commits.map(check))); -``` - -* **Simplfied last-commit checker** - -```js -const load = require('@commitlint/load'); -const read = require('@commitlint/read'); -const lint = require('@commitlint/lint'); - -Promise.all([load(), read({from: 'HEAD~1'})]) - .then(tasks => { - const [{rules, parserPreset}, [commit]] = tasks; - return lint(commit, rules, parserPreset ? {parserOpts: parserPreset.parserOpts}: {}); - }) - .then(report => console.log(JSON.stringify(result.valid))); -``` diff --git a/docs/reference-cli.md b/docs/reference-cli.md deleted file mode 100644 index 44261fc6e2..0000000000 --- a/docs/reference-cli.md +++ /dev/null @@ -1,23 +0,0 @@ -# CLI - -```bash -❯ npx commitlint --help - -@commitlint/cli@8.0.0 - Lint your commit messages - -[input] reads from stdin if --edit, --env, --from and --to are omitted ---color, -c toggle colored output, defaults to: true ---config, -g path to the config file ---cwd, -d directory to execute in, defaults to: $CD ---edit, -e read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG ---env, -E check message in the file at path given by environment variable value ---extends, -x array of shareable configurations to extend ---help, -h display this help message ---from, -f lower end of the commit range to lint; applies if edit=false ---format, -o output format of the results ---parser-preset, -p configuration preset to use for conventional-commits-parser ---quiet, -q toggle console output ---to, -t upper end of the commit range to lint; applies if edit=false ---version, -v display version information ---verbose, -V enable verbose output for reports without problems -``` diff --git a/docs/reference-configuration.md b/docs/reference-configuration.md deleted file mode 100644 index 1e1478e077..0000000000 --- a/docs/reference-configuration.md +++ /dev/null @@ -1,179 +0,0 @@ -# Configuration - -`@commitlint/cli` picks up configuration from `./commitlint.config.js`. - -The file is expected - -* to contain valid JavaScript -* export a configuration object -* adhere to the schema outlined below - -```ts -type Config = { - /* - * Resolveable ids to commitlint configurations to extend - */ - extends?: string[]; - /* - * Resolveable id to conventional-changelog parser preset to import and use - */ - parserPreset?: string; - /* - * Resolveable id to package, from node_modules, which formats the output. - */ - formatter: string; - /* - * Rules to check against - */ - rules?: {[name: string]: Rule}; - /* - * Functions that return true if commitlint should ignore the given message. - */ - ignores?: ((message: string) => boolean)[]; - /* - * Whether commitlint uses the default ignore rules. - */ - defaultIgnores?: boolean; -} - -const Configuration: Config = { - /* - * Resolve and load @commitlint/config-conventional from node_modules. - * Referenced packages must be installed - */ - extends: ['@commitlint/config-conventional'], - /* - * Resolve and load conventional-changelog-atom from node_modules. - * Referenced packages must be installed - */ - parserPreset: 'conventional-changelog-atom', - /* - * Resolve and load @commitlint/format from node_modules. - * Referenced package must be installed - */ - formatter: '@commitlint/format', - /* - * Any rules defined here will override rules from @commitlint/config-conventional - */ - rules: { - 'type-enum': [2, 'always', ['foo']] - }, - /* - * Functions that return true if commitlint should ignore the given message. - */ - ignores: [ - (commit) => commit === '' - ], - /* - * Whether commitlint uses the default ignore rules. - */ - defaultIgnores: true -}; - -module.exports = Configuration; -``` - -## Shareable configuration - -Every commitlint configuration can extend other commitlint configurations. -Specify configurations to extend via the `.extends` key, using ids -that can be resolved by the node resolve algorithm. - -This means installed npm packages and local files can be used. - -* npm - -``` -npm install --save-dev commitlint-config-lerna @commitlint/config-conventional -``` - -```js -// commitlint.config.js -module.exports = { - extends: [ - 'lerna' // prefixed with commitlint-config-*, - '@commitlint/config-conventional' // scoped packages are not prefixed - ] -} -``` - -* local - - -```js -// commitlint.config.js -module.exports = { - extends: ['./commitlint.base.js', './commitlint.types.js'] -} -``` - -```js -// commitlint.types.js, will be picked up by commitlint.config.js -module.exports = { - rules: { - 'type-enum': [2, 'always', ['foo']] - } -} -``` - -```js -// commitlint.base.js, will be picked up by commitlint.config.js -module.exports = { - extends: ['@commitlint/config-conventional'], // extends can be nested - parserPreset: 'conventional-changelog-atom' -} -``` - -## Parser presets - -The parser preset used to parse commit messages can be configured. -Use ids resolveable by the node resolve algorithm. - -This means installed npm packages and local files can be used. - -* npm - -``` -npm install --save-dev conventional-changelog-atom -``` - -```js -// commitlint.config.js -module.exports = { - parserPreset: 'conventional-changelog-atom' -} -``` - -* local - -```js -// commitlint.config.js -module.exports = { - parserPreset: './parser-preset' -} -``` - -```js -// parser-preset.js -module.exports = { - parserOpts: { - headerPattern: /^(\w*)\((\w*)\)-(\w*)\s(.*)$/, - headerCorrespondence: ['type', 'scope', 'ticket', 'subject'] - } -}; -``` - -## Formatter - -Commitlint can output the issues encountered in different formats, if necessary. -Use ids resolvable by the node resolve algorithm. - -```js -module.exports = { - formatter: '@commitlint/format' -}; -``` - -## Rules - -Refer to [Rules](reference-rules.md) for a complete list of available rules. diff --git a/docs/reference-examples.md b/docs/reference-examples.md deleted file mode 100644 index cd6aae28f1..0000000000 --- a/docs/reference-examples.md +++ /dev/null @@ -1,23 +0,0 @@ -# Examples - -These examples show common usages of how commitlint can be configured. - - -## Validate for issue/ticket numbers - -In your `package.json` add: - -```js - commitlint: { - 'rules': { - 'references-empty': [2, 'never'], - }, - parserPreset: { - parserOpts: { - issuePrefixes: ['PROJ-'] - } - }, - } -``` - - diff --git a/docs/reference-rules.md b/docs/reference-rules.md deleted file mode 100644 index 90529a748c..0000000000 --- a/docs/reference-rules.md +++ /dev/null @@ -1,361 +0,0 @@ -# Rules - -Rules are made up by a name and a configuration array. The configuration array contains: -* **Level** `[0..2]`: `0` disables the rule. For `1` it will be considered a warning for `2` an error. -* **Applicable** `always|never`: `never` inverts the rule. -* **Value**: value to use for this rule. - -Rule configurations are either of type `array` residing on a key with the rule's name as key on the rules `object` or of type function returning type `array` or `Promise`. This means all of the following notations are supported. - -**Plain array** -```js - "rules": { - "header-max-length": [0, "always", 72], - } -``` -**Function returning array** -```js - "rules": { - "header-max-length": () => [0, "always", 72], - } -``` -**Async function returning array** -```js - "rules": { - "header-max-length": async () => [0, "always", 72], - } -``` -**Function returning a promise resolving to array** -```js - "rules": { - "header-max-length": () => Promise.resolve([0, "always", 72]), - } -``` - - -### Available rules -#### body-leading-blank -* **condition**: `body` begins with blank line -* **rule**: `always` - -#### body-max-length -* **condition**: `body` has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### body-max-line-length -* **condition**: `body` lines has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### body-min-length -* **condition**: `body` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### footer-leading-blank -* **condition**: `footer` begins with blank line -* **rule**: `always` - -#### footer-max-length -* **condition**: `footer` has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### footer-max-line-length -* **condition**: `footer` lines has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### footer-min-length -* **condition**: `footer` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### header-case -* **condition**: `header` is in case `value` -* **rule**: `always` -```js - 'lowerCase' -``` -* **possible values** -```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 - ] -``` - -#### header-full-stop -* **condition**: `header` ends with `value` -* **rule**: `never` -* **value** -```js - '.' -``` - -#### header-max-length -* **condition**: `header` has `value` or less characters -* **rule**: `always` -* **value** -```js - 72 -``` - -#### header-min-length -* **condition**: `header` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### references-empty -* **condition**: `references` has at least one entry -* **rule**: `never` - -#### scope-enum -* **condition**: `scope` is found in value -* **rule**: `always` -* **value** - ```js - [] - ``` - -#### scope-case -* **condition**: `scope` is in case `value` -* **rule**: `always` -```js - 'lowerCase' -``` -* **possible values** -```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 - ] -``` - -#### scope-empty -* **condition**: `scope` is empty -* **rule**: `never` - -#### scope-max-length -* **condition**: `scope` has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### scope-min-length -* **condition**: `scope` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### subject-case -* **condition**: `subject` is in case `value` -* **rule**: `always` -```js - 'lowerCase' -``` -* **possible values** -```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 - ] -``` - -#### subject-empty -* **condition**: `subject` is empty -* **rule**: `never` - -#### subject-full-stop -* **condition**: `subject` ends with `value` -* **rule**: `never` -* **value** -```js - '.' -``` - -#### subject-max-length -* **condition**: `subject` has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### subject-min-length -* **condition**: `subject` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### type-enum -* **condition**: `type` is found in value -* **rule**: `always` -* **value** - ```js - [ - 'feat', - 'fix', - 'docs', - 'style', - 'refactor', - 'test', - 'revert' - ] - ``` - -#### type-case -* **description**: `type` is in case `value` -* **rule**: `always` -* **value** - ```js - 'lower-case' - ``` -* **possible values** -```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 - ] -``` - -#### type-empty -* **condition**: `type` is empty -* **rule**: `never` - -#### type-max-length -* **condition**: `type` has `value` or less characters -* **rule**: `always` -* **value** -```js - Infinity -``` - -#### type-min-length -* **condition**: `type` has `value` or more characters -* **rule**: `always` -* **value** -```js - 0 -``` - -#### signed-off-by -* **condition**: `message` has `value` -* **rule**: `always` -* **value** -```js - 'Signed-off-by:' -``` - -### Deprecated rules - -#### body-tense `deprecated` -* **condition**: `body` is verbalized in tense present in `value` -* **rule**: `always` -* **value** -```js - ['present-imperative'] -``` -* **possible values** -```js - [ - 'past-tense', // did - 'present-imperative', // do - 'present-participle', // doing - 'present-third-person' // does - ] -``` - -#### footer-tense `deprecated` -* **condition**: `footer` is verbalized in tense present in `value` -* **rule**: `always` -* **value** -```js - ['present-imperative'] -``` -* **possible values** -```js - [ - 'past-tense', // did - 'present-imperative', // do - 'present-participle', // doing - 'present-third-person' // does - ] -``` - -#### lang `deprecated` -* **condition**: `subject` is of language `value` -* **rule**: `always` -* **value** -```js - eng -``` - -#### subject-tense `deprecated` -* **condition**: `subject` is verbalized in tense present in `value` -* **rule**: `always` -* **value** -```js - ['present-imperative'] -``` -* **possible values** -```js - [ - 'past-tense', // did - 'present-imperative', // do - 'present-participle', // doing - 'present-third-person' // does - ] -``` diff --git a/docs/reference/cli.md b/docs/reference/cli.md new file mode 100644 index 0000000000..efc0656a62 --- /dev/null +++ b/docs/reference/cli.md @@ -0,0 +1,51 @@ + + +# CLI + +```sh-vue +❯ npx commitlint --help + +@commitlint/cli@{{ commitlintVersion }} - 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; 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] + -E, --env check message in the file at path given by environment + variable value [string] + -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] +``` diff --git a/docs/reference/community-projects.md b/docs/reference/community-projects.md new file mode 100644 index 0000000000..c68a2d9c3b --- /dev/null +++ b/docs/reference/community-projects.md @@ -0,0 +1,17 @@ +# Projects from the community + +## Remark + +?> These projects are not affiliated with us in any way. + +Before you use any of these projects make sure you know what you are doing. If you find anything weird about a project let us know. + +If you want to add a project to this list [open a pull request](https://github.com/conventional-changelog/commitlint/pulls). + +## List of Projects + +- [Gitmoji Commit Workflow](https://github.com/arvinxx/gitmoji-commit-workflow) +- [commitlint.io](https://github.com/tomasen/commitlintio) - helps your project to ensure nice and tidy commit messages without needing any download or installation +- [commitlint plugin function rules](https://github.com/vidavidorra/commitlint-plugin-function-rules) - use functions as rule value to create rules based on commit messages, with regular expressions and more +- [commitlint-plugin-selective-scope](https://github.com/ridvanaltun/commitlint-plugin-selective-scope) - limit scopes per type with regular expressions and plain text +- [commitlint-gitlab-ci](https://gitlab.com/dmoonfire/commitlint-gitlab-ci/) - a small wrapper around `commitlint` for working with the quirks of Gitlab's CI without failing jobs diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md new file mode 100644 index 0000000000..b9a332202c --- /dev/null +++ b/docs/reference/configuration.md @@ -0,0 +1,253 @@ +# Configuration + +## Config via file + +`@commitlint/cli` picks up configuration from the following files: + +- `.commitlintrc` +- `.commitlintrc.json` +- `.commitlintrc.yaml` +- `.commitlintrc.yml` +- `.commitlintrc.js` +- `.commitlintrc.cjs` +- `.commitlintrc.mjs` +- `.commitlintrc.ts` +- `.commitlintrc.cts` +- `commitlint.config.js` +- `commitlint.config.cjs` +- `commitlint.config.mjs` +- `commitlint.config.ts` +- `commitlint.config.cts` + +The file is expected + +- to contain valid JavaScript / TypeScript +- export a configuration object +- adhere to the schema outlined below + +Configuration files are resolved using [cosmiconfig](https://github.com/cosmiconfig/cosmiconfig). + +## Config via `package.json` + +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 + +Add the path to the configuration file. Example: `commitlint --config commitlint.config.js` + +## Configuration object example + +```js +const Configuration = { + /* + * Resolve and load @commitlint/config-conventional from node_modules. + * Referenced packages must be installed + */ + extends: ["@commitlint/config-conventional"], + /* + * Resolve and load conventional-changelog-atom from node_modules. + * Referenced packages must be installed + */ + parserPreset: "conventional-changelog-atom", + /* + * Resolve and load @commitlint/format from node_modules. + * Referenced package must be installed + */ + formatter: "@commitlint/format", + /* + * Any rules defined here will override rules from @commitlint/config-conventional + */ + rules: { + "type-enum": [2, "always", ["foo"]], + }, + /* + * Array of functions that return true if commitlint should ignore the given message. + * Given array is merged with predefined functions, which consist of matchers like: + * + * - 'Merge pull request', 'Merge X into Y' or 'Merge branch X' + * - 'Revert X' + * - 'v1.2.3' (ie semver matcher) + * - 'Automatic merge X' or 'Auto-merged X into Y' + * + * 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 === ""], + /* + * Whether commitlint uses the default ignore rules, see the description above. + */ + defaultIgnores: true, + /* + * Custom URL to show upon failure + */ + helpUrl: + "https://github.com/conventional-changelog/commitlint/#what-is-commitlint", + /* + * Custom prompt configs + */ + prompt: { + messages: {}, + questions: { + type: { + description: "please input type:", + }, + }, + }, +}; + +export default Configuration; +``` + +> [!NOTE] +> CJS format is supported as well: +> +> ```js +> module.exports = Configuration; +> ``` + +### TypeScript configuration + +Configuration can also be a TypeScript file. + +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] + +const Configuration: UserConfig = { + // [!code focus] + extends: ["@commitlint/config-conventional"], + parserPreset: "conventional-changelog-atom", + formatter: "@commitlint/format", + rules: { + "type-enum": [RuleConfigSeverity.Error, "always", ["foo"]], // [!code focus] + }, + // ... +}; + +export default Configuration; +``` + +## Shareable configuration + +Every commitlint configuration can extend other commitlint configurations. +Specify configurations to extend via the `.extends` key, using ids +that can be resolved by the node resolve algorithm. + +This means installed npm packages and local files can be used. + +:::tabs +== npm + +```sh +npm install --save-dev commitlint-config-lerna @commitlint/config-conventional +``` + +::: code-group + +```js [commitlint.config.js] +export default { + extends: [ + 'lerna' // prefixed with commitlint-config-*, + '@commitlint/config-conventional' // scoped packages are not prefixed + ] +} +``` + +== local + +::: code-group + +```js [commitlint.config.js] +export default { + extends: ["./commitlint.base.js", "./commitlint.types.js"], +}; +``` + +```js [commitlint.types.js] +// will be picked up by commitlint.config.js +export default { + rules: { + "type-enum": [2, "always", ["foo"]], + }, +}; +``` + +```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", +}; +``` + +::: + +More information can be found in the [Concepts – shareable config section](/concepts/shareable-config). + +## Parser presets + +The parser preset used to parse commit messages can be configured. +Use ids resolvable by the node resolve algorithm. + +This means installed npm packages and local files can be used. + +:::tabs +== npm + +```sh +npm install --save-dev conventional-changelog-atom +``` + +::: code-group + +```js [commitlint.config.js] +export default { + parserPreset: "conventional-changelog-atom", +}; +``` + +== local + +::: code-group + +```js [commitlint.config.js] +export default { + parserPreset: "./parser-preset", +}; +``` + +```js [parser-preset.js] +export default { + parserOpts: { + headerPattern: /^(\w*)\((\w*)\)-(\w*)\s(.*)$/, + headerCorrespondence: ["type", "scope", "ticket", "subject"], + }, +}; +``` + +::: + +## Formatter + +Commitlint can output the issues encountered in different formats, if necessary. +Use ids resolvable by the node resolve algorithm. + +```js +export default { + formatter: "@commitlint/format", +}; +``` + +## Rules + +Refer to [Rules](/reference/rules.md) for a complete list of available rules. + +## Prompt + +Config command-line submit interaction, works with `@commitlint/cz-commitlint`. + +Refer to [Prompt Config](/reference/prompt.md) for details. diff --git a/docs/reference/examples.md b/docs/reference/examples.md new file mode 100644 index 0000000000..4d80227b88 --- /dev/null +++ b/docs/reference/examples.md @@ -0,0 +1,153 @@ +# Examples + +These examples show common usages of how commitlint can be configured. + +## Validate for issue/ticket numbers + +::: code-group + +```jsonc [package.json] +{ + // ... + "commitlint": { + "rules": { + "references-empty": [2, "never"], + }, + "parserPreset": { + "parserOpts": { + "issuePrefixes": ["PROJ-"], + }, + }, + }, + // ... +} +``` + +::: + +## Customizing Emojis and Alignment in VS Code + +Some terminals have trouble correctly calculating the width of Unicode emojis, which can cause a missing space after the emoji, leading to misaligned text in the commit prompt. + +![cz-commitlint questions](/assets/vs-code-emoji.png) + +To fix this issue in VS Code, you can specify an additional space after each emoji in your `commitlint.config.ts` file. + +::: code-group + +```ts [commitlint.config.ts] +import { type UserConfig } from "@commitlint/types"; + +export default { + // Use the conventional commit rules as a base. + extends: ["@commitlint/config-conventional"], + prompt: { + questions: { + type: { + enum: { + // Add a space to a few common types for better alignment. + build: { + emoji: "🛠️ ", // The extra space fixes the alignment. + }, + chore: { + emoji: "♻️ ", + }, + ci: { + emoji: "⚙️ ", + }, + revert: { + emoji: "🗑️ ", + }, + }, + }, + }, + }, +} satisfies UserConfig; +``` + +::: + +## Include Emojis in Commit Messages + +By default, emojis are only shown in the commit message prompt. To include them in the actual commit header, you need a custom parser and a setting to enable them. + +This configuration is based on the conventional commit rules and uses a _parser preset_ to validate commit headers that start with an emoji. + +::: code-group + +```ts [commitlint.config.ts] +import type { ParserPreset, UserConfig } from "@commitlint/types"; +import config from "@commitlint/config-conventional"; +import createPreset from "conventional-changelog-conventionalcommits"; +import { merge } from "lodash-es"; + +// A helper function to create the custom emoji parser preset. +async function createEmojiParser(): Promise { + // Generates the regex from the emojis defined in the conventional config. + const emojiRegexPart = Object.values(config.prompt.questions.type.enum) + .map((value) => value.emoji.trim()) + .join("|"); + + const parserOpts = { + // This regular expression validates commit headers with an emoji. + breakingHeaderPattern: new RegExp( + `^(?:${emojiRegexPart})\\s+(\\w*)(?:\\((.*)\\))?!:\\s+(.*)$`, + ), + headerPattern: new RegExp( + `^(?:${emojiRegexPart})\\s+(\\w*)(?:\\((.*)\\))?!?:\\s+(.*)$`, + ), + }; + + const emojiParser = merge({}, await createPreset(), { + conventionalChangelog: { parserOpts }, + parserOpts, + recommendedBumpOpts: { parserOpts }, + }); + + return emojiParser; +} + +const emojiParser = await createEmojiParser(); + +export default { + extends: ["@commitlint/config-conventional"], + parserPreset: emojiParser, + prompt: { + questions: { + type: { + enum: { + // Customize emojis and add the extra space for better alignment. + build: { emoji: "🛠️ " }, + chore: { emoji: "♻️ " }, + ci: { emoji: "⚙️ " }, + revert: { emoji: "🗑️ " }, + }, + // This setting includes the emoji in the final commit header. + headerWithEmoji: true, + }, + }, + }, +} satisfies UserConfig; +``` + +::: + +Although some emojis may appear without a trailing space in the terminal, the commit message itself is submitted with the correct formatting. + +![cz-commitlint questions](/assets/vs-code-commit-msg.png) + +You can verify this with `git log -4 --format=%B > commits.txt`. + +:::code-group + +```text [commits.txt] +⚙️ ci(scope): short + +🛠 build(scope): short + +🐛 fix(scope): short + +✨ feat(scope): short +``` + +::: diff --git a/docs/reference-plugins.md b/docs/reference/plugins.md similarity index 58% rename from docs/reference-plugins.md rename to docs/reference/plugins.md index 3cc83dc139..251eeb65c3 100644 --- a/docs/reference-plugins.md +++ b/docs/reference/plugins.md @@ -3,32 +3,32 @@ Our plugin implementation is based off of [eslint's plugin implementation](https://github.com/eslint/eslint/blob/5018378131fd5190bbccca902c0cf4276ee1581a/lib/config/plugins.js); Each plugin is an npm module with a name in the format of `commitlint-plugin-`, such as `commitlint-plugin-jquery`. You can also use scoped packages in the format of `@/commitlint-plugin-` such as `@jquery/commitlint-plugin-jquery`. -### Rules in Plugins +## Rules in Plugins Plugins can expose additional rules for use in commitlint. To do so, the plugin must export a `rules` object containing a key-value mapping of rule ID to rule. The rule ID does not have to follow any naming convention (so it can just be `dollar-sign`, for instance). ```js -module.exports = { - rules: { - "dollar-sign": function(parsed, when, value) { - // rule implementation ... - } - } +export default { + rules: { + "dollar-sign": function (parsed, when, value) { + // rule implementation ... + }, + }, }; ``` To use the rule in commitlint, you would use the unprefixed plugin name, followed by a slash, followed by the rule name. So if this plugin were named `commitlint-plugin-myplugin`, then in your configuration you'd refer to the rule by the name `myplugin/dollar-sign`. Example: `"rules": {"myplugin/dollar-sign": 2}`. -### Peer Dependency +## Peer Dependency To make clear that the plugin requires commitlint to work correctly you have to declare commitlint as a `peerDependency` in your `package.json`. The plugin support was introduced in commitlint version `7.6.0`. Ensure the `peerDependency` points to @commitlint `7.6.0` or later. ```json { - "peerDependencies": { - "@commitlint/lint": ">=7.6.0" - } + "peerDependencies": { + "@commitlint/lint": ">=7.6.0" + } } ``` @@ -38,11 +38,47 @@ In order to make your plugin available to the community you have to publish it o Recommended keywords: -* `commitlint` -* `commitlintplugin` +- `commitlint` +- `commitlintplugin` Add these keywords into your `package.json` file to make it easy for others to find. +## Local Plugins + +In case you want to develop your plugins locally without the need to publish to `npm`, you can send declare your plugins inside your project locally. Please be aware that you can declare **only one** local plugin. + +### Usage Example + +::: code-group + +```js [commitlint.config.js] +export default { + rules: { + "hello-world-rule": [2, "always"], + }, + plugins: [ + { + rules: { + "hello-world-rule": ({ subject }) => { + const HELLO_WORLD = "Hello World"; + return [ + subject.includes(HELLO_WORLD), + `Your subject should contain ${HELLO_WORLD} message`, + ]; + }, + }, + }, + ], +}; +``` + +::: + +```bash +> echo "feat: random subject" | commitlint # fails +> echo "feat: Hello World" | commitlint # passes +``` + ## Further Reading -* [npm Developer Guide](https://docs.npmjs.com/misc/developers) +- [npm Developer Guide](https://docs.npmjs.com/misc/developers) diff --git a/docs/reference/prompt.md b/docs/reference/prompt.md new file mode 100644 index 0000000000..48a2ec9540 --- /dev/null +++ b/docs/reference/prompt.md @@ -0,0 +1,154 @@ +# Prompt + +Prompt Config is used by `@commitlint/cz-commitlint`. + +There are three fields: `settings`, `messages` and `questions` + +## `settings` + +Set optional options. + +- `enableMultipleScopes`: `(boolean)` Enable multiple scopes, select scope with a radio list, disabled by default. +- `scopeEnumSeparator`: `(string)` Commitlint supports [multiple scopes](/concepts/commit-conventions#multiple-scopes), you can specify the delimiter. It is applied when `enableMultipleScopes` set true. + +## `messages` + +Set hint contents, you can configure it to support localization. + +- `skip`: The field can be skipped by pressing enter +- `max`: Maximum number of characters +- `min`: Minimum number of characters +- `emptyWarning`: The field cannot be empty +- `upperLimitWarning`: The character limit is exceeded +- `lowerLimitWarning`: The characters are less than lower limit + +## `questions` + +Specify the interactive steps, Steps can only be configured in + +- `header` +- `type` +- `scope` +- `subject` +- `body` +- `footer` +- `isBreaking` +- `breaking` +- `breakingBody` +- `isIssueAffected` +- `issues` +- `issuesBody` + +![cz-commitlint questions](/assets/cz-commitlint.png) + +```js +export default { + parserPreset: 'conventional-changelog-conventionalcommits', + rules: { + ... + }, + prompt: { + settings: {}, + messages: { + skip: ':skip', + max: 'upper %d chars', + min: '%d chars at least', + emptyWarning: 'can not be empty', + upperLimitWarning: 'over limit', + lowerLimitWarning: 'below limit' + }, + questions: { + type: { + description: "Select the type of change that you're committing:", + enum: { + feat: { + description: 'A new feature', + title: 'Features', + emoji: '✨', + }, + fix: { + description: 'A bug fix', + title: 'Bug Fixes', + emoji: '🐛', + }, + docs: { + 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: '💎', + }, + refactor: { + description: '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: '🚀', + }, + test: { + 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: '🛠', + }, + ci: { + description: '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: '♻️', + }, + revert: { + description: 'Reverts a previous commit', + title: 'Reverts', + emoji: '🗑', + }, + }, + }, + scope: { + description: + 'What is the scope of this change (e.g. component or file name)', + }, + subject: { + description: 'Write a short, imperative tense description of the change', + }, + body: { + description: 'Provide a longer description of the change', + }, + isBreaking: { + description: 'Are there any breaking changes?', + }, + breakingBody: { + description: + 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself', + }, + breaking: { + description: 'Describe the breaking changes', + }, + isIssueAffected: { + 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', + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + } +}; +``` diff --git a/docs/reference/rules-configuration.md b/docs/reference/rules-configuration.md new file mode 100644 index 0000000000..09494a12b9 --- /dev/null +++ b/docs/reference/rules-configuration.md @@ -0,0 +1,57 @@ +# Rules configuration + +Rules are made up by a name and a configuration array. The configuration array contains: + +- **Level** `[0..2]`: `0` disables the rule. For `1` it will be considered a warning for `2` an error. +- **Applicable** `always|never`: `never` inverts the rule. +- **Value**: value to use for this rule. + +Rule configurations are either of type `array` residing on a key with the rule's name as key on the rules `object` or of type function returning type `array` or `Promise`. This means all of the following notations are supported. + +## Plain array + +:::code-group + +```js [commitlint.config.js] +export default { + // ... + rules: { + "header-max-length": [0, "always", 72], // [!code focus] + }, + // ... +}; +``` + +::: + +## Function returning array + +:::code-group + +```js [commitlint.config.js] +export default { + // ... + rules: { + "header-max-length": () => [0, "always", 72], // [!code focus] + }, + // ... +}; +``` + +::: + +## Async function returning array + +:::code-group + +```js [commitlint.config.js] +export default { + // ... + rules: { + "header-max-length": async () => [0, "always", 72], // [!code focus] + }, + // ... +}; +``` + +::: diff --git a/docs/reference/rules.md b/docs/reference/rules.md new file mode 100644 index 0000000000..7c76fafcd7 --- /dev/null +++ b/docs/reference/rules.md @@ -0,0 +1,418 @@ +# Rules + +## body-case + +- **condition**: `body` is in case `value` +- **rule**: `always` +- **value** + + ```text + 'lower-case' + ``` + +- **possible values** + + ```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 + ]; + ``` + +## body-empty + +- **condition**: `body` is empty +- **rule**: `never` + +## body-full-stop + +- **condition**: `body` ends with `value` +- **rule**: `never` +- **value** + + ```text + '.' + ``` + +## body-leading-blank + +- **condition**: `body` begins with blank line +- **rule**: `always` + +## body-max-length + +- **condition**: `body` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## body-max-line-length + +- **condition**: `body` lines have `value` or less characters, or contain a URL +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## body-min-length + +- **condition**: `body` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` + +## breaking-change-exclamation-mark + +- **condition**: Either both or neither `header` has an exclamation mark before the `:` marker + and a line in `footer` matches the regular expression `^BREAKING[ -]CHANGE:` +- **rule**: `always` + +> [!NOTE] +> +> This rule enforces that breaking changes are marked by both a `!` in the header +> and `BREAKING CHANGE` in the footer. The behavior is that of an XNOR operation: +> +> - It passes when either both are present or both are not. +> - It fails when one is present and the other is not. + +## footer-empty + +- **condition**: `footer` is empty +- **rule**: `never` + +## footer-leading-blank + +- **condition**: `footer` begins with blank line +- **rule**: `always` + +## footer-max-length + +- **condition**: `footer` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## footer-max-line-length + +- **condition**: `footer` lines have `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## footer-min-length + +- **condition**: `footer` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` + +## header-case + +- **condition**: `header` is in case `value` +- **rule**: `always` +- **value** + + ```text + 'lower-case' + ``` + +- **possible values** + + ```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 + ]; + ``` + +## header-full-stop + +- **condition**: `header` ends with `value` +- **rule**: `never` +- **value** + + ```text + '.' + ``` + +## header-max-length + +- **condition**: `header` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + 72 + ``` + +## header-min-length + +- **condition**: `header` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` + +## header-trim + +- **condition**: `header` must not have initial or trailing whitespaces +- **rule**: `always` + +## references-empty + +- **condition**: `references` has at least one entry +- **rule**: `never` + +## scope-case + +- **condition**: `scope` is in case `value` +- **rule**: `always` +- **value** + + ```text + 'lower-case' + ``` + +- **possible values** + + ```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 + ]; + ``` + +## scope-empty + +- **condition**: `scope` is empty +- **rule**: `never` + +## scope-enum + +- **condition**: `scope` is found in value +- **rule**: `always` +- **value** + + ```text + [] + ``` + +> [!NOTE] +> +> - This rule always passes if no scopes are provided in the message or the value > is an empty array. +> - When set to `always`, all message scopes must be found in the value. +> - When set to `never`, none of the message scopes can be found in the value. + +## scope-max-length + +- **condition**: `scope` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## scope-min-length + +- **condition**: `scope` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` + +## signed-off-by + +- **condition**: `message` has `value` +- **rule**: `always` +- **value** + + ```text + 'Signed-off-by:' + ``` + +## subject-case + +- **condition**: `subject` is in case `value` +- **rule**: `always` +- **value** + + ```js + ["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 + ]; + ``` + +## subject-empty + +- **condition**: `subject` is empty +- **rule**: `never` + +## subject-exclamation-mark + +- **condition**: `subject` has exclamation before the `:` marker +- **rule**: `never` + +## subject-full-stop + +- **condition**: `subject` ends with `value` +- **rule**: `never` +- **value** + + ```text + '.' + ``` + +## subject-max-length + +- **condition**: `subject` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## subject-min-length + +- **condition**: `subject` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` + +## trailer-exists + +- **condition**: `message` has trailer `value` +- **rule**: `always` +- **value** + + ```text + 'Signed-off-by:' + ``` + +## type-case + +- **description**: `type` is in case `value` +- **rule**: `always` +- **value** + + ```text + 'lower-case' + ``` + +- **possible values** + + ```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 + ]; + ``` + +## type-empty + +- **condition**: `type` is empty +- **rule**: `never` + +## type-enum + +- **condition**: `type` is found in value +- **rule**: `always` +- **value** + + ```js + [ + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", + ]; + ``` + +## type-max-length + +- **condition**: `type` has `value` or less characters +- **rule**: `always` +- **value** + + ```text + Infinity + ``` + +## type-min-length + +- **condition**: `type` has `value` or more characters +- **rule**: `always` +- **value** + + ```text + 0 + ``` diff --git a/docs/support/releases.md b/docs/support/releases.md new file mode 100644 index 0000000000..053bede855 --- /dev/null +++ b/docs/support/releases.md @@ -0,0 +1,9 @@ +# Releases + +Security patches will be applied to versions which are not yet EOL. +Features will only be applied to the current main version. + +We're not a sponsored OSS project. Therefore we can't promise that we will release patch versions for older releases in a timely manner. +If you are stuck on an older version and need a security patch we're happy if you can provide a PR. + +For a list of releases check our [README](https://github.com/conventional-changelog/commitlint#releases) 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/guides-upgrade.md b/docs/support/upgrade.md similarity index 60% rename from docs/guides-upgrade.md rename to docs/support/upgrade.md index d82b35f503..ec54313e83 100644 --- a/docs/guides-upgrade.md +++ b/docs/support/upgrade.md @@ -2,7 +2,7 @@ ## validate-commit-msg -The maintainers of [validate-commit-msg](https://github.com/conventional-changelog-archived-repos/validate-commit-msg) have deprecated their package in favor of `commitlint`. +The maintainers of [validate-commit-msg](https://github.com/conventional-changelog-archived-repos/validate-commit-msg) have deprecated their package in favor of `commitlint`. ### Migrating with default settings @@ -39,7 +39,7 @@ If you used `validate-commit-msg` with custom configuration you might want to cu ```sh npm remove validate-commit-msg --save-dev -npm install --save-dev @commitlint/cli @commitint/config-conventional +npm install --save-dev @commitlint/cli @commitlint/config-conventional ``` **Add a commitmsg run-script to package.json** @@ -62,12 +62,12 @@ 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 + }, +}; ``` ### validate-commit-msg option equivalents @@ -90,10 +90,9 @@ module.exports = { } ``` -Refer to the [Rules Referece](reference-rules.md) for a list of all avaiable configuration options. - -There is also the [#commitlint](https://yargs.slack.com/messages/C7M8XJ4RL/) channel on the DevTools Slack workspace. Join us there and we'll do our best to help you with your migration. +Refer to the [Rules Reference](/reference/rules) for a list of all available configuration options. +There is also the [#commitlint](https://node-tooling.slack.com/messages/C7M8XJ4RL/) channel on the DevTools Slack workspace. Join us there and we'll do our best to help you with your migration. ## Version 1 to 2 @@ -105,15 +104,15 @@ npm install --save-dev conventional-changelog-lint@latest #### CLI -* None +- None #### Config -* **wildcards** config is ignored - as of version `2.0.0` the former `.wildcards` configuration is ignored entirely. If your `.conventional-changelog-lintrc`, `commitlint.config.js` or an extended shareable configuration has a `.wildcards` key a warning will be issued. +- **wildcards** config is ignored - as of version `2.0.0` the former `.wildcards` configuration is ignored entirely. If your `.conventional-changelog-lintrc`, `commitlint.config.js` or an extended shareable configuration has a `.wildcards` key a warning will be issued. #### API -* None +- None ## Version 2 to 3 @@ -123,29 +122,29 @@ npm install --save commitlint mv .conventional-changelog-lintrc commitlint.config.js ``` -* Rename all calls to `conventional-changelog-lint` to `commitlint` +- Rename all calls to `conventional-changelog-lint` to `commitlint` ### Breaking changes #### CLI -* `conventional-changelog-lint` command now is called `commitlint` -* `commitlint` command now is installed via `@commitlint/cli` -* `.conventional-changelog-lintrc` now is called `commitlint.config.js` -* `commitlint` does not search upwards in the directory structure for config -* `--preset | -p` flag was removed. The `angular` preset is used always. +- `conventional-changelog-lint` command now is called `commitlint` +- `commitlint` command now is installed via `@commitlint/cli` +- `.conventional-changelog-lintrc` now is called `commitlint.config.js` +- `commitlint` does not search upwards in the directory structure for config +- `--preset | -p` flag was removed. The `angular` preset is used always. #### Config -* `.preset` key is removed. The `angular` preset is used always. +- `.preset` key is removed. The `angular` preset is used always. #### API -* `getConfiguration(name, settings, seed)` changed to `load(seed)` -* `getMessages(range)` changed to `read(range)` -* `getPreset(name, require)` removed -* `format(report, options)` now only respects `.color` on `options` -* `lint(message, options)` changed to `lint(message, rules)` +- `getConfiguration(name, settings, seed)` changed to `load(seed)` +- `getMessages(range)` changed to `read(range)` +- `getPreset(name, require)` removed +- `format(report, options)` now only respects `.color` on `options` +- `lint(message, options)` changed to `lint(message, rules)` ## Version 4 to 5 @@ -159,13 +158,45 @@ echo 'module.exports = {extends: ["@commitlint/config-conventional"]};'; #### Config -* `config-angular` dropped support for the `chore` type, breaking compat with conventional-changelog, -use `config-conventional` instead. +- `config-angular` dropped support for the `chore` type, breaking compatibility with conventional-changelog, + use `config-conventional` instead. ## Version 7 to 8 ### Breaking changes -#### Output on succesful commit will be ommited +#### Output on successful commit will be omitted + +- You can use the `--verbose` flag to get positive output + +## Version 8 to 9 + +### Breaking changes + +#### Possible types + +- `improvement` type will now be rejected by this config + +## Version 9 to 10 + +### Breaking changes + +#### Node support + +- node v8 is not supported anymore + +## Version 10 to 11 + +### Breaking changes + +#### Lerna support + +- lerna v2 is not supported anymore + +## Version 11 to 12 + +### Breaking changes + +#### resolve-extends -* You can use the `--verbose` flag to get positive output +- The order of the `extends` resolution is changed from right-to-left to left-to-right diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..679b906c09 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,104 @@ +import typescriptEslint from '@typescript-eslint/eslint-plugin'; +import { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript'; +import vitest from '@vitest/eslint-plugin'; +import { importX } from 'eslint-plugin-import-x'; +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/', '**/dist/'], + }, + importX.flatConfigs.typescript, + ...compat.extends('eslint:recommended', 'prettier'), + { + plugins: { + '@typescript-eslint': typescriptEslint, + }, + settings: { + 'import-x/resolver-next': createTypeScriptImportResolver(), + }, + languageOptions: { + globals: { + ...globals.node, + ...vitest.environments.env.globals + }, + ecmaVersion: 11, + sourceType: 'module', + + parserOptions: { + ecmaFeatures: { + jsx: false, + }, + }, + }, + rules: { + 'import-x/first': 'error', + 'import-x/no-absolute-path': 'error', + 'import-x/no-amd': 'error', + 'import-x/no-mutable-exports': 'error', + 'import-x/no-named-default': 'error', + 'import-x/no-self-import': 'error', + 'import-x/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', + }, + }, + { + files: ['**/*.test.ts', '**/*.test.js'], + plugins: { + vitest, + }, + rules: { + ...vitest.configs.recommended.rules, + 'vitest/max-nested-describe': ['error', { max: 3 }], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'import-x/first': 'off', + 'import-x/no-extraneous-dependencies': 'off', + }, + }, +]; diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 15fba24dfb..0000000000 --- a/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - testRegex: undefined, - testMatch: ['**/*.test.ts?(x)'] -}; diff --git a/lerna.json b/lerna.json index b1719c2c6f..b007de9a8f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,4 @@ { - "lerna": "2", "npmClient": "yarn", - "useWorkspaces": true, - "version": "8.2.0" + "version": "20.1.0" } diff --git a/package.json b/package.json index 092e6dc8a6..52b962b4e0 100644 --- a/package.json +++ b/package.json @@ -2,53 +2,55 @@ "name": "@commitlint/root", "description": "Lint commit messages", "private": true, + "type": "module", "version": "1.0.0", "license": "MIT", "scripts": { - "build": "tsc -b && lerna run build --stream --parallel --include-filtered-dependencies", - "watch": "lerna run watch --stream --parallel --include-filtered-dependencies", + "build": "tsc -b", + "watch": "tsc -b --watch", "clean": "tsc -b --clean && lerna clean --yes && lerna exec 'git clean -xdf lib' && git clean -xdf node_modules", "commit": "node @commitlint/prompt-cli/cli.js", "deps": "lerna run deps", "pkg": "lerna run pkg", - "docs": "docsify serve docs", - "lint": "prettier @{alias,commitlint,packages}/**/*.{ts,js} -l", + "docs-dev": "vitepress dev docs", + "docs-build": "vitepress build docs", + "docs-preview": "vitepress preview docs", + "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": "lerna run start --stream --parallel --include-filtered-dependencies", - "test": "jest && lerna run test --stream --parallel --include-filtered-dependencies" + "start": "yarn watch", + "test": "cross-env HOME=$PWD LANG=en_US.UTF-8 NO_COLOR=1 vitest run --coverage", + "prepare": "husky" }, "commitlint": { "extends": [ - "./@commitlint/config-conventional", - "./@commitlint/config-lerna-scopes" + "@commitlint/config-conventional", + "@commitlint/config-workspace-scopes" ] }, - "prettier": { - "useTabs": true, - "singleQuote": true, - "bracketSpacing": false - }, "lint-staged": { - "*.{ts,js}": [ - "prettier --write", - "git add" + "*.{ts,js,json,yml,md}": [ + "prettier --write" ] }, "renovate": { - "dependencies": { - "semanticPrefix": "chore:", - "semanticCommitScope": "" - }, + "rangeStrategy": "update-lockfile", + "ignorePaths": [ + "**/fixtures/**/package.json" + ], "extends": [ - "config:base" + "config:base", + ":semanticCommitType(chore)", + ":semanticCommitScopeDisabled" ], - "pin": { - "semanticPrefix": "chore:", - "semanticCommitScope": "" - }, - "semanticPrefix": "chore:", - "semanticCommitScope": "" + "ignoreDeps": [ + "@commitlint/test", + "@commitlint/test-environment", + "@commitlint/utils" + ] }, "workspaces": [ "@alias/*", @@ -56,7 +58,8 @@ "@packages/*" ], "engines": { - "node": ">=6" + "node": ">=v18", + "npm": ">=7" }, "repository": { "type": "git", @@ -78,37 +81,28 @@ "name": "Mario Nebl", "email": "hello@herebecode.com" }, - "dependencies": { - "@marionebl/sander": "0.6.1" - }, "devDependencies": { - "@lerna/project": "3.16.0", - "@types/jest": "24.0.18", - "docsify-cli": "4.3.0", - "husky": "3.0.5", - "jest": "24.8.0", - "lerna": "3.16.4", - "lint-staged": "8.2.1", - "prettier": "1.17.1", - "ts-jest": "24.1.0", - "typescript": "3.5.3" - }, - "husky": { - "hooks": { - "commit-msg": "node @commitlint/cli/lib/cli.js -E HUSKY_GIT_PARAMS", - "pre-commit": "lint-staged" - } - }, - "resolutions": { - "**/lodash": "4.17.14", - "docsify-cli/**/randomatic": "3", - "docsify-cli/**/stringstream": "0.0.6", - "docsify-cli/**/sshpk": "1.14.1", - "docsify-cli/**/marked": "0.3.9", - "docsify-cli/**/hoek": "5.0.3", - "docsify-cli/**/braces": "2.3.1", - "deep-extend": "0.5.1", - "moment": "2.19.3", - "js-yaml": ">=3.13.0" + "@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", + "@vitest/eslint-plugin": "^1.3.4", + "cross-env": "^7.0.3", + "eslint": "^9.16.0", + "eslint-config-prettier": "^10.0.0", + "eslint-import-resolver-typescript": "^4.4.3", + "eslint-plugin-import-x": "^4.15.2", + "globals": "^16.0.0", + "husky": "^9.1.5", + "lerna": "^8.2.0", + "lint-staged": "16.1.2", + "prettier": "^3.5.3", + "typescript": "^5.2.2", + "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 02b03b0b40..305b3ae79a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,34 @@ { - "files": [], - "include": [], - "extends": "./tsconfig.shared.json", - "references": [ - { "path": "@commitlint/ensure" }, - { "path": "@commitlint/execute-rule" }, - { "path": "@commitlint/format" }, - { "path": "@commitlint/is-ignored" }, - { "path": "@commitlint/message" }, - { "path": "@commitlint/parse" }, - { "path": "@commitlint/resolve-extends" }, - { "path": "@commitlint/to-lines" }, - { "path": "@commitlint/top-level" }, - ] + "extends": "./tsconfig.shared.json", + "files": [], + "include": ["./**/*.test.ts", "./**/*-test.ts"], + "exclude": ["./**/lib/*.ts"], + "compilerOptions": { + "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": "@commitlint/config-pnpm-scopes" } + ] } diff --git a/tsconfig.shared.json b/tsconfig.shared.json index 50fcc95422..150d512559 100644 --- a/tsconfig.shared.json +++ b/tsconfig.shared.json @@ -1,13 +1,24 @@ { - "compilerOptions": { - "lib": [ - "es2015" - ], - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true - } -} \ No newline at end of file + "compilerOptions": { + "target": "ES2022", + "lib": ["es2022"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "isolatedModules": true, + "skipLibCheck": true, + "downlevelIteration": true + } +} diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000000..cd76172eba --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + exclude: ["**/node_modules/**", "**/lib/*.test.js"], + environment: "commitlint", + coverage: { + provider: "istanbul", + include: ["**/@commitlint/*/src/**"], + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 1788822a8d..ee8f87e867 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10566 +2,7220 @@ # yarn lockfile v1 -"@ava/babel-plugin-throws-helper@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@ava/babel-plugin-throws-helper/-/babel-plugin-throws-helper-2.0.0.tgz#2fc1fe3c211a71071a4eca7b8f7af5842cd1ae7c" - integrity sha1-L8H+PCEacQcaTsp7j3r1hCzRrnw= +"@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.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.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@ava/babel-preset-stage-4@^1.0.0", "@ava/babel-preset-stage-4@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.1.0.tgz#ae60be881a0babf7d35f52aba770d1f6194f76bd" - integrity sha512-oWqTnIGXW3k72UFidXzW0ONlO7hnO9x02S/QReJ7NBGeiBH9cUHY9+EfV6C8PXC6YJH++WrliEq03wMSJGNZFg== - dependencies: - babel-plugin-check-es2015-constants "^6.8.0" - babel-plugin-syntax-trailing-function-commas "^6.20.0" - babel-plugin-transform-async-to-generator "^6.16.0" - babel-plugin-transform-es2015-destructuring "^6.19.0" - babel-plugin-transform-es2015-function-name "^6.9.0" - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-plugin-transform-es2015-parameters "^6.21.0" - babel-plugin-transform-es2015-spread "^6.8.0" - babel-plugin-transform-es2015-sticky-regex "^6.8.0" - babel-plugin-transform-es2015-unicode-regex "^6.11.0" - babel-plugin-transform-exponentiation-operator "^6.8.0" - package-hash "^1.2.0" - -"@ava/babel-preset-transform-test-files@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@ava/babel-preset-transform-test-files/-/babel-preset-transform-test-files-2.0.1.tgz#d75232cc6d71dc9c7eae4b76a9004fd81501d0c1" - integrity sha1-11IyzG1x3Jx+rkt2qQBP2BUB0ME= +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - babel-plugin-ava-throws-helper "^1.0.0" - babel-plugin-espower "^2.3.2" - package-hash "^1.2.0" + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2": + version "7.27.5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz#7d0658ec1a8420fc866d1df1b03bea0e79934c82" + integrity sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg== + +"@babel/core@^7.23.9": + version "7.27.4" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce" + integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.4" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.27.4" + "@babel/types" "^7.27.3" + 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.27.3": + version "7.27.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" + integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== + dependencies: + "@babel/parser" "^7.27.5" + "@babel/types" "^7.27.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.3": + version "7.27.3" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.27.4": + version "7.27.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c" + integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.6" + +"@babel/parser@^7.23.9", "@babel/parser@^7.25.4", "@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": + version "7.27.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" + integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/parser@^7.28.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== + dependencies: + "@babel/types" "^7.28.0" + +"@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.4": + version "7.27.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" + integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" + debug "^4.3.1" + globals "^11.1.0" -"@ava/babel-preset-transform-test-files@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@ava/babel-preset-transform-test-files/-/babel-preset-transform-test-files-3.0.0.tgz#cded1196a8d8d9381a509240ab92e91a5ec069f7" - integrity sha1-ze0RlqjY2TgaUJJAq5LpGl7Aafc= +"@babel/types@^7.25.4", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6": + version "7.27.6" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" + integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== dependencies: - "@ava/babel-plugin-throws-helper" "^2.0.0" - babel-plugin-espower "^2.3.2" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" -"@ava/pretty-format@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@ava/pretty-format/-/pretty-format-1.1.0.tgz#d0a57d25eb9aeab9643bdd1a030642b91c123e28" - integrity sha1-0KV9Jeua6rlkO90aAwZCuRwSPig= +"@babel/types@^7.28.0": + version "7.28.1" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz#2aaf3c10b31ba03a77ac84f52b3912a0edef4cf9" + integrity sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ== dependencies: - ansi-styles "^2.2.1" - esutils "^2.0.2" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" -"@ava/write-file-atomic@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ava/write-file-atomic/-/write-file-atomic-2.2.0.tgz#d625046f3495f1f5e372135f473909684b429247" - integrity sha512-BTNB3nGbEfJT+69wuqXFr/bQH7Vr7ihx2xGOMNqPgDGhwspoZhiWumDDZNjBy7AScmqS5CELIOGtPVXESyrnDA== +"@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== + +"@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: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" + "@docsearch/react" "3.8.2" + preact "^10.0.0" -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== +"@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/highlight" "^7.0.0" + "@algolia/autocomplete-core" "1.17.7" + "@algolia/autocomplete-preset-algolia" "1.17.7" + "@docsearch/css" "3.8.2" + algoliasearch "^5.14.2" -"@babel/core@^7.1.0": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" - integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== +"@emnapi/core@^1.1.0", "@emnapi/core@^1.4.3": + version "1.4.3" + resolved "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.4.0", "@babel/generator@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== - dependencies: - "@babel/types" "^7.4.4" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + tslib "^2.4.0" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@emnapi/wasi-threads@1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9" + integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c" + integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419" + integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683" + integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz#f1513eaf9ec8fa15dcaf4c341b0f005d3e8b47ae" + integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be" + integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca" + integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab" + integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b" + integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37" + integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4" + integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0" + integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5" + integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db" + integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547" + integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830" + integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f" + integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg== + +"@esbuild/netbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548" + integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52" + integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g== + +"@esbuild/openbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935" + integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf" + integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA== + +"@esbuild/openharmony-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314" + integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e" + integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b" + integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3" + integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww== + +"@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.9": + version "0.25.9" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f" + integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: - "@babel/types" "^7.0.0" + eslint-visitor-keys "^3.4.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@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== -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== +"@eslint/config-array@^0.21.0": + version "0.21.0" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" + integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== dependencies: - "@babel/types" "^7.4.4" + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" +"@eslint/config-helpers@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286" + integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw== -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== +"@eslint/core@^0.15.0", "@eslint/core@^0.15.1": + version "0.15.1" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60" + integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" + "@types/json-schema" "^7.0.15" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" - integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== +"@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 "^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@9.32.0", "@eslint/js@^9.16.0": + version "9.32.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz#a02916f58bd587ea276876cb051b579a3d75d091" + integrity sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg== + +"@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== -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.2.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@eslint/plugin-kit@^0.3.4": + version "0.3.4" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz#c6b9f165e94bf4d9fdd493f1c028a94aaf5fc1cc" + integrity sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@eslint/core" "^0.15.1" + 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#db16d7fe6d13b26dc792442e5156677b44cc428e" + integrity sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA== + +"@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== -"@babel/runtime@^7.0.0": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" - integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== +"@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: - regenerator-runtime "^0.13.2" + "@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#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@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== -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== +"@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@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#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: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" + "@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/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" - integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A== +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" + "@isaacs/balanced-match" "^4.0.1" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== +"@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#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@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#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "@sinclair/typebox" "^0.27.8" -"@concordance/react@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@concordance/react/-/react-1.0.0.tgz#fcf3cad020e5121bfd1c61d05bc3516aac25f734" - integrity sha512-htrsRaQX8Iixlsek8zQU7tE8wcsTQJ5UhZkSPEA8slCDAisKpC/2VgU/ucPn32M5/LjGGXRaUEKvEw1Wiuu4zQ== +"@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: - arrify "^1.0.1" + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" -"@evocateur/libnpmaccess@^3.1.2": +"@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -"@jest/console@^24.7.1": - version "24.7.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" - integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== - dependencies: - "@jest/source-map" "^24.3.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/core@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b" - integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.8.0" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - jest-watcher "^24.8.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - pirates "^4.0.1" - realpath-native "^1.1.0" - rimraf "^2.5.4" - strip-ansi "^5.0.0" - -"@jest/environment@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" - integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== - dependencies: - "@jest/fake-timers" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - -"@jest/fake-timers@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" - integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== - dependencies: - "@jest/types" "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - -"@jest/reporters@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729" - integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.1.1" - jest-haste-map "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - node-notifier "^5.2.1" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" - -"@jest/source-map@^24.3.0": - version "24.3.0" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" - integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" - integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== - dependencies: - "@jest/console" "^24.7.1" - "@jest/types" "^24.8.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/test-sequencer@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" - integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== - dependencies: - "@jest/test-result" "^24.8.0" - jest-haste-map "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - -"@jest/transform@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" - integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.8.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.8.0" - jest-regex-util "^24.3.0" - jest-util "^24.8.0" - micromatch "^3.1.10" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" +"@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== -"@jest/types@^24.8.0": - version "24.8.0" - resolved "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" - integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + 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/sourcemap-codec@^1.5.0": + version "1.5.4" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== + +"@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/create@8.2.3": + version "8.2.3" + resolved "https://registry.npmjs.org/@lerna/create/-/create-8.2.3.tgz#8e88fedb60eb699f2f5057e7344d9f980b7f9554" + integrity sha512-f+68+iojcQ0tZRMfCgQyJdsdz+YPu3/d+0Zo1RJz92bgBxTCiEU+dHACVq1n3sEjm/YWPnFGdag8U5EYYmP3WA== + 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" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + 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" + 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" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + 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" + +"@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: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^12.0.9" + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" -"@ladjs/time-require@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@ladjs/time-require/-/time-require-0.1.4.tgz#5c615d75fd647ddd5de9cf6922649558856b21a1" - integrity sha512-weIbJqTMfQ4r1YX85u54DKfjLZs2jwn1XZ6tIOP/pFgMwhIN5BAtaCp/1wn9DzyLsDR9tW0R2NIePcVJ45ivQQ== - dependencies: - chalk "^0.4.0" - date-time "^0.1.1" - pretty-ms "^0.2.1" - text-table "^0.2.0" - -"@lerna/add@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/add/-/add-3.16.2.tgz#90ecc1be7051cfcec75496ce122f656295bd6e94" - integrity sha512-RAAaF8aODPogj2Ge9Wj3uxPFIBGpog9M+HwSuq03ZnkkO831AmasCTJDqV+GEpl1U2DvnhZQEwHpWmTT0uUeEw== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.16.2" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/batch-packages@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.16.0.tgz#1c16cb697e7d718177db744cbcbdac4e30253c8c" - integrity sha512-7AdMkANpubY/FKFI01im01tlx6ygOBJ/0JcixMUWoWP/7Ds3SWQF22ID6fbBr38jUWptYLDs2fagtTDL7YUPuA== - dependencies: - "@lerna/package-graph" "3.16.0" - npmlog "^4.1.2" - -"@lerna/bootstrap@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.16.2.tgz#be268d940221d3c3270656b9b791b492559ad9d8" - integrity sha512-I+gs7eh6rv9Vyd+CwqL7sftRfOOsSzCle8cv/CGlMN7/p7EAVhxEdAw8SYoHIKHzipXszuqqy1Y3opyleD0qdA== - dependencies: - "@lerna/batch-packages" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/has-npm-version" "3.16.0" - "@lerna/npm-install" "3.16.0" - "@lerna/package-graph" "3.16.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.14.2" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-parallel-batches" "3.16.0" - "@lerna/symlink-binary" "3.16.2" - "@lerna/symlink-dependencies" "3.16.2" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.16.4": - version "3.16.4" - resolved "https://registry.npmjs.org/@lerna/changed/-/changed-3.16.4.tgz#c3e727d01453513140eee32c94b695de577dc955" - integrity sha512-NCD7XkK744T23iW0wqKEgF4R9MYmReUbyHCZKopFnsNpQdqumc3SOIvQUAkKCP6hQJmYvxvOieoVgy/CVDpZ5g== - dependencies: - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/listable" "3.16.0" - "@lerna/output" "3.13.0" - "@lerna/version" "3.16.4" - -"@lerna/check-working-tree@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.14.2.tgz#5ce007722180a69643a8456766ed8a91fc7e9ae1" - integrity sha512-7safqxM/MYoAoxZxulUDtIJIbnBIgo0PB/FHytueG+9VaX7GMnDte2Bt1EKa0dz2sAyQdmQ3Q8ZXpf/6JDjaeg== - dependencies: - "@lerna/collect-uncommitted" "3.14.2" - "@lerna/describe-ref" "3.14.2" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.14.2.tgz#950240cba83f7dfe25247cfa6c9cebf30b7d94f6" - integrity sha512-xnq+W5yQb6RkwI0p16ZQnrn6HkloH/MWTw4lGE1nKsBLAUbmSU5oTE93W1nrG0X3IMF/xWc9UYvNdUGMWvZZ4w== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/clean/-/clean-3.16.0.tgz#1c134334cacea1b1dbeacdc580e8b9240db8efa1" - integrity sha512-5P9U5Y19WmYZr7UAMGXBpY7xCRdlR7zhHy8MAPDKVx70rFIBS6nWXn5n7Kntv74g7Lm1gJ2rsiH5tj1OPcRJgg== - dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.14.2" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/cli/-/cli-3.13.0.tgz#3d7b357fdd7818423e9681a7b7f2abd106c8a266" - integrity sha512-HgFGlyCZbYaYrjOr3w/EsY18PdvtsTmDfpUQe8HwDjXlPeCCUgliZjXLOVBxSjiOvPeOSwvopwIHKWQmYbwywg== - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^12.0.1" - -"@lerna/collect-uncommitted@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.14.2.tgz#b5ed00d800bea26bb0d18404432b051eee8d030e" - integrity sha512-4EkQu4jIOdNL2BMzy/N0ydHB8+Z6syu6xiiKXOoFl0WoWU9H1jEJCX4TH7CmVxXL1+jcs8FIS2pfQz4oew99Eg== - dependencies: - "@lerna/child-process" "3.14.2" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.16.0.tgz#6db3ce8a740a4e2b972c033a63bdfb77f2553d8c" - integrity sha512-HwAIl815X2TNlmcp28zCrSdXfoZWNP7GJPEqNWYk7xDJTYLqQ+SrmKUePjb3AMGBwYAraZSEJLbHdBpJ5+cHmQ== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/describe-ref" "3.14.2" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/command/-/command-3.16.0.tgz#ba3dba49cb5ce4d11b48269cf95becd86e30773f" - integrity sha512-u7tE4GC4/gfbPA9eQg+0ulnoJ+PMoMqomx033r/IxqZrHtmJR9+pF/37S0fsxJ2hX/RMFPC7c9Q/i8NEufSpdQ== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/package-graph" "3.16.0" - "@lerna/project" "3.16.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - lodash "^4.17.14" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.16.4": - version "3.16.4" - resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.16.4.tgz#bf464f11b2f6534dad204db00430e1651b346a04" - integrity sha512-QSZJ0bC9n6FVaf+7KDIq5zMv8WnHXnwhyL5jG1Nyh3SgOg9q2uflqh7YsYB+G6FwaRfnPaKosh6obijpYg0llA== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/create/-/create-3.16.0.tgz#4de841ec7d98b29bb19fb7d6ad982e65f7a150e8" - integrity sha512-OZApR1Iz7awutbmj4sAArwhqCyKgcrnw9rH0aWAUrkYWrD1w4TwkvAcYAsfx5GpQGbLQwoXhoyyPwPfZRRWz3Q== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.14.2.tgz#edc3c973f5ca9728d23358c4f4d3b55a21f65be5" - integrity sha512-qa5pzDRK2oBQXNjyRmRnN7E8a78NMYfQjjlRFB0KNHMsT6mCiL9+8kIS39sSE2NqT8p7xVNo2r2KAS8R/m3CoQ== - dependencies: - "@lerna/child-process" "3.14.2" - npmlog "^4.1.2" - -"@lerna/diff@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/diff/-/diff-3.16.0.tgz#6d09a786f9f5b343a2fdc460eb0be08a05b420aa" - integrity sha512-QUpVs5TPl8vBIne10/vyjUxanQBQQp7Lk3iaB8MnCysKr0O+oy7trWeFVDPEkBTCD177By7yPGyW5Yey1nCBbA== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/exec/-/exec-3.16.0.tgz#2b6c033cee46181b6eede0eb12aad5c2c0181e89" - integrity sha512-mH3O5NXf/O88jBaBBTUf+d56CUkxpg782s3Jxy7HWbVuSUULt3iMRPTh+zEXO5/555etsIVVDDyUR76meklrJA== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/run-topologically" "3.16.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.16.0.tgz#b1660b4480c02a5c6efa4d0cd98b9afde4ed0bba" - integrity sha512-InIi1fF8+PxpCwir9bIy+pGxrdE6hvN0enIs1eNGCVS1TTE8osNgiZXa838bMQ1yaEccdcnVX6Z03BNKd56kNg== - dependencies: - "@lerna/collect-updates" "3.16.0" - "@lerna/filter-packages" "3.16.0" - dedent "^0.7.0" - -"@lerna/filter-packages@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.16.0.tgz#7d34dc8530c71016263d6f67dc65308ecf11c9fc" - integrity sha512-eGFzQTx0ogkGDCnbTuXqssryR6ilp8+dcXt6B+aq1MaqL/vOJRZyqMm4TY3CUOUnzZCi9S2WWyMw3PnAJOF+kg== - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.16.0.tgz#619874e461641d4f59ab1b3f1a7ba22dba88125d" - integrity sha512-IVJjcKjkYaUEPJsDyAblHGEFFNKCRyMagbIDm14L7Ab94ccN6i4TKOqAFEJn2SJHYvKKBdp3Zj2zNlASOMe3DA== - dependencies: - "@lerna/child-process" "3.14.2" - "@octokit/plugin-enterprise-rest" "^3.6.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.16.0.tgz#55764a4ce792f0c8553cf996a17f554b9e843288" - integrity sha512-TIY036dA9J8OyTrZq9J+it2DVKifL65k7hK8HhkUPpitJkw6jwbMObA/8D40LOGgWNPweJWqmlrTbRSwsR7DrQ== - dependencies: - "@lerna/child-process" "3.14.2" - semver "^6.2.0" - -"@lerna/import@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/import/-/import-3.16.0.tgz#b57cb453f4acfc60f6541fcbba10674055cb179d" - integrity sha512-trsOmGHzw0rL/f8BLNvd+9PjoTkXq2Dt4/V2UCha254hMQaYutbxcYu8iKPxz9x86jSPlH7FpbTkkHXDsoY7Yg== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/init@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/init/-/init-3.16.0.tgz#31e0d66bbededee603338b487a42674a072b7a7d" - integrity sha512-Ybol/x5xMtBgokx4j7/Y3u0ZmNh0NiSWzBFVaOs2NOJKvuqrWimF67DKVz7yYtTYEjtaMdug64ohFF4jcT/iag== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.11" + resolved "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" + integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.9.0" -"@lerna/link@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/link/-/link-3.16.2.tgz#6c3a5658f6448a64dddca93d9348ac756776f6f6" - integrity sha512-eCPg5Lo8HT525fIivNoYF3vWghO3UgEVFdbsiPmhzwI7IQyZro5HWYzLtywSAdEog5XZpd2Bbn0CsoHWBB3gww== - dependencies: - "@lerna/command" "3.16.0" - "@lerna/package-graph" "3.16.0" - "@lerna/symlink-dependencies" "3.16.2" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/list/-/list-3.16.0.tgz#883c00b2baf1e03c93e54391372f67a01b773c2f" - integrity sha512-TkvstoPsgKqqQ0KfRumpsdMXfRSEhdXqOLq519XyI5IRWYxhoqXqfi8gG37UoBPhBNoe64japn5OjphF3rOmQA== - dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/listable" "3.16.0" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/listable/-/listable-3.16.0.tgz#e6dc47a2d5a6295222663486f50e5cffc580f043" - integrity sha512-mtdAT2EEECqrJSDm/aXlOUFr1MRE4p6hppzY//Klp05CogQy6uGaKk+iKG5yyCLaOXFFZvG4HfO11CmoGSDWzw== - dependencies: - "@lerna/query-graph" "3.16.0" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + 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" + run-parallel "^1.1.9" -"@lerna/npm-dist-tag@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.16.0.tgz#b2184cee5e1f291277396854820e1117a544b7ee" - integrity sha512-MQrBkqJJB9+eNphuj9w90QPMOs4NQXMuSRk9NqzeFunOmdDopPCV0Q7IThSxEuWnhJ2n3B7G0vWUP7tNMPdqIQ== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.16.0" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.16.0.tgz#8ec76a7a13b183bde438fd46296bf7a0d6f86017" - integrity sha512-APUOIilZCzDzce92uLEwzt1r7AEMKT/hWA1ThGJL+PO9Rn8A95Km3o2XZAYG4W0hR+P4O2nSVuKbsjQtz8CjFQ== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.16.2.tgz#a850b54739446c4aa766a0ceabfa9283bb0be676" - integrity sha512-tGMb9vfTxP57vUV5svkBQxd5Tzc+imZbu9ZYf8Mtwe0+HYfDjNiiHLIQw7G95w4YRdc5KsCE8sQ0uSj+f2soIg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.14.2.tgz#8c518ea9d241a641273e77aad6f6fddc16779c3f" - integrity sha512-LbVFv+nvAoRTYLMrJlJ8RiakHXrLslL7Jp/m1R18vYrB8LYWA3ey+nz5Tel2OELzmjUiemAKZsD9h6i+Re5egg== - dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.16.0.tgz#de66aec4f3e835a465d7bea84b58a4ab6590a0fa" - integrity sha512-uqZ15wYOHC+/V0WnD2iTLXARjvx3vNrpiIeyIvVlDB7rWse9mL4egex/QSgZ+lDx1OID7l2kgvcUD9cFpbqB7Q== - dependencies: - "@lerna/prompt" "3.13.0" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.16.0.tgz#909c90fb41e02f2c19387342d2a5eefc36d56836" - integrity sha512-A2mum/gNbv7zCtAwJqoxzqv89As73OQNK2MgSX1SHWya46qoxO9a9Z2c5lOFQ8UFN5ZxqWMfFYXRCz7qzwmFXw== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/project@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/project/-/project-3.16.0.tgz#2469a4e346e623fd922f38f5a12931dfb8f2a946" - integrity sha512-NrKcKK1EqXqhrGvslz6Q36+ZHuK3zlDhGdghRqnxDcHxMPT01NgLcmsnymmQ+gjMljuLRmvKYYCuHrknzX8VrA== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" +"@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#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@lerna/prompt@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.13.0.tgz#53571462bb3f5399cc1ca6d335a411fe093426a5" - integrity sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.16.4": - version "3.16.4" - resolved "https://registry.npmjs.org/@lerna/publish/-/publish-3.16.4.tgz#4cd55d8be9943d9a68e316e930a90cda8590500e" - integrity sha512-XZY+gRuF7/v6PDQwl7lvZaGWs8CnX6WIPIu+OCcyFPSL/rdWegdN7HieKBHskgX798qRQc2GrveaY7bNoTKXAw== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.14.2" - "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/describe-ref" "3.14.2" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.16.0" - "@lerna/npm-publish" "3.16.2" - "@lerna/otplease" "3.16.0" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.16.0" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.16.4" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + 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" -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== +"@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/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" + hosted-git-info "^7.0.2" + json-parse-even-better-errors "^3.0.2" + json-stringify-nice "^1.1.4" + 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 "^3.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.6" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@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: - npmlog "^4.1.2" + semver "^7.3.5" -"@lerna/query-graph@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.16.0.tgz#e6a46ebcd9d5b03f018a06eca2b471735353953c" - integrity sha512-p0RO+xmHDO95ChJdWkcy9TNLysLkoDARXeRHzY5U54VCwl3Ot/2q8fMCVlA5UeGXDutEyyByl3URqEpcQCWI7Q== +"@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: - "@lerna/package-graph" "3.16.0" - figgy-pudding "^3.5.1" + "@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 "^4.0.0" -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== +"@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: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" -"@lerna/rimraf-dir@3.14.2": - version "3.14.2" - resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.14.2.tgz#103a49882abd85d42285d05cc76869b89f21ffd2" - integrity sha512-eFNkZsy44Bu9v1Hrj5Zk6omzg8O9h/7W6QYK1TTUHeyrjTEwytaNQlqF0lrTLmEvq55sviV42NC/8P3M2cvq8Q== +"@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: - "@lerna/child-process" "3.14.2" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-parallel-batches@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.16.0.tgz#5ace7911a2dd31dfd1e53c61356034e27df0e1fb" - integrity sha512-2J/Nyv+MvogmQEfC7VcS21ifk7w0HVvzo2yOZRPvkCzGRu/rducxtB4RTcr58XCZ8h/Bt1aqQYKExu3c/3GXwg== - dependencies: - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/run-topologically@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.16.0.tgz#39e29cfc628bbc8e736d8e0d0e984997ac01bbf5" - integrity sha512-4Hlpv4zDtKWa5Z0tPkeu0sK+bxZEKgkNESMGmWrUCNfj7xwvAJurcraK8+a2Y0TFYwf0qjSLY/MzX+ZbJA3Cgw== - dependencies: - "@lerna/query-graph" "3.16.0" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.16.0": - version "3.16.0" - resolved "https://registry.npmjs.org/@lerna/run/-/run-3.16.0.tgz#1ea568c6f303e47fa00b3403a457836d40738fd2" - integrity sha512-woTeLlB1OAAz4zzjdI6RyIxSGuxiUPHJZm89E1pDEPoWwtQV6HMdMgrsQd9ATsJ5Ez280HH4bF/LStAlqW8Ufg== - dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/npm-run-script" "3.14.2" - "@lerna/output" "3.13.0" - "@lerna/run-topologically" "3.16.0" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.16.2.tgz#f98a3d9da9e56f1d302dc0d5c2efeb951483ee66" - integrity sha512-kz9XVoFOGSF83gg4gBqH+mG6uxfJfTp8Uy+Cam40CvMiuzfODrGkjuBEFoM/uO2QOAwZvbQDYOBpKUa9ZxHS1Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.16.2": - version "3.16.2" - resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.16.2.tgz#91d9909d35897aebd76a03644a00cd03c4128240" - integrity sha512-wnZqGJQ+Jvr1I3inxrkffrFZfmQI7Ta8gySw/UWCy95QtZWF/f5yk8zVIocCAsjzD0wgb3jJE3CFJ9W5iwWk1A== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.16.2" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.16.4": - version "3.16.4" - resolved "https://registry.npmjs.org/@lerna/version/-/version-3.16.4.tgz#b5cc37f3ad98358d599c6196c30b6efc396d42bf" - integrity sha512-ikhbMeIn5ljCtWTlHDzO4YvTmpGTX1lWFFIZ79Vd1TNyOr+OUuKLo/+p06mCl2WEdZu0W2s5E9oxfAAQbyDxEg== - dependencies: - "@lerna/check-working-tree" "3.14.2" - "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/conventional-commits" "3.16.4" - "@lerna/github-client" "3.16.0" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.16.0" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - -"@marionebl/sander@0.6.1", "@marionebl/sander@^0.6.0": - version "0.6.1" - resolved "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b" - integrity sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s= + "@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@^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: - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" + 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" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== +"@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/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/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@^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: + "@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@^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: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" + which "^4.0.0" -"@nodelib/fs.scandir@2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz#7fa8fed654939e1a39753d286b48b4836d00e0eb" - integrity sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg== +"@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: - "@nodelib/fs.stat" "2.0.1" - run-parallel "^1.1.9" + postcss-selector-parser "^6.0.10" -"@nodelib/fs.stat@2.0.1", "@nodelib/fs.stat@^2.0.1": +"@npmcli/redact@^2.0.0": version "2.0.1" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz#814f71b1167390cfcb6a6b3d9cdeb0951a192c14" - integrity sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw== + resolved "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" + integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@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: + "@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" + +"@nx/devkit@>=17.1.2 < 21": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.2.tgz#4bed032a06ac37910fae5e231849283b8ac415fb" + integrity sha512-rr9p2/tZDQivIpuBUpZaFBK6bZ+b5SAjZk75V4tbCUqGW3+5OPuVvBPm+X+7PYwUF6rwSpewxkjWNeGskfCe+Q== + dependencies: + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/nx-darwin-arm64@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.2.tgz#16b20a4aac4228f30124551a1eceb03d5f8330e7" + integrity sha512-t+bmCn6sRPNGU6hnSyWNvbQYA/KgsxGZKYlaCLRwkNhI2akModcBUqtktJzCKd1XHDqs6EkEFBWjFr8/kBEkSg== + +"@nx/nx-darwin-x64@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.2.tgz#06a203a695509e4a6f05a82cb40cc00438a19b3a" + integrity sha512-pt/wmDLM31Es8/EzazlyT5U+ou2l60rfMNFGCLqleHEQ0JUTc0KWnOciBLbHIQFiPsCQZJFEKyfV5V/ncePmmw== + +"@nx/nx-freebsd-x64@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.2.tgz#c7c9ae6e331ca97571f6a048c0f69aa6c5fd2479" + integrity sha512-joZxFbgJfkHkB9uMIJr73Gpnm9pnpvr0XKGbWC409/d2x7q1qK77tKdyhGm+A3+kaZFwstNVPmCUtUwJYyU6LA== + +"@nx/nx-linux-arm-gnueabihf@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.2.tgz#a6ae89115efb7601baa4c3421649ee785d6aa3a9" + integrity sha512-98O/qsxn4vIMPY/FyzvmVrl7C5yFhCUVk0/4PF+PA2SvtQ051L1eMRY6bq/lb69qfN6szJPZ41PG5mPx0NeLZw== + +"@nx/nx-linux-arm64-gnu@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.2.tgz#e9a4676d830783ecad5d5bfaf7bf2579c519321c" + integrity sha512-h6a+HxwfSpxsi4KpxGgPh9GDBmD2E+XqGCdfYpobabxqEBvlnIlJyuDhlRR06cTWpuNXHpRdrVogmV6m/YbtDg== + +"@nx/nx-linux-arm64-musl@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.2.tgz#621657dc85c1cb042102f4ed4976cc5823fccea1" + integrity sha512-4Ev+jM0VAxDHV/dFgMXjQTCXS4I8W4oMe7FSkXpG8RUn6JK659DC8ExIDPoGIh+Cyqq6r6mw1CSia+ciQWICWQ== + +"@nx/nx-linux-x64-gnu@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.2.tgz#2b7b893a931b26a8688304d5352bdef0a2431194" + integrity sha512-nR0ev+wxu+nQYRd7bhqggOxK7UfkV6h+Ko1mumUFyrM5GvPpz/ELhjJFSnMcOkOMcvH0b6G5uTBJvN1XWCkbmg== + +"@nx/nx-linux-x64-musl@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.2.tgz#4188df5b222d6f42fff1e436d494a46af1d30b0b" + integrity sha512-ost41l5yc2aq2Gc9bMMpaPi/jkXqbXEMEPHrxWKuKmaek3K2zbVDQzvBBNcQKxf/mlCsrqN4QO0mKYSRRqag5A== + +"@nx/nx-win32-arm64-msvc@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.2.tgz#6d2122a1c827c100e89698f4a878410833911748" + integrity sha512-0SEOqT/daBG5WtM9vOGilrYaAuf1tiALdrFavY62+/arXYxXemUKmRI5qoKDTnvoLMBGkJs6kxhMO5b7aUXIvQ== + +"@nx/nx-win32-x64-msvc@20.8.2": + version "20.8.2" + resolved "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.2.tgz#60f4c381ad62369ff7ede9336d92262352514bc1" + integrity sha512-iIsY+tVqes/NOqTbJmggL9Juie/iaDYlWgXA9IUv88FE9thqWKhVj4/tCcPjsOwzD+1SVna3YISEEFsx5UV4ew== + +"@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== -"@nodelib/fs.walk@^1.2.1": - version "1.2.2" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz#6a6450c5e17012abd81450eb74949a4d970d2807" - integrity sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ== +"@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@^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" "^13.1.0" + universal-user-agent "^6.0.0" + +"@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: - "@nodelib/fs.scandir" "2.1.1" - fastq "^1.6.0" + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@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": + version "6.0.1" + 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/endpoint@^5.1.0": - version "5.3.5" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.5.tgz#2822c3b01107806dbdce3863b6205e3eff4289ed" - integrity sha512-f8KqzIrnzPLiezDsZZPB+K8v8YSv6aKFl7eOu59O46lmlW4HagWl1U6NWl6LmT8d1w7NsKBI3paVtzcnRGO1gw== +"@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: - is-plain-object "^3.0.0" - universal-user-agent "^4.0.0" + "@octokit/types" "^13.7.0" -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== +"@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/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be" - integrity sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig== +"@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: - deprecation "^2.0.0" - once "^1.4.0" + "@octokit/types" "^13.8.0" -"@octokit/request@^5.0.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@octokit/request/-/request-5.1.0.tgz#5609dcc7b5323e529f29d535214383d9eaf0c05c" - integrity sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg== +"@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/endpoint" "^5.1.0" - "@octokit/request-error" "^1.0.1" + "@octokit/types" "^13.1.0" deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/rest@^16.28.4": - version "16.30.0" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-16.30.0.tgz#c14f177b7378f330ec6ec6ae49b68af359d09053" - integrity sha512-TN5MbqVuqxT/s87D6tGe3zsMvyHUQSkGFMBHuwBToPQGV3eG2a67rJW2rag2vJr7JusWyERDhQ4g/4HvFo9B1g== - dependencies: - "@octokit/request" "^5.0.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== +"@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: - any-observable "^0.3.0" + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" -"@types/babel__core@^7.1.0": - version "7.1.1" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" - integrity sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw== +"@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: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + "@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" -"@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== +"@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: - "@babel/types" "^7.0.0" + "@octokit/openapi-types" "^24.2.0" -"@types/babel__template@*": - version "7.0.2" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.6" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" - integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== +"@pnpm/constants@7.1.1": + version "7.1.1" + resolved "https://registry.npmjs.org/@pnpm/constants/-/constants-7.1.1.tgz#3db261425fe15425aa213a2b003f4f60c9378b43" + integrity sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw== + +"@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: - "@babel/types" "^7.3.0" + "@pnpm/constants" "7.1.1" -"@types/events@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@pnpm/graceful-fs@3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@pnpm/graceful-fs/-/graceful-fs-3.2.0.tgz#241846c42c23feff7421b8bd97d4039891003f12" + integrity sha512-vRoXJxscDpHak7YE9SqCkzfrayn+Lw+YueOeHIPEqkgokrHeYgYeONoc2kGh0ObHaRtNSsonozVfJ456kxLNvA== + dependencies: + graceful-fs "^4.2.11" + +"@pnpm/read-project-manifest@^5.0.10": + 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.3" + "@pnpm/graceful-fs" "3.2.0" + "@pnpm/text.comments-parser" "2.0.0" + "@pnpm/types" "9.4.2" + "@pnpm/write-project-manifest" "5.0.6" + fast-deep-equal "^3.1.3" + is-windows "^1.0.2" + json5 "^2.2.3" + lodash.clonedeep "^4.5.0" + parse-json "^5.2.0" + read-yaml-file "^2.1.0" + sort-keys "^4.2.0" + strip-bom "^4.0.0" -"@types/find-up@2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@types/find-up/-/find-up-2.1.1.tgz#1cd2d240f1ad1f48d32346074724dc3107248a11" - integrity sha512-60LC501bQRN9/3yfVaEEMd7IndaufffL56PBRAejPpUrY304Ps1jfnjNqPw5jmM5R8JHWiKBAe5IHzNcPV41AA== +"@pnpm/text.comments-parser@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@pnpm/text.comments-parser/-/text.comments-parser-2.0.0.tgz#902d53ced2a0ae6a6d99b12ec6eb85dbc79e517a" + integrity sha512-DRWtTmmxQQtuWHf1xPt9bqzCSq8d0MQF5x1kdpCDMLd7xk3nP4To2/OGkPrb8MKbrWsgCNDwXyKCFlEKrAg7fg== + dependencies: + strip-comments-strings "1.2.0" + +"@pnpm/types@9.4.2": + version "9.4.2" + resolved "https://registry.npmjs.org/@pnpm/types/-/types-9.4.2.tgz#0a34c3c41d5452461d8d8958374a727f9c46cfb2" + integrity sha512-g1hcF8Nv4gd76POilz9gD4LITAPXOe5nX4ijgr8ixCbLQZfcpYiMfJ+C1RlMNRUDo8vhlNB4O3bUlxmT6EAQXA== + +"@pnpm/write-project-manifest@5.0.6": + version "5.0.6" + resolved "https://registry.npmjs.org/@pnpm/write-project-manifest/-/write-project-manifest-5.0.6.tgz#a074f5d833ffbc7bb1b1d34cb23e274fb6780761" + integrity sha512-3qkKCftRE/HXzoWedyDuaMMUQzheDwx8AQXR0DnA9ylsBnZQYNut19Ado/gzi5+IvznaMcqrBszw57j3y1/ILw== + dependencies: + "@pnpm/text.comments-parser" "2.0.0" + "@pnpm/types" "9.4.2" + json5 "^2.2.3" + write-file-atomic "^5.0.1" + write-yaml-file "^5.0.0" + +"@rollup/rollup-android-arm-eabi@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz#9241b59af721beb7e3587a56c6c245d6c465753d" + integrity sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw== + +"@rollup/rollup-android-arm-eabi@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz#7d41dc45adcfcb272504ebcea9c8a5b2c659e963" + integrity sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag== + +"@rollup/rollup-android-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz#f70ee53ba991fdd65c277b0716c559736d490a58" + integrity sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA== + +"@rollup/rollup-android-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz#6c708fae2c9755e994c42d56c34a94cb77020650" + integrity sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw== + +"@rollup/rollup-darwin-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz#9f59000e817cf5760d87515ce899f8b93fe8756a" + integrity sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A== + +"@rollup/rollup-darwin-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz#85ccf92ab114e434c83037a175923a525635cbb4" + integrity sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw== + +"@rollup/rollup-darwin-x64@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz#c92aebd02725ae1b88bdce40f08f7823e8055c78" + integrity sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg== + +"@rollup/rollup-darwin-x64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz#0af089f3d658d05573208dabb3a392b44d7f4630" + integrity sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw== + +"@rollup/rollup-freebsd-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz#b128dbe7b353922ddd729a4fc4e408ddcbf338b5" + integrity sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ== + +"@rollup/rollup-freebsd-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz#46c22a16d18180e99686647543335567221caa9c" + integrity sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA== + +"@rollup/rollup-freebsd-x64@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz#88297a0ddfadddd61d7d9b73eb42b3f227301d30" + integrity sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg== + +"@rollup/rollup-freebsd-x64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz#819ffef2f81891c266456952962a13110c8e28b5" + integrity sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz#a59afc092523ebe43d3899f33da9cdd2ec01fb87" + integrity sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw== + +"@rollup/rollup-linux-arm-gnueabihf@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz#7fe283c14793e607e653a3214b09f8973f08262a" + integrity sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg== + +"@rollup/rollup-linux-arm-musleabihf@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz#3095c1327b794bd187d03e372e633717fb69b4c0" + integrity sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw== + +"@rollup/rollup-linux-arm-musleabihf@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz#066e92eb22ea30560414ec800a6d119ba0b435ac" + integrity sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw== + +"@rollup/rollup-linux-arm64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz#e43bb77df3a6de85312e991d1e3ad352d1abb00d" + integrity sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA== + +"@rollup/rollup-linux-arm64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz#480d518ea99a8d97b2a174c46cd55164f138cc37" + integrity sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw== + +"@rollup/rollup-linux-arm64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz#34873a437bcd87618f702dc66f0cbce170aebf9f" + integrity sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA== + +"@rollup/rollup-linux-arm64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz#ed7db3b8999b60dd20009ddf71c95f3af49423c8" + integrity sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w== + +"@rollup/rollup-linux-loongarch64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz#224ff524349e365baa56f1f512822548c2d76910" + integrity sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg== + +"@rollup/rollup-linux-loongarch64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz#16a6927a35f5dbc505ff874a4e1459610c0c6f46" + integrity sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q== + +"@rollup/rollup-linux-powerpc64le-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz#43c3c053b26ace18a1d3dab204596a466c1b0e34" + integrity sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw== + +"@rollup/rollup-linux-ppc64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz#a006700469be0041846c45b494c35754e6a04eea" + integrity sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q== + +"@rollup/rollup-linux-riscv64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz#e7df825d71daefa7037605015455aa58be43cd7a" + integrity sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g== + +"@rollup/rollup-linux-riscv64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz#0fcc45b2ec8a0e54218ca48849ea6d596f53649c" + integrity sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ== + +"@rollup/rollup-linux-riscv64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz#d76ad93a7f4c0b2855a024d8d859196acf38acf5" + integrity sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q== + +"@rollup/rollup-linux-riscv64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz#d6e617eec9fe6f5859ee13fad435a16c42b469f2" + integrity sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg== + +"@rollup/rollup-linux-s390x-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz#0852608843d05852af3f447bf43bb63d80d62b6a" + integrity sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw== + +"@rollup/rollup-linux-s390x-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz#b147760d63c6f35b4b18e6a25a2a760dd3ea0c05" + integrity sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg== + +"@rollup/rollup-linux-x64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz#d16a57f86357a4e697142bee244afed59b24e6c5" + integrity sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ== + +"@rollup/rollup-linux-x64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz#fc0be1da374f85e7e85dccaf1ff12d7cfc9fbe3d" + integrity sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA== + +"@rollup/rollup-linux-x64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz#51cbc8b1eb46ebc0e284725418b6fbf48686e4e2" + integrity sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ== + +"@rollup/rollup-linux-x64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz#54c79932e0f9a3c992b034c82325be3bcde0d067" + integrity sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg== + +"@rollup/rollup-openharmony-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz#fc48e74d413623ac02c1d521bec3e5e784488fdc" + integrity sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA== + +"@rollup/rollup-win32-arm64-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz#d6d84aace2b211119bf0ab1c586e29d01e32aa01" + integrity sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw== + +"@rollup/rollup-win32-arm64-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz#8ce3d1181644406362cf1e62c90e88ab083e02bb" + integrity sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ== + +"@rollup/rollup-win32-ia32-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz#4af33168de2f65b97a8f36bd1d8d21cea34d3ccb" + integrity sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw== + +"@rollup/rollup-win32-ia32-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz#dd2dfc896eac4b2689d55f01c6d51c249263f805" + integrity sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A== + +"@rollup/rollup-win32-x64-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz#42a88207659e404e8ffa655cae763cbad94906ab" + integrity sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw== + +"@rollup/rollup-win32-x64-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz#13f758c97b9fbbac56b6928547a3ff384e7cfb3e" + integrity sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA== + +"@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" -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== +"@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: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^3.1.0" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== +"@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" -"@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== +"@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: - "@types/istanbul-lib-coverage" "*" + "@shikijs/types" "2.5.0" -"@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== +"@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: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" + "@shikijs/types" "2.5.0" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== +"@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" -"@types/jest@24.0.18": - version "24.0.18" - resolved "https://registry.npmjs.org/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498" - integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ== +"@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: - "@types/jest-diff" "*" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" -"@types/lodash@4.14.140": - version "4.14.140" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.140.tgz#8d2bd55e6a22221cd662bbb85969eb00ec283da6" - integrity sha512-OU57uYCUUv9s8lgQTYuQlL6xkttWtz8VLCJSnt8ikla9+UXqMGJ8adCprSw7egJHSHwGvFpGhfpQDtHm/NQ3Cw== +"@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== -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@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" -"@types/node@*", "@types/node@^12.0.2": - version "12.0.2" - resolved "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz#3452a24edf9fea138b48fad4a0a028a683da1e40" - integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA== +"@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== -"@types/node@12.7.8": - version "12.7.8" - resolved "https://registry.npmjs.org/@types/node/-/node-12.7.8.tgz#cb1bf6800238898bc2ff6ffa5702c3cadd350708" - integrity sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A== +"@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== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@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" -"@types/resolve-from@5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@types/resolve-from/-/resolve-from-5.0.1.tgz#2714eaa840c0472dcfa96ec3fb9d170dbf0b677d" - integrity sha512-1G7n5Jtr5inoS1Ez2Y9Efedk9/wH6uGQslbfhGTOw9J42PCAwuyaDgQHW7fIq02+shwB02kM/w31W8gMxI8ORg== +"@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: - resolve-from "*" + "@sigstore/protobuf-specs" "^0.3.2" + tuf-js "^2.2.1" -"@types/semver@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz#a984b405c702fa5a7ec6abc56b37f2ba35ef5af6" - integrity sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg== +"@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#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@swc/core-darwin-arm64@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.2.tgz#654ea490dbcada542d74f234dcf7e8658a1e5772" + integrity sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw== + +"@swc/core-darwin-x64@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.2.tgz#46f56d4053867c3531166aaaafc02e1248aa5e15" + integrity sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A== + +"@swc/core-linux-arm-gnueabihf@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.2.tgz#724eb4f763b3e87db3d22c58a1d40e144db0d406" + integrity sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA== + +"@swc/core-linux-arm64-gnu@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.2.tgz#d01a0a65838a0fd5035ae088ad351f8cfb7289e3" + integrity sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg== + +"@swc/core-linux-arm64-musl@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.2.tgz#a2812e3728970a3918502ab3adc337b45761bdd4" + integrity sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ== + +"@swc/core-linux-x64-gnu@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.2.tgz#91553462484d8135703888c55d0d02dce2a8a7c5" + integrity sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ== + +"@swc/core-linux-x64-musl@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.2.tgz#b8c8dc71eea56e56903dc3bfc5ca507199f469d1" + integrity sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw== + +"@swc/core-win32-arm64-msvc@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.2.tgz#2ac8ebdfc8ebaed404893879b239df2bad3601ef" + integrity sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A== + +"@swc/core-win32-ia32-msvc@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.2.tgz#1e13ec7e8c2367b75e529dc8d47c2c42d5cd803f" + integrity sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw== + +"@swc/core-win32-x64-msvc@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.2.tgz#8b8841f6676bc7f8c4a2ac44eba42e7be655e606" + integrity sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ== + +"@swc/core@^1.10.1": + version "1.13.2" + resolved "https://registry.npmjs.org/@swc/core/-/core-1.13.2.tgz#962b34dae61fa1ff604d20c1b9100a9277a16f83" + integrity sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.23" + optionalDependencies: + "@swc/core-darwin-arm64" "1.13.2" + "@swc/core-darwin-x64" "1.13.2" + "@swc/core-linux-arm-gnueabihf" "1.13.2" + "@swc/core-linux-arm64-gnu" "1.13.2" + "@swc/core-linux-arm64-musl" "1.13.2" + "@swc/core-linux-x64-gnu" "1.13.2" + "@swc/core-linux-x64-musl" "1.13.2" + "@swc/core-win32-arm64-msvc" "1.13.2" + "@swc/core-win32-ia32-msvc" "1.13.2" + "@swc/core-win32-x64-msvc" "1.13.2" + +"@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== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@swc/types@^0.1.23": + version "0.1.23" + resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz#7eabf88b9cfd929253859c562ae95982ee04b4e8" + integrity sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw== + dependencies: + "@swc/counter" "^0.1.3" -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.12" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" - integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== +"@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: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.4" -JSONStream@^1.0.4: - version "1.3.1" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" - integrity sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o= +"@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: - jsonparse "^1.2.0" - through ">=2.2.7 <3" + tslib "^2.4.0" -JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== +"@types/chai@^5.2.2": + version "5.2.2" + resolved "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz#6f14cea18180ffc4416bc0fd12be05fdd73bdd6b" + integrity sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg== dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" + "@types/deep-eql" "*" -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== +"@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" "*" -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== -acorn-es7-plugin@>=1.1.6: - version "1.1.7" - resolved "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" - integrity sha1-8u4fMiipDurRJF+asZIusucdM2s= +"@types/estree@1.0.7", "@types/estree@^1.0.0": + version "1.0.7" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== -acorn-globals@^4.1.0: - version "4.3.2" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" - integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== +"@types/estree@1.0.8", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/fs-extra@^11.0.3": + version "11.0.4" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" + integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== + dependencies: + "@types/jsonfile" "*" + "@types/node" "*" + +"@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#29a77a82043b7baaba823f8b34ab10191df138e9" + integrity sha512-PYmTK156j6TilbwtnO2JErH4TCC1izpgP3kRE3KUX35bjBOD2A+syCGeercqHXBcM6wL+DU0WbJB2Gz8fPR+8A== dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" + "@types/node" "*" -acorn-walk@^6.0.1: - version "6.1.1" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== +"@types/glob@^8.1.0": + version "8.1.0" + 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" "*" -acorn@>=2.5.2: - version "5.2.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" - integrity sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w== +"@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" "*" -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +"@types/inquirer@^9.0.7": + version "9.0.8" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.8.tgz#09d39cc6435ab7b0597f527ff5e2d6ccdf6b14be" + integrity sha512-CgPD5kFGWsb8HJ5K7rfWlifao87m4ph8uioU7OTncJevmE/VLIqAAjfQtko578JZg7/f69K4FgqYym3gNr7DeA== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" -acorn@^6.0.1: - version "6.1.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -agent-base@4, agent-base@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.1.1.tgz#92d8a4fc2524a3b09b3666a33b6c97960f23d6a4" - integrity sha512-yWGUUmCZD/33IRjG2It94PzixT8lX+47Uq8fjmd0cgQWITCMrJuXFaVIMnGDmDnZGGKAGdwTx8UGeU8lMR2urA== +"@types/jsonfile@*": + 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: - es6-promisify "^5.0.0" + "@types/node" "*" -agent-base@~4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +"@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#da7b65013d6914fecb8759d5220a6ca9b658ee23" + integrity sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg== dependencies: - es6-promisify "^5.0.0" + "@types/lodash" "*" -agentkeepalive@^3.4.1: - version "3.5.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4" - integrity sha512-Cte/sTY9/XcygXjJ0q58v//SnEQ7ViWExKyJpLJlLqomDbQyMLh6Is4KuWJ/wmxzhiwkGRple7Gqv1zf6Syz5w== +"@types/lodash.isfunction@^3.0.8": + version "3.0.9" + resolved "https://registry.npmjs.org/@types/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#527e51ab6638b38c65a03ec218232b1a787cc9bc" + integrity sha512-BLaDvlY09jnPND1wxlGXPrPl2CN4M7qGRah7Tb/rtB1vnLyZmtcw3FRPSUkDsd5n4e+2E5BBrr0ICfYR+S4hZQ== dependencies: - humanize-ms "^1.2.1" + "@types/lodash" "*" -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= +"@types/lodash.isplainobject@^4.0.8": + version "4.0.9" + resolved "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.9.tgz#3e0159c1598d96af2372151ed65f2792b61787e4" + integrity sha512-QC8nKcap5hRrbtIaPRjUMlcXXnLeayqQZPSaWJDx3xeuN17+2PW5wkmEJ4+lZgNnQRlSPzxjTYKCfV1uTnPaEg== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + "@types/lodash" "*" -ajv@^6.5.5: - version "6.7.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96" - integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg== +"@types/lodash.kebabcase@^4.1.8": + version "4.1.9" + resolved "https://registry.npmjs.org/@types/lodash.kebabcase/-/lodash.kebabcase-4.1.9.tgz#48d3df753b89499e75eba5e017979b560d69df85" + integrity sha512-kPrrmcVOhSsjAVRovN0lRfrbuidfg0wYsrQa5IYuoQO1fpHHGSme66oyiYA/5eQPVl8Z95OA3HG0+d2SvYC85w== dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + "@types/lodash" "*" -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" - integrity sha1-LwwWWIKXOa3V67FeawxuNCPwFro= +"@types/lodash.merge@^4.6.8": + version "4.6.9" + resolved "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz#93e94796997ed9a3ebe9ccf071ccaec4c6bc8fb8" + integrity sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ== dependencies: - string-width "^1.0.1" + "@types/lodash" "*" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= +"@types/lodash.mergewith@^4.6.8": + version "4.6.9" + resolved "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz#7093028a36de3cae4495d03b9d92c351cab1f8bf" + integrity sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw== dependencies: - string-width "^2.0.0" + "@types/lodash" "*" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= +"@types/lodash.snakecase@^4.1.8": + version "4.1.9" + resolved "https://registry.npmjs.org/@types/lodash.snakecase/-/lodash.snakecase-4.1.9.tgz#2d2b3313a44500cb6d8a1c598e0353778d4420d2" + integrity sha512-emBZJUiNlo+QPXr1junMKXwzHJK9zbFvTVdyAoorFcm1YRsbzkZCYPTVMM9AW+dlnA6utG7vpfvOs8alxv/TMw== + dependencies: + "@types/lodash" "*" -ansi-escapes@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" - integrity sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs= +"@types/lodash.startcase@^4.4.8": + version "4.4.9" + resolved "https://registry.npmjs.org/@types/lodash.startcase/-/lodash.startcase-4.4.9.tgz#fba0daa4bb5f279e05628c03193ae1d5e32c438d" + integrity sha512-C0M4DlN1pnn2vEEhLHkTHxiRZ+3GlTegpoAEHHGXnuJkSOXyJMHGiSc+SLRzBlFZWHsBkixe6FqvEAEU04g14g== + dependencies: + "@types/lodash" "*" -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - integrity sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ== +"@types/lodash.uniq@^4.5.8": + version "4.5.9" + resolved "https://registry.npmjs.org/@types/lodash.uniq/-/lodash.uniq-4.5.9.tgz#9a5390422c003ca6d0219207ed6c9c38e37a783f" + integrity sha512-2Vd5avnDMNLbDSnUwwgwExKXvX9W3CN72rodT+ikGqGHXn7gVK6BM6Z+kHonbpGgCI2BzM+QDMHrkgKoofOi6A== + dependencies: + "@types/lodash" "*" -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +"@types/lodash.upperfirst@^4.3.8": + version "4.3.9" + resolved "https://registry.npmjs.org/@types/lodash.upperfirst/-/lodash.upperfirst-4.3.9.tgz#66e150885a67866ed8bc4331c8c305ab682a198c" + integrity sha512-bYhT1QEsk9/ggrFjK86Pb5bnKJgTBbpVA77Ygbb1aW1oiWJNGRbVjSlQ9We/ihB9vVpX5WqDJvbISXlukGR+dQ== + dependencies: + "@types/lodash" "*" -ansi-regex@^0.2.0, ansi-regex@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" - integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk= +"@types/lodash@*": + 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== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +"@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" "^5" + "@types/mdurl" "^2" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +"@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" "*" -ansi-regex@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== -ansi-styles@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" - integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94= +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - integrity sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug== +"@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#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/node@*": + version "24.0.7" + resolved "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz#ee580f7850c7eabaeef61ef96b8d8c04fdf94f53" + integrity sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw== dependencies: - color-convert "^1.9.0" + undici-types "~7.8.0" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +"@types/node@^18.19.17": + version "18.19.120" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.120.tgz#07b3bd73875956d5281fa27e6d77a66415f7d455" + integrity sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA== dependencies: - color-convert "^1.9.0" + undici-types "~5.26.4" -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": + 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== -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== +"@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#454ffa447f6556d7641d86684407d7b62e4430bd" + integrity sha512-kxLU5xvefySGpp1Z7VCt4m5AhQJUZ8HjW8ADdeS7GieqFPHLAde007fd9bxeXEsFXyaA0LeWIoQXyXP17mGpIg== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= +"@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== -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== +"@types/tar-fs@^2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.4.tgz#7c7502d281d436db0ad0f78282acef71da02a292" + integrity sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA== dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + "@types/node" "*" + "@types/tar-stream" "*" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== +"@types/tar-stream@*": + version "3.1.3" + resolved "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.3.tgz#f61427229691eda1b7d5719f34acdc4fc8a558ce" + integrity sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + "@types/node" "*" -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"@types/through@*": + 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" "*" -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +"@types/tmp@^0.2.5": + version "0.2.6" + resolved "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217" + integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA== -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" +"@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" + integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== + +"@types/yargs-parser@*": + version "21.0.3" + 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": + 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@^8.18.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz#6e5220d16f2691ab6d983c1737dd5b36e17641b7" + integrity sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.38.0" + "@typescript-eslint/type-utils" "8.38.0" + "@typescript-eslint/utils" "8.38.0" + "@typescript-eslint/visitor-keys" "8.38.0" + graphemer "^1.4.0" + ignore "^7.0.0" + natural-compare "^1.4.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/parser@^8.18.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz#6723a5ea881e1777956b1045cba30be5ea838293" + integrity sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ== + dependencies: + "@typescript-eslint/scope-manager" "8.38.0" + "@typescript-eslint/types" "8.38.0" + "@typescript-eslint/typescript-estree" "8.38.0" + "@typescript-eslint/visitor-keys" "8.38.0" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz#4900771f943163027fd7d2020a062892056b5e2f" + integrity sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.38.0" + "@typescript-eslint/types" "^8.38.0" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz#08ebf882d413a038926e73fda36e00c3dba84882" + integrity sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.41.0" + "@typescript-eslint/types" "^8.41.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz#5a0efcb5c9cf6e4121b58f87972f567c69529226" + integrity sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ== + dependencies: + "@typescript-eslint/types" "8.38.0" + "@typescript-eslint/visitor-keys" "8.38.0" + +"@typescript-eslint/scope-manager@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz#c8aba12129cb9cead1f1727f58e6a0fcebeecdb5" + integrity sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ== + dependencies: + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" + +"@typescript-eslint/tsconfig-utils@8.38.0", "@typescript-eslint/tsconfig-utils@^8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz#6de4ce224a779601a8df667db56527255c42c4d0" + integrity sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ== + +"@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz#134dee36eb16cdd78095a20bca0516d10b5dda75" + integrity sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw== + +"@typescript-eslint/type-utils@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz#a56cd84765fa6ec135fe252b5db61e304403a85b" + integrity sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg== + dependencies: + "@typescript-eslint/types" "8.38.0" + "@typescript-eslint/typescript-estree" "8.38.0" + "@typescript-eslint/utils" "8.38.0" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.38.0", "@typescript-eslint/types@^8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz#297351c994976b93c82ac0f0e206c8143aa82529" + integrity sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw== + +"@typescript-eslint/types@8.41.0", "@typescript-eslint/types@^8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" + integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== + +"@typescript-eslint/types@^8.35.0": + version "8.35.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz#e60d062907930e30008d796de5c4170f02618a93" + integrity sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ== + +"@typescript-eslint/typescript-estree@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz#82262199eb6778bba28a319e25ad05b1158957df" + integrity sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ== + dependencies: + "@typescript-eslint/project-service" "8.38.0" + "@typescript-eslint/tsconfig-utils" "8.38.0" + "@typescript-eslint/types" "8.38.0" + "@typescript-eslint/visitor-keys" "8.38.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/typescript-estree@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz#7c9cff8b4334ce96f14e9689692e8cf426ce4d59" + integrity sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ== + dependencies: + "@typescript-eslint/project-service" "8.41.0" + "@typescript-eslint/tsconfig-utils" "8.41.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/utils@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz#5f10159899d30eb92ba70e642ca6f754bddbf15a" + integrity sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.38.0" + "@typescript-eslint/types" "8.38.0" + "@typescript-eslint/typescript-estree" "8.38.0" + +"@typescript-eslint/utils@^8.24.1": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz#17cb3b766c1626311004ea41ffd8c27eb226b953" + integrity sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.41.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/typescript-estree" "8.41.0" + +"@typescript-eslint/visitor-keys@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz#a9765a527b082cb8fc60fd8a16e47c7ad5b60ea5" + integrity sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g== + dependencies: + "@typescript-eslint/types" "8.38.0" + eslint-visitor-keys "^4.2.1" + +"@typescript-eslint/visitor-keys@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz#16eb99b55d207f6688002a2cf425e039579aa9a9" + integrity sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg== + dependencies: + "@typescript-eslint/types" "8.41.0" + eslint-visitor-keys "^4.2.1" + +"@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== + +"@unrs/resolver-binding-android-arm-eabi@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.2.tgz#6cb01dde20bef06397ffd4924f502596cb458851" + integrity sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A== + +"@unrs/resolver-binding-android-arm64@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.2.tgz#1672b533f01f98119095860683496def93929a2e" + integrity sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q== + +"@unrs/resolver-binding-darwin-arm64@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz#dad66a21553b1ba4088c6eb922332846550bd9b2" + integrity sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ== + +"@unrs/resolver-binding-darwin-x64@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.2.tgz#bfaedca218078862f3d536d44269fed94a6158e2" + integrity sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ== + +"@unrs/resolver-binding-freebsd-x64@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.2.tgz#bdab0e754c45831522b16df0b6fe4b0ffde22628" + integrity sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.2.tgz#2bac9c19599888d4ba4787b437b0273ac7a7a9f2" + integrity sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.2.tgz#49d27d5d63e5f26cf7b93a0731334b302b9b7fec" + integrity sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg== + +"@unrs/resolver-binding-linux-arm64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.2.tgz#95ba5d1654a04b1049d944871e165d786e8da68f" + integrity sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA== + +"@unrs/resolver-binding-linux-arm64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.2.tgz#23f90a48b1d343189b1c20c89b694140e2d5a210" + integrity sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.2.tgz#076f2c2e95dbcd4824cc9929bc504151b402ac11" + integrity sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.2.tgz#f7de54d45df430c74bbd12794946a55805bed6dd" + integrity sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.2.tgz#ad1fcdcf5f112d7432fcfe38269a084bdccad266" + integrity sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg== + +"@unrs/resolver-binding-linux-s390x-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.2.tgz#d914a4f12b9048e1a4de0040f64d73274104e301" + integrity sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ== + +"@unrs/resolver-binding-linux-x64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.2.tgz#d8f8cddc42ae267ef45ed4b61ff72b9e22aa3b82" + integrity sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.2.tgz#7bfce67acb51b3f4a7cff8383f46600f7b055a96" + integrity sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw== + +"@unrs/resolver-binding-wasm32-wasi@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.2.tgz#b133c9b6941aba54eea007ca2f27ff6ce917ae55" + integrity sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.2.tgz#5f95f590f06c1e9ba15b24292c956c21a6294b30" + integrity sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.2.tgz#aac6595c6de6b26e5314372ab977b0f6a869c903" + integrity sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA== + +"@unrs/resolver-binding-win32-x64-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.2.tgz#f755c5229f1401bbff7307d037c6e38fa169ad1d" + integrity sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg== + +"@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@^3.0.0": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.2.4.tgz#a622802975935a2357d890b367fffd0dfd7a5a99" + integrity sha512-IDlpuFJiWU9rhcKLkpzj8mFu/lpe64gVgnV15ZOrYx1iFzxxrxCzbExiUEKtwwXRvEiEMUS6iZeYgnMxgbqbxQ== + dependencies: + "@istanbuljs/schema" "^0.1.3" + debug "^4.4.1" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-instrument "^6.0.3" + istanbul-lib-report "^3.0.1" + 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/eslint-plugin@^1.3.4": + version "1.3.4" + resolved "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz#010f99ecfdcf349eb6d9c1f29c31ebcc8f5e18f8" + integrity sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg== + dependencies: + "@typescript-eslint/utils" "^8.24.1" + +"@vitest/expect@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz#8362124cd811a5ee11c5768207b9df53d34f2433" + integrity sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + tinyrainbow "^2.0.0" + +"@vitest/mocker@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz#4471c4efbd62db0d4fa203e65cc6b058a85cabd3" + integrity sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ== + dependencies: + "@vitest/spy" "3.2.4" + estree-walker "^3.0.3" + magic-string "^0.30.17" + +"@vitest/pretty-format@3.2.4", "@vitest/pretty-format@^3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz#3c102f79e82b204a26c7a5921bf47d534919d3b4" + integrity sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA== + dependencies: + tinyrainbow "^2.0.0" + +"@vitest/runner@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz#5ce0274f24a971f6500f6fc166d53d8382430766" + integrity sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ== + dependencies: + "@vitest/utils" "3.2.4" + pathe "^2.0.3" + strip-literal "^3.0.0" + +"@vitest/snapshot@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz#40a8bc0346ac0aee923c0eefc2dc005d90bc987c" + integrity sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ== + dependencies: + "@vitest/pretty-format" "3.2.4" + magic-string "^0.30.17" + pathe "^2.0.3" + +"@vitest/spy@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz#cc18f26f40f3f028da6620046881f4e4518c2599" + integrity sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw== + dependencies: + tinyspy "^4.0.3" + +"@vitest/utils@3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz#c0813bc42d99527fb8c5b138c7a88516bca46fea" + integrity sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA== + dependencies: + "@vitest/pretty-format" "3.2.4" + loupe "^3.1.4" + tinyrainbow "^2.0.0" + +"@vue/compiler-core@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz#521a138cdd970d9bfd27e42168d12f77a04b2074" + integrity sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw== + dependencies: + "@babel/parser" "^7.28.0" + "@vue/shared" "3.5.18" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz#e13504492c3061ec5bbe6a2e789f15261d4f03a7" + integrity sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A== + dependencies: + "@vue/compiler-core" "3.5.18" + "@vue/shared" "3.5.18" + +"@vue/compiler-sfc@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz#ba1e849561337d809937994cdaf900539542eeca" + integrity sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA== + dependencies: + "@babel/parser" "^7.28.0" + "@vue/compiler-core" "3.5.18" + "@vue/compiler-dom" "3.5.18" + "@vue/compiler-ssr" "3.5.18" + "@vue/shared" "3.5.18" + estree-walker "^2.0.2" + magic-string "^0.30.17" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz#aecde0b0bff268a9c9014ba66799307c4a784328" + integrity sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g== + dependencies: + "@vue/compiler-dom" "3.5.18" + "@vue/shared" "3.5.18" + +"@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.7.2" + +"@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.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.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.4.1" + +"@vue/reactivity@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz#fe32166e3938832c54b4134e60e9b58ca7d9bdb4" + integrity sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg== + dependencies: + "@vue/shared" "3.5.18" + +"@vue/runtime-core@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz#9e9ae8b9491548b53d0cea2bf25746d27c52e191" + integrity sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w== + dependencies: + "@vue/reactivity" "3.5.18" + "@vue/shared" "3.5.18" + +"@vue/runtime-dom@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz#1150952d1048b5822e4f1dd8aed24665cbb22107" + integrity sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw== + dependencies: + "@vue/reactivity" "3.5.18" + "@vue/runtime-core" "3.5.18" + "@vue/shared" "3.5.18" + csstype "^3.1.3" + +"@vue/server-renderer@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz#e9fa267b95b3a1d8cddca762377e5de2ae9122bd" + integrity sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA== + dependencies: + "@vue/compiler-ssr" "3.5.18" + "@vue/shared" "3.5.18" + +"@vue/shared@3.5.18": + version "3.5.18" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz#529f24a88d3ed678d50fd5c07455841fbe8ac95e" + integrity sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA== + +"@vue/shared@^3.5.13": + version "3.5.17" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz#e8b3a41f0be76499882a89e8ed40d86a70fa4b70" + integrity sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg== + +"@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" "12.7.0" + "@vueuse/shared" "12.7.0" + vue "^3.5.13" + +"@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" "12.7.0" + "@vueuse/shared" "12.7.0" + vue "^3.5.13" + +"@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@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 "^3.5.13" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= +"@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: - sprintf-js "~1.0.2" + js-yaml "^3.10.0" + tslib "^2.4.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= +"@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: - arr-flatten "^1.0.1" + argparse "^2.0.1" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= +JSONStream@^1.3.5: + version "1.3.5" + 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" -arr-exclude@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/arr-exclude/-/arr-exclude-1.0.0.tgz#dfc7c2e552a270723ccda04cf3128c8cbfe5c631" - integrity sha1-38fC5VKicHI8zaBM8xKMjL/lxjE= +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== -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -array-differ@^1.0.0: +add-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== +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== -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +aggregate-error@^3.0.0: + version "3.1.0" + 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" + indent-string "^4.0.0" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= +ajv@^6.12.4: + version "6.12.6" + 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" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= +ajv@^8.11.0: + 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.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +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#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#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= +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: - array-uniq "^1.0.1" + environment "^1.0.0" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -array-uniq@^1.0.1, array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= +ansi-styles@^3.2.1: + version "3.2.1" + 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" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +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#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +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#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= +aproba@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== -astral-regex@^1.0.0: +array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -async-each@^1.0.0: +arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== +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== -async@^2.5.0: - version "2.6.2" - resolved "https://registry.npmjs.org/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" +async@^3.2.3: + 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#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -atob@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" - integrity sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw== +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#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -auto-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/auto-bind/-/auto-bind-1.1.0.tgz#93b864dc7ee01a326281775d5c75ca0a751e5961" - integrity sha1-k7hk3H7gGjJigXddXHXKCnUeWWE= +axios@^1.8.3: + version "1.11.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6" + integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" -ava-init@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/ava-init/-/ava-init-0.2.1.tgz#75ac4c8553326290d2866e63b62fa7035684bd58" - integrity sha512-lXwK5LM+2g1euDRqW1mcSX/tqzY1QU7EjKpqayFPPtNRmbSYZ8RzPO5tqluTToijmtjp2M+pNpVdbcHssC4glg== - dependencies: - arr-exclude "^1.0.0" - execa "^0.7.0" - has-yarn "^1.0.0" - read-pkg-up "^2.0.0" - write-pkg "^3.1.0" - -ava@0.18.2: - version "0.18.2" - resolved "https://registry.npmjs.org/ava/-/ava-0.18.2.tgz#79253d1636077034a2780bb55b5c3e6c3d7f312f" - integrity sha1-eSU9FjYHcDSieAu1W1w+bD1/MS8= - dependencies: - "@ava/babel-preset-stage-4" "^1.0.0" - "@ava/babel-preset-transform-test-files" "^2.0.0" - "@ava/pretty-format" "^1.1.0" - arr-flatten "^1.0.1" - array-union "^1.0.1" - array-uniq "^1.0.2" - arrify "^1.0.0" - auto-bind "^1.1.0" - ava-init "^0.2.0" - babel-code-frame "^6.16.0" - babel-core "^6.17.0" - bluebird "^3.0.0" - caching-transform "^1.0.0" - chalk "^1.0.0" - chokidar "^1.4.2" - clean-stack "^1.1.1" - clean-yaml-object "^0.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - cli-truncate "^0.2.0" - co-with-promise "^4.6.0" - code-excerpt "^2.1.0" - common-path-prefix "^1.0.0" - convert-source-map "^1.2.0" - core-assert "^0.2.0" - currently-unhandled "^0.4.1" - debug "^2.2.0" - diff "^3.0.1" - dot-prop "^4.1.0" - empower-core "^0.6.1" - equal-length "^1.0.0" - figures "^2.0.0" - find-cache-dir "^0.1.1" - fn-name "^2.0.0" - get-port "^2.1.0" - globby "^6.0.0" - has-flag "^2.0.0" - ignore-by-default "^1.0.0" - indent-string "^3.0.0" - is-ci "^1.0.7" - is-generator-fn "^1.0.0" - is-obj "^1.0.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - jest-snapshot "^18.1.0" - last-line-stream "^1.0.0" - lodash.debounce "^4.0.3" - lodash.difference "^4.3.0" - lodash.flatten "^4.2.0" - lodash.isequal "^4.5.0" - loud-rejection "^1.2.0" - matcher "^0.1.1" - max-timeout "^1.0.0" - md5-hex "^2.0.0" - meow "^3.7.0" - ms "^0.7.1" - multimatch "^2.1.0" - observable-to-promise "^0.4.0" - option-chain "^0.1.0" - package-hash "^1.2.0" - pkg-conf "^2.0.0" - plur "^2.0.0" - pretty-ms "^2.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^1.0.0" - slash "^1.0.0" - source-map-support "^0.4.0" - stack-utils "^1.0.0" - strip-ansi "^3.0.1" - strip-bom-buf "^1.0.0" - time-require "^0.1.2" - unique-temp-dir "^1.0.0" - update-notifier "^1.0.0" - -ava@0.20.0: - version "0.20.0" - resolved "https://registry.npmjs.org/ava/-/ava-0.20.0.tgz#bdc0dd36453d7255e9f733305ab370c248381e41" - integrity sha512-/Jw/TwBgptUzDGB4bmpOO9flrUoJBZOA6YpAB6Y1NpH/nDTrS6JEZ/KeeMcgBm3Kk6ytTWsvpYWHK83V1RBzQA== - dependencies: - "@ava/babel-preset-stage-4" "^1.1.0" - "@ava/babel-preset-transform-test-files" "^3.0.0" - "@ava/write-file-atomic" "^2.2.0" - "@concordance/react" "^1.0.0" - ansi-escapes "^2.0.0" - ansi-styles "^3.1.0" - arr-flatten "^1.0.1" - array-union "^1.0.1" - array-uniq "^1.0.2" - arrify "^1.0.0" - auto-bind "^1.1.0" - ava-init "^0.2.0" - babel-core "^6.17.0" - bluebird "^3.0.0" - caching-transform "^1.0.0" - chalk "^1.0.0" - chokidar "^1.4.2" - clean-stack "^1.1.1" - clean-yaml-object "^0.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - cli-truncate "^1.0.0" - co-with-promise "^4.6.0" - code-excerpt "^2.1.0" - common-path-prefix "^1.0.0" - concordance "^2.0.0" - convert-source-map "^1.2.0" - core-assert "^0.2.0" - currently-unhandled "^0.4.1" - debug "^2.2.0" - dot-prop "^4.1.0" - empower-core "^0.6.1" - equal-length "^1.0.0" - figures "^2.0.0" - find-cache-dir "^0.1.1" - fn-name "^2.0.0" - get-port "^3.0.0" - globby "^6.0.0" - has-flag "^2.0.0" - hullabaloo-config-manager "^1.1.0" - ignore-by-default "^1.0.0" - import-local "^0.1.1" - indent-string "^3.0.0" - is-ci "^1.0.7" - is-generator-fn "^1.0.0" - is-obj "^1.0.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - js-yaml "^3.8.2" - last-line-stream "^1.0.0" - lodash.clonedeepwith "^4.5.0" - lodash.debounce "^4.0.3" - lodash.difference "^4.3.0" - lodash.flatten "^4.2.0" - loud-rejection "^1.2.0" - make-dir "^1.0.0" - matcher "^0.1.1" - md5-hex "^2.0.0" - meow "^3.7.0" - ms "^1.0.0" - multimatch "^2.1.0" - observable-to-promise "^0.5.0" - option-chain "^0.1.0" - package-hash "^2.0.0" - pkg-conf "^2.0.0" - plur "^2.0.0" - pretty-ms "^2.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^1.0.0" - slash "^1.0.0" - source-map-support "^0.4.0" - stack-utils "^1.0.0" - strip-ansi "^3.0.1" - strip-bom-buf "^1.0.0" - supports-color "^3.2.3" - time-require "^0.1.2" - trim-off-newlines "^1.0.1" - unique-temp-dir "^1.0.0" - update-notifier "^2.1.0" - -ava@0.22.0: - version "0.22.0" - resolved "https://registry.npmjs.org/ava/-/ava-0.22.0.tgz#4c28a1fdef7e749ba0c8131ac18a7ca489eef049" - integrity sha512-dYxvVDL9CeIcgaQ/FojaBVaL/rnIsXdgPVliDOMe1O5nSsIZEsPYDIzmZ1KnO/cuxeQx1PQbtW6qziiEwQZusg== - dependencies: - "@ava/babel-preset-stage-4" "^1.1.0" - "@ava/babel-preset-transform-test-files" "^3.0.0" - "@ava/write-file-atomic" "^2.2.0" - "@concordance/react" "^1.0.0" - ansi-escapes "^2.0.0" - ansi-styles "^3.1.0" - arr-flatten "^1.0.1" - array-union "^1.0.1" - array-uniq "^1.0.2" - arrify "^1.0.0" - auto-bind "^1.1.0" - ava-init "^0.2.0" - babel-core "^6.17.0" - bluebird "^3.0.0" - caching-transform "^1.0.0" - chalk "^2.0.1" - chokidar "^1.4.2" - clean-stack "^1.1.1" - clean-yaml-object "^0.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - cli-truncate "^1.0.0" - co-with-promise "^4.6.0" - code-excerpt "^2.1.0" - common-path-prefix "^1.0.0" - concordance "^3.0.0" - convert-source-map "^1.2.0" - core-assert "^0.2.0" - currently-unhandled "^0.4.1" - debug "^2.2.0" - dot-prop "^4.1.0" - empower-core "^0.6.1" - equal-length "^1.0.0" - figures "^2.0.0" - find-cache-dir "^1.0.0" - fn-name "^2.0.0" - get-port "^3.0.0" - globby "^6.0.0" - has-flag "^2.0.0" - hullabaloo-config-manager "^1.1.0" - ignore-by-default "^1.0.0" - import-local "^0.1.1" - indent-string "^3.0.0" - is-ci "^1.0.7" - is-generator-fn "^1.0.0" - is-obj "^1.0.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - js-yaml "^3.8.2" - last-line-stream "^1.0.0" - lodash.clonedeepwith "^4.5.0" - lodash.debounce "^4.0.3" - lodash.difference "^4.3.0" - lodash.flatten "^4.2.0" - loud-rejection "^1.2.0" - make-dir "^1.0.0" - matcher "^1.0.0" - md5-hex "^2.0.0" - meow "^3.7.0" - ms "^2.0.0" - multimatch "^2.1.0" - observable-to-promise "^0.5.0" - option-chain "^1.0.0" - package-hash "^2.0.0" - pkg-conf "^2.0.0" - plur "^2.0.0" - pretty-ms "^2.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^2.0.0" - safe-buffer "^5.1.1" - slash "^1.0.0" - source-map-support "^0.4.0" - stack-utils "^1.0.0" - strip-ansi "^4.0.0" - strip-bom-buf "^1.0.0" - supports-color "^4.0.0" - time-require "^0.1.2" - trim-off-newlines "^1.0.1" - unique-temp-dir "^1.0.0" - update-notifier "^2.1.0" - -ava@0.25.0: - version "0.25.0" - resolved "https://registry.npmjs.org/ava/-/ava-0.25.0.tgz#8ac87780514f96a6fd42e1306eaa0752ce3a407f" - integrity sha512-4lGNJCf6xL8SvsKVEKxEE46se7JAUIAZoKHw9itTQuwcsydhpAMkBs5gOOiWiwt0JKNIuXWc2/r4r8ZdcNrBEw== - dependencies: - "@ava/babel-preset-stage-4" "^1.1.0" - "@ava/babel-preset-transform-test-files" "^3.0.0" - "@ava/write-file-atomic" "^2.2.0" - "@concordance/react" "^1.0.0" - "@ladjs/time-require" "^0.1.4" - ansi-escapes "^3.0.0" - ansi-styles "^3.1.0" - arr-flatten "^1.0.1" - array-union "^1.0.1" - array-uniq "^1.0.2" - arrify "^1.0.0" - auto-bind "^1.1.0" - ava-init "^0.2.0" - babel-core "^6.17.0" - babel-generator "^6.26.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - bluebird "^3.0.0" - caching-transform "^1.0.0" - chalk "^2.0.1" - chokidar "^1.4.2" - clean-stack "^1.1.1" - clean-yaml-object "^0.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - cli-truncate "^1.0.0" - co-with-promise "^4.6.0" - code-excerpt "^2.1.1" - common-path-prefix "^1.0.0" - concordance "^3.0.0" - convert-source-map "^1.5.1" - core-assert "^0.2.0" - currently-unhandled "^0.4.1" - debug "^3.0.1" - dot-prop "^4.1.0" - empower-core "^0.6.1" - equal-length "^1.0.0" - figures "^2.0.0" - find-cache-dir "^1.0.0" - fn-name "^2.0.0" - get-port "^3.0.0" - globby "^6.0.0" - has-flag "^2.0.0" - hullabaloo-config-manager "^1.1.0" - ignore-by-default "^1.0.0" - import-local "^0.1.1" - indent-string "^3.0.0" - is-ci "^1.0.7" - is-generator-fn "^1.0.0" - is-obj "^1.0.0" - is-observable "^1.0.0" - is-promise "^2.1.0" - last-line-stream "^1.0.0" - lodash.clonedeepwith "^4.5.0" - lodash.debounce "^4.0.3" - lodash.difference "^4.3.0" - lodash.flatten "^4.2.0" - loud-rejection "^1.2.0" - make-dir "^1.0.0" - matcher "^1.0.0" - md5-hex "^2.0.0" - meow "^3.7.0" - ms "^2.0.0" - multimatch "^2.1.0" - observable-to-promise "^0.5.0" - option-chain "^1.0.0" - package-hash "^2.0.0" - pkg-conf "^2.0.0" - plur "^2.0.0" - pretty-ms "^3.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^2.0.0" - safe-buffer "^5.1.1" - semver "^5.4.1" - slash "^1.0.0" - source-map-support "^0.5.0" - stack-utils "^1.0.1" - strip-ansi "^4.0.0" - strip-bom-buf "^1.0.0" - supertap "^1.0.0" - supports-color "^5.0.0" - trim-off-newlines "^1.0.1" - unique-temp-dir "^1.0.0" - update-notifier "^2.3.0" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -babel-cli@6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" - integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= - dependencies: - babel-core "^6.26.0" - babel-polyfill "^6.26.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - commander "^2.11.0" - convert-source-map "^1.5.0" - fs-readdir-recursive "^1.0.0" - glob "^7.1.2" - lodash "^4.17.4" - output-file-sync "^1.1.2" - path-is-absolute "^1.0.1" - slash "^1.0.0" - source-map "^0.5.6" - v8flags "^2.1.1" - optionalDependencies: - chokidar "^1.6.1" +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.5.4" + resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" + integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== -babel-code-frame@^6.16.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= +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: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@6.26.3: - version "6.26.3" - resolved "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-core@^6.17.0, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - integrity sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g= - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.1.0, babel-generator@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" - integrity sha1-rBriAHC3n248odMmlhMFN3TyDcU= - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.6" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" + bare-events "^2.0.0" + bare-path "^3.0.0" + bare-stream "^2.0.0" -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" - integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== - dependencies: - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-add-module-exports@^0.3.0: - version "0.3.3" - resolved "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.3.3.tgz#b9f7c0a93b989170dce07c3e97071a905a13fc29" - integrity sha512-hC37mm7aAdEb1n8SgggG8a1QuhZapsY/XLCi4ETSH6AVjXBCWEa50CXlOsAMPPWLnSx5Ns6mzz39uvuseh0Xjg== - optionalDependencies: - chokidar "^2.0.4" +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== -babel-plugin-ava-throws-helper@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-1.0.0.tgz#8fe6e79d2fd19838b5c3649f89cfb03fd563e241" - integrity sha1-j+bnnS/RmDi1w2Sfic+wP9Vj4kE= +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: - babel-template "^6.7.0" - babel-types "^6.7.2" + bare-os "^3.0.1" -babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.8.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= +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: - babel-runtime "^6.22.0" - -babel-plugin-espower@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/babel-plugin-espower/-/babel-plugin-espower-2.3.2.tgz#5516b8fcdb26c9f0e1d8160749f6e4c65e71271e" - integrity sha1-VRa4/NsmyfDh2BYHSfbkxl5xJx4= - dependencies: - babel-generator "^6.1.0" - babylon "^6.1.0" - call-matcher "^1.0.0" - core-js "^2.0.0" - espower-location-detector "^1.0.0" - espurify "^1.6.0" - estraverse "^4.1.1" - -babel-plugin-istanbul@^5.1.0: - version "5.1.4" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz#841d16b9a58eeb407a0ddce622ba02fe87a752ba" - integrity sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ== - dependencies: - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-jest-hoist@^24.6.0: - version "24.6.0" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" - integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - -babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.19.0, babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.9.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.18.0, babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - integrity sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo= - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.21.0, babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.8.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.8.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.11.0, babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.8.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@6.23.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0= - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-polyfill@6.26.0, babel-polyfill@^6.26.0, babel-polyfill@^6.3.14: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-env@^1.6.0: - version "1.6.1" - resolved "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - integrity sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA== - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-jest@^24.6.0: - version "24.6.0" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" - integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.6.0" - -babel-register@6.26.0, babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.7.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.7.2: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.1.0, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" + streamx "^2.21.0" -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= +base64-js@^1.3.1: + version "1.5.1" + 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#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +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 "^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#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" -bl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" - integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA== +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" + balanced-match "^1.0.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= +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: - inherits "~2.0.0" + fill-range "^7.1.1" -bluebird@^3.0.0, bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== +browserslist@^4.24.0: + version "4.25.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c" + integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA== + dependencies: + caniuse-lite "^1.0.30001718" + electron-to-chromium "^1.5.160" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" -bluebird@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== +buffer@^5.5.0: + version "5.7.1" + 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" + +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@^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" "^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" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== -boom@2.x.x: - version "2.10.1" - resolved "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= +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: - hoek "2.x.x" + es-errors "^1.3.0" + function-bind "^1.1.2" -boxen@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" - integrity sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY= - dependencies: - ansi-align "^1.1.0" - camelcase "^2.1.0" - chalk "^1.1.1" - cli-boxes "^1.0.0" - filled-array "^1.0.0" - object-assign "^4.0.1" - repeating "^2.0.0" - string-width "^1.0.1" - widest-line "^1.0.0" - -boxen@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" - integrity sha1-Px1AMsMP/qnUsCwyLq8up0HcvOU= - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^1.0.0" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@2.3.1, braces@^1.8.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" - integrity sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - kind-of "^6.0.2" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" +caniuse-lite@^1.0.30001718: + version "1.0.30001723" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz#c4f3174f02089720736e1887eab345e09bb10944" + integrity sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw== -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +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== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== +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: - resolve "1.1.7" + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" -browserslist@^2.1.2: - version "2.9.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-2.9.0.tgz#706aca15c53be15610f466e348cbfa0c00a6a379" - integrity sha512-vJEBcDTANoDhSHL46NeOEW5hvQw7It9uCqzeFPQhpawXfnOwnpvW5C97vn1eGJ7iCkSg8wWU0nYObE7d/N95Iw== +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: - caniuse-lite "^1.0.30000760" - electron-to-chromium "^1.3.27" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - fast-json-stable-stringify "2.x" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= +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#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + ansi-styles "^4.1.0" + supports-color "^7.1.0" -buf-compare@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" - integrity sha1-/vKNqLgROgoNtEMLC2Rntpcws0o= +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== -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +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== -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +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== -builtin-modules@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +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== -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +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== -cachedir@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.1.0.tgz#b448c32b44cd9c0cd6ce4c419fa5b3c112c02191" - integrity sha512-xGBpPqoBvn3unBW7oxgb8aJn42K0m9m1/wyjmazah10Fq7bROGG3kRAE6OIyr3U3PIJUqGuebhCEdMk9OKJG0A== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -caching-transform@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" - integrity sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE= +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#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - md5-hex "^1.2.0" - mkdirp "^0.5.1" - write-file-atomic "^1.1.4" + restore-cursor "^3.1.0" -call-matcher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" - integrity sha1-UTTQd5hPcSpU2tPL9i3ijc5BbKg= +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: - core-js "^2.0.0" - deep-equal "^1.0.0" - espurify "^1.6.0" - estraverse "^4.0.0" + restore-cursor "^5.0.0" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -call-signature@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" - integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY= +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== -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== dependencies: - callsites "^2.0.0" + slice-ansi "^5.0.0" + string-width "^7.0.0" -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== -callsites@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" - integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== +cliui@^7.0.2: + version "7.0.4" + 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" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= +clone-deep@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" -camelcase@^2.0.0, camelcase@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +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== -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" - integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== - -caniuse-lite@^1.0.30000760: - version "1.0.30000766" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000766.tgz#8a095cc5eb9923c27008ce4d0db23e65a3e28843" - integrity sha1-iglcxeuZI8JwCM5NDbI+ZaPiiEM= - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - rsvp "^4.8.4" + color-name "1.1.3" -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" - integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ= +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: - ansi-styles "^1.1.0" - escape-string-regexp "^1.0.0" - has-ansi "^0.1.0" - strip-ansi "^0.3.0" - supports-color "^0.2.0" + color-name "~1.1.4" -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - 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" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -chalk@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" +color-support@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -chalk@^2.0.0, chalk@^2.0.1: - version "2.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + strip-ansi "^6.0.1" + wcwidth "^1.0.0" -chalk@^2.3.1: - version "2.4.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + delayed-stream "~1.0.0" -chardet@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz#0bbe1355ac44d7a3ed4a925707c4ef70f8190f6c" - integrity sha1-C74TVaxE16PtSpJXB8TvcPgZD2w= +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== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +commander@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz#f244fc74a92343514e56229f16ef5c5e22ced5e9" + integrity sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA== -chokidar@^1.4.2, chokidar@^1.6.1, chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" +comment-parser@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== -chokidar@^2.0.4: - version "2.1.6" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" - integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== +commitizen@^4.0.3, commitizen@^4.2.4: + version "4.3.1" + resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz#f0e0e4b7ae3fafc92e444bbb78f2ded5a1d4311a" + integrity sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw== dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== - -chownr@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.5" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.7" + strip-bom "4.0.0" + strip-json-comments "3.1.1" -ci-info@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" - integrity sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA== +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#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== -ci-info@^2.0.0: +compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + array-ify "^1.0.0" + dot-prop "^5.1.0" -clean-stack@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" - integrity sha1-noIVAa6XmYbEax1m0tQy2y/UrjE= +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= +concat-stream@^2.0.0: + version "2.0.0" + 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" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +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#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -cli-cursor@^1.0.1, cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= +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#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: - restore-cursor "^1.0.1" + compare-func "^2.0.0" -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +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#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#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" + integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== dependencies: - restore-cursor "^2.0.0" + compare-func "^2.0.0" -cli-spinners@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz#f1847b168844d917a671eb9d147e3df497c90d06" - integrity sha1-8YR7FohE2RemceudFH499JfJDQY= +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 "^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 "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" -cli-truncate@^0.2.0, cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" +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== -cli-truncate@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz#2b2dfd83c53cfd3572b87fc4d430a808afb04086" - integrity sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA== +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: - slice-ansi "^1.0.0" - string-width "^2.0.0" + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" -cli-width@^1.0.1: - version "1.1.1" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" - integrity sha1-pNKT72frt7iNSk1CwMzwDE0eNm0= +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#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +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.1" -clipboard@^1.5.5: - version "1.7.1" - resolved "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b" - integrity sha1-Ng1taUbpmnof7zleQrqStem1oWs= +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: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" -clipboard@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== +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#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= +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: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + concat-stream "^2.0.0" + 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#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== +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: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" + is-what "^4.1.8" -clone@^1.0.2: +core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - integrity sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8= + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -co-with-promise@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7" - integrity sha1-QT59tvWJOmC5Qs9JLEvsk9tBWrc= +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: - pinkie-promise "^1.0.0" + jiti "^2.4.1" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +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" -code-excerpt@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-2.1.0.tgz#5dcc081e88f4a7e3b554e9e35d7ef232d47f8147" - integrity sha1-XcwIHoj0p+O1VOnjXX7yMtR/gUc= +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: - convert-to-spaces "^1.0.1" + cross-spawn "^7.0.1" -code-excerpt@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-2.1.1.tgz#5fe3057bfbb71a5f300f659ef2cc0a47651ba77c" - integrity sha512-tJLhH3EpFm/1x7heIW0hemXJTUU5EWl2V0EIX558jp05Mt1U6DVryCgkp3l37cxqs+DNbNgxG43SkwJXpQ14Jw== +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: - convert-to-spaces "^1.0.1" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +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== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ== +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#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== dependencies: - color-name "^1.1.1" + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" +dargs@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" + integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk= +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +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.1: + version "4.4.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: - delayed-stream "~1.0.0" + ms "^2.1.3" -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: - delayed-stream "~1.0.0" + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -commander@2.6.0: - version "2.6.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" - integrity sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0= +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -commander@^2.11.0, commander@^2.9.0: - version "2.11.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== +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== -commander@^2.14.1: - version "2.19.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +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== -commander@~2.17.1: - version "2.17.1" - resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -commitizen@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/commitizen/-/commitizen-3.1.2.tgz#29ddd8b39396923e9058a0e4840cbeef144290be" - integrity sha512-eD0uTUsogu8ksFjFFYq75LLfXeLXsCIa27TPfOqvBI+tCx1Pp5QfKqC9oC+qTpSz3nTn9/+7TL5mE/wurB22JQ== +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: - cachedir "2.1.0" - cz-conventional-changelog "2.1.0" - dedent "0.7.0" - detect-indent "^5.0.0" - find-node-modules "2.0.0" - find-root "1.1.0" - fs-extra "^7.0.0" - glob "7.1.3" - inquirer "6.2.0" - is-utf8 "^0.2.1" - lodash "4.17.14" - minimist "1.2.0" - shelljs "0.7.6" - strip-bom "3.0.0" - strip-json-comments "2.0.1" + clone "^1.0.2" -common-path-prefix@^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#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0" - integrity sha1-zVL28HEuC6q5fW+XModPIvR3UsA= + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +detect-indent@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -concat-stream@^1.5.0: - version "1.6.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== +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: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" + dequal "^2.0.0" -concordance@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/concordance/-/concordance-2.0.0.tgz#c3c5dbffa83c29537df202bded8fa1d6aa94e805" - integrity sha512-jVxBZbAkFIZE5WHCAL7RpkX+XPl9ZnT8uYjZ9EXPFSquNDgq2iXWFsT2iptVoxvfSL+/5ej8CdHsmE7XYJjCPA== - dependencies: - esutils "^2.0.2" - fast-diff "^1.1.1" - function-name-support "^0.2.0" - js-string-escape "^1.0.1" - lodash.clonedeep "^4.5.0" - lodash.flattendeep "^4.4.0" - lodash.merge "^4.6.0" - md5-hex "^2.0.0" - moment "^2.18.1" - semver "^5.3.0" - well-known-symbols "^1.0.0" - -concordance@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/concordance/-/concordance-3.0.0.tgz#b2286af54405fc995fc7345b0b106d8dd073cb29" - integrity sha512-CZBzJ3/l5QJjlZM20WY7+5GP5pMTw+1UEbThcpMw8/rojsi5sBCiD8ZbBLtD+jYpRGAkwuKuqk108c154V9eyQ== - dependencies: - date-time "^2.1.0" - esutils "^2.0.2" - fast-diff "^1.1.1" - function-name-support "^0.2.0" - js-string-escape "^1.0.1" - lodash.clonedeep "^4.5.0" - lodash.flattendeep "^4.4.0" - lodash.merge "^4.6.0" - md5-hex "^2.0.0" - semver "^5.3.0" - well-known-symbols "^1.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -concurrently@3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-3.5.1.tgz#ee8b60018bbe86b02df13e5249453c6ececd2521" - integrity sha512-689HrwGw8Rbk1xtV9C4dY6TPJAvIYZbRbnKSAtfJ7tHqICFGoZ0PCWYjxfmerRyxBG0o3sbG3pe7N8vqPwIHuQ== - dependencies: - chalk "0.5.1" - commander "2.6.0" - date-fns "^1.23.0" - lodash "^4.5.1" - rx "2.3.24" - spawn-command "^0.0.2-1" - supports-color "^3.2.3" - tree-kill "^1.1.0" - -concurrently@3.6.1: - version "3.6.1" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-3.6.1.tgz#2f95baec5c4051294dfbb55b57a3b98a3e2b45ec" - integrity sha512-/+ugz+gwFSEfTGUxn0KHkY+19XPRTXR8+7oUK/HxgiN1n7FjeJmkrbSiXAJfyQ0zORgJYPaenmymwon51YXH9Q== +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: - chalk "^2.4.1" - commander "2.6.0" - date-fns "^1.23.0" - lodash "^4.5.1" - read-pkg "^3.0.0" - rx "2.3.24" - spawn-command "^0.0.2-1" - supports-color "^3.2.3" - tree-kill "^1.1.0" + is-obj "^2.0.0" -config-chain@^1.1.11: - version "1.1.11" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - integrity sha1-q6CXR9++TD5w52am5BWG4YWfxvI= +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: - ini "^1.3.4" - proto-list "~1.2.1" + dotenv "^16.4.5" -configstore@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" - integrity sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE= - dependencies: - dot-prop "^3.0.0" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - object-assign "^4.0.1" - os-tmpdir "^1.0.0" - osenv "^0.1.0" - uuid "^2.0.1" - write-file-atomic "^1.1.2" - xdg-basedir "^2.0.0" - -configstore@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" - integrity sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" +dotenv@^16.4.5: + version "16.6.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== -connect-livereload@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.0.tgz#f9f009874ad6837183afb170b4c4e3857a1d7ceb" - integrity sha1-+fAJh0rWg3GDr7FwtMTjhXodfOs= +dotenv@~16.4.5: + version "16.4.7" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== -connect@^3.6.0: - version "3.6.5" - resolved "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz#fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da" - integrity sha1-+43ee6B2OHfQ7J352sC0tA5yx9o= +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: - debug "2.6.9" - finalhandler "1.0.6" - parseurl "~1.3.2" - utils-merge "1.0.1" + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" -console-control-strings@^1.0.0, 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#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -conventional-changelog-angular@1.6.6: - version "1.6.6" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" - integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg== +ejs@^3.1.7: + version "3.1.10" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: - compare-func "^1.3.1" - q "^1.5.1" + jake "^10.8.5" -conventional-changelog-angular@^1.3.3: - version "1.5.2" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.2.tgz#2b38f665fe9c5920af1a2f82f547f4babe6de57c" - integrity sha1-Kzj2Zf6cWSCvGi+C9Uf0ur5t5Xw= - dependencies: - compare-func "^1.3.1" - q "^1.4.1" +electron-to-chromium@^1.5.160: + version "1.5.169" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.169.tgz#6afdfd8e701b7ab744e2bb0cfdec3cefc1072cbe" + integrity sha512-q7SQx6mkLy0GTJK9K9OiWeaBMV4XQtBSdf6MJUzDB/H/5tFXfIiX38Lci1Kl6SsgiEhz1SQI1ejEOU5asWEhwQ== -conventional-changelog-angular@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" - integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz#ac1731a461c50d150d29c1ad4f33143293bcd32f" - integrity sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig== - dependencies: - conventional-changelog-writer "^4.0.3" - conventional-commits-parser "^3.0.1" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.2" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^2.0.0" +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== -conventional-changelog-preset-loader@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" - integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== +emoji-regex@^10.3.0: + version "10.4.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== -conventional-changelog-writer@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz#916a2b302d0bb5ef18efd236a034c13fb273cde1" - integrity sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.1" - dateformat "^3.0.0" - handlebars "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" - semver "^5.5.0" - split "^1.0.0" - through2 "^2.0.0" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -conventional-commit-types@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946" - integrity sha1-XblXOdbCEqy+e29lahG5QLqmiUY= +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -conventional-commits-filter@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz#55a135de1802f6510b6758e0a6aa9e0b28618db3" - integrity sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - is-subset "^0.1.1" - modify-values "^1.0.0" + iconv-lite "^0.6.2" -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== +end-of-stream@^1.1.0: + version "1.4.4" + 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: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz#fe1c49753df3f98edb2285a5e485e11ffa7f2e4c" - integrity sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - trim-off-newlines "^1.0.0" + once "^1.4.0" -conventional-commits-parser@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" - integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== +end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: - JSONStream "^1.0.4" - is-text-path "^2.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" + once "^1.4.0" -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.2.0, convert-source-map@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" - integrity sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU= - -convert-to-spaces@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715" - integrity sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= + ansi-colors "^4.1.1" -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +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#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -core-assert@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" - integrity sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8= - dependencies: - buf-compare "^1.0.0" - is-error "^2.2.0" +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== -core-js@^2.0.0, core-js@^2.4.0, core-js@^2.5.0: - version "2.5.1" - resolved "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" - integrity sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs= +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== -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -cosmiconfig@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz#6c5c35e97f37f985061cdf653f114784231185cf" - integrity sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - lodash.get "^4.4.2" - parse-json "^4.0.0" + is-arrayish "^0.2.1" -cosmiconfig@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" - integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.0" - parse-json "^4.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== -cosmiconfig@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" +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== -cp-file@^4.1.1: - version "4.2.0" - resolved "https://registry.npmjs.org/cp-file/-/cp-file-4.2.0.tgz#715361663b71ede0b6dddbc3c80e2ba02e725ec3" - integrity sha1-cVNhZjtx7eC23dvDyA4roC5yXsM= - dependencies: - graceful-fs "^4.1.2" - make-dir "^1.0.0" - nested-error-stacks "^2.0.0" - pify "^2.3.0" - safe-buffer "^5.0.1" +es-module-lexer@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -create-error-class@^3.0.0, create-error-class@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= +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: - capture-stack-trace "^1.0.0" + es-errors "^1.3.0" -cross-env@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-5.1.1.tgz#b6d8ab97f304c0f71dae7277b75fe424c08dfa74" - integrity sha512-Wtvr+z0Z06KO1JxjfRRsPC+df7biIOiuV4iZ73cThjFGkH+ULBZq1MkBdywEcJC4cTDbO6c8IjgRjfswx3YTBA== - dependencies: - cross-spawn "^5.1.0" - is-windows "^1.0.0" +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: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +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.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.9" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz#15ab8e39ae6cdc64c24ff8a2c0aef5b3fd9fa976" + integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.9" + "@esbuild/android-arm" "0.25.9" + "@esbuild/android-arm64" "0.25.9" + "@esbuild/android-x64" "0.25.9" + "@esbuild/darwin-arm64" "0.25.9" + "@esbuild/darwin-x64" "0.25.9" + "@esbuild/freebsd-arm64" "0.25.9" + "@esbuild/freebsd-x64" "0.25.9" + "@esbuild/linux-arm" "0.25.9" + "@esbuild/linux-arm64" "0.25.9" + "@esbuild/linux-ia32" "0.25.9" + "@esbuild/linux-loong64" "0.25.9" + "@esbuild/linux-mips64el" "0.25.9" + "@esbuild/linux-ppc64" "0.25.9" + "@esbuild/linux-riscv64" "0.25.9" + "@esbuild/linux-s390x" "0.25.9" + "@esbuild/linux-x64" "0.25.9" + "@esbuild/netbsd-arm64" "0.25.9" + "@esbuild/netbsd-x64" "0.25.9" + "@esbuild/openbsd-arm64" "0.25.9" + "@esbuild/openbsd-x64" "0.25.9" + "@esbuild/openharmony-arm64" "0.25.9" + "@esbuild/sunos-x64" "0.25.9" + "@esbuild/win32-arm64" "0.25.9" + "@esbuild/win32-ia32" "0.25.9" + "@esbuild/win32-x64" "0.25.9" + +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== -cross-env@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-6.0.0.tgz#3c8e71440ea20aa6faaf5aec541235efc565dac6" - integrity sha512-G/B6gtkjgthT8AP/xN1wdj5Xe18fVyk58JepK8GxpUbqcz3hyWxegocMbvnZK+KoTslwd0ACZ3woi/DVUdVjyQ== - dependencies: - cross-spawn "^7.0.0" +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#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" +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#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +eslint-config-prettier@^10.0.0: + version "10.1.8" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -cross-spawn@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.0.tgz#21ef9470443262f33dba80b2705a91db959b2e03" - integrity sha512-6U/8SMK2FBNnB21oQ4+6Nsodxanw1gTkntYA2zBdkFYFu3ZDx65P2ONEXGSvob/QS6REjVHQ9zxzdOafwFdstw== - dependencies: - path-key "^3.1.0" - shebang-command "^1.2.0" - which "^1.2.9" +eslint-import-context@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.8.tgz#4098b659f4c1a3b3cc3bc896c3baee7907ca636d" + integrity sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w== + dependencies: + get-tsconfig "^4.10.1" + stable-hash-x "^0.1.1" + +eslint-import-context@^0.1.9: + version "0.1.9" + resolved "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz#967b0b2f0a90ef4b689125e088f790f0b7756dbe" + integrity sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg== + dependencies: + get-tsconfig "^4.10.1" + stable-hash-x "^0.2.0" + +eslint-import-resolver-typescript@^4.4.3: + version "4.4.4" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz#3e83a9c25f4a053fe20e1b07b47e04e8519a8720" + integrity sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw== + dependencies: + debug "^4.4.1" + eslint-import-context "^0.1.8" + get-tsconfig "^4.10.1" + is-bun-module "^2.0.0" + stable-hash-x "^0.2.0" + tinyglobby "^0.2.14" + unrs-resolver "^1.7.11" + +eslint-plugin-import-x@^4.15.2: + version "4.16.1" + resolved "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.1.tgz#a96ee1ad5ba6816f9a5573a9617935011a24c4df" + integrity sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ== + dependencies: + "@typescript-eslint/types" "^8.35.0" + comment-parser "^1.4.1" + debug "^4.4.1" + eslint-import-context "^0.1.9" + is-glob "^4.0.3" + minimatch "^9.0.3 || ^10.0.1" + semver "^7.7.2" + stable-hash-x "^0.2.0" + unrs-resolver "^1.9.2" + +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +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#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.16.0: + version "9.32.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz#4ea28df4a8dbc454e1251e0f3aed4bcf4ce50a47" + integrity sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.0" + "@eslint/config-helpers" "^0.3.0" + "@eslint/core" "^0.15.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.32.0" + "@eslint/plugin-kit" "^0.3.4" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@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.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - boom "2.x.x" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.6" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" - integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -cssstyle@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" - integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== +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: - cssom "0.3.x" + estraverse "^5.1.0" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - array-find-index "^1.0.1" + estraverse "^5.2.0" -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -cz-conventional-changelog@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz#2f4bc7390e3244e4df293e6ba351e4c740a7c764" - integrity sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q= - dependencies: - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^1.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== dependencies: - number-is-nan "^1.0.0" + "@types/estree" "^1.0.0" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -date-fns@^1.23.0, date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -date-time@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07" - integrity sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc= +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" -date-time@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2" - integrity sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g== +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#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: - time-zone "^1.0.0" + homedir-polyfill "^1.0.1" -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +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== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" +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== -debug@3.1.0, debug@^3.1.0: +external-editor@^3.0.3, external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.0.1: - version "3.2.6" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: - ms "^2.1.1" + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" +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#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= +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#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= +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: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== - dependencies: - xregexp "4.0.0" +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#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -dedent@0.7.0, dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +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#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -deep-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +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== -deep-extend@0.5.1, deep-extend@^0.6.0, deep-extend@~0.4.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== +fastq@^1.6.0: + 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" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +fdir@^6.4.3, fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - object-keys "^1.0.12" + escape-string-regexp "^1.0.5" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= +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: - is-descriptor "^0.1.0" + flat-cache "^4.0.0" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= +filelist@^1.0.4: + version "1.0.4" + 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: - is-descriptor "^1.0.0" + minimatch "^5.0.1" -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== +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: - is-descriptor "^1.0.2" - isobject "^3.0.1" + to-regex-range "^5.0.1" -del@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= +find-node-modules@^2.1.2: + 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: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + findup-sync "^4.0.0" + merge "^2.1.1" -delegate@^3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/delegate/-/delegate-3.1.3.tgz#9a8251a777d7025faa55737bc3b071742127a9fd" - integrity sha1-moJRp3fXAl+qVXN7w7BxdCEnqf0= +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +find-up-simple@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" + integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== -depd@1.1.1, depd@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= +find-up@^2.0.0: + version "2.1.0" + 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" -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +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#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +find-up@^5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +find-up@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" + integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + dependencies: + locate-path "^7.2.0" + path-exists "^5.0.0" + unicorn-magic "^0.1.0" -detect-indent@^4.0.0: +findup-sync@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: - repeating "^2.0.0" + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= +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.4" -detect-libc@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" - integrity sha1-ca1dIEvxempsqPRQxhRUBm70YeE= +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= +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: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== + tabbable "^6.2.0" -diff@^3.0.0, diff@^3.0.1: - version "3.4.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" - integrity sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA== +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== -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - path-type "^3.0.0" + cross-spawn "^7.0.6" + signal-exit "^4.0.1" -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== +form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: - path-type "^4.0.0" + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" -docsify-cli@4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/docsify-cli/-/docsify-cli-4.3.0.tgz#12b9cca29840d71653fe19bdc2ce8265a753b392" - integrity sha512-88O1sMeoZv4lb5GPSJzDtOAv2KzBjpQaSqVlVqY+6hGJfb2wpz9PvlUhvlgPq54zu4kPDeCCyUYgqa/llhKg3w== - dependencies: - chalk "^1.1.3" - connect "^3.6.0" - connect-livereload "^0.6.0" - cp-file "^4.1.1" - docsify ">=3" - docsify-server-renderer ">=4" - fs-extra "^2.1.2" - livereload "^0.7.0" - lru-cache "^4.1.1" - opn "^5.3.0" - serve-static "^1.12.1" - update-notifier "^2.1.0" - y18n "^3.2.1" - yargonaut "^1.1.2" - yargs "^7.0.2" - -docsify-server-renderer@>=4: - version "4.8.6" - resolved "https://registry.npmjs.org/docsify-server-renderer/-/docsify-server-renderer-4.8.6.tgz#c5875c5de2f22a48e9909895b3788529c8d77408" - integrity sha512-uRPoyyJDrdBx75vfXKX+rJDsIera8r3MNZ33H8fYHG5cM/6pOA5WQVBX1c6VXgpdiLCEsSweMQvltOVcROPf5A== - dependencies: - debug "^2.6.8" - docsify "^4.8.0" - node-fetch "^1.7.0" - resolve-pathname "^2.1.0" - -docsify@>=3: - version "4.5.3" - resolved "https://registry.npmjs.org/docsify/-/docsify-4.5.3.tgz#08295179414a22dadcdbfeae6bde3c2b5a64101d" - integrity sha512-HUDvRFPJqa+4jf4www9bJWKpO6APCIbai0hP77uBLMsaEqwT9ixmtWOQCad4VDh5iuu0Usw4WiyUbPQloiEf+w== - dependencies: - marked "^0.3.6" - medium-zoom "^0.2.0" - prismjs "^1.6.0" - tinydate "^1.0.0" - tweezer.js "^1.4.0" - -docsify@^4.8.0: - version "4.8.6" - resolved "https://registry.npmjs.org/docsify/-/docsify-4.8.6.tgz#e1cf19d64760c91a1471e6f99b69d175f9b86ef8" - integrity sha512-AFjLpFqe4J1EAYxkIlRtWQRLJidgx4hkdEFgSECcIwv82X7sDuQx4D6hlMEVbNVBFUr6b2XtYV2FhNhRFyO0Fw== - dependencies: - marked "^0.5.1" - medium-zoom "^0.4.0" - opencollective "^1.0.3" - prismjs "^1.15.0" - tinydate "^1.0.0" - tweezer.js "^1.4.0" - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== +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: - webidl-conversions "^4.0.2" + js-yaml "^3.13.1" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -dot-prop@^4.1.0, dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +fs-extra@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: - is-obj "^1.0.0" + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -duplexer2@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= +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: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -duplexify@^3.1.2, duplexify@^3.4.2: - version "3.5.1" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" - integrity sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ== +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" + minipass "^3.0.0" -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= +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: - jsbn "~0.1.0" + minipass "^7.0.3" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.27: - version "1.3.27" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" - integrity sha1-eOy4o5kGYYe7N07t412ccFZagD0= +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -empower-core@^0.6.1: - version "0.6.2" - resolved "https://registry.npmjs.org/empower-core/-/empower-core-0.6.2.tgz#5adef566088e31fba80ba0a36df47d7094169144" - integrity sha1-Wt71ZgiOMfuoC6CjbfR9cJQWkUQ= - dependencies: - call-signature "0.0.2" - core-js "^2.0.0" +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" - integrity sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA= +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#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" +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#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" - integrity sha1-epDYM+/abPpurA9JSduw+tOmMgY= - dependencies: - once "^1.4.0" +get-east-asian-width@^1.0.0: + 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== -end-of-stream@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== +get-intrinsic@^1.2.6: + 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" + 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.2.1: + version "4.2.1" + 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: - once "^1.4.0" + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -equal-length@^1.0.0: +get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" - integrity sha1-IcoRLUirJLTh5//A5TOdMf38J0w= + 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" -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= +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== -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - integrity sha1-+FWobOYa3E6GIcPNoh56dhLDqNw= - dependencies: - is-arrayish "^0.2.1" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== +get-tsconfig@^4.10.1: + version "4.10.1" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" + resolve-pkg-maps "^1.0.0" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +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: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1, es6-error@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98" - integrity sha1-7sXHJurO9Rt/a3PCDbbhsTsGnJg= - -es6-promise@^4.0.3: - version "4.1.1" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" - integrity sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng== + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= +git-raw-commits@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" + integrity sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== dependencies: - es6-promise "^4.0.3" + dargs "^8.0.0" + meow "^12.0.1" + split2 "^4.0.0" -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, 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#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.9.1: - version "1.11.1" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== +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#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" + gitconfiglocal "^1.0.0" + pify "^2.3.0" -espower-location-detector@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" - integrity sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU= +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: - is-url "^1.2.1" - path-is-absolute "^1.0.0" - source-map "^0.5.0" - xtend "^4.0.0" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== + meow "^8.1.2" + semver "^7.0.0" -espurify@^1.6.0: - version "1.7.0" - resolved "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" - integrity sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY= +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: - core-js "^2.0.0" - -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + is-ssh "^1.4.0" + parse-url "^8.1.0" -execa@0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.11.0.tgz#0b3c71daf9b9159c252a863cd981af1b4410d97a" - integrity sha512-k5AR22vCt1DcfeiRixW46U5tMLtBg44ssdJM9PiXw3D8Bn5qyxFCSnKY/eR22y+ctFDGPqafpaXg2G4Emyua4A== +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: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + git-up "^7.0.0" -execa@0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + ini "^1.3.2" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= +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#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + is-glob "^4.0.3" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== +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: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + is-glob "^4.0.1" -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= +glob@7.2.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: - is-posix-bracket "^0.1.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= +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: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" -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#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= +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: - homedir-polyfill "^1.0.1" + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" -expect@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" - integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== dependencies: - "@jest/types" "^24.8.0" - ansi-styles "^3.2.0" - jest-get-type "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" + ini "4.1.1" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: - is-extendable "^0.1.0" + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +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== -external-editor@^2.0.1: - version "2.2.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" +globals@^16.0.0: + version "16.3.0" + resolved "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz#66118e765ddaf9e2d880f7e17658543f93f1f667" + integrity sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ== -external-editor@^3.0.0, external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" +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== -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" +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: + version "4.2.11" + 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== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -fast-async@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/fast-async/-/fast-async-6.3.0.tgz#b90e7d68f273905878a76ab7047dd080ebc3c40f" - integrity sha512-db5wfZ2+cv15bMfXbH9axCslxsTrhquGfkZiVhmUn2gFdNRnp8sweMSH1/9+M0+fHVHhHZBwll3SqCiNlcQhzg== +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: - nodent-compiler ">=3.1.0" - nodent-runtime ">=3.0.4" + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -fast-diff@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" - integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -fast-glob@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.3.tgz#084221f4225d51553bccd5ff4afc17aafa869412" - integrity sha512-scDJbDhN+6S4ELXzzN96Fqm5y1CMRn+Io3C4Go+n/gUKP+LW26Wma6IxLSsX2eAMBUOFmyHKDBrUSuoHsycQ5A== - dependencies: - "@nodelib/fs.stat" "^2.0.1" - "@nodelib/fs.walk" "^1.2.1" - glob-parent "^5.0.0" - is-glob "^4.0.1" - merge2 "^1.2.3" - micromatch "^4.0.2" +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== -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +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.3" -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +has-unicode@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -fastq@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" - integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== +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: - reusify "^1.0.0" + "@types/hast" "^3.0.0" -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: - bser "^2.0.0" + parse-passwd "^1.0.0" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== -figlet@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/figlet/-/figlet-1.2.0.tgz#6c46537378fab649146b5a6143dda019b430b410" - integrity sha1-bEZTc3j6tkkUa1phQ92gGbQwtBA= +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#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -figures@^1.3.5, figures@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= +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#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" + lru-cache "^6.0.0" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +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: - escape-string-regexp "^1.0.5" + lru-cache "^10.0.1" -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -fill-keys@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20" - integrity sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA= - dependencies: - is-object "~1.0.1" - merge-descriptors "~1.0.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== -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= +http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +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: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + agent-base "^7.1.0" + debug "^4.3.4" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +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: - to-regex-range "^5.0.1" + agent-base "^7.1.2" + debug "4" -filled-array@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" - integrity sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q= +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -finalhandler@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f" - integrity sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8= - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= +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#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" + safer-buffer ">= 2.1.2 < 3" -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" + safer-buffer ">= 2.1.2 < 3.0.0" -find-node-modules@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +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: - findup-sync "^3.0.0" - merge "^1.2.1" + minimatch "^9.0.0" -find-parent-dir@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= +ignore@^5.0.4, ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= +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: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= +import-local@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - locate-path "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" +import-meta-resolve@^4.0.0: + 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#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -find-up@^4.0.0: +indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a" - integrity sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q== - dependencies: - locate-path "^5.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" +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== -flush-write-stream@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" - integrity sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc= +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" + once "^1.3.0" + wrappy "1" -fn-name@^2.0.0, fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= +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#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +ini@4.1.1: + version "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, 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== + +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: + "@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 "^5.0.0" + +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + 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 "^7.0.0" -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= +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: - for-in "^1.0.1" + 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.3.7" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.3.7.tgz#0b562bf843812208844741c9aec9244c939b83d4" + integrity sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w== + dependencies: + "@inquirer/figures" "^1.0.3" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + external-editor "^3.1.0" + mute-stream "1.0.0" + ora "^5.4.1" + run-async "^3.0.0" + rxjs "^7.8.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +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" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + semver "^7.7.1" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +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: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" + ci-info "^3.2.0" -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= +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: - map-cache "^0.2.2" + hasown "^2.0.2" -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +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#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +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#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -fs-extra@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" - integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" +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#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== +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#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" + get-east-asian-width "^1.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +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#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + is-extglob "^2.1.1" -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== - dependencies: - minipass "^2.2.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -fs-readdir-recursive@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - integrity sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q== - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-name-support@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/function-name-support/-/function-name-support-0.2.0.tgz#55d3bfaa6eafd505a50f9bc81fdf57564a0bb071" - integrity sha1-VdO/qm6v1QWlD5vIH99XVkoLsHE= - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U= - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-port@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz#8783f9dcebd1eea495a334e1a6a251e78887ab1a" - integrity sha1-h4P53OvR7qSVozThpqJR54iHqxo= - dependencies: - pinkie-promise "^2.0.0" - -get-port@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stdin@7.0.0, get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@2.0.0, git-raw-commits@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.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#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" - integrity sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w== - dependencies: - meow "^4.0.0" - semver "^5.5.0" - -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.1.3, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - 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" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== - 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" - -glob@^7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - 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" - -global-dirs@^0.1.0, global-dirs@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^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#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globby@10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^6.0.0, globby@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -got@^5.0.0: - version "5.7.1" - resolved "https://registry.npmjs.org/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" - integrity sha1-X4FjWmHkplifGAVp6k44FoClHzU= - dependencies: - create-error-class "^3.0.1" - duplexer2 "^0.1.4" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - node-status-codes "^1.0.0" - object-assign "^4.0.1" - parse-json "^2.1.0" - pinkie-promise "^2.0.0" - read-all-stream "^3.0.0" - readable-stream "^2.0.5" - timed-out "^3.0.0" - unzip-response "^1.0.2" - url-parse-lax "^1.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= - -graceful-fs@^4.1.15: - version "4.1.15" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -graceful-fs@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -handlebars@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" - integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== - dependencies: - async "^2.5.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -handlebars@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" - integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4= - dependencies: - ansi-regex "^0.2.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-1.0.0.tgz#89e25db604b725c8f5976fff0addc921b828a5a7" - integrity sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac= - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x, hoek@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.3.tgz#b71d40d943d0a95da01956b547f83c4a5b4a34ac" - integrity sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw== - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - integrity sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg== - -hosted-git-info@^2.6.0: - version "2.7.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -hullabaloo-config-manager@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/hullabaloo-config-manager/-/hullabaloo-config-manager-1.1.1.tgz#1d9117813129ad035fd9e8477eaf066911269fe3" - integrity sha512-ztKnkZV0TmxnumCDHHgLGNiDnotu4EHCp9YMkznWuo4uTtCyJ+cu+RNcxUeXYKTllpvLFWnbfWry09yzszgg+A== - dependencies: - dot-prop "^4.1.0" - es6-error "^4.0.2" - graceful-fs "^4.1.11" - indent-string "^3.1.0" - json5 "^0.5.1" - lodash.clonedeep "^4.5.0" - lodash.clonedeepwith "^4.5.0" - lodash.isequal "^4.5.0" - lodash.merge "^4.6.0" - md5-hex "^2.0.0" - package-hash "^2.0.0" - pkg-dir "^2.0.0" - resolve-from "^3.0.0" - safe-buffer "^5.0.1" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/husky/-/husky-3.0.5.tgz#d7db27c346645a8dc52df02aa534a377ad7925e0" - integrity sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg== - dependencies: - chalk "^2.4.2" - cosmiconfig "^5.2.1" - execa "^1.0.0" - get-stdin "^7.0.0" - is-ci "^2.0.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^4.2.0" - please-upgrade-node "^3.2.0" - read-pkg "^5.1.1" - run-node "^1.0.0" - slash "^3.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - 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.4.17, iconv-lite@~0.4.13: - version "0.4.19" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-by-default@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" - integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" - integrity sha1-sReVcqrNwRxqkQCftDDbyrX2aKg= - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: - version "1.3.4" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4= - -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-0.11.0.tgz#7448bfa924092af311d47173bbab990cae2bb027" - integrity sha1-dEi/qSQJKvMR1HFzu6uZDK4rsCc= - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^1.0.1" - figures "^1.3.5" - lodash "^3.3.1" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - strip-ansi "^3.0.0" - through "^2.3.6" - -inquirer@3.0.6: - version "3.0.6" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" - integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c= - dependencies: - ansi-escapes "^1.1.0" - chalk "^1.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.1" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx "^4.1.0" - string-width "^2.0.0" - strip-ansi "^3.0.0" - through "^2.3.6" - -inquirer@6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" - integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.2.0: - version "6.2.2" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" - integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" - integrity sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA= - -invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A= - dependencies: - loose-envify "^1.0.0" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -irregular-plurals@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" - integrity sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-builtin-module@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466" - integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw== - dependencies: - builtin-modules "^3.0.0" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-ci@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" - integrity sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4= - dependencies: - ci-info "^1.0.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-error@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c" - integrity sha1-aEqW2EB2V3yY9M20DG0mpRI78Zw= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0, is-finite@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.0, is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-object@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= - -is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - integrity sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI= - dependencies: - symbol-observable "^0.2.2" - -is-observable@^1.0.0, is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - integrity sha1-/AbloWg/vaE95mev9xe7wQpI838= - dependencies: - path-is-inside "^1.0.1" - -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#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, 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#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== - dependencies: - protocols "^1.1.0" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-text-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - 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#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== - dependencies: - text-extensions "^2.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-url@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" - integrity sha1-SYkFpZO/R8wtnn9zg3K792lsfyY= - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" - integrity sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk= - -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#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - -istanbul-reports@^2.1.1: - version "2.2.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== - dependencies: - handlebars "^4.1.2" - -jest-changed-files@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" - integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug== - dependencies: - "@jest/types" "^24.8.0" - execa "^1.0.0" - throat "^4.0.0" - -jest-cli@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989" - integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA== - dependencies: - "@jest/core" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^12.0.2" - -jest-config@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" - integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.8.0" - "@jest/types" "^24.8.0" - babel-jest "^24.8.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^24.8.0" - jest-environment-node "^24.8.0" - jest-get-type "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - micromatch "^3.1.10" - pretty-format "^24.8.0" - realpath-native "^1.1.0" - -jest-diff@^18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-18.1.0.tgz#4ff79e74dd988c139195b365dc65d87f606f4803" - integrity sha1-T/eedN2YjBORlbNl3GXYf2BvSAM= - dependencies: - chalk "^1.1.3" - diff "^3.0.0" - jest-matcher-utils "^18.1.0" - pretty-format "^18.1.0" - -jest-diff@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" - integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" - -jest-docblock@^24.3.0: - version "24.3.0" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" - integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" - integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== - dependencies: - "@jest/types" "^24.8.0" - chalk "^2.0.1" - jest-get-type "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - -jest-environment-jsdom@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" - integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" - jsdom "^11.5.1" - -jest-environment-node@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" - integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" - -jest-file-exists@^17.0.0: - version "17.0.0" - resolved "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169" - integrity sha1-f2Prc6HEOhP0Yb4mF2i0WvLN0Wk= - -jest-get-type@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" - integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== - -jest-haste-map@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800" - integrity sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ== - dependencies: - "@jest/types" "^24.8.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-jasmine2@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" - integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.8.0" - is-generator-fn "^2.0.0" - jest-each "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - throat "^4.0.0" - -jest-leak-detector@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" - integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== - dependencies: - pretty-format "^24.8.0" - -jest-matcher-utils@^18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz#1ac4651955ee2a60cef1e7fcc98cdfd773c0f932" - integrity sha1-GsRlGVXuKmDO8ef8yYzf13PA+TI= - dependencies: - chalk "^1.1.3" - pretty-format "^18.1.0" - -jest-matcher-utils@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" - integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== - dependencies: - chalk "^2.0.1" - jest-diff "^24.8.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" - -jest-message-util@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" - integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^18.0.0: - version "18.0.0" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-18.0.0.tgz#5c248846ea33fa558b526f5312ab4a6765e489b3" - integrity sha1-XCSIRuoz+lWLUm9TEqtKZ2XkibM= - -jest-mock@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" - integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== - dependencies: - "@jest/types" "^24.8.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== - -jest-regex-util@^24.3.0: - version "24.3.0" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" - integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== - -jest-resolve-dependencies@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0" - integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw== - dependencies: - "@jest/types" "^24.8.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.8.0" - -jest-resolve@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" - integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== - dependencies: - "@jest/types" "^24.8.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" - integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-leak-detector "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" - integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.2" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^12.0.2" - -jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== - -jest-snapshot@^18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-18.1.0.tgz#55b96d2ee639c9bce76f87f2a3fd40b71c7a5916" - integrity sha1-VbltLuY5ybznb4fyo/1Atxx6WRY= - dependencies: - jest-diff "^18.1.0" - jest-file-exists "^17.0.0" - jest-matcher-utils "^18.1.0" - jest-util "^18.1.0" - natural-compare "^1.4.0" - pretty-format "^18.1.0" - -jest-snapshot@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" - integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - expect "^24.8.0" - jest-diff "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.8.0" - semver "^5.5.0" - -jest-util@^18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-18.1.0.tgz#3a99c32114ab17f84be094382527006e6d4bfc6a" - integrity sha1-OpnDIRSrF/hL4JQ4JScAbm1L/Go= - dependencies: - chalk "^1.1.1" - diff "^3.0.0" - graceful-fs "^4.1.6" - jest-file-exists "^17.0.0" - jest-mock "^18.0.0" - mkdirp "^0.5.1" - -jest-util@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" - integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/fake-timers" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - -jest-validate@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" - integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== - dependencies: - "@jest/types" "^24.8.0" - camelcase "^5.0.0" - chalk "^2.0.1" - jest-get-type "^24.8.0" - leven "^2.1.0" - pretty-format "^24.8.0" - -jest-watcher@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4" - integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw== - dependencies: - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.9" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.8.0" - string-length "^2.0.0" - -jest-worker@^24.6.0: - version "24.6.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" - integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== - dependencies: - merge-stream "^1.0.1" - supports-color "^6.1.0" - -jest@24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" - integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg== - dependencies: - import-local "^2.0.0" - jest-cli "^24.8.0" - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@>=3.13.0, js-yaml@^3.10.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.8.2, js-yaml@^3.9.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" - integrity sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw== - -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#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@^5.0.1, 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#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -kleur@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -last-line-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/last-line-stream/-/last-line-stream-1.0.0.tgz#d1b64d69f86ff24af2d04883a2ceee14520a5600" - integrity sha1-0bZNafhv8kry0EiDos7uFFIKVgA= - dependencies: - through2 "^2.0.0" - -latest-version@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" - integrity sha1-VvjWE5YghHuAF/jx9NeOIRMkFos= - dependencies: - package-json "^2.0.0" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" - integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= - dependencies: - set-getter "^0.1.0" - -lazy-req@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" - integrity sha1-va6+rTD42CQDnODOFJ1Nqge6H6w= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -lerna@3.16.4: - version "3.16.4" - resolved "https://registry.npmjs.org/lerna/-/lerna-3.16.4.tgz#158cb4f478b680f46f871d5891f531f3a2cb31ec" - integrity sha512-0HfwXIkqe72lBLZcNO9NMRfylh5Ng1l8tETgYQ260ZdHRbPuaLKE3Wqnd2YYRRkWfwPyEyZO8mZweBR+slVe1A== - dependencies: - "@lerna/add" "3.16.2" - "@lerna/bootstrap" "3.16.2" - "@lerna/changed" "3.16.4" - "@lerna/clean" "3.16.0" - "@lerna/cli" "3.13.0" - "@lerna/create" "3.16.0" - "@lerna/diff" "3.16.0" - "@lerna/exec" "3.16.0" - "@lerna/import" "3.16.0" - "@lerna/init" "3.16.0" - "@lerna/link" "3.16.2" - "@lerna/list" "3.16.0" - "@lerna/publish" "3.16.4" - "@lerna/run" "3.16.0" - "@lerna/version" "3.16.4" - import-local "^2.0.0" - npmlog "^4.1.2" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@8.2.1: - version "8.2.1" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" - integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -livereload@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/livereload/-/livereload-0.7.0.tgz#38238dd155ffb251191697f737b6b13f471da115" - integrity sha512-PHnIGczQEvmCctDvRTWylA+1wSwE0/eFm+LkNhlmlAFus/aCRlVE97UOLOf6TUGLmZyfg7z7twG37ZiOgNJAyQ== - dependencies: - chokidar "^1.7.0" - opts ">= 1.2.0" - ws "^1.1.5" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.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#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.clonedeepwith@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz#6ee30573a03a1a60d670a62ef33c10cf1afdbdd4" - integrity sha1-buMFc6A6GmDWcKYu8zwQzxr9vdQ= - -lodash.debounce@^4.0.3: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.difference@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.template@^4.0.2, lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@4.17.14, lodash@4.17.15, lodash@^3.3.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: - version "4.17.14" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg= - dependencies: - js-tokens "^3.0.0" - -loud-rejection@^1.0.0, loud-rejection@^1.2.0: - version "1.6.0" - resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - integrity sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - 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" - -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== - -make-dir@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" - integrity sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - 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-error@1.x: - version "1.3.5" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -make-fetch-happen@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" - integrity sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -marked@0.3.9, marked@^0.3.6, marked@^0.5.1: - version "0.3.9" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.9.tgz#54ce6a57e720c3ac6098374ec625fcbcc97ff290" - integrity sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw== - -matcher@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/matcher/-/matcher-0.1.2.tgz#ef20cbde64c24c50cc61af5b83ee0b1b8ff00101" - integrity sha1-7yDL3mTCTFDMYa9bg+4LG4/wAQE= - dependencies: - escape-string-regexp "^1.0.4" - -matcher@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-1.0.0.tgz#aaf0c4816eb69b92094674175625f3466b0e3e19" - integrity sha1-qvDEgW62m5IJRnQXViXzRmsOPhk= - dependencies: - escape-string-regexp "^1.0.4" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= - -max-timeout@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/max-timeout/-/max-timeout-1.0.0.tgz#b68f69a2f99e0b476fd4cb23e2059ca750715e1f" - integrity sha1-to9povmeC0dv1Msj4gWcp1BxXh8= - -md5-hex@^1.2.0, md5-hex@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" - integrity sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ= - dependencies: - md5-o-matic "^0.1.1" - -md5-hex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" - integrity sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM= - dependencies: - md5-o-matic "^0.1.1" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= - -medium-zoom@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/medium-zoom/-/medium-zoom-0.2.0.tgz#12c9a6da7dee80adcb7bfae8549f9306017e4ca6" - integrity sha512-2595M4GDwjoyZVDtkw6JWY8JxkhZVumqPjvM8coyRcULPZpoij2bQJ1/syqtx4XiflaqTva0cAch1kzqk0ir9Q== - -medium-zoom@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/medium-zoom/-/medium-zoom-0.4.0.tgz#8e13c9b754903c0c903220611af0d3cd373a4222" - integrity sha512-0z7yMfd6I1BTCAa8QaR4cp5AqDkQD571GzhHIbbfefKEssGLSvs+4Xai/itOAncm4FBlF5gUoMQ22yW9/f8Sig== - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -meow@4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-4.0.0.tgz#fd5855dd008db5b92c552082db1c307cba20b29d" - integrity sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -merge-descriptors@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== - -merge@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - integrity sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE= - -mime-db@~1.37.0: - version "1.37.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - integrity sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo= - dependencies: - mime-db "~1.30.0" - -mime-types@~2.1.19: - version "2.1.21" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== - dependencies: - mime-db "~1.37.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - -mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - integrity sha1-5md4PZLonb00KBi1IwudYqZyrRg= - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1: - version "2.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" - integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^2.3.4, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^2.6.4: - version "2.8.1" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.8.1.tgz#a73bdc84cad62e8e6c8d56eba1302a5fe04c5910" - integrity sha512-QCG523ParRcE2+9A6wYh9UI3uy2FFLw4DQaVYQrY5HPfszc5M6VDD+j0QCwHm19LI2imes4RB+NBD8cOJccyCg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -minizlib@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" - integrity sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ== - dependencies: - minipass "^2.2.1" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= - dependencies: - mkdirp "*" - -mkdirp@*, mkdirp@0.5.1, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -modify-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" - integrity sha1-4rbN65zhn5kxelNyLz2/XfXqqrI= - -module-not-found-error@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" - integrity sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA= - -moment@2.19.3, moment@^2.18.1: - version "2.19.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.3.tgz#bdb99d270d6d7fda78cc0fbace855e27fe7da69f" - integrity sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8= - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -ms@2.0.0, ms@^2.0.0: +is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^0.7.1: - version "0.7.3" - resolved "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - integrity sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8= - -ms@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473" - integrity sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM= + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +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#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -multimatch@^2.1.0: +is-plain-obj@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== - dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= - -mute-stream@0.0.7, mute-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mz@^2.5.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1: - version "2.13.2" - resolved "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== - -nan@^2.3.0: - version "2.8.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" - integrity sha1-7XFfP+neArV6XmJS2QqWZ14fCFo= - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -needle@^2.2.1: - version "2.3.1" - resolved "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" - integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg== - dependencies: - debug "^4.1.0" - iconv-lite "^0.4.4" - sax "^1.2.4" - -neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== - -nested-error-stacks@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.0.tgz#98b2ffaefb4610fa3936f1e71435d30700de2840" - integrity sha1-mLL/rvtGEPo5NvHnFDXTBwDeKEA= - dependencies: - inherits "~2.0.1" - -nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" - integrity sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA== - -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@1.6.3: - version "1.6.3" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ= - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-fetch@^1.7.0: - version "1.7.3" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-fetch@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" - integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== - -node-fetch@^2.5.0: - version "2.6.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-gyp@^5.0.2: - version "5.0.3" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz#80d64c23790244991b6d44532f0a351bedd3dd45" - integrity sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ== - dependencies: - env-paths "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^4.4.8" - which "1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-localstorage@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz#45a0601c6932dfde6644a23361f1be173c75d3af" - integrity sha1-RaBgHGky395mRKIzYfG+Fzx1068= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^5.2.1: - version "5.4.0" - resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" - integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ== - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node-status-codes@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" - integrity sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8= - -nodent-compiler@>=3.1.0: - version "3.1.3" - resolved "https://registry.npmjs.org/nodent-compiler/-/nodent-compiler-3.1.3.tgz#6f0f1f8098db251ec773742bb4f33cd0266434b2" - integrity sha512-pcUC9gIgXXI3mbGjESZfVZO4Vgarw63xYZFRdkqxCDnygvvpiAwzwvvJ7rWqskp72Nk3cxWZY/rYxUIkPT14lw== - dependencies: - acorn ">=2.5.2" - acorn-es7-plugin ">=1.1.6" - source-map "^0.5.6" - -nodent-runtime@>=3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.0.4.tgz#a801ecb7bb0f6c39a69b24cc2fa370cfa8b492da" - integrity sha1-qAHst7sPbDmmmyTML6Nwz6i0kto= - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -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#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== - -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== - dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-packlist@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-path@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" - integrity sha1-Fc/04ciaONp39W9gVbJPl137K74= - dependencies: - which "^1.2.10" - -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7: - version "2.1.4" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= +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#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -observable-to-promise@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/observable-to-promise/-/observable-to-promise-0.4.0.tgz#28afe71645308f2d41d71f47ad3fece1a377e52b" - integrity sha1-KK/nFkUwjy1B1x9HrT/s4aN35Ss= - dependencies: - is-observable "^0.2.0" - symbol-observable "^0.2.2" - -observable-to-promise@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/observable-to-promise/-/observable-to-promise-0.5.0.tgz#c828f0f0dc47e9f86af8a4977c5d55076ce7a91f" - integrity sha1-yCjw8NxH6fhq+KSXfF1VB2znqR8= - dependencies: - is-observable "^0.2.0" - symbol-observable "^1.0.4" - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -opencollective-postinstall@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" - integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== - -opencollective@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" - integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE= - dependencies: - babel-polyfill "6.23.0" - chalk "1.1.3" - inquirer "3.0.6" - minimist "1.2.0" - node-fetch "1.6.3" - opn "4.0.2" - -opn@4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" - integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU= - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - -opn@^5.3.0: - version "5.4.0" - resolved "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -option-chain@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/option-chain/-/option-chain-0.1.1.tgz#e9b811e006f1c0f54802f28295bfc8970f8dcfbd" - integrity sha1-6bgR4AbxwPVIAvKClb/Ilw+Nz70= +is-ssh@^1.4.0: + version "1.4.1" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== dependencies: - object-assign "^4.0.1" - -option-chain@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/option-chain/-/option-chain-1.0.0.tgz#938d73bd4e1783f948d34023644ada23669e30f2" - integrity sha1-k41zvU4Xg/lI00AjZEraI2aeMPI= - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.npmjs.org/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= - -"opts@>= 1.2.0": - version "1.2.6" - resolved "https://registry.npmjs.org/opts/-/opts-1.2.6.tgz#d185c0425cfdeb9da1d182908b65b5c0238febb3" - integrity sha1-0YXAQlz9652h0YKQi2W1wCOP67M= + protocols "^2.0.1" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +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== -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== +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#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" + text-extensions "^1.0.0" -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== +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#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" + text-extensions "^2.0.0" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" +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#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -osenv@^0.1.0, osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" +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== -osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" +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#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -output-file-sync@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" - integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.0" + is-docker "^2.0.0" -p-defer@^1.0.0: +isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +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== -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" - integrity sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw= +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== +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: - p-try "^2.0.0" + "@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" -p-limit@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: - p-try "^2.0.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= +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: - p-limit "^1.1.0" + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +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: - p-limit "^2.0.0" + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -p-locate@^4.1.0: +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.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.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-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== + +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#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" + integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + +js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - p-limit "^2.2.0" + argparse "^2.0.1" -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= +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#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: - p-reduce "^1.0.0" + argparse "^1.0.7" + esprima "^4.0.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== +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== -p-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" - integrity sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= +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#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== - dependencies: - eventemitter3 "^3.1.0" +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#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +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== -p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== +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#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -p-waterfall@^1.0.0: +json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= - dependencies: - p-reduce "^1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -package-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/package-hash/-/package-hash-1.2.0.tgz#003e56cd57b736a6ed6114cc2b81542672770e44" - integrity sha1-AD5WzVe3NqbtYRTMK4FUJnJ3DkQ= - dependencies: - md5-hex "^1.3.0" +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#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -package-hash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/package-hash/-/package-hash-2.0.0.tgz#78ae326c89e05a4d813b68601977af05c00d2a0d" - integrity sha1-eK4ybIngWk2BO2hgGXevBcANKg0= - dependencies: - graceful-fs "^4.1.11" - lodash.flattendeep "^4.4.0" - md5-hex "^2.0.0" - release-zalgo "^1.0.0" +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#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== -package-json@^2.0.0: - version "2.4.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" - integrity sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs= - dependencies: - got "^5.0.0" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" +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#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= +jsonc-parser@3.2.0: + version "3.2.0" + 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#9e2a25100d164a9bb864c57517563717fa882551" + integrity sha512-B281bLCT2TRMQa+AQUQY5AGcqSOXBOKaYGP4wDzoA/+QswUfN8sODektbPEs9Baq7LGKun5jQbNFpzwGuVYKhw== dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" + fast-safe-stringify "^2.0.6" + graceful-fs "^4.1.15" + mkdirp "^0.5.1" + parse-json "^4.0.0" + strip-bom "^4.0.0" + strip-json-comments "^3.0.1" -parent-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" - integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - callsites "^3.0.0" + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" -parent-require@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" - integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= +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#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" +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.4: + version "4.5.4" + 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#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lerna@^8.2.0: + version "8.2.3" + resolved "https://registry.npmjs.org/lerna/-/lerna-8.2.3.tgz#0a9c07eda4cfac84a480b3e66915189ccfb5bd2c" + integrity sha512-rmuDU+92eWUnnyaPg3Ise339pTxF+r2hu8ky/soCfbGpUoW4kCwsDza3P/LtQJWrKwZWHcosEitfYvxGUWZ16A== + dependencies: + "@lerna/create" "8.2.3" + "@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" + 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" + 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" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + 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#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +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: + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + +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: + 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" + sigstore "^2.2.0" + ssri "^10.0.6" + +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== -parse-json@^2.1.0, parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= +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#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@16.1.2: + version "16.1.2" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.2.tgz#8cb84daa844f39c7a9790dd2c0caa327125ef059" + integrity sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q== + dependencies: + chalk "^5.4.1" + commander "^14.0.0" + debug "^4.4.1" + lilconfig "^3.1.3" + listr2 "^8.3.3" + micromatch "^4.0.8" + nano-spawn "^1.0.2" + pidtree "^0.6.0" + string-argv "^0.3.2" + yaml "^2.8.0" + +listr2@^8.3.3: + version "8.3.3" + resolved "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz#815fc8f738260ff220981bf9e866b3e11e8121bf" + integrity sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.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#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: - error-ex "^1.2.0" + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" -parse-json@^4.0.0: +load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse-ms@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz#dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e" - integrity sha1-3T+iXtbC78e93hKtm0bBY6opIk4= - -parse-ms@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= + p-locate "^2.0.0" + path-exists "^3.0.0" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" + p-locate "^5.0.0" -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== +locate-path@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" + p-locate "^6.0.0" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== -path-key@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" - integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= +lodash@4.17.21, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - pify "^2.0.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== +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: - pify "^3.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" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= +loupe@^3.1.0, loupe@^3.1.4: + version "3.1.4" + resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz#784a0060545cb38778ffb19ccde44d7870d5fdd9" + integrity sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +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== -picomatch@^2.0.5: - version "2.0.7" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +lru-cache@^5.1.1: + version "5.1.1" + 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" -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +lru-cache@^6.0.0: + version "6.0.0" + 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" -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +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.5.0" -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +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: + "@babel/parser" "^7.25.4" + "@babel/types" "^7.25.4" + source-map-js "^1.2.0" -pinkie-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670" - integrity sha1-0dpn9UglY7t89X8oauKCLs+/NnA= +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: - pinkie "^1.0.0" + semver "^7.5.3" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: - pinkie "^2.0.0" + pify "^4.0.1" + semver "^5.6.0" -pinkie@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4" - integrity sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q= +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: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + 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" + 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#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" +mark.js@8.11.1: + version "8.11.1" + resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== -pkg-conf@^2.0.0: +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#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279" - integrity sha1-BxyHZQQDvM+5xif1h1G/5HwGcnk= - dependencies: - find-up "^2.0.0" - load-json-file "^2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -pkg-dir@2.0.0, pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -pkg-dir@4.2.0, pkg-dir@^4.2.0: - version "4.2.0" - 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" +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= +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: - find-up "^1.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.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== -please-upgrade-node@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== +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: - semver-compare "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.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== -plur@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" - integrity sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY= +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== -plur@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" - integrity sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo= +micromatch@^4.0.2, 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: - irregular-plurals "^1.0.0" + braces "^3.0.3" + picomatch "^2.3.1" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +mime-types@^2.1.12: + version "2.1.35" + 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" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +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== -prettier@1.17.1: - version "1.17.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" - integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -pretty-format@^18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-18.1.0.tgz#fb65a86f7a7f9194963eee91865c1bcf1039e284" - integrity sha1-+2Wob3p/kZSWPu6RhlwbzxA54oQ= +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: - ansi-styles "^2.2.1" + brace-expansion "^1.1.7" -pretty-format@^24.8.0: - version "24.8.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" - integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: - "@jest/types" "^24.8.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" + brace-expansion "^2.0.1" -pretty-ms@^0.2.1: - version "0.2.2" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz#da879a682ff33a37011046f13d627f67c73b84f6" - integrity sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY= +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#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - parse-ms "^0.1.0" + brace-expansion "^1.1.7" -pretty-ms@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" - integrity sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw= +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: - is-finite "^1.0.1" - parse-ms "^1.0.0" - plur "^1.0.0" + brace-expansion "^2.0.1" -pretty-ms@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.2.0.tgz#87a8feaf27fc18414d75441467d411d6e6098a25" - integrity sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q== +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: - parse-ms "^1.0.0" - -prismjs@^1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" - integrity sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA== - optionalDependencies: - clipboard "^2.0.0" + brace-expansion "^2.0.1" -prismjs@^1.6.0: - version "1.8.4" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.8.4.tgz#573cc7a14c2c06566e1eca20d813f5ae55db80d2" - integrity sha1-VzzHoUwsBlZuHsog2BP1rlXbgNI= - optionalDependencies: - clipboard "^1.5.5" +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" -private@^0.1.6, private@^0.1.7, private@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +"minimatch@^9.0.3 || ^10.0.1": + version "10.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== +minimist@1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= +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: - err-code "^1.0.0" - retry "^0.10.0" + minipass "^7.0.3" -prompts@^2.0.1: - version "2.0.4" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" - integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA== +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: - kleur "^3.0.2" - sisteransi "^1.0.0" + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - read "1" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== + minipass "^3.0.0" -proto-list@~1.2.1: +minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + 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" -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: - genfun "^5.0.0" + minipass "^3.0.0" -proxyquire@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz#2049a7eefa10a9a953346a18e54aab2b4268df39" - integrity sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg== +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: - fill-keys "^1.0.2" - module-not-found-error "^1.0.1" - resolve "^1.11.1" + yallist "^4.0.0" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +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== -psl@^1.1.24, psl@^1.1.28: - version "1.1.31" - resolved "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +"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== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== +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#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" + minipass "^3.0.0" + yallist "^4.0.0" -pumpify@^1.3.3: - version "1.3.5" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" - integrity sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs= +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - duplexify "^3.1.2" - inherits "^2.0.1" - pump "^1.0.0" + minimist "^1.2.6" -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -q@^1.4.1, q@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +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== -randomatic@3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" +nano-spawn@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz#9853795681f0e96ef6f39104c2e4347b6ba79bf6" + integrity sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg== -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: - version "1.2.2" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" - integrity sha1-2M6ctX6NZNnHut2YdsfDTL48cHc= - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" +napi-postinstall@^0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" + integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -react-is@^16.8.4: - version "16.8.6" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== +negotiator@^0.6.3: + version "0.6.4" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== -read-all-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" - integrity sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po= +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-fetch@2.6.7: + version "2.6.7" + 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@^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" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + +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== + +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@^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 "^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#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: - pinkie-promise "^2.0.0" - readable-stream "^2.0.0" + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" -read-cmd-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= +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#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: - graceful-fs "^4.1.2" + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" -"read-package-json@1 || 2", read-package-json@^2.0.0: - version "2.0.12" - resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.12.tgz#68ea45f98b3741cb6e10ae3bbd42a605026a6951" - integrity sha512-m7/I0+tP6D34EVvSlzCtuVA4D/dHL6OpLcn2e4XVP5X57pCKGUy1JjRSBVKHWpB+vUU91sL85h84qX0MdXzBSw== +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: - glob "^7.1.1" - json-parse-better-errors "^1.0.0" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" -read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== +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: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" + npm-normalize-package-bin "^3.0.0" -read-package-tree@^5.1.6: - version "5.2.1" - resolved "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" - integrity sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA== +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: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" + semver "^7.1.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= +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@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 "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +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 "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +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: + ignore-walk "^6.0.4" + +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 "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + +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: + "@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 "^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#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +"nx@>=17.1.2 < 21": + version "20.8.2" + resolved "https://registry.npmjs.org/nx/-/nx-20.8.2.tgz#c70f504fee1804015034d0f7b2c51871a25bda3a" + integrity sha512-mDKpbH3vEpUFDx0rrLh+tTqLq1PYU8KiD/R7OVZGd1FxQxghx2HOl32MiqNsfPcw6AvKlXhslbwIESV+N55FLQ== + dependencies: + "@napi-rs/wasm-runtime" "0.2.4" + "@yarnpkg/lockfile" "^1.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 "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + front-matter "^4.0.2" + ignore "^5.0.4" + jest-diff "^29.4.1" + jsonc-parser "3.2.0" + 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" + ora "5.3.0" + resolve.exports "2.0.3" + semver "^7.5.3" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yaml "^2.6.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "20.8.2" + "@nx/nx-darwin-x64" "20.8.2" + "@nx/nx-freebsd-x64" "20.8.2" + "@nx/nx-linux-arm-gnueabihf" "20.8.2" + "@nx/nx-linux-arm64-gnu" "20.8.2" + "@nx/nx-linux-arm64-musl" "20.8.2" + "@nx/nx-linux-x64-gnu" "20.8.2" + "@nx/nx-linux-x64-musl" "20.8.2" + "@nx/nx-win32-arm64-msvc" "20.8.2" + "@nx/nx-win32-x64-msvc" "20.8.2" + +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#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + wrappy "1" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" + mimic-fn "^2.1.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#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= +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: - find-up "^2.0.0" - read-pkg "^3.0.0" + mimic-function "^5.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.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.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.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + 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#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -read-pkg@5.2.0: - version "5.2.0" - 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" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + p-try "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" + p-try "^2.0.0" -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" + yocto-queue "^0.1.0" -read-pkg@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" - integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^4.0.0" - type-fest "^0.4.1" + yocto-queue "^1.0.0" -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: - mute-stream "~0.0.4" + p-limit "^1.1.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" + p-limit "^2.2.0" -"readable-stream@2 || 3", readable-stream@^3.0.2: - version "3.4.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + p-limit "^3.0.2" -readable-stream@^2.0.1, readable-stream@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" + p-limit "^4.0.0" -readable-stream@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" - integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== +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#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +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#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + aggregate-error "^3.0.0" -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" -readdirp@^2.0.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/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= + 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#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" + 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#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#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + p-reduce "^2.0.0" -readline2@^1.0.1: +package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" + 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" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: - util.promisify "^1.0.0" + callsites "^3.0.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= +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: - resolve "^1.1.6" + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= +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#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - integrity sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg== - -regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" -regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" - integrity sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A== +parse-json@^8.0.0: + 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.2" + type-fest "^4.7.1" -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== +parse-path@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" + protocols "^2.0.0" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: - is-equal-shallow "^0.1.3" + parse-path "^7.0.0" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -registry-auth-token@^3.0.1: - version "3.3.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" - integrity sha1-+w0yie4Nmtosu1KvXf5mywcNMAY= - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" +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#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +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#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +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: - jsesc "~0.5.0" + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: - es6-error "^4.0.1" + pify "^3.0.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +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== -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +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== -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^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== -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== - dependencies: - lodash "^4.17.11" +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== - dependencies: - request-promise-core "1.1.2" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.npmjs.org/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@^2.87.0: - version "2.88.0" - resolved "https://registry.npmjs.org/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" +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== -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -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#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +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== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -require-precompiled@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa" - integrity sha1-WhtS63Dr7UPrmC6XTIWrWVceVvo= +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -resolve-bin@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.0.tgz#47132249891101afb19991fe937cb0a5f072e5d9" - integrity sha1-RxMiSYkRAa+xmZH+k3ywpfBy5dk= - dependencies: - find-parent-dir "~0.3.0" +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -resolve-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f" - integrity sha1-Tq7qQe0EDRcCRX32SkKysH0kb58= +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: - resolve-from "^2.0.0" + find-up "^4.0.0" -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= +pkg-dir@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz#8f3de8ba83d46b72a05c80bfd4e579f060fa91e2" + integrity sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ== dependencies: - resolve-from "^3.0.0" + find-up-simple "^1.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#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= +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: - expand-tilde "^2.0.0" - global-modules "^1.0.0" + cssesc "^3.0.0" + util-deprecate "^1.0.2" -resolve-from@*, 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#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +postcss@^8.4.43, postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= +preact@^10.0.0: + version "10.26.4" + resolved "https://registry.npmjs.org/preact/-/preact-10.26.4.tgz#b514f4249453a4247c82ff6d1267d59b7d78f9f9" + integrity sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w== -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -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== +prettier@^3.5.3: + version "3.6.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== -resolve-global@1.0.0, resolve-global@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - global-dirs "^0.1.1" + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" -resolve-pathname@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +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#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -resolve-pkg@2.0.0: +proggy@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" - integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ== - dependencies: - resolve-from "^5.0.0" + resolved "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" + integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +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#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +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== -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: - version "1.10.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== - dependencies: - path-parse "^1.0.6" +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== -resolve@^1.1.6: - version "1.5.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: - path-parse "^1.0.5" + err-code "^2.0.2" + retry "^0.12.0" -resolve@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== +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: - path-parse "^1.0.6" + read "^3.0.1" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" +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== -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +protocols@^2.0.0, protocols@^2.0.1: + 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#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + end-of-stream "^1.1.0" + once "^1.3.1" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -reusify@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= +react-is@^18.0.0: + 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== -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" +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== -rimraf@^2.6.3: - version "2.6.3" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +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 "^7.1.3" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" -rsvp@^4.8.4: - version "4.8.4" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" - integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== +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#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k= +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#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - once "^1.3.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: - is-promise "^2.1.0" + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +read-pkg@^5.2.0: + version "5.2.0" + 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" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== +read-pkg@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== + dependencies: + "@types/normalize-package-data" "^2.4.3" + normalize-package-data "^6.0.0" + parse-json "^8.0.0" + type-fest "^4.6.0" + unicorn-magic "^0.1.0" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= +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#c5866712db9ef5343b4d02c2413bada53c41c4a9" + integrity sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ== dependencies: - aproba "^1.1.1" + js-yaml "^4.0.0" + strip-bom "^4.0.0" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= +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 "^1.0.0" -rx@2.3.24: - version "2.3.24" - resolved "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7" - integrity sha1-FPlQpCF9fjXapxu8vljv9o6ksrc= +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" -rx@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= +readable-stream@~2.3.6: + 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" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" -rxjs@^6.1.0, rxjs@^6.3.3: - version "6.3.3" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - tslib "^1.9.0" + indent-string "^4.0.0" + strip-indent "^3.0.0" -rxjs@^6.4.0: - version "6.4.0" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" - integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== +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: - tslib "^1.9.0" + regex-utilities "^2.3.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== +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== -safe-buffer@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +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" -safe-buffer@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" +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#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +resolve-cwd@^3.0.0: + version "3.0.0" + 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" -sander@0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/sander/-/sander-0.6.0.tgz#af1624cd7fb6dfad98ebef565319f920078da925" - integrity sha1-rxYkzX+2362Y6+9WUxn5IAeNqSU= +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#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" + expand-tilde "^2.0.0" + global-modules "^1.0.0" -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +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#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -select@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= +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== -semver-compare@^1.0.0: +resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= +resolve-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" + integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ== dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + resolve-from "^5.0.0" -semver@6.3.0, semver@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +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== -semver@^5.5: - version "5.7.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +resolve@^1.10.0: + 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.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -semver@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== +restore-cursor@^3.1.0: + version "3.1.0" + 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" -semver@^5.5.1, semver@^5.6.0: - version "5.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +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 "^7.0.0" + signal-exit "^4.1.0" -semver@^5.7.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.16.1: - version "0.16.1" - resolved "https://registry.npmjs.org/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" - integrity sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A== - dependencies: - debug "2.6.9" - depd "~1.1.1" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -serve-static@^1.12.1: - version "1.13.1" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" - integrity sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ== +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: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + glob "^9.2.0" -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= +rollup@^4.20.0: + version "4.43.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz#275c09119eb7eaf0c3dea040523b81ef43c57b8c" + integrity sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg== dependencies: - to-object-path "^0.3.0" + "@types/estree" "1.0.7" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.43.0" + "@rollup/rollup-android-arm64" "4.43.0" + "@rollup/rollup-darwin-arm64" "4.43.0" + "@rollup/rollup-darwin-x64" "4.43.0" + "@rollup/rollup-freebsd-arm64" "4.43.0" + "@rollup/rollup-freebsd-x64" "4.43.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.43.0" + "@rollup/rollup-linux-arm-musleabihf" "4.43.0" + "@rollup/rollup-linux-arm64-gnu" "4.43.0" + "@rollup/rollup-linux-arm64-musl" "4.43.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.43.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.43.0" + "@rollup/rollup-linux-riscv64-gnu" "4.43.0" + "@rollup/rollup-linux-riscv64-musl" "4.43.0" + "@rollup/rollup-linux-s390x-gnu" "4.43.0" + "@rollup/rollup-linux-x64-gnu" "4.43.0" + "@rollup/rollup-linux-x64-musl" "4.43.0" + "@rollup/rollup-win32-arm64-msvc" "4.43.0" + "@rollup/rollup-win32-ia32-msvc" "4.43.0" + "@rollup/rollup-win32-x64-msvc" "4.43.0" + fsevents "~2.3.2" + +rollup@^4.43.0: + version "4.50.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz#6f0717c34aacc65cc727eeaaaccc2afc4e4485fd" + integrity sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.50.1" + "@rollup/rollup-android-arm64" "4.50.1" + "@rollup/rollup-darwin-arm64" "4.50.1" + "@rollup/rollup-darwin-x64" "4.50.1" + "@rollup/rollup-freebsd-arm64" "4.50.1" + "@rollup/rollup-freebsd-x64" "4.50.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.50.1" + "@rollup/rollup-linux-arm-musleabihf" "4.50.1" + "@rollup/rollup-linux-arm64-gnu" "4.50.1" + "@rollup/rollup-linux-arm64-musl" "4.50.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.50.1" + "@rollup/rollup-linux-ppc64-gnu" "4.50.1" + "@rollup/rollup-linux-riscv64-gnu" "4.50.1" + "@rollup/rollup-linux-riscv64-musl" "4.50.1" + "@rollup/rollup-linux-s390x-gnu" "4.50.1" + "@rollup/rollup-linux-x64-gnu" "4.50.1" + "@rollup/rollup-linux-x64-musl" "4.50.1" + "@rollup/rollup-openharmony-arm64" "4.50.1" + "@rollup/rollup-win32-arm64-msvc" "4.50.1" + "@rollup/rollup-win32-ia32-msvc" "4.50.1" + "@rollup/rollup-win32-x64-msvc" "4.50.1" + 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#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" + queue-microtask "^1.2.2" -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== +rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" + tslib "^2.1.0" -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= +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#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^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== -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +"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#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -shelljs@0.7.6: - version "0.7.6" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" - integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" +"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== -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +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, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -simple-git@^1.85.0: - version "1.107.0" - resolved "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" - integrity sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - debug "^4.0.1" + kind-of "^6.0.2" -sisteransi@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" - integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== +shebang-command@^2.0.0: + version "2.0.0" + 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" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -slash@^2.0.0: +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" + +siginfo@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +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#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= +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#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -slice-ansi@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== +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: - is-fullwidth-code-point "^2.0.0" + "@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" -slide@^1.1.5, slide@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" - integrity sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg== +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== +slice-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== dependencies: - kind-of "^3.2.0" + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" -snapdragon@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" - integrity sha1-4StUh/re0+PeoKyR6UAL91tAE3A= - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^2.0.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= - dependencies: - hoek "2.x.x" - -socks-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" - integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +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 "~4.2.0" - socks "~2.2.0" + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" -socks@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" - integrity sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w== +socks@^2.8.3: + version "2.8.5" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz#bfe18f5ead1efc93f5ec90c79fa8bdccbcee2e64" + integrity sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww== dependencies: - ip "^1.1.5" - smart-buffer "^4.0.1" + 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#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" -source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" - integrity sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A== - dependencies: - atob "^2.0.0" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.0, source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0: - version "0.5.9" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.6: - version "0.5.12" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== +sort-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + is-plain-obj "^2.0.0" -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +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.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spawn-command@^0.0.2-1: - version "0.0.2" - resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha1-lUThpDygRfhTGqwaSMspva5iM44= +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.0.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - integrity sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g== + 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-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A= - dependencies: - spdx-license-ids "^1.0.2" - spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - integrity sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg== + 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.0" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + 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-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw= - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc= - spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - integrity sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA== + 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== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" +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@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: - through2 "^2.0.2" + readable-stream "^3.0.0" + +split2@^4.0.0: + version "4.2.0" + 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#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#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - integrity sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s= - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.0.tgz#fc21bfc90e03275ac3e23d5a42e38b8a1cbc130d" - integrity sha512-zYOGfVHPhxyzwi8MdtdNyxv3IynWCIM4jYReR48lqu0VngxgH1c+C6CmipRdJ55eVByTJV/gboFEEI7TEQI8DA== + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== +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: - figgy-pudding "^3.5.1" + minipass "^7.0.3" -stack-utils@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" +stable-hash-x@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.1.1.tgz#1dc602f65183ef049a44a9be4fce249a4c71fc84" + integrity sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ== -"statuses@>= 1.3.1 < 2": - version "1.4.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== +stable-hash-x@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz#dfd76bfa5d839a7470125c6a6b3c8b22061793e9" + integrity sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ== -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +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== -stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - integrity sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA== +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: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + fast-fifo "^1.3.2" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= +string-argv@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string-to-stream@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz#aba78f73e70661b130ee3e1c0192be4fef6cb599" - integrity sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw== +"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#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - inherits "^2.0.1" - readable-stream "^2.1.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== +string-width@^7.0.0: + 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: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== + 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: - safe-buffer "~5.1.0" + safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" @@ -10570,388 +7224,245 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -stringstream@0.0.6, stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== - -strip-ansi@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" - integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA= +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: - ansi-regex "^0.2.1" + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +"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" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^2.0.0" + ansi-regex "^5.0.1" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= +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#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^3.0.0" + ansi-regex "^5.0.1" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +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#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^4.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + ansi-regex "^6.0.1" -strip-bom-buf@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" - integrity sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI= - dependencies: - is-utf8 "^0.2.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#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-bom@3.0.0, strip-bom@^3.0.0: +strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" +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#b19a1382e8f69a704ef61ad5069c29721c20aaad" + integrity sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ== -strip-indent@^2.0.0: +strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strong-log-transformer@^2.0.0: - version "2.1.0" - 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" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -supertap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supertap/-/supertap-1.0.0.tgz#bd9751c7fafd68c68cf8222a29892206a119fa9e" - integrity sha512-HZJ3geIMPgVwKk2VsmO5YHqnnJYl6bV5A9JW2uzqV43WmpgliNEYbuvukfor7URpaqpxuw3CfZ3ONdVbZjCgIA== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: - arrify "^1.0.1" - indent-string "^3.2.0" - js-yaml "^3.10.0" - serialize-error "^2.1.0" - strip-ansi "^4.0.0" + min-indent "^1.0.0" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +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#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= +strip-literal@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz#ce9c452a91a0af2876ed1ae4e583539a353df3fc" + integrity sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA== dependencies: - has-flag "^1.0.0" + js-tokens "^9.0.1" -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= +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: - has-flag "^2.0.0" + copy-anything "^3.0.2" -supports-color@^5.0.0: +supports-color@^5.3.0: version "5.5.0" 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@^5.3.0: - version "5.4.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - has-flag "^3.0.0" - -symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - integrity sha1-lag9smGG1q9+ehjb2XYKL4bQj0A= - -symbol-observable@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" - integrity sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0= - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + has-flag "^4.0.0" -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +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#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synchronous-promise@^2.0.6: - version "2.0.7" - resolved "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3" - integrity sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A== +tabbable@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== -tar-fs@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" - integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== +tar-fs@^3.0.5: + version "3.1.1" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz#4f164e59fb60f103d472360731e8c6bb4a7fe9ef" + integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg== dependencies: - chownr "^1.1.1" - mkdirp "^0.5.1" pump "^3.0.0" - tar-stream "^2.0.0" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg== - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz#8829bbf83067bc0288a9089db49c56be395b6aea" - integrity sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA== + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^4.0.1" + bare-path "^3.0.0" + +tar-stream@^3.1.5: + 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" + streamx "^2.15.0" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: - bl "^2.2.0" + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" readable-stream "^3.1.1" -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tar@^4, tar@^4.4.8: - version "4.4.8" - resolved "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -tar@^4.4.10: - version "4.4.11" - resolved "https://registry.npmjs.org/tar/-/tar-4.4.11.tgz#7ac09801445a3cf74445ed27499136b5240ffb73" - integrity sha512-iI4zh3ktLJKaDNZKZc+fUONiQrSn9HkCFzamtb7k8FFmVilHVob7QsLX/VySAW8lAviMzMbFw4QtFb4errwgYA== +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 "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.6.4" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + chownr "^2.0.0" + fs-minipass "^2.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#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= - dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= +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: - execa "^0.7.0" + "@istanbuljs/schema" "^0.1.2" + glob "^10.4.1" + minimatch "^9.0.4" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +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: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" + b4a "^1.6.4" text-extensions@^1.0.0: - version "1.7.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" - integrity sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg== + version "1.9.0" + 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.0.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" - integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + version "2.4.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== -through2@^2.0.0, through2@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - readable-stream "^2.1.5" + readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== - dependencies: - readable-stream "2 || 3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, through@2.3.8, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -time-require@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98" - integrity sha1-+eEss3D8JgXhFARYK6VO9corLZg= - dependencies: - chalk "^0.4.0" - date-time "^0.1.1" - pretty-ms "^0.2.1" - text-table "^0.2.0" +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== -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= +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== + +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== + +tinyglobby@0.2.12: + version "0.2.12" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" -timed-out@^3.0.0: - version "3.1.3" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" - integrity sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc= +tinyglobby@^0.2.14: + version "0.2.14" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" -tiny-emitter@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" - integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== +tinypool@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== -tinydate@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/tinydate/-/tinydate-1.0.0.tgz#20f31756a13959ef8c57ec133ba29b5ade042cac" - integrity sha1-IPMXVqE5We+MV+wTO6KbWt4ELKw= +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== -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" +tinyspy@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz#d1d0f0602f4c15f1aae083a34d6d0df3363b1b52" + integrity sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A== tmp@^0.0.33: version "0.0.33" @@ -10960,35 +7471,10 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -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#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" +tmp@^0.2.1, tmp@~0.2.1: + version "0.2.4" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz#c6db987a2ccc97f812f17137b36af2b6521b0d13" + integrity sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ== to-regex-range@^5.0.1: version "5.0.1" @@ -10997,134 +7483,70 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" - integrity sha1-FTWL7kosg712N3uh3ASdDxiDeq4= - dependencies: - define-property "^0.2.5" - extend-shallow "^2.0.1" - regex-not "^1.0.0" - -to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= +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== -tough-cookie@^2.3.3, tough-cookie@^2.3.4: - version "2.5.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" +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== -tough-cookie@~2.3.0: - version "2.3.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= - dependencies: - punycode "^1.4.1" +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" +ts-api-utils@^2.1.0: + 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== -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= +tsconfig-paths@^4.1.2: + 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: - punycode "^2.1.0" - -tree-kill@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" - integrity sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-off-newlines@^1.0.0, trim-off-newlines@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -ts-jest@24.1.0: - version "24.1.0" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" - integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= +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: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -tweezer.js@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.4.0.tgz#206ff568ad34cf0e56a04307d99ffc52193d5045" - integrity sha1-IG/1aK00zw5WoEMH2Z/8Uhk9UEU= + "@tufjs/models" "2.0.1" + debug "^4.3.4" + make-fetch-happen "^13.0.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +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#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.18.0: + version "0.18.1" + 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.21.3: + version "0.21.3" + 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" @@ -11136,235 +7558,166 @@ type-fest@^0.6.0: 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#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +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== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +"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.4.9" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - -uid-number@0.0.6, uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" - integrity sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I= + 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== -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +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 "^2.0.0" + unique-slug "^4.0.0" -unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - integrity sha1-22Z258fMBimHj/GWCXx4hVrp9Ks= +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" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== dependencies: - crypto-random-string "^1.0.0" + "@types/unist" "^3.0.0" -unique-temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385" - integrity sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U= +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: - mkdirp "^0.5.1" - os-tmpdir "^1.0.1" - uid2 "0.0.3" + "@types/unist" "^3.0.0" -universal-user-agent@^4.0.0: +unist-util-stringify-position@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" - integrity sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA== + 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: - os-name "^3.1.0" - -universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" - integrity sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc= + "@types/unist" "^3.0.0" -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +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" -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= +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: - has-value "^0.3.1" - isobject "^3.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" -unzip-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" - integrity sha1-uYTwh3/AqJwsdzzB73tbIytbBv4= +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== -unzip-response@^2.0.1: +universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== - -update-notifier@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" - integrity sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o= - dependencies: - boxen "^0.6.0" - chalk "^1.0.0" - configstore "^2.0.0" - is-npm "^1.0.0" - latest-version "^2.0.0" - lazy-req "^1.1.0" - semver-diff "^2.0.0" - xdg-basedir "^2.0.0" - -update-notifier@^2.1.0, update-notifier@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" - integrity sha1-TognpruRUUCrCTVZ1wFOPruDdFE= - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== +unrs-resolver@^1.7.11, unrs-resolver@^1.9.2: + version "1.9.2" + resolved "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.2.tgz#1a7c73335a5e510643664d7bb4bb6f5c28782e36" + integrity sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA== dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + napi-postinstall "^0.2.4" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.9.2" + "@unrs/resolver-binding-android-arm64" "1.9.2" + "@unrs/resolver-binding-darwin-arm64" "1.9.2" + "@unrs/resolver-binding-darwin-x64" "1.9.2" + "@unrs/resolver-binding-freebsd-x64" "1.9.2" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.9.2" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.9.2" + "@unrs/resolver-binding-linux-arm64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-arm64-musl" "1.9.2" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-riscv64-musl" "1.9.2" + "@unrs/resolver-binding-linux-s390x-gnu" "1.9.2" + "@unrs/resolver-binding-linux-x64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-x64-musl" "1.9.2" + "@unrs/resolver-binding-wasm32-wasi" "1.9.2" + "@unrs/resolver-binding-win32-arm64-msvc" "1.9.2" + "@unrs/resolver-binding-win32-ia32-msvc" "1.9.2" + "@unrs/resolver-binding-win32-x64-msvc" "1.9.2" + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= +update-browserslist-db@^1.1.3: + 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: - prepend-http "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.1" -use@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" - integrity sha1-riig1y+TvyJCKhii43mZMRLeyOg= +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= + 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#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^3.0.0, uuid@^3.0.1: - version "3.1.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g== - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -v8flags@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= - dependencies: - user-home "^1.1.1" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w= - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" +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.3: +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#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -11372,206 +7725,260 @@ validate-npm-package-license@^3.0.3: 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#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vorpal@^1.12.0: - version "1.12.0" - resolved "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz#4be7b2a4e48f8fcfc9cf3648c419d311c522159d" - integrity sha1-S+eypOSPj8/JzzZIxBnTEcUiFZ0= - dependencies: - babel-polyfill "^6.3.14" - chalk "^1.1.0" - in-publish "^2.0.0" - inquirer "0.11.0" - lodash "^4.5.1" - log-update "^1.0.2" - minimist "^1.2.0" - node-localstorage "^0.6.0" - strip-ansi "^3.0.0" - wrap-ansi "^2.0.0" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= - dependencies: - browser-process-hrtime "^0.1.2" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^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== -webidl-conversions@^4.0.2: +vfile-message@^4.0.0: version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -well-known-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-1.0.0.tgz#73c78ae81a7726a8fa598e2880801c8b16225518" - integrity sha1-c8eK6Bp3Jqj6WY4ogIAcixYiVRg= + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +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: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vite-node@3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz#f3676d94c4af1e76898c162c92728bca65f7bb07" + integrity sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg== + dependencies: + cac "^6.7.14" + debug "^4.4.1" + es-module-lexer "^1.7.0" + pathe "^2.0.3" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + +"vite@^5.0.0 || ^6.0.0 || ^7.0.0-0": + version "7.1.5" + resolved "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz#4dbcb48c6313116689be540466fc80faa377be38" + integrity sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ== + dependencies: + esbuild "^0.25.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== +vite@^5.4.14: + version "5.4.20" + resolved "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz#3267a5e03f21212f44edfd72758138e8fcecd76a" + integrity sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g== dependencies: - iconv-lite "0.4.24" + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" + optionalDependencies: + fsevents "~2.3.3" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +vitepress-plugin-tabs@^0.7.0: + version "0.7.1" + resolved "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.7.1.tgz#73e0537fee5bac1fa00c941165241eb941b13a80" + integrity sha512-jxJvsicxnMSIYX9b8mAFLD2nwyKUcMO10dEt4nDSbinZhM8cGvAmMFOHPdf6TBX6gYZRl+/++/iYHtoM14fERQ== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" +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 "^7.1.1" + shiki "^2.1.0" + vite "^5.4.14" + vue "^3.5.13" + +vitest@^3.0.0: + version "3.2.4" + resolved "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz#0637b903ad79d1539a25bc34c0ed54b5c67702ea" + integrity sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/expect" "3.2.4" + "@vitest/mocker" "3.2.4" + "@vitest/pretty-format" "^3.2.4" + "@vitest/runner" "3.2.4" + "@vitest/snapshot" "3.2.4" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + debug "^4.4.1" + expect-type "^1.2.1" + magic-string "^0.30.17" + pathe "^2.0.3" + picomatch "^4.0.2" + std-env "^3.9.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.14" + tinypool "^1.1.1" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node "3.2.4" + why-is-node-running "^2.3.0" + +vue@^3.5.0, vue@^3.5.13: + version "3.5.18" + resolved "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz#3d622425ad1391a2b0138323211ec784f4415686" + integrity sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA== + dependencies: + "@vue/compiler-dom" "3.5.18" + "@vue/compiler-sfc" "3.5.18" + "@vue/runtime-dom" "3.5.18" + "@vue/server-renderer" "3.5.18" + "@vue/shared" "3.5.18" + +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== -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + defaults "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -which@1, which@^1.2.10, which@^1.2.9: - version "1.3.0" - resolved "https://registry.npmjs.org/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: - isexe "^2.0.0" + tr46 "~0.0.3" + webidl-conversions "^3.0.0" -which@1.3.1, which@^1.2.14, which@^1.3.0, which@^1.3.1: +which@^1.2.14: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - string-width "^1.0.2" + isexe "^2.0.0" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" - integrity sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw= +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: - string-width "^1.0.1" + isexe "^3.1.1" -windows-release@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz#8d4a7e266cbf5a233f6c717dac19ce00af36e12e" - integrity sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA== +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: - execa "^0.10.0" + siginfo "^2.0.0" + stackback "0.0.2" -word-wrap@^1.0.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wide-align@1.1.5: + version "1.1.5" + 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" -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +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#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wordwrap@~1.0.0: +wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= +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#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +wrap-ansi@^7.0.0: + version "7.0.0" + 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" + string-width "^4.1.0" + strip-ansi "^6.0.0" -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" -write-file-atomic@^1.1.2, write-file-atomic@^1.1.4: - version "1.3.4" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== +wrappy@1: + version "1.0.2" + 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: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" - signal-exit "^3.0.2" + signal-exit "^4.0.1" write-file-atomic@^2.4.2: version "2.4.3" @@ -11582,18 +7989,6 @@ write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - 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#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -11606,182 +8001,100 @@ write-json-file@^3.2.0: sort-keys "^2.0.0" write-file-atomic "^2.4.2" -write-pkg@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-3.1.0.tgz#030a9994cc9993d25b4e75a9f1a1923607291ce9" - integrity sha1-AwqZlMyZk9JbTnWp8aGSNgcpHOk= +write-pkg@4.0.0: + version "4.0.0" + 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" - write-json-file "^2.2.0" - -ws@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== - dependencies: - options ">=0.0.5" - ultron "1.0.x" + type-fest "^0.4.1" + write-json-file "^3.2.0" -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== +write-yaml-file@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/write-yaml-file/-/write-yaml-file-5.0.0.tgz#3764885331139f4dfed415c652eabb97942b91cc" + integrity sha512-FdNA4RyH1L43TlvGG8qOMIfcEczwA5ij+zLXUy3Z83CjxhLvcV7/Q/8pk22wnCgYw7PJhtK+7lhO+qqyT4NdvQ== dependencies: - async-limiter "~1.0.0" + js-yaml "^4.1.0" + write-file-atomic "^5.0.1" -xdg-basedir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" - integrity sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I= - dependencies: - os-homedir "^1.0.0" +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -xregexp@4.0.0: +yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +yaml@^2.6.0, yaml@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" + integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== + +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#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +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.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#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + 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" -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -yallist@^2.1.2: +yoctocolors-cjs@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= - -yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yargonaut@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.2.tgz#ee7b89e98121a3f241fa926a2a6e1b6641c81b3f" - integrity sha1-7nuJ6YEho/JB+pJqKm4bZkHIGz8= - dependencies: - chalk "^1.1.1" - figlet "^1.1.1" - parent-require "^1.0.0" - -yargs-parser@10.x, yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz#c737c93de2567657750cb1f2c00be639fd19c994" - integrity sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - -yargs@^12.0.1: - version "12.0.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" - integrity sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ== - dependencies: - cliui "^4.0.0" - decamelize "^2.0.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^10.1.0" - -yargs@^12.0.2: - version "12.0.5" - resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" + resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" +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==